PK!e>>nurse/__init__.pyfrom nurse.api import inject, serve __version__ = "0.2.0" PK!@P   nurse/api.pyfrom .service_catalog import ServiceCatalog def inject(user_class): """ A decorator that injects dependencies into every instances of a user-defined class. :Example: class SSHClient: def connect(self): pass @nurse.inject class Server: ssh_client: SSHClient server = Server() server.ssh_client.connect() """ def constructor_with_dependency_injection(self, *args, **kwargs): service_catalog = ServiceCatalog.get_instance() dependencies = constructor_with_dependency_injection.user_class.__annotations__ for service_name, service_type in dependencies.items(): setattr(self, service_name, service_catalog.services[service_type]) return constructor_with_dependency_injection.user_init(self, *args, **kwargs) constructor_with_dependency_injection.user_class = user_class constructor_with_dependency_injection.user_init = user_class.__init__ user_class.__init__ = constructor_with_dependency_injection return user_class def serve(user_class) -> None: """ Add an instance of a user-defined class to Nurse's services catalog. """ ServiceCatalog.get_instance().catalogue[user_class.__class__] = user_class PK!݁JH[[nurse/service_catalog.pyclass ServiceCatalog: """ A singleton service catalog. """ __slots__ = ("services",) instance = None def __init__(self) -> None: self.services = {} @classmethod def get_instance(cls) -> "Services": if cls.instance is None: cls.instance = cls() return cls.instance PK!HڽTUnurse-0.2.0.dist-info/WHEEL A н#Z;/"d&F[xzw@Zpy3Fv]\fi4WZ^EgM_-]#0(q7PK!H4}nurse-0.2.0.dist-info/METADATAMJ19E㌌T 8:A^#XlgWz㻡 6A\=)5e˙cھtuC#CAO3 c^cǻXGO͈u{Ԋ^ M LՆJ᥺)OX <&)0%at4PK!e>>nurse/__init__.pyPK!@P   mnurse/api.pyPK!݁JH[[nurse/service_catalog.pyPK!HڽTU2nurse-0.2.0.dist-info/WHEELPK!H4}nurse-0.2.0.dist-info/METADATAPK!H/@+nurse-0.2.0.dist-info/RECORDPKF