66from pathlib import Path
77from io import IOBase
88
9+ from ..bomreader .bomreader import BomReader
910from ..util .sbom_processor import SbomProcessor
1011from ..dpkg import package
1112from ..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
6761class PackageStreamResolver (PackageResolver ):
0 commit comments