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  }