Skip to content

Commit 756fcff

Browse files
committed
refactor(resolver): port to reader factory
By that, we can remove a lot of boilerplate code and also support explicitly passing the sbom type. Signed-off-by: Felix Moessbauer <[email protected]>
1 parent 1719953 commit 756fcff

File tree

1 file changed

+10
-16
lines changed

1 file changed

+10
-16
lines changed

src/debsbom/resolver/resolver.py

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from pathlib import Path
77
from io import IOBase
88

9+
from ..bomreader.bomreader import BomReader
910
from ..util.sbom_processor import SbomProcessor
1011
from ..dpkg import package
1112
from ..sbom import SBOMType
@@ -31,37 +32,30 @@ def create(filename: Path, bomtype: SBOMType | None = None) -> "PackageResolver"
3132
"""
3233
Factory to create a PackageResolver for the given SBOM type (based on the filename extension).
3334
"""
34-
if filename.name.endswith("spdx.json"):
35-
SBOMType.SPDX.validate_dependency_availability()
35+
reader = BomReader.create(filename, bomtype)
36+
if reader.sbom_type() is SBOMType.SPDX:
3637
from .spdx import SpdxPackageResolver
37-
from ..bomreader.spdxbomreader import SpdxBomFileReader
3838

39-
return SpdxPackageResolver(SpdxBomFileReader(filename).read())
40-
elif filename.name.endswith("cdx.json"):
41-
SBOMType.CycloneDX.validate_dependency_availability()
39+
return SpdxPackageResolver(reader.read())
40+
else:
4241
from .cdx import CdxPackageResolver
43-
from ..bomreader.cdxbomreader import CdxBomFileReader
4442

45-
return CdxPackageResolver(CdxBomFileReader(filename).read())
46-
else:
47-
raise RuntimeError("Cannot determine file format")
43+
return CdxPackageResolver(reader.read())
4844

4945
@staticmethod
5046
def from_stream(stream: IOBase, bomtype=SBOMType) -> "PackageResolver":
5147
"""
5248
Factory to create a PackageResolver for the given SBOM type that parses a stream.
5349
"""
54-
bomtype.validate_dependency_availability()
55-
if bomtype == SBOMType.SPDX:
50+
reader = BomReader.from_stream(stream, bomtype)
51+
if reader.sbom_type() is SBOMType.SPDX:
5652
from .spdx import SpdxPackageResolver
57-
from ..bomreader.spdxbomreader import SpdxBomReader
5853

59-
return SpdxPackageResolver(SpdxBomReader.read_stream(stream))
54+
return SpdxPackageResolver(reader.read())
6055
else:
6156
from .cdx import CdxPackageResolver
62-
from ..bomreader.cdxbomreader import CdxBomReader
6357

64-
return CdxPackageResolver(CdxBomReader.read_stream(stream))
58+
return CdxPackageResolver(reader.read())
6559

6660

6761
class PackageStreamResolver(PackageResolver):

0 commit comments

Comments
 (0)