diff --git a/README.rst b/README.rst index 9da9bf2..14dc7d9 100644 --- a/README.rst +++ b/README.rst @@ -140,28 +140,35 @@ and designed for Humans. Features you'll love ❤️ ----------------------- -* **Autowiring**: injection is transparent to the function. Just decorate the function - with :python:`@autowired` and annotate parameters with :python:`Autowired`, that's it. +* **Autowiring**: injection is + transparent to the function. Just decorate the function with :python:`@autowired` and annotate + parameters with :python:`Autowired`, that's it. + `see an example `__ * **Automatic dependency discovery**: just call :python:`load_injection_container()` at the root of your project or pass the root path as an argument. All classes decorated with :python:`@injectable` will be automatically discovered and ready for injection. + `see reference `__ * **Qualifier overloading**: declare as many injectables as you like for a single qualifier or extending the same base class. You can inject all of them just by specifying a :python:`typing.List` to :python:`Autowired`: :python:`deps: Annotated[List["qualifier"], Autowired]`. + `see an example `__ * **Transparent lazy initialization**: passing the argument :python:`lazy=True` for :python:`Autowired` will make your dependency to be initialized only when actually used, all in a transparent fashion. + `see an example `__ * **Singletons**: decorate your class with :python:`@injectable(singleton=True)` and only a single instance will be initialized and shared for injection. + `see an example `__ * **Namespaces**: specify different namespaces for injectables as in :python:`@injectable(namespace="foo")` and then just use them when annotating your parameters as in :python:`dep: Annotated[..., Autowired(namespace="foo")]`. + `see an example `__ * **Linters friendly**: :python:`Autowired` is carefully designed to comply with static linter analysis such as PyCharm's to preserve the parameter original type hint. diff --git a/docs/readme.html b/docs/readme.html index 848e83f..fbc7f42 100644 --- a/docs/readme.html +++ b/docs/readme.html @@ -88,10 +88,10 @@

Navigation

def __init__( self, database: Annotated[Database, Autowired], - message_brokers: Annotated[List[Broker], Autowired], + brokers: Annotated[List[Broker], Autowired], ): pending = database.get_pending_messages() - for broker in message_brokers: + for broker in brokers: broker.send_pending(pending) @@ -133,23 +133,30 @@

Navigation

Features you’ll love ❤️

    -
  • Autowiring: injection is transparent to the function. Just decorate the function -with @autowired and annotate parameters with Autowired, that’s it.

  • +
  • Autowiring: injection is +transparent to the function. Just decorate the function with @autowired and annotate +parameters with Autowired, that’s it. +see an example

  • Automatic dependency discovery: just call load_injection_container() at the root of your project or pass the root path as an argument. All classes decorated -with @injectable will be automatically discovered and ready for injection.

  • +with @injectable will be automatically discovered and ready for injection. +see reference

  • Qualifier overloading: declare as many injectables as you like for a single qualifier or extending the same base class. You can inject all of them just by specifying a typing.List to Autowired: -deps: Annotated[List["qualifier"], Autowired].

  • +deps: Annotated[List["qualifier"], Autowired]. +see an example

  • Transparent lazy initialization: passing the argument lazy=True for Autowired will make your dependency to be initialized only when actually used, all -in a transparent fashion.

  • +in a transparent fashion. +see an example

  • Singletons: decorate your class with @injectable(singleton=True) and only a -single instance will be initialized and shared for injection.

  • +single instance will be initialized and shared for injection. +see an example

  • Namespaces: specify different namespaces for injectables as in @injectable(namespace="foo") and then just use them when annotating your -parameters as in dep: Annotated[..., Autowired(namespace="foo")].

  • +parameters as in dep: Annotated[..., Autowired(namespace="foo")]. +see an example

  • Linters friendly: Autowired is carefully designed to comply with static linter analysis such as PyCharm’s to preserve the parameter original type hint.

