Source code for jake._internal.parsers.environment

import importlib.metadata
from typing import List
from cyclonedx.model.component import Component, ComponentType
from packageurl import PackageURL  # type: ignore[import-untyped]
from .base import BaseJakeParser


[docs] class EnvironmentParser(BaseJakeParser):
[docs] def get_components(self) -> List[Component]: components = [] seen: set[str] = set() for dist in importlib.metadata.distributions(): name = dist.metadata.get('Name') # type: ignore[attr-defined] version = dist.metadata.get('Version') # type: ignore[attr-defined] if not name or not version: continue key = name.lower() if key in seen: continue seen.add(key) purl = PackageURL('pypi', None, key.replace('_', '-'), version) components.append(Component( type=ComponentType.LIBRARY, name=name, version=version, purl=purl, )) return components