Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Finalize switch flow #207

Merged
merged 59 commits into from
Jan 31, 2025
Merged
Changes from 1 commit
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
4d1a825
refactor: Introduce generator class to handle global flow
Hellgartner Jan 27, 2025
fee2d18
refactor: Introduce argument class
Hellgartner Jan 27, 2025
3a118fd
refactor: Remove unnecessary comment
Hellgartner Jan 27, 2025
168ddc1
refactor: Introduce core package
Hellgartner Jan 27, 2025
1ade466
refactor: Introduce file list
Hellgartner Jan 27, 2025
0441c60
refactor: Make internal method "private"
Hellgartner Jan 28, 2025
2c734e6
refactor: Make scancode converter publish to the internal model
Hellgartner Jan 28, 2025
e471c65
refactor: Make opossum converter publish to the internal model
Hellgartner Jan 28, 2025
dd7e456
refactor: Extract reading into the internal format
Hellgartner Jan 28, 2025
08b8a67
refactor: Define interface and implement for opossum file
Hellgartner Jan 28, 2025
95b5523
refactor: Implement for interface for scancode file
Hellgartner Jan 28, 2025
996483a
Merge branch 'main' into finalize_switch_flow
Hellgartner Jan 28, 2025
57adfde
fix: remove spdx remainings
Hellgartner Jan 28, 2025
86ea7cf
refactor: introduce can handle pattern
Hellgartner Jan 28, 2025
5ab9635
refactor: rename
Hellgartner Jan 28, 2025
ed40898
refactor: use Path instead of strings for file paths
Hellgartner Jan 28, 2025
1051de7
refactor: rename
Hellgartner Jan 28, 2025
854e16e
refactor: remove not used merging functionality
Hellgartner Jan 28, 2025
fd3a285
refactor: use common generator helpers for testing
Hellgartner Jan 28, 2025
b1d0e2d
feat: introduce import linter
Hellgartner Jan 28, 2025
b58ba84
refactor: dedicated package for input formats
Hellgartner Jan 28, 2025
18bb9d4
refactor: review-comment: Rename input file type
Hellgartner Jan 28, 2025
308d175
refactor: review-comment: Using property annotation
Hellgartner Jan 28, 2025
c46f1a2
feat: Remove misleading log statement
Hellgartner Jan 28, 2025
51a4603
refactor: review comment: further improve the readability of the gene…
Hellgartner Jan 28, 2025
93ecfe1
refactor: review comment: remove for loop to select reader
Hellgartner Jan 28, 2025
f58490a
refactor: move opossum file model to dedicated package
Hellgartner Jan 29, 2025
d24c105
refactor: move also file writing into the package
Hellgartner Jan 29, 2025
5dd9461
refactor: DIY dependency injection: Define input readers at top level
Hellgartner Jan 29, 2025
780a80b
feat: Add importlinter rule to keep file format independent
Hellgartner Jan 29, 2025
bf6ab6e
fix: Add missing license header
Hellgartner Jan 29, 2025
137a3d0
fix: Remove surplus pass
Hellgartner Jan 29, 2025
9d5f9c9
feat: review-comment: New package structure
Hellgartner Jan 29, 2025
7707e8f
refactor: review-comment: Filename to match main class name
Hellgartner Jan 29, 2025
2348a1a
refactor: review-comment: Move file writer to core
Hellgartner Jan 29, 2025
72dd03e
refactor: review-comment: Fuse closely connected classes
Hellgartner Jan 29, 2025
b8848d5
refactor: review-comment: Fix typo
Hellgartner Jan 29, 2025
7c95235
refactor: review-comment: Smaller fixes
Hellgartner Jan 29, 2025
7b1547a
refactor: review-comment: rename opossum model files
Hellgartner Jan 29, 2025
bc8a7d6
refactor: review-comment: rename all file specific models to end with…
Hellgartner Jan 29, 2025
378c276
refactor: review-comment: use the renamings in converters
Hellgartner Jan 29, 2025
c4fd699
refactor: review-comment: Make tests adhere to the new structure
Hellgartner Jan 29, 2025
ea536f1
refactor: review -- inline validation logic
Hellgartner Jan 30, 2025
30bd42a
refactor: review -- static only classes to methods
Hellgartner Jan 30, 2025
df51d5a
refactor: review -- expand opossum model to multiple files
Hellgartner Jan 30, 2025
c06bb6d
refactor: review -- improve writing to opossum files
Hellgartner Jan 30, 2025
927b3eb
refactor: review -- rename scancode data model
Hellgartner Jan 30, 2025
d774d13
refactor: review -- improve scancode file reader
Hellgartner Jan 30, 2025
a2afebb
refactor: review -- extract shared CamelBaseModel
Hellgartner Jan 30, 2025
5087102
refactor: review -- adapt test structure
Hellgartner Jan 30, 2025
938c94e
refactor: review -- group tests in class structures
Hellgartner Jan 30, 2025
c21de0c
refactor: review -- unify closely related classes
Hellgartner Jan 31, 2025
17e603d
refactor: review -- remove no longer necessary linter exceptions
Hellgartner Jan 31, 2025
47f0aad
refactor: review -- delete dead code
Hellgartner Jan 31, 2025
768d9c0
refactor: review -- move primary class in file to top
Hellgartner Jan 31, 2025
dd4cf38
refactor: review -- rename method to match target type
Hellgartner Jan 31, 2025
c36ea7d
refactor: review -- improve docs
Hellgartner Jan 31, 2025
9d04580
refactor: review -- remove unused noqa
Hellgartner Jan 31, 2025
15d9a59
refactor: review -- static methods to private methods
Hellgartner Jan 31, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
refactor: introduce can handle pattern
Hellgartner committed Jan 28, 2025

