Skip to content

Commit f124201

Browse files
committed
refactor: convert more camelCase to snake_case
1 parent 51ee53d commit f124201

File tree

4 files changed

+56
-70
lines changed

4 files changed

+56
-70
lines changed

src/opossum_lib/scancode/convert_scancode_to_opossum.py

+16-19
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
Metadata,
1313
OpossumInformation,
1414
)
15-
from opossum_lib.scancode.model import ScanCodeData
15+
from opossum_lib.scancode.model import Header, ScanCodeData
1616
from opossum_lib.scancode.resource_tree import (
1717
convert_to_opossum_resources,
1818
create_attribution_mapping,
@@ -24,17 +24,25 @@ def convert_scancode_to_opossum(filename: str) -> OpossumInformation:
2424
logging.info(f"Converting scancode to opossum {filename}")
2525

2626
scancode_data = load_scancode_json(filename)
27-
validate_scancode_json(scancode_data, filename)
2827

2928
filetree = scancode_to_file_tree(scancode_data)
3029
resources = convert_to_opossum_resources(filetree)
31-
externalAttributions, resourcesToAttributions = create_attribution_mapping(filetree)
30+
external_attributions, resources_to_attributions = create_attribution_mapping(
31+
filetree
32+
)
33+
34+
scancode_header = extract_scancode_header(scancode_data, filename)
35+
metadata = {
36+
"projectId": str(uuid.uuid4()),
37+
"fileCreationDate": scancode_header.end_timestamp,
38+
"projectTitle": "ScanCode file",
39+
}
3240

3341
return OpossumInformation(
34-
metadata=create_opossum_metadata(scancode_data),
42+
metadata=Metadata(**metadata),
3543
resources=resources,
36-
externalAttributions=externalAttributions,
37-
resourcesToAttributions=resourcesToAttributions,
44+
externalAttributions=external_attributions,
45+
resourcesToAttributions=resources_to_attributions,
3846
attributionBreakpoints=[],
3947
externalAttributionSources={},
4048
)
@@ -56,19 +64,8 @@ def load_scancode_json(filename: str) -> ScanCodeData:
5664
return scancode_data
5765

5866

59-
def validate_scancode_json(scancode_data: ScanCodeData, filename: str) -> None:
67+
def extract_scancode_header(scancode_data: ScanCodeData, filename: str) -> Header:
6068
if len(scancode_data.headers) != 1:
6169
logging.error(f"Headers of ScanCode file are invalid. File: {filename}")
6270
sys.exit(1)
63-
64-
65-
def create_opossum_metadata(scancode_data: ScanCodeData) -> Metadata:
66-
scancode_header = scancode_data.headers[0]
67-
68-
metadata = {
69-
"projectId": str(uuid.uuid4()),
70-
"fileCreationDate": scancode_header.end_timestamp,
71-
"projectTitle": "ScanCode file",
72-
}
73-
74-
return Metadata.model_validate(metadata)
71+
return scancode_data.headers[0]

src/opossum_lib/scancode/resource_tree.py

+17-17
Original file line numberDiff line numberDiff line change
@@ -51,37 +51,37 @@ def scancode_to_file_tree(scancode_data: ScanCodeData) -> ScanCodeFileTree:
5151
return root
5252

5353

54-
def convert_to_opossum_resources(rootnode: ScanCodeFileTree) -> ResourceInFile:
54+
def convert_to_opossum_resources(root_node: ScanCodeFileTree) -> ResourceInFile:
5555
def process_node(node: ScanCodeFileTree) -> ResourceInFile:
5656
if node.file.type == FileType.FILE:
5757
return 1
5858
else:
59-
rootpath = node.file.path
59+
root_path = node.file.path
6060
children = {
61-
relpath(n.file.path, rootpath): process_node(n)
61+
relpath(n.file.path, root_path): process_node(n)
6262
for n in node.children.values()
6363
}
6464
return children
6565

66-
return {rootnode.file.path: process_node(rootnode)}
66+
return {root_node.file.path: process_node(root_node)}
6767

6868

6969
def get_attribution_info(file: File) -> list[OpossumPackage]:
7070
if file.type == FileType.DIRECTORY:
7171
return []
72-
copyright = "\n".join([c.copyright for c in file.copyrights])
72+
copyright = "\n".join(c.copyright for c in file.copyrights)
7373
source_info = SourceInfo(SCANCODE_SOURCE_NAME)
7474

7575
attribution_infos = []
7676
for license_detection in file.license_detections:
77-
licenseName = license_detection.license_expression_spdx
78-
maxscore = max([m.score for m in license_detection.matches])
79-
attributionConfidence = int(maxscore)
77+
license_name = license_detection.license_expression_spdx
78+
max_score = max(m.score for m in license_detection.matches)
79+
attribution_confidence = int(max_score)
8080

8181
package = OpossumPackage(
8282
source_info,
83-
licenseName=licenseName,
84-
attributionConfidence=attributionConfidence,
83+
licenseName=license_name,
84+
attributionConfidence=attribution_confidence,
8585
copyright=copyright,
8686
)
8787
attribution_infos.append(package)
@@ -94,29 +94,29 @@ def get_attribution_key(attribution: OpossumPackage) -> OpossumPackageIdentifier
9494

9595

9696
def create_attribution_mapping(
97-
rootnode: ScanCodeFileTree,
97+
root_node: ScanCodeFileTree,
9898
) -> tuple[
9999
dict[OpossumPackageIdentifier, OpossumPackage],
100100
dict[ResourcePath, list[OpossumPackageIdentifier]],
101101
]:
102-
externalAttributions: dict[OpossumPackageIdentifier, OpossumPackage] = {}
103-
resourcesToAttributions: dict[ResourcePath, list[OpossumPackageIdentifier]] = {}
102+
external_attributions: dict[OpossumPackageIdentifier, OpossumPackage] = {}
103+
resources_to_attributions: dict[ResourcePath, list[OpossumPackageIdentifier]] = {}
104104

105105
def process_node(node: ScanCodeFileTree) -> None:
106106
# the / is required by OpossumUI
107107
path = "/" + node.file.path
108108
attributions = get_attribution_info(node.file)
109109

110110
new_attributions_with_id = {get_attribution_key(a): a for a in attributions}
111-
externalAttributions.update(new_attributions_with_id)
111+
external_attributions.update(new_attributions_with_id)
112112

113113
if len(new_attributions_with_id) > 0:
114-
resourcesToAttributions[path] = list(new_attributions_with_id.keys())
114+
resources_to_attributions[path] = list(new_attributions_with_id.keys())
115115

116116
for child in node.children.values():
117117
process_node(child)
118118

119-
for child in rootnode.children.values():
119+
for child in root_node.children.values():
120120
process_node(child)
121121

122-
return externalAttributions, resourcesToAttributions
122+
return external_attributions, resources_to_attributions

tests/test_scancode/test_convert_scancode_to_opossum.py

+8-19
Original file line numberDiff line numberDiff line change
@@ -4,51 +4,40 @@
44

55
import json
66
from pathlib import Path
7-
from unittest import mock
87

98
import pytest
109
from _pytest.logging import LogCaptureFixture
1110

12-
from opossum_lib.opossum.opossum_file import Metadata
1311
from opossum_lib.scancode.convert_scancode_to_opossum import (
14-
create_opossum_metadata,
15-
validate_scancode_json,
12+
extract_scancode_header,
1613
)
1714
from opossum_lib.scancode.model import ScanCodeData
1815

1916
TEST_SCANCODE_FILE = str(Path(__file__).parent.parent / "data/scancode_input.json")
2017

2118

22-
def test_create_opossum_metadata() -> None:
19+
def test_extract_scancode_header() -> None:
2320
scancode_data = _create_valid_scancode_data()
24-
with mock.patch("uuid.uuid4", return_value="1234-12345-12345"):
25-
metadata = create_opossum_metadata(scancode_data)
21+
extracted_header = extract_scancode_header(scancode_data, "test/path/scancode.json")
22+
assert extracted_header == scancode_data.headers[0]
2623

27-
expected_metadata = Metadata(
28-
projectId="1234-12345-12345",
29-
fileCreationDate="2025-01-10T102700.397143",
30-
projectTitle="ScanCode file",
31-
)
3224

33-
assert metadata == expected_metadata
34-
35-
36-
def test_load_scancode_json_missing_header(caplog: LogCaptureFixture) -> None:
25+
def test_extract_scancode_header_missing_header(caplog: LogCaptureFixture) -> None:
3726
scancode_data = _create_valid_scancode_data()
3827
scancode_data.headers = []
3928

4029
with pytest.raises(SystemExit):
41-
validate_scancode_json(scancode_data, "test/path/scancode.json")
30+
extract_scancode_header(scancode_data, "test/path/scancode.json")
4231

4332
assert "header" in caplog.messages[0].lower()
4433

4534

46-
def test_validate_scancode_json_multiple_headers(caplog: LogCaptureFixture) -> None:
35+
def test_extract_scancode_header_multiple_headers(caplog: LogCaptureFixture) -> None:
4736
scancode_data = _create_valid_scancode_data()
4837
scancode_data.headers.append(scancode_data.headers[0])
4938

5039
with pytest.raises(SystemExit):
51-
validate_scancode_json(scancode_data, "test/path/scancode.json")
40+
extract_scancode_header(scancode_data, "test/path/scancode.json")
5241

5342
assert "header" in caplog.messages[0].lower()
5443

tests/test_scancode/test_resource_tree.py

+15-15
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,10 @@ def test_create_attribution_mapping_paths_have_root_prefix(_: Any) -> None:
110110
rootnode = _create_reference_Node_structure()
111111
# rootnode.children["file1"].file.license_detections = [ld1]
112112
# rootnode.children["B"].children["file3"].file.license_detections = [ld2]
113-
_, resourcesToAttributions = create_attribution_mapping(rootnode)
114-
assert "/A/file1" in resourcesToAttributions
115-
assert "/A/file2.txt" in resourcesToAttributions
116-
assert "/A/B/file3" in resourcesToAttributions
113+
_, resources_to_attributions = create_attribution_mapping(rootnode)
114+
assert "/A/file1" in resources_to_attributions
115+
assert "/A/file2.txt" in resources_to_attributions
116+
assert "/A/B/file3" in resources_to_attributions
117117

118118

119119
def test_create_attribution_mapping() -> None:
@@ -132,22 +132,22 @@ def get_attribution_info_mock(file: File) -> list[OpossumPackage]:
132132
else:
133133
return []
134134

135-
rootnode = _create_reference_Node_structure()
135+
root_node = _create_reference_Node_structure()
136136

137137
with mock.patch(
138138
"opossum_lib.scancode.resource_tree.get_attribution_info",
139139
new=get_attribution_info_mock,
140140
):
141-
externalAttributions, resourcesToAttributions = create_attribution_mapping(
142-
rootnode
141+
external_attributions, resources_to_attributions = create_attribution_mapping(
142+
root_node
143143
)
144-
assert len(externalAttributions) == 3 # deduplication worked
144+
assert len(external_attributions) == 3 # deduplication worked
145145

146-
reverseMapping = {v: k for (k, v) in externalAttributions.items()}
147-
id1, id2, id3 = reverseMapping[pkg1], reverseMapping[pkg2], reverseMapping[pkg3]
148-
assert len(resourcesToAttributions) == 2 # only files with attributions
149-
assert set(resourcesToAttributions["/" + file1.path]) == {id1, id2}
150-
assert set(resourcesToAttributions["/" + file2.path]) == {id1, id2, id3}
146+
reverse_mapping = {v: k for (k, v) in external_attributions.items()}
147+
id1, id2, id3 = reverse_mapping[pkg1], reverse_mapping[pkg2], reverse_mapping[pkg3]
148+
assert len(resources_to_attributions) == 2 # only files with attributions
149+
assert set(resources_to_attributions["/" + file1.path]) == {id1, id2}
150+
assert set(resources_to_attributions["/" + file2.path]) == {id1, id2, id3}
151151

152152

153153
def test_get_attribution_info_directory() -> None:
@@ -257,7 +257,7 @@ def _create_reference_Node_structure() -> ScanCodeFileTree:
257257

258258

259259
def _create_file(path: str, type: FileType, **kwargs: Any) -> File:
260-
defaultproperties = {
260+
default_properties = {
261261
"path": path,
262262
"type": type,
263263
"name": Path(path).name,
@@ -295,4 +295,4 @@ def _create_file(path: str, type: FileType, **kwargs: Any) -> File:
295295
"scan_errors": [],
296296
**kwargs,
297297
}
298-
return File.model_validate(defaultproperties)
298+
return File.model_validate(default_properties)

0 commit comments

Comments
 (0)