diff --git a/docs/searchindex.js b/docs/searchindex.js index e5c0d67..400077b 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["authors","caveats","changelog","contributing","index","installation","readme","reference/index","reference/injectable","reference/injectable_constants","reference/injectable_errors","reference/injectable_testing","usage/TLDR","usage/annotated_usage","usage/basic_usage","usage/cyclic_dependency","usage/dependencies_precedence","usage/factory","usage/index","usage/injectable_mocking_for_tests","usage/injecting_existing_instance","usage/injection_container_resetting_for_tests","usage/lazy_injection","usage/namespaces","usage/optional_injection","usage/qualifier_overloading","usage/service_locator","usage/singletons"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,"sphinx.ext.todo":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["authors.rst","caveats.rst","changelog.rst","contributing.rst","index.rst","installation.rst","readme.rst","reference/index.rst","reference/injectable.rst","reference/injectable_constants.rst","reference/injectable_errors.rst","reference/injectable_testing.rst","usage/TLDR.rst","usage/annotated_usage.rst","usage/basic_usage.rst","usage/cyclic_dependency.rst","usage/dependencies_precedence.rst","usage/factory.rst","usage/index.rst","usage/injectable_mocking_for_tests.rst","usage/injecting_existing_instance.rst","usage/injection_container_resetting_for_tests.rst","usage/lazy_injection.rst","usage/namespaces.rst","usage/optional_injection.rst","usage/qualifier_overloading.rst","usage/service_locator.rst","usage/singletons.rst"],objects:{"":[[8,0,0,"-","injectable"]],"examples.annotated_usage":[[13,0,0,"-","annotated_usage_example"]],"examples.basic_usage":[[14,0,0,"-","basic_usage_example"]],"examples.cyclic_dependency":[[15,0,0,"-","cyclic_dependency_example"]],"examples.dependencies_precedence":[[16,0,0,"-","dependencies_precedence_example"]],"examples.factory":[[17,0,0,"-","factory_example"]],"examples.injectable_mocking_for_tests":[[19,0,0,"-","injectable_mocking_example"]],"examples.injecting_existing_instance":[[20,0,0,"-","injecting_existing_instance_example"]],"examples.injection_container_resetting_for_tests":[[21,0,0,"-","injection_container_resetting_example"]],"examples.lazy_injection":[[22,0,0,"-","lazy_injection_example"]],"examples.namespaces":[[23,0,0,"-","namespaces_example"]],"examples.optional_injection":[[24,0,0,"-","optional_injection_example"]],"examples.qualifier_overloading":[[25,0,0,"-","qualifier_overloading_example"]],"examples.service_locator":[[26,0,0,"-","service_locator_example"]],"examples.singletons":[[27,0,0,"-","singleton_example"]],"examples.tldr":[[12,0,0,"-","tldr_example"]],"injectable.InjectionContainer":[[8,2,1,"","load"]],"injectable.constants":[[9,4,1,"","DEFAULT_NAMESPACE"]],"injectable.errors":[[10,5,1,"","AutowiringError"],[10,5,1,"","InjectionError"]],"injectable.testing":[[11,3,1,"","clear_injectables"],[11,3,1,"","register_injectables"],[11,3,1,"","reset_injection_container"]],injectable:[[8,1,1,"","Autowired"],[8,1,1,"","Injectable"],[8,1,1,"","InjectionContainer"],[8,3,1,"","autowired"],[9,0,0,"-","constants"],[10,0,0,"-","errors"],[8,3,1,"","inject"],[8,3,1,"","inject_multiple"],[8,3,1,"","injectable"],[8,3,1,"","injectable_factory"],[8,3,1,"","load_injection_container"],[11,0,0,"-","testing"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"],"4":["py","data","Python data"],"5":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function","4":"py:data","5":"py:exception"},terms:{"0":[4,8,11,26],"02":4,"03":4,"04":4,"05":4,"06":[4,23],"07":4,"08":4,"09":4,"1":[4,26],"10":4,"11":4,"12":4,"13":4,"14":4,"15":4,"151":23,"19":4,"2":[4,16,26],"20":4,"2018":4,"2020":4,"2021":4,"2024":4,"22":4,"23":4,"24":4,"29":4,"3":[4,8,11],"31":4,"38":23,"4":[4,8,11,16],"42":[11,20],"5":4,"593":2,"6":[4,16],"7":4,"8":[2,8,16],"9007":1,"94":23,"abstract":[16,23,25],"break":2,"case":[1,3,8,13,17],"class":[1,2,6,8,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],"default":[2,8,9,11,14,22,23,24],"do":[1,3,21,22],"final":14,"function":[1,2,6,8,10,11,17,19,20,21],"import":[2,4,6,8,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],"long":11,"new":[8,11],"public":8,"return":[2,8,11,13,14,15,17,20,23,26],"static":[2,6],"true":[6,8,11,13,15,16,22,26,27],"try":21,"while":[3,22,24],A:[15,17,27],As:1,At:[5,8,11],But:24,By:23,For:[4,11,12,13,15,18,20],If:[1,3,8,16],In:[13,14,15,16,17,19,20,22,23,24,25,26,27],It:8,No:21,One:8,The:[1,8,11,12,13,14,15,16,17,20,22,23,24,25,26],Then:[1,23],These:6,To:23,Will:8,__init__:[6,8,12,13,14,15,16,17,19,20,22,23,24,25,26,27],__main__:[12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],__name__:[12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],__qualname__:1,_global:2,_name:13,_state:[14,26],_statement:13,abc:[6,16,23,25],about:[3,25],absolut:[1,8],abstract_servic:16,abstract_service_1:16,abstract_service_2:16,abstractmethod:[16,25],abstractservic:[8,16],accept:[2,8],access:15,action:8,actual:[6,17,22],ad:2,add:[2,3,8],address:8,advantag:25,after:8,against:2,airflow:1,alias:1,all:[1,6,8,11,14,16,17,21,24,25],all_basic_service_implement:26,allow:2,alreadi:[8,11,20],also:[8,13,15,16,17,20,22,23,25],ambigu:[8,16],among:8,an:[1,3,6,8,12,13,15,16,17,19,20,21,22,23,24,26,27],analysi:6,ani:[1,3,8,21,23,24],annot:[2,4,6,8,14,16,17,18,19,20,21,22,23,24,25,26,27],annotated_usag:13,annotated_usage_exampl:13,annotatedusag:13,anoth:1,another_basic_servic:14,api:[8,26],app:20,appli:8,applic:[1,3,20],ar:[1,2,3,6,8,14,15,16,21,22,23,24,25],aren:[8,24],arg:2,argument:[2,6,8,23],assert_cal:19,assertionrewritinghook:1,assign:[8,20,23],attempt:8,attribut:[1,15,16],attributeerror:1,author:[4,6],auto:3,automat:[4,6,8],autowir:[2,6,8,10,12,13,14,15,16,17,19,20,21,22,23,24,25,27],autowired_decor:8,autowired_typ:8,autowiringerror:[8,10],avoid:15,b:[15,16],bar:[8,14,21],base:[6,8,11,16,23,25,26],basic:[4,12,13,18,26],basic_servic:14,basic_usag:14,basic_usage_exampl:14,basicservic:14,basicusag:14,befor:[8,19,21],behav:27,behavior:14,behind:14,being:[1,2,8,21,22,27],beta:2,better:[3,12],between:27,black:3,bool:[8,11],both:[16,22,23,24,27],branch:3,brief:3,broker:6,bug:2,built:6,builtin:[1,2],bunch_of_optional_servic:24,bunch_of_servic:[],call:[2,6,8,19,21,22],callabl:8,caller:[2,8],can:[1,2,6,8,12,13,15,17,19,20,21,22,23,27],cannot:[8,17,23],carefulli:6,caus:[1,2],caveat:4,chang:[2,11,27],changelog:4,check:[1,3,6],checker:2,circular:[15,22],cl:8,clarifi:3,classmethod:8,clear:[3,8,11,21],clear_inject:[11,19],client1:27,client2:27,client:17,client_endpoint:17,client_endpoint_example_env_var:17,client_factori:17,code:[1,2,3,17],collect:[8,11],com:[0,1,8],combin:[1,16],command:5,comment:3,common:17,complet:[13,14],complex:2,compli:[2,6,13],concret:25,conflict:23,conjunct:8,connect:[17,27],consol:2,constant:[4,7,8,11],constructor:[2,8,11],contain:[1,2,4,8,10,11,18],content:2,contribut:4,conveni:13,cool:6,corner:1,correct:8,craig:0,craigminihan:0,crash:2,creat:[2,8,15,25],cryptic:3,current:1,custom:[8,10],cyclic:[4,18,22],cyclic_dependency_exampl:15,cyclicdepend:15,dag:1,databas:6,david:0,deal:[15,17,22],declar:[1,2,6,8,13,14,15,16,17,22,23,24,25,26,27],decor:[1,2,6,8,14,17,20,26],def:[6,8,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],default_measuring_servic:23,default_namespac:[2,8,9,11],defin:[8,11,27],demonstr:14,dep:[6,8,12,19],dep_a:8,dep_b:8,dep_c:8,depend:[2,4,8,10,11,13,14,18,19,22,23,24,25,26,27],dependencies_preced:16,dependencies_precedence_exampl:16,dependenciespreced:16,dependency_nam:10,deprec:[2,8],describ:[1,26],descript:3,design:[6,8],detail:[13,15,22,23,26],dev:1,develop:6,differ:[2,6,8,16,23],direct:8,directli:[1,8,13,26],directori:8,discourag:3,discov:[6,8],discoveri:[4,6],do_someth:21,doc:6,docstr:3,document:[2,3],doe:[2,8,22],doesn:2,dr:[4,18],drop:2,due:8,dummi:17,duplic:[2,8],dure:1,e:[8,21,22],each:[1,14,15,16,23],earth_to_sun_dist:23,eas:[2,11],easier:15,effect:1,either:[1,8],eleg:6,email:25,email_sender_servic:25,emailsenderservic:25,empti:[2,8,21,24],enabl:[2,15],encod:[2,8],encourag:3,end:25,endpoint:17,ensur:3,entangl:2,environ:2,error:[4,7,8,16,21],everi:27,exampl:[2,3,4,6,8,11,12],except:[10,21],exclud:8,exclude_group:[8,25],execut:[1,8],exhaust:1,exist:[2,4,17,18],expect:24,explicit:16,explicitli:[8,16],expos:16,extend:[6,13],extended_servic:13,extended_service_2:13,extendedservic:13,extern:17,external_cli:17,externalcli:17,f:[13,16,17,25],factori:[2,4,8,18,20],factory_exampl:17,fail:[1,2,10,16,24],fall:15,fallback:13,fallback_servic:13,fallback_service_2:13,fallbackservic:13,fals:[8,11,27],fashion:[2,6],favor:2,fax:25,fax_sender_servic:25,faxsenderservic:25,featur:4,feedback:3,few:6,file:[1,2,8,11,12],filter:[8,25],finish:22,first:[1,2,8,13,23],fix:2,follow:[1,3],foo:[6,8,11,12,14,21],foo_factori:8,fork:3,form:3,format:3,found:[8,24],four:1,framework:[6,12,14,15,23,26],friendli:6,from:[1,2,6,8,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],func:8,futur:8,g:8,gener:[2,8],get:[16,19,24],get_cod:1,get_pending_messag:6,get_repository_st:[14,26],get_some_property_from_a:15,get_some_property_from_b:15,getenv:17,github:[0,1],given:[8,11],global:8,good:12,grasp:14,group:[2,8,25],guidelin:3,ha:[1,23],happen:[2,25],hard:3,have:[14,15,16,17,20,23],heart:6,hello:[13,25],high:26,hint:[2,6,13],how:[8,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27],http:[0,1,17],human:4,i:[8,22],idea:14,identifi:8,illustr:[14,23,26],illustrativeexampl:12,implement:[1,16,23,25],imposs:[1,8],includ:[2,3,21],inclus:11,incompat:1,independ:[14,23],index:4,indic:[8,10,16],infer:2,inform:8,inherit:[13,26],init:22,initi:[2,6,8,20],inject:[1,2,4,5,7,12,13,14,15,16,17,18,23,25,26,27],inject_multipl:[2,8,26],injectable_decor:8,injectable_factori:[1,2,8,17,20],injectable_factory_decor:[8,17],injectable_mocking_exampl:19,injectableloaderror:8,injectablemock:19,injecting_existing_inst:20,injecting_existing_instance_exampl:20,injectingexistinginst:20,injection_container_resetting_exampl:21,injectioncontain:[2,8],injectioncontainerreset:21,injectionerror:[8,10,21,24],insid:[8,26],inspect:2,inspir:1,instal:[2,4],instanc:[4,6,8,14,15,16,17,18,24,25,27],instanti:[2,8,15,17,22,27],instead:[2,8,14,15,16,24],internationalmeasuringservic:23,intl:23,intl_measuring_servic:23,invoc:8,invok:[8,15,22],isinst:1,isn:8,issu:[1,2,3],its:[15,23,27],itself:[1,3,8],just:[6,16,20,24],kafkaproduc:6,keep:3,kind:3,klass:11,km:23,know:17,known:1,kulej:0,label:25,lambda:[11,17,19,20],last:[8,23],lazi:[2,4,6,8,15,18],lazili:22,lazy_inject:22,lazy_injection_exampl:22,lazy_object_proxi:2,lazyinject:22,lead:1,learn:[15,25],least:[8,11],level:[1,8,26],leverag:22,librari:1,licens:6,like:[6,13,17],line:5,linter:[3,6,13],list:[1,2,6,8,24,25],ll:[4,13,14,15,16,17,20,22,23,24,25,26,27],load:[1,2,8],load_injection_contain:[2,6,8,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],locat:[2,4,18],log:8,logic:17,look:[1,8,12],lookup:8,loop:15,love:4,low:[8,26],lozano:0,lozanocampillod:0,maco:2,made:[8,21,27],magic:[3,8],mai:[1,3,24],make:[2,3,6,8,14,15,19,21],manag:8,mani:6,manual:11,mark:[2,8],master:3,match:[8,10,21,25],meant:8,measuring_servic:[],measuring_service_abc:23,measuringservic:23,messag:[6,25],message_brok:6,metadata:13,method:[2,8,14,15,16,22,24,26],mile:23,million:23,mind:3,minihan:0,minor:2,miss:2,mock:[2,4,11,18],mocked_dep:19,mocked_inject:19,mockeddep:19,model:6,modifi:15,modul:[1,2,4,8],more:[2,8,25],move:1,mt3o:0,multipl:[2,8,15,25],multipleservic:16,multipli:16,multiply_servic:16,multiplyservic:16,must:[1,8],mypi:2,name:[1,2],namespac:[2,4,6,8,9,11,13,18,21,24],namespaces_exampl:23,necessari:[8,17],need:[3,8,11,19,22],never:[1,8,19],nevertheless:3,non:[1,8],none:[8,10,11,14,23,24,26],now:[16,17,20,22],number:20,object:1,occurr:1,offici:2,often:3,ok:24,old:25,oliv:0,oliveira:0,omit:13,onc:[2,8,27],one:[1,8,11,13,14,15,16,19,21,23,24,27],ones:[8,23],onli:[6,8,15,22,23,27],open:[2,3],oper:1,option:[2,4,8,11,18,23],optional_inject:24,optional_injection_exampl:24,optional_servic:24,optionalinject:24,organ:3,origin:6,os:17,other:[1,2,8,12,14,15,23,25,27],otherwis:11,our:[6,14,15,16,17,20,22,23,24,25,26,27],out:[6,8,25],outermost:24,output:2,outsid:[1,8],over:26,overload:[4,6,13,16,18,24,26],own:23,packag:[2,6],page:4,paramet:[2,6,8,11,13,22,23,25,27],parenthesi:[2,8,13],particular:23,pass:[6,8,26],path:[1,2,6,8],pend:6,pep:2,perform:8,pip:[2,5],place:[8,27],posit:8,possibl:[1,2,13,15],potenti:1,preced:[4,18,25],prefer:26,present:[8,24],preserv:6,prevent:[8,15],previou:[2,8],previous:8,primari:[8,13,16,24,26],primary_basic_servic:26,print:[12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],project:[3,6,8],propag:[11,25],properti:[13,14,15,26],provid:[2,11],pull:3,purpos:[8,11],py:[12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],pycharm:6,pyright:2,pytest:4,python:[1,2,8,12],qualifi:[2,4,6,8,11,13,15,16,18,23,24,26],qualifier_overload:25,qualifier_overloading_exampl:25,qualifieroverload:25,quirk:2,r:8,rais:[2,8,10,11,16],re:25,read:[1,8],readabl:3,readi:6,realdep:19,reason:[1,8,17,20],receiv:[3,8,24],recipi:25,recommend:8,record:11,recurs:[1,11],refactor:2,refer:[4,6,15,22],reflect:27,regard:[8,25],regardless:8,regist:[1,2,8,9,11,15,19,21,23],register_inject:[2,11,19],registri:[8,23],registry_typ:10,regular:[1,20],rel:[2,4,8],releas:2,remov:[2,8],render:1,repositori:[3,14,26],repres:17,request:[3,8],requir:2,reset:[4,11,18],reset_injection_contain:[2,11,21],resili:2,resolut:[8,25],resolv:[2,8,16,23,24,25],respect:[8,23],respons:17,review:3,right:22,rodrigo:0,roo:0,root:[6,21],run:[1,2,3,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],run_exampl:[12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],s:[1,2,3,6,8,14,26],sai:13,same:[1,2,6,8,15,22,25,27],sample_servic:26,sampleservic:26,satisfi:24,scan:[2,8,11],search:[1,2,4,8,9],search_path:8,section:[8,11,12],see:[13,16,17,20,22,23,24,26,27],self:[6,8,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],send:25,send_messag:25,send_pend:6,sender_servic:25,senderservic:25,separ:13,sequenc:8,servic:[2,4,6,8,13,14,15,18,25],service_a:[15,22],service_b:[15,22],service_loc:26,service_locator_exampl:26,service_xyz:24,servicea:[15,22],serviceb:[15,22],serviceloc:26,servicexyz:24,set:[2,10,11,14],set_repository_st:[14,26],setter:[14,26],setup:8,shall:[8,24],share:[6,8,14,27],should:8,shouldn:8,show:[11,13,14,16,17,20,24,25],shown:13,side:1,side_effect:19,signatur:2,simpl:[6,13],simple_servic:13,simple_service_2:13,simpler:17,simpleservic:13,simpli:24,sinc:[8,16,19,24],singl:[6,12,23,25],singleton:[4,6,8,14,15,18],singleton_cli:27,singleton_exampl:27,singletoncli:27,situat:[13,24],sm:25,sms_sender_servic:25,smssenderservic:25,so:[1,3,13,17,20,24],some:[1,15,17,24],some_properti:15,some_servic:[],someth:[21,22],sourc:[8,10,11],speak:[3,13],specialized_servic:26,specializedservic:26,specif:8,specifi:[6,8,11,16,22,23],sqsproduc:6,stabl:2,start:[12,22],state:[11,14,21,26,27],stateful_repositori:[14,26],statefulrepositori:[14,26],statefulservic:14,staticmethod:19,step:1,still:8,store:8,str:[8,10,11,17,25],straightforward:12,string:[1,2,8,15],style:3,submit:3,success:8,successfulli:23,suit:2,suitabl:2,sum:16,sum_servic:16,sumservic:16,suppli:20,support:2,sure:[8,21],system:1,t:[1,2,8,11,16,19,24],take:25,teodor:0,test:[1,2,3,4,6,7,8,18],than:[1,2,3,8],thei:[14,22,27],them:[6,15],themselv:8,therefor:23,thi:[1,3,8,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],thoroughli:3,those:1,though:[8,16,19],three:[23,25],through:[1,2,17],time:[2,8,22],tl:[4,18],tldr_exampl:12,ton:2,trail:8,transpar:6,trial:2,tricki:3,turn:[14,20,26,27],twice:1,two:[14,23,25,27],type:[1,2,6,8,11,13,14,16,17,19,20,21,22,23,24,25,27],typeerror:2,ubuntu:2,unabl:8,under:8,understand:12,unintend:1,union:[8,11],uniqu:8,unique_id:8,unit:[2,3],unitedstatesmeasuringservic:23,unittest:19,unless:11,unus:2,up:25,us:[1,2,3,6,8,9,11,13,14,15,16,17,19,20,21,23,24,25,26,27],us_measuring_servic:23,usag:[1,2,4,6,8,11,12,26],user:2,utf:[2,8],util:[2,8,11,19,21],uuid:8,valid:8,valu:[8,14,24,26],valueerror:11,variabl:20,varieti:8,version:[2,8,11],wa:[8,16,19,27],wai:[3,22],want:[3,24],warn:[8,21],wasn:[8,16],we:[14,15,16,17,19,20,22,23,24,25,26,27],welcom:3,well:[3,16],were:[23,25],what:[3,23,24],whatev:20,when:[2,6,8,11,13,15,16,22,24,25,27],whenev:27,where:8,which:[2,8,11,14,15,16,17,20,22,24,26,27],window:2,wire:8,without:[2,8,13,17,23],won:[1,11,24],work:[1,2,13,15,22,23,24,25,26],workaround:1,world:25,would:16,wouldn:19,wrap:[8,17,19],write:3,wrong:2,wrote:3,xyz:24,yet:2,you:[3,4,12,13,14,15,16,17,20,22,23,24,25,26,27],your:[3,6,17]},titles:["Authors","Caveats","Changelog","Contributing","Contents","Installation","Injectable: Dependency Injection for Humans\u2122","Reference","injectable","injectable.constants","injectable.errors","injectable.testing","TL;DR","Annotated Usage Example","Basic Usage Example","Cyclic Dependency Example","Dependencies Precedence Example","Factory Example","Usage Examples","Injectable Mocking For Tests Example","Injecting Existing Instance Example","Injection Container Resetting For Tests Example","Lazy Injection Example","Namespaces Example","Optional Injection Example","Qualifier Overloading Example","Service Locator Example","Singletons Example"],titleterms:{"0":2,"02":2,"03":2,"04":2,"05":2,"06":2,"07":2,"08":2,"09":2,"1":2,"10":2,"11":2,"12":2,"13":2,"14":2,"15":2,"19":2,"2":2,"20":2,"2018":2,"2020":2,"2021":2,"2024":2,"22":2,"23":2,"24":2,"29":2,"3":2,"31":2,"4":2,"5":2,"6":2,"7":2,"import":1,For:[19,21],annot:13,author:0,automat:1,basic:14,caveat:1,changelog:2,constant:9,contain:21,content:4,contribut:3,cyclic:15,depend:[1,6,15,16],discoveri:1,dr:12,error:10,exampl:[13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],exist:20,factori:17,featur:6,human:6,indic:4,inject:[6,8,9,10,11,19,20,21,22,24],instal:5,instanc:20,lazi:22,ll:6,locat:26,love:6,mock:19,namespac:23,option:24,overload:25,preced:16,pytest:1,qualifi:25,refer:7,rel:1,reset:21,servic:26,singleton:27,tabl:4,test:[11,19,21],tl:12,usag:[13,14,18],you:6}}) \ No newline at end of file +Search.setIndex({docnames:["authors","caveats","changelog","contributing","index","installation","readme","reference/index","reference/injectable","reference/injectable_constants","reference/injectable_errors","reference/injectable_testing","usage/TLDR","usage/annotated_usage","usage/basic_usage","usage/cyclic_dependency","usage/dependencies_precedence","usage/factory","usage/index","usage/injectable_mocking_for_tests","usage/injecting_existing_instance","usage/injection_container_resetting_for_tests","usage/lazy_injection","usage/namespaces","usage/optional_injection","usage/qualifier_overloading","usage/service_locator","usage/singletons"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":5,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":3,"sphinx.domains.rst":2,"sphinx.domains.std":2,"sphinx.ext.intersphinx":1,"sphinx.ext.todo":2,"sphinx.ext.viewcode":1,sphinx:56},filenames:["authors.rst","caveats.rst","changelog.rst","contributing.rst","index.rst","installation.rst","readme.rst","reference/index.rst","reference/injectable.rst","reference/injectable_constants.rst","reference/injectable_errors.rst","reference/injectable_testing.rst","usage/TLDR.rst","usage/annotated_usage.rst","usage/basic_usage.rst","usage/cyclic_dependency.rst","usage/dependencies_precedence.rst","usage/factory.rst","usage/index.rst","usage/injectable_mocking_for_tests.rst","usage/injecting_existing_instance.rst","usage/injection_container_resetting_for_tests.rst","usage/lazy_injection.rst","usage/namespaces.rst","usage/optional_injection.rst","usage/qualifier_overloading.rst","usage/service_locator.rst","usage/singletons.rst"],objects:{"":[[8,0,0,"-","injectable"]],"examples.annotated_usage":[[13,0,0,"-","annotated_usage_example"]],"examples.basic_usage":[[14,0,0,"-","basic_usage_example"]],"examples.cyclic_dependency":[[15,0,0,"-","cyclic_dependency_example"]],"examples.dependencies_precedence":[[16,0,0,"-","dependencies_precedence_example"]],"examples.factory":[[17,0,0,"-","factory_example"]],"examples.injectable_mocking_for_tests":[[19,0,0,"-","injectable_mocking_example"]],"examples.injecting_existing_instance":[[20,0,0,"-","injecting_existing_instance_example"]],"examples.injection_container_resetting_for_tests":[[21,0,0,"-","injection_container_resetting_example"]],"examples.lazy_injection":[[22,0,0,"-","lazy_injection_example"]],"examples.namespaces":[[23,0,0,"-","namespaces_example"]],"examples.optional_injection":[[24,0,0,"-","optional_injection_example"]],"examples.qualifier_overloading":[[25,0,0,"-","qualifier_overloading_example"]],"examples.service_locator":[[26,0,0,"-","service_locator_example"]],"examples.singletons":[[27,0,0,"-","singleton_example"]],"examples.tldr":[[12,0,0,"-","tldr_example"]],"injectable.InjectionContainer":[[8,2,1,"","load"]],"injectable.constants":[[9,4,1,"","DEFAULT_NAMESPACE"]],"injectable.errors":[[10,5,1,"","AutowiringError"],[10,5,1,"","InjectionError"]],"injectable.testing":[[11,3,1,"","clear_injectables"],[11,3,1,"","register_injectables"],[11,3,1,"","reset_injection_container"]],injectable:[[8,1,1,"","Autowired"],[8,1,1,"","Injectable"],[8,1,1,"","InjectionContainer"],[8,3,1,"","autowired"],[9,0,0,"-","constants"],[10,0,0,"-","errors"],[8,3,1,"","inject"],[8,3,1,"","inject_multiple"],[8,3,1,"","injectable"],[8,3,1,"","injectable_factory"],[8,3,1,"","load_injection_container"],[11,0,0,"-","testing"]]},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","function","Python function"],"4":["py","data","Python data"],"5":["py","exception","Python exception"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:function","4":"py:data","5":"py:exception"},terms:{"0":[4,8,11,26],"02":4,"03":4,"04":4,"05":4,"06":[4,23],"07":4,"08":4,"09":4,"1":[4,26],"10":4,"11":4,"12":4,"13":4,"14":4,"15":4,"151":23,"19":4,"2":[4,16,26],"20":4,"2018":4,"2020":4,"2021":4,"2024":4,"22":4,"23":4,"24":4,"29":4,"3":[4,8,11],"31":4,"38":23,"4":[4,8,11,16],"42":[11,20],"5":4,"593":2,"6":[4,16],"7":4,"8":[2,8,16],"9007":1,"94":23,"abstract":[16,23,25],"break":2,"case":[1,3,8,13,17],"class":[1,2,6,8,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],"default":[2,8,9,11,14,22,23,24],"do":[1,3,21,22],"final":14,"function":[1,2,6,8,10,11,17,19,20,21],"import":[2,4,6,8,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],"long":11,"new":[8,11],"public":8,"return":[2,8,11,13,14,15,17,20,23,26],"static":[2,6],"true":[6,8,11,13,15,16,22,26,27],"try":21,"while":[3,22,24],A:[15,17,27],As:1,At:[5,8,11],But:24,By:23,For:[4,11,12,13,15,18,20],If:[1,3,8,16],In:[13,14,15,16,17,19,20,22,23,24,25,26,27],It:8,No:21,One:8,The:[1,8,11,12,13,14,15,16,17,20,22,23,24,25,26],Then:[1,23],These:6,To:23,Will:8,__init__:[6,8,12,13,14,15,16,17,19,20,22,23,24,25,26,27],__main__:[12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],__name__:[12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],__qualname__:1,_global:2,_name:13,_state:[14,26],_statement:13,abc:[6,16,23,25],about:[3,25],absolut:[1,8],abstract_servic:16,abstract_service_1:16,abstract_service_2:16,abstractmethod:[16,25],abstractservic:[8,16],accept:[2,8],access:15,action:8,actual:[6,17,22],ad:2,add:[2,3,8],address:8,advantag:25,after:8,against:2,airflow:1,alias:1,all:[1,6,8,11,14,16,17,21,24,25],all_basic_service_implement:26,allow:2,alreadi:[8,11,20],also:[8,13,15,16,17,20,22,23,25],ambigu:[8,16],among:8,an:[1,3,6,8,12,13,15,16,17,19,20,21,22,23,24,26,27],analysi:6,ani:[1,3,8,21,23,24],annot:[2,4,6,8,14,16,17,18,19,20,21,22,23,24,25,26,27],annotated_usag:13,annotated_usage_exampl:13,annotatedusag:13,anoth:1,another_basic_servic:14,api:[8,26],app:20,appli:8,applic:[1,3,20],ar:[1,2,3,6,8,14,15,16,21,22,23,24,25],aren:[8,24],arg:2,argument:[2,6,8,23],assert_cal:19,assertionrewritinghook:1,assign:[8,20,23],attempt:8,attribut:[1,15,16],attributeerror:1,author:[4,6],auto:3,automat:[4,6,8],autowir:[2,6,8,10,12,13,14,15,16,17,19,20,21,22,23,24,25,27],autowired_decor:8,autowired_typ:8,autowiringerror:[8,10],avoid:15,b:[15,16],bar:[8,14,21],base:[6,8,11,16,23,25,26],basic:[4,12,13,18,26],basic_servic:14,basic_usag:14,basic_usage_exampl:14,basicservic:14,basicusag:14,befor:[8,19,21],behav:27,behavior:14,behind:14,being:[1,2,8,21,22,27],beta:2,better:[3,12],between:27,black:3,bool:[8,11],both:[16,22,23,24,27],branch:3,brief:3,broker:6,bug:2,built:6,builtin:[1,2],bunch_of_optional_servic:24,bunch_of_servic:[],call:[2,6,8,19,21,22],callabl:8,caller:[2,8],can:[1,2,6,8,12,13,15,17,19,20,21,22,23,27],cannot:[8,17,23],carefulli:6,caus:[1,2],caveat:4,chang:[2,11,27],changelog:4,check:[1,3,6],checker:2,circular:[15,22],cl:8,clarifi:3,classmethod:8,clear:[3,8,11,21],clear_inject:[11,19],client1:27,client2:27,client:17,client_endpoint:17,client_endpoint_example_env_var:17,client_factori:17,code:[1,2,3,17],collect:[8,11],com:[0,1,8],combin:[1,16],command:5,comment:3,common:17,complet:[13,14],complex:2,compli:[2,6,13],concret:25,conflict:23,conjunct:8,connect:[17,27],consol:2,constant:[4,7,8,11],constructor:[2,8,11],contain:[1,2,4,8,10,11,18],content:2,contribut:4,conveni:13,cool:6,corner:1,correct:8,craig:0,craigminihan:0,crash:2,creat:[2,8,15,25],cryptic:3,current:1,custom:[8,10],cyclic:[4,18,22],cyclic_dependency_exampl:15,cyclicdepend:15,dag:1,databas:6,david:0,deal:[15,17,22],declar:[1,2,6,8,13,14,15,16,17,22,23,24,25,26,27],decor:[1,2,6,8,14,17,20,26],def:[6,8,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],default_measuring_servic:23,default_namespac:[2,8,9,11],defin:[8,11,27],demonstr:14,dep:[6,8,12,19],dep_a:8,dep_b:8,dep_c:8,depend:[2,4,8,10,11,13,14,18,19,22,23,24,25,26,27],dependencies_preced:16,dependencies_precedence_exampl:16,dependenciespreced:16,dependency_nam:10,deprec:[2,8],describ:[1,26],descript:3,design:[6,8],detail:[13,15,22,23,26],dev:1,develop:6,differ:[2,6,8,16,23],direct:8,directli:[1,8,13,26],directori:8,discourag:3,discov:[6,8],discoveri:[4,6],do_someth:21,doc:6,docstr:3,document:[2,3],doe:[2,8,22],doesn:2,dr:[4,18],drop:2,due:8,dummi:17,duplic:[2,8],dure:1,e:[8,21,22],each:[1,14,15,16,23],earth_to_sun_dist:23,eas:[2,11],easier:15,effect:1,either:[1,8],eleg:6,email:25,email_sender_servic:25,emailsenderservic:25,empti:[2,8,21,24],enabl:[2,15],encod:[2,8],encourag:3,end:25,endpoint:17,ensur:3,entangl:2,environ:2,error:[4,7,8,16,21],everi:27,exampl:[2,3,4,6,8,11,12],except:[10,21],exclud:8,exclude_group:[8,25],execut:[1,8],exhaust:1,exist:[2,4,17,18],expect:24,explicit:16,explicitli:[8,16],expos:16,extend:[6,13],extended_servic:13,extended_service_2:13,extendedservic:13,extern:17,external_cli:17,externalcli:17,f:[13,16,17,25],factori:[2,4,8,18,20],factory_exampl:17,fail:[1,2,10,16,24],fall:15,fallback:13,fallback_servic:13,fallback_service_2:13,fallbackservic:13,fals:[8,11,27],fashion:[2,6],favor:2,fax:25,fax_sender_servic:25,faxsenderservic:25,featur:4,feedback:3,few:6,file:[1,2,8,11,12],filter:[8,25],finish:22,first:[1,2,8,13,23],fix:2,follow:[1,3],foo:[6,8,11,12,14,21],foo_factori:8,fork:3,form:3,format:3,found:[8,24],four:1,framework:[6,12,14,15,23,26],friendli:6,from:[1,2,6,8,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],func:8,futur:8,g:8,gener:[2,8],get:[16,19,24],get_cod:1,get_pending_messag:6,get_repository_st:[14,26],get_some_property_from_a:15,get_some_property_from_b:15,getenv:17,github:[0,1],given:[8,11],global:8,good:12,grasp:14,group:[2,8,25],guidelin:3,ha:[1,23],happen:[2,25],hard:3,have:[14,15,16,17,20,23],heart:6,hello:[13,25],high:26,hint:[2,6,13],how:[8,11,13,14,15,16,17,19,20,21,22,23,24,25,26,27],http:[0,1,17],human:4,i:[8,22],idea:14,identifi:8,illustr:[14,23,26],illustrativeexampl:12,implement:[1,16,23,25],imposs:[1,8],includ:[2,3,21],inclus:11,incompat:1,independ:[14,23],index:4,indic:[8,10,16],infer:2,inform:8,inherit:[13,26],init:22,initi:[2,6,8,20],inject:[1,2,4,5,7,12,13,14,15,16,17,18,23,25,26,27],inject_multipl:[2,8,26],injectable_decor:8,injectable_factori:[1,2,8,17,20],injectable_factory_decor:[8,17],injectable_mocking_exampl:19,injectableloaderror:8,injectablemock:19,injecting_existing_inst:20,injecting_existing_instance_exampl:20,injectingexistinginst:20,injection_container_resetting_exampl:21,injectioncontain:[2,8],injectioncontainerreset:21,injectionerror:[8,10,21,24],insid:[8,26],inspect:2,inspir:1,instal:[2,4],instanc:[4,6,8,14,15,16,17,18,24,25,27],instanti:[2,8,15,17,22,27],instead:[2,8,14,15,16,24],internationalmeasuringservic:23,intl:23,intl_measuring_servic:23,invoc:8,invok:[8,15,22],isinst:1,isn:8,issu:[1,2,3],its:[15,23,27],itself:[1,3,8],just:[6,16,20,24],kafkaproduc:6,keep:3,kind:3,klass:11,km:23,know:17,known:1,kulej:0,label:25,lambda:[11,17,19,20],last:[8,23],lazi:[2,4,6,8,15,18],lazili:22,lazy_inject:22,lazy_injection_exampl:22,lazy_object_proxi:2,lazyinject:22,lead:1,learn:[15,25],least:[8,11],level:[1,8,26],leverag:22,librari:1,licens:6,like:[6,13,17],line:5,linter:[3,6,13],list:[1,2,6,8,24,25],ll:[4,13,14,15,16,17,20,22,23,24,25,26,27],load:[1,2,8],load_injection_contain:[2,6,8,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],locat:[2,4,18],log:8,logic:17,look:[1,8,12],lookup:8,loop:15,love:4,low:[8,26],lozano:0,lozanocampillod:0,maco:2,made:[8,21,27],magic:[3,8],mai:[1,3,24],make:[2,3,6,8,14,15,19,21],manag:8,mani:6,manual:11,mark:[2,8],master:3,match:[8,10,21,25],meant:8,measuring_servic:[],measuring_service_abc:23,measuringservic:23,messag:[6,25],message_brok:[],metadata:13,method:[2,8,14,15,16,22,24,26],mile:23,million:23,mind:3,minihan:0,minor:2,miss:2,mock:[2,4,11,18],mocked_dep:19,mocked_inject:19,mockeddep:19,model:6,modifi:15,modul:[1,2,4,8],more:[2,8,25],move:1,mt3o:0,multipl:[2,8,15,25],multipleservic:16,multipli:16,multiply_servic:16,multiplyservic:16,must:[1,8],mypi:2,name:[1,2],namespac:[2,4,6,8,9,11,13,18,21,24],namespaces_exampl:23,necessari:[8,17],need:[3,8,11,19,22],never:[1,8,19],nevertheless:3,non:[1,8],none:[8,10,11,14,23,24,26],now:[16,17,20,22],number:20,object:1,occurr:1,offici:2,often:3,ok:24,old:25,oliv:0,oliveira:0,omit:13,onc:[2,8,27],one:[1,8,11,13,14,15,16,19,21,23,24,27],ones:[8,23],onli:[6,8,15,22,23,27],open:[2,3],oper:1,option:[2,4,8,11,18,23],optional_inject:24,optional_injection_exampl:24,optional_servic:24,optionalinject:24,organ:3,origin:6,os:17,other:[1,2,8,12,14,15,23,25,27],otherwis:11,our:[6,14,15,16,17,20,22,23,24,25,26,27],out:[6,8,25],outermost:24,output:2,outsid:[1,8],over:26,overload:[4,6,13,16,18,24,26],own:23,packag:[2,6],page:4,paramet:[2,6,8,11,13,22,23,25,27],parenthesi:[2,8,13],particular:23,pass:[6,8,26],path:[1,2,6,8],pend:6,pep:2,perform:8,pip:[2,5],place:[8,27],posit:8,possibl:[1,2,13,15],potenti:1,preced:[4,18,25],prefer:26,present:[8,24],preserv:6,prevent:[8,15],previou:[2,8],previous:8,primari:[8,13,16,24,26],primary_basic_servic:26,print:[12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],project:[3,6,8],propag:[11,25],properti:[13,14,15,26],provid:[2,11],pull:3,purpos:[8,11],py:[12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],pycharm:6,pyright:2,pytest:4,python:[1,2,8,12],qualifi:[2,4,6,8,11,13,15,16,18,23,24,26],qualifier_overload:25,qualifier_overloading_exampl:25,qualifieroverload:25,quirk:2,r:8,rais:[2,8,10,11,16],re:25,read:[1,8],readabl:3,readi:6,realdep:19,reason:[1,8,17,20],receiv:[3,8,24],recipi:25,recommend:8,record:11,recurs:[1,11],refactor:2,refer:[4,6,15,22],reflect:27,regard:[8,25],regardless:8,regist:[1,2,8,9,11,15,19,21,23],register_inject:[2,11,19],registri:[8,23],registry_typ:10,regular:[1,20],rel:[2,4,8],releas:2,remov:[2,8],render:1,repositori:[3,14,26],repres:17,request:[3,8],requir:2,reset:[4,11,18],reset_injection_contain:[2,11,21],resili:2,resolut:[8,25],resolv:[2,8,16,23,24,25],respect:[8,23],respons:17,review:3,right:22,rodrigo:0,roo:0,root:[6,21],run:[1,2,3,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],run_exampl:[12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],s:[1,2,3,6,8,14,26],sai:13,same:[1,2,6,8,15,22,25,27],sample_servic:26,sampleservic:26,satisfi:24,scan:[2,8,11],search:[1,2,4,8,9],search_path:8,section:[8,11,12],see:[6,13,16,17,20,22,23,24,26,27],self:[6,8,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],send:25,send_messag:25,send_pend:6,sender_servic:25,senderservic:25,separ:13,sequenc:8,servic:[2,4,6,8,13,14,15,18,25],service_a:[15,22],service_b:[15,22],service_loc:26,service_locator_exampl:26,service_xyz:24,servicea:[15,22],serviceb:[15,22],serviceloc:26,servicexyz:24,set:[2,10,11,14],set_repository_st:[14,26],setter:[14,26],setup:8,shall:[8,24],share:[6,8,14,27],should:8,shouldn:8,show:[11,13,14,16,17,20,24,25],shown:13,side:1,side_effect:19,signatur:2,simpl:[6,13],simple_servic:13,simple_service_2:13,simpler:17,simpleservic:13,simpli:24,sinc:[8,16,19,24],singl:[6,12,23,25],singleton:[4,6,8,14,15,18],singleton_cli:27,singleton_exampl:27,singletoncli:27,situat:[13,24],sm:25,sms_sender_servic:25,smssenderservic:25,so:[1,3,13,17,20,24],some:[1,15,17,24],some_properti:15,some_servic:[],someth:[21,22],sourc:[8,10,11],speak:[3,13],specialized_servic:26,specializedservic:26,specif:8,specifi:[6,8,11,16,22,23],sqsproduc:6,stabl:2,start:[12,22],state:[11,14,21,26,27],stateful_repositori:[14,26],statefulrepositori:[14,26],statefulservic:14,staticmethod:19,step:1,still:8,store:8,str:[8,10,11,17,25],straightforward:12,string:[1,2,8,15],style:3,submit:3,success:8,successfulli:23,suit:2,suitabl:2,sum:16,sum_servic:16,sumservic:16,suppli:20,support:2,sure:[8,21],system:1,t:[1,2,8,11,16,19,24],take:25,teodor:0,test:[1,2,3,4,6,7,8,18],than:[1,2,3,8],thei:[14,22,27],them:[6,15],themselv:8,therefor:23,thi:[1,3,8,11,12,13,14,15,16,17,19,20,21,22,23,24,25,26,27],thoroughli:3,those:1,though:[8,16,19],three:[23,25],through:[1,2,17],time:[2,8,22],tl:[4,18],tldr_exampl:12,ton:2,trail:8,transpar:6,trial:2,tricki:3,turn:[14,20,26,27],twice:1,two:[14,23,25,27],type:[1,2,6,8,11,13,14,16,17,19,20,21,22,23,24,25,27],typeerror:2,ubuntu:2,unabl:8,under:8,understand:12,unintend:1,union:[8,11],uniqu:8,unique_id:8,unit:[2,3],unitedstatesmeasuringservic:23,unittest:19,unless:11,unus:2,up:25,us:[1,2,3,6,8,9,11,13,14,15,16,17,19,20,21,23,24,25,26,27],us_measuring_servic:23,usag:[1,2,4,6,8,11,12,26],user:2,utf:[2,8],util:[2,8,11,19,21],uuid:8,valid:8,valu:[8,14,24,26],valueerror:11,variabl:20,varieti:8,version:[2,8,11],wa:[8,16,19,27],wai:[3,22],want:[3,24],warn:[8,21],wasn:[8,16],we:[14,15,16,17,19,20,22,23,24,25,26,27],welcom:3,well:[3,16],were:[23,25],what:[3,23,24],whatev:20,when:[2,6,8,11,13,15,16,22,24,25,27],whenev:27,where:8,which:[2,8,11,14,15,16,17,20,22,24,26,27],window:2,wire:8,without:[2,8,13,17,23],won:[1,11,24],work:[1,2,13,15,22,23,24,25,26],workaround:1,world:25,would:16,wouldn:19,wrap:[8,17,19],write:3,wrong:2,wrote:3,xyz:24,yet:2,you:[3,4,12,13,14,15,16,17,20,22,23,24,25,26,27],your:[3,6,17]},titles:["Authors","Caveats","Changelog","Contributing","Contents","Installation","Injectable: Dependency Injection for Humans\u2122","Reference","injectable","injectable.constants","injectable.errors","injectable.testing","TL;DR","Annotated Usage Example","Basic Usage Example","Cyclic Dependency Example","Dependencies Precedence Example","Factory Example","Usage Examples","Injectable Mocking For Tests Example","Injecting Existing Instance Example","Injection Container Resetting For Tests Example","Lazy Injection Example","Namespaces Example","Optional Injection Example","Qualifier Overloading Example","Service Locator Example","Singletons Example"],titleterms:{"0":2,"02":2,"03":2,"04":2,"05":2,"06":2,"07":2,"08":2,"09":2,"1":2,"10":2,"11":2,"12":2,"13":2,"14":2,"15":2,"19":2,"2":2,"20":2,"2018":2,"2020":2,"2021":2,"2024":2,"22":2,"23":2,"24":2,"29":2,"3":2,"31":2,"4":2,"5":2,"6":2,"7":2,"import":1,For:[19,21],annot:13,author:0,automat:1,basic:14,caveat:1,changelog:2,constant:9,contain:21,content:4,contribut:3,cyclic:15,depend:[1,6,15,16],discoveri:1,dr:12,error:10,exampl:[13,14,15,16,17,18,19,20,21,22,23,24,25,26,27],exist:20,factori:17,featur:6,human:6,indic:4,inject:[6,8,9,10,11,19,20,21,22,24],instal:5,instanc:20,lazi:22,ll:6,locat:26,love:6,mock:19,namespac:23,option:24,overload:25,preced:16,pytest:1,qualifi:25,refer:7,rel:1,reset:21,servic:26,singleton:27,tabl:4,test:[11,19,21],tl:12,usag:[13,14,18],you:6}}) \ No newline at end of file