Verified

This commit was signed with the committer’s verified signature.
Hellgartner Dominikus Hellgartner
commit 86ea7cf06df144de7f36e8a356a33be8dea8708e
22 changes: 22 additions & 0 deletions src/opossum_lib/core/input_reader.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# SPDX-FileCopyrightText: TNG Technology Consulting GmbH <https://www.tngtech.com>
#
# SPDX-License-Identifier: Apache-2.0

from opossum_lib.core.input_file import InputFile
from opossum_lib.core.input_format_reader import InputFormatReader
from opossum_lib.core.opossum_model import Opossum
from opossum_lib.opossum.opossum_format_reader import OpossumFormatReader
from opossum_lib.scancode.scancode_format_reader import ScancodeFormatReader


class InputReader:
input_format_readers: list[InputFormatReader] = [
OpossumFormatReader(),
ScancodeFormatReader(),
]

def read(self, input_file: InputFile) -> Opossum:
for input_format_reader in self.input_format_readers:
if input_format_reader.can_handle(input_file.type):
return input_format_reader.read(input_file.path)
raise NotImplementedError(f"Unsupported file type: {input_file.type}")
33 changes: 7 additions & 26 deletions src/opossum_lib/core/opossum_generator.py
Original file line number Diff line number Diff line change
@@ -4,43 +4,24 @@

from pathlib import Path

from opossum_lib.core.input_file import InputFile
from opossum_lib.core.input_reader import InputReader
from opossum_lib.core.opossum_generation_arguments import OpossumGenerationArguments
from opossum_lib.core.opossum_model import Opossum
from opossum_lib.opossum.file_generation import OpossumFileWriter
from opossum_lib.opossum.opossum_file_content import OpossumFileContent
from opossum_lib.opossum.opossum_format_reader import OpossumFormatReader
from opossum_lib.scancode.scancode_format_reader import ScancodeFormatReader


class OpossumGenerator:
opossum_format_reader: OpossumFormatReader = OpossumFormatReader()
scancode_format_reader: ScancodeFormatReader = ScancodeFormatReader()
input_reader: InputReader = InputReader()

