Source code for dazzler.system._package

import typing


from dazzler.errors import PackageConflictError

from ._requirements import Requirement, filter_dev_requirements
from ._component import Component


[docs]class Package: package_registry = {}
[docs] def __init__( self, name: str, components: typing.List[Component] = None, requirements: typing.List[Requirement] = None, routes: list = None, ): if name in self.package_registry: raise PackageConflictError(f'Duplicate package name: {name}') self.name = name self.components = {} for component in (components or []): setattr(component, '_package_name', self.name) self.components[component.__name__] = component self.requirements = requirements or [] self.routes = routes or [] self.package_registry[self.name] = self
[docs] def prepare(self, dev=False, external=False): return { 'name': self.name, 'components': list(self.components.keys()), 'requirements': [ x.prepare(external=external) for x in self.get_requirements(dev) ], }
[docs] def get_requirements(self, dev: bool): return filter_dev_requirements(self.requirements, dev)
def __str__(self): return self.name def __repr__(self): return f'<Package "{self.name}">'