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.1.dist-info/WHEEL A н#Z;/"d&F[xzw@Zpy3Fv]\fi4WZ^EgM_-]#0(q7PK!HDu nurse-0.2.1.dist-info/METADATAUn7+& Xr,E؈uWz]%RE^{r쥧"?/'t]ˊ r͛7ыLx|Ipȟp z〇mp~b UڀT`)rK0+mv+L(yqᰐ~Qyh"]H7l^Wx`]ffVn9Jr 7.?%Eʳkp.6Oݞ?`pN }juAmURp)TQS?0FϏ?8cFQr hfm3IR+M-9ʣ!=׉uI= c'2s\\dvjAIy'#z^NNxaYd nC ږRڗR!}{avD];yQ"FF@ʭ )![fy%)> 1Xt +VT"]E C1OS^C%Ts +04 !'" $8'hhU6P.aB*tjR M5"̓jL:#<ڡAQ%fEt nȲ*%>0ǻ̌4AE:ut R~A.=I]Cić`u1hPY,ZBRqjGhb}m@@18)i%oېw zL2%9 plV D4v F6⼔tFx>wX=HN { > 5m ROb[`PEQ3ABlv6 z)ּC~dtNd|RV5 y.Cc½ 8;2 K˥a6z .ۀ֜-,]̫ M3Kӄɮ~Z w"P^1CboL%ߌvU$?ӣ?s P.'8N `|)d6)MjPK!e>>nurse/__init__.pyPK!@P   mnurse/api.pyPK!݁JH[[nurse/service_catalog.pyPK!HڽTU2nurse-0.2.1.dist-info/WHEELPK!HDu nurse-0.2.1.dist-info/METADATAPK!H,5+ nurse-0.2.1.dist-info/RECORDPKu