def generate(
self, opossum_generation_arguments: OpossumGenerationArguments
) -> None:
opossum_generation_arguments.validate_input_and_exit_on_error()
input_files = opossum_generation_arguments.generate_input_file_list()
opossum_generation_arguments.add_outfile_ending_and_warn_on_existing_outfile()

opossum_file_content = self._convert_after_valid_input(input_files)
OpossumFileWriter.write_opossum_information_to_file(
opossum = self.input_reader.read(input_files[0])

opossum_file_content = opossum.to_opossum_file_format()
opossum_generation_arguments.add_outfile_ending_and_warn_on_existing_outfile()
OpossumFileWriter.write(
opossum_file_content, Path(opossum_generation_arguments.outfile)
)

def _convert_after_valid_input(
self,
input_file_list: list[InputFile],
) -> OpossumFileContent:
input_file = input_file_list[0]

return self._read_to_internal_format(input_file).to_opossum_file_format()

def _read_to_internal_format(self, input_file: InputFile) -> Opossum:
if self.scancode_format_reader.can_handle(input_file.type):
return self.scancode_format_reader.read(input_file.path)
elif self.opossum_format_reader.can_handle(input_file.type):
return self.opossum_format_reader.read(input_file.path)
else:
raise NotImplementedError(f"Unsupported file type: {input_file.type}")
4 changes: 1 addition & 3 deletions src/opossum_lib/opossum/file_generation.py
Original file line number Diff line number Diff line change
@@ -14,9 +14,7 @@

class OpossumFileWriter:
@staticmethod
def write_opossum_information_to_file(
opossum_file_content: OpossumFileContent, file_path: Path
) -> None:
def write(opossum_file_content: OpossumFileContent, file_path: Path) -> None:
with ZipFile(
file_path, "w", compression=ZIP_DEFLATED, compresslevel=COMPRESSION_LEVEL
) as zip_file:
8 changes: 2 additions & 6 deletions tests/test_cli.py
Original file line number Diff line number Diff line change
@@ -177,9 +177,7 @@ def test_cli_no_output_file_provided(opossum_file_faker: OpossumFileFaker) -> No
with runner.isolated_filesystem():
file_path = "input.opossum"
opossum_file = opossum_file_faker.opossum_file_content()
OpossumFileWriter.write_opossum_information_to_file(
opossum_file, Path(file_path)
)
OpossumFileWriter.write(opossum_file, Path(file_path))
result = runner.invoke(
generate,
"--opossum " + file_path,
@@ -197,9 +195,7 @@ def test_cli_warning_if_outfile_already_exists(
with runner.isolated_filesystem():
file_path = "input.opossum"
opossum_file = opossum_file_faker.opossum_file_content()
OpossumFileWriter.write_opossum_information_to_file(
opossum_file, Path(file_path)
)
OpossumFileWriter.write(opossum_file, Path(file_path))
with open("output.opossum", "w") as f:
f.write("")
result = runner.invoke(
8 changes: 2 additions & 6 deletions tests/test_opossum/test_file_generation.py
Original file line number Diff line number Diff line change
@@ -19,9 +19,7 @@ def test_only_input_information_available_writes_only_input_information(
)
output_path = tmp_path / "output.opossum"

OpossumFileWriter.write_opossum_information_to_file(
opossum_file_content, output_path
)
OpossumFileWriter.write(opossum_file_content, output_path)

with ZipFile(output_path, "r") as zip_file:
assert zip_file.namelist() == [INPUT_JSON_NAME]
@@ -33,9 +31,7 @@ def test_input_and_output_information_available_writes_both(
opossum_file_content = opossum_file_faker.opossum_file_content()
output_path = tmp_path / "output.opossum"

OpossumFileWriter.write_opossum_information_to_file(
opossum_file_content, output_path
)
OpossumFileWriter.write(opossum_file_content, output_path)

with ZipFile(output_path, "r") as zip_file:
assert INPUT_JSON_NAME in zip_file.namelist()