Source code for jake._internal.parsers.pipenv

import json
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 PipenvParser(BaseJakeParser): def __init__(self, pipenv_contents: str) -> None:
[docs] self._content = pipenv_contents
[docs] def get_components(self) -> List[Component]: data = json.loads(self._content) components = [] for section in ('default', 'develop'): for name, info in data.get(section, {}).items(): if not isinstance(info, dict): continue version = info.get('version', '').lstrip('=') if version: purl = PackageURL('pypi', None, name.lower().replace('_', '-'), version) components.append(Component( type=ComponentType.LIBRARY, name=name, version=version, purl=purl, )) return components
[docs] class PipenvFileParser(BaseJakeParser): def __init__(self, pipenv_lock_filename: str) -> None:
[docs] self._path = pipenv_lock_filename
[docs] def get_components(self) -> List[Component]: with open(self._path, encoding='utf-8') as f: return PipenvParser(f.read()).get_components()