github.com/anchore/syft@v1.38.2/syft/pkg/cataloger/python/cataloger.go (about) 1 /* 2 Package python provides a concrete Cataloger implementation relating to packages within the Python language ecosystem. 3 */ 4 package python 5 6 import ( 7 "github.com/anchore/syft/syft/pkg" 8 "github.com/anchore/syft/syft/pkg/cataloger/generic" 9 ) 10 11 const eggInfoGlob = "**/*.egg-info" 12 13 // NewPackageCataloger returns a new cataloger for python packages referenced from poetry lock files, requirements.txt files, and setup.py files. 14 func NewPackageCataloger(cfg CatalogerConfig) pkg.Cataloger { 15 poetryLockParser := newPoetryLockParser(cfg) 16 pipfileLockParser := newPipfileLockParser(cfg) 17 setupFileParser := newSetupFileParser(cfg) 18 uvLockParser := newUvLockParser(cfg) 19 pdmLockParser := newPdmLockParser(cfg) 20 requirementsFileParser := newRequirementsParser(cfg) 21 return generic.NewCataloger("python-package-cataloger"). 22 WithParserByGlobs(requirementsFileParser.parseRequirementsTxt, "**/*requirements*.txt"). 23 WithParserByGlobs(poetryLockParser.parsePoetryLock, "**/poetry.lock"). 24 WithParserByGlobs(pipfileLockParser.parsePipfileLock, "**/Pipfile.lock"). 25 WithParserByGlobs(setupFileParser.parseSetupFile, "**/setup.py"). 26 WithParserByGlobs(uvLockParser.parseUvLock, "**/uv.lock"). 27 WithParserByGlobs(pdmLockParser.parsePdmLock, "**/pdm.lock") 28 } 29 30 // NewInstalledPackageCataloger returns a new cataloger for python packages within egg or wheel installation directories. 31 func NewInstalledPackageCataloger() pkg.Cataloger { 32 return generic.NewCataloger("python-installed-package-cataloger"). 33 WithParserByGlobs( 34 parseWheelOrEgg, 35 eggInfoGlob, 36 "**/*dist-info/METADATA", 37 "**/*egg-info/PKG-INFO", 38 "**/*DIST-INFO/METADATA", 39 "**/*EGG-INFO/PKG-INFO", 40 ).WithResolvingProcessors(wheelEggRelationships) 41 }