From bb7cfcc124d6d33215d8319cf05c2a59aca5adcd Mon Sep 17 00:00:00 2001 From: Roman Mogilatov Date: Mon, 8 Jun 2015 11:33:27 +0300 Subject: [PATCH] Finishing of Factory provider docs --- docs/images/factory_attribute_injections.png | Bin 0 -> 6366 bytes docs/images/factory_init_injections.png | Bin 0 -> 4112 bytes .../factory_init_injections_and_contexts.png | Bin 0 -> 7370 bytes docs/images/factory_method_injections.png | Bin 0 -> 8747 bytes docs/providers.rst | 158 ++++++++++++++++-- .../providers/factory_attribute_injections.py | 52 ++++++ examples/providers/factory_init_injections.py | 4 +- .../factory_init_injections_and_contexts.py | 12 +- .../providers/factory_method_injections.py | 60 +++++++ 9 files changed, 268 insertions(+), 18 deletions(-) create mode 100644 docs/images/factory_attribute_injections.png create mode 100644 docs/images/factory_init_injections.png create mode 100644 docs/images/factory_init_injections_and_contexts.png create mode 100644 docs/images/factory_method_injections.png create mode 100644 examples/providers/factory_attribute_injections.py create mode 100644 examples/providers/factory_method_injections.py diff --git a/docs/images/factory_attribute_injections.png b/docs/images/factory_attribute_injections.png new file mode 100644 index 0000000000000000000000000000000000000000..29b982510cae00ed543e0e8555e80537c7fc305e GIT binary patch literal 6366 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 bC$}d7|6E`Wq3nAsK&P+sK)dvgUHHEN|G>}r literal 0 HcmV?d00001 diff --git a/docs/images/factory_init_injections.png b/docs/images/factory_init_injections.png new file mode 100644 index 0000000000000000000000000000000000000000..31ddc5b77e14da81ff5e558ffdc24fbac2076f5f GIT binary patch literal 4112 zcmc&%cTiJl*AJkwvI|&HqzLG0M0yED5Kt6I2pvKPrF&^og7l)arGtLnob`sh zXB`fJ+XX`)ryl(Ia3DhB^B@p@UBvaPR$=4xhp#cs3di(A@(&{GF&t-(#Fv^0xL@UL z_Eftl$#dWA(72LR3T|ptf9lTFt=-j z*A-~?p*SN6UP!?eVTjUQ7{r|ufV@2LAKKs!ck?;uUqK&CX0(2^oz4xG2}QcSE+xMg zx~S(J@7C7Kc58FMXU{h^-qgEx>5_fihd8&b_!_r18{ulJP*$V1_(KcM2g0JSWtB4L zoB{8G`5{xws_lg%>n|E7-FF)&r86uB25&5-!wk1d-CiE*56b=4A4G<6?wonlk9?EX zlP@$HD|2SxLw3GkiefMX$p0H0$;OTUmbP_7g7^451zA0`aVIV^>djlx(=SebIF})& zGcFZv^+Q&;sdIXGTVK6=m`b9B-VQszIfYDGPSu{M%8;LYw&K*Oc?I6x6}evGES6Nu zSp5>+Qoi#By}O#vB)b>?+9|mWeE{akQ$!!}eZG<1cRJczcp4+P6Li4=%%5rvPN=F{ zYRkHl2V0YVYO#U9+sz7OJi4w?QxaVZv!)(STc1J|L(PgXs=Y3LW_O%jQER!Yq0^eX zH{)$*C#SqI5$(gL8?#h5KJ#HbZw+Axhq>2v)tKs*RiHYlHF*Y~ntWih78E!$WfM|N z^>rD)S7S~jiN0_0n$vTtSXaGfQxS%!<{=_A39AJlyDD{CA3}7hef3n|QP_Z0YogX< zDN9AJU2<9eY^SP2Q!A4~1ZRMG#I}>495hLxu&DSmQRaS=j+f6pm&ZUu21x-@Bmpgz z#e<1=w4_=b0o@Hg)SQK|v7!jk!BSGq(DGzRa9c;W-ibs$ks&6CT@{r!GG0nF!O?Lu z(h3g zKCZ7T6;}-zOG2&v0wJUDnS5V|2kZF{Kbr-q+`r}Z5w*2KlxH>HsE zaU0-T5Zvw@VBI?sc6@ha={fSP;mB`1%Ix7a5ir~(&r?e5*vBt$%dF@uAB~51Mii2S zNJF6QvK~U&=mgYylf|Ex3&VwDJmMEPAF9xZP$ze=IE5HplNuQiahWQbQ#I#3aMt() z7sHJ*@l*B8QI41#7?ns1B0(3gwT{Z|9uI1O?X>0gao?!%@d8*B`CLQyp7s``li;xw zf?evRoI(S966qnD$B6MgS7(7+qO&ul5|jBuW_tJ3iyx}#$=cveFh%2o<)GQ^#BFD$ zg-*x1Ii4tKiGNq2?!7yX_IFG*IIw99zS~TUQ1bJ2XQ8ssYX%i)AjaQuu9K@@ z3$r(#YkNrvMFhJxtsmPkLCqOP=lGbb#PiAnckAX+*pB7mj#DK6C-zGdO@^6PR?eyQ z>YMkOi+5p0QL6Hcm2y$`EbUJVo^giO+yES{6{ZqWhbS4neUa& zie}NYaL$yqdX92#P~nV(yw}!+7AhBzuO91c!eqSt^J^fxy>RV?@ce=A8^RK(CVRwj zjCoeklkfimv?X{)^_>r1)^M9Y2r6&@o!n@O?cZGV&w_wsz?=6nouNLWN{ho2*|r?# z``)}j5P*$puOkJu-&BM6s(N@N_b#q2pAl&~(@I#ApD1TaG;$iI7sOML%|$)a!Xs+X znvZorZD-pPZMlY)fQAkFbtjgyp!kY0IJ!8KTb+kOQSTV!g@5IUXts>O+5!Qj7VbEtZiMFe{2&Gqs`Jc1Cvd72IWiymIi@AND zr3GCxwT$Wo*6zbxie)k6G27uf*)Hu_un7Ca9Uew07jneTRPLYk!iyN#cdEAQQR8Wa zwX0Ksn0HADpG*o_atpbH;>3-C^ngVz`;ne8FF=0_Ci0}fGw()fxxVYcyi>~Dk1(D^ z0wGZq(WE9Laf;sR3(a} z&WV4A;lq>>){ymG0lzoG03&K0R&`dQ&q(=IXm^nV58uDt;qIERxa%q!C|%Kzq7!>@Pp~}!wgX-7n!#BCnh>wHP|Px8#aX%w#mjey~;m- zFDI8X0IJZ6-hXC+t;VJv20wybtkAR5-0$QbWFq}?t=Cntd%sjB&eKPn|H3V)G@SwdhV#a;JJa7* z%slZ50$|+H>4JAp;LX09FIu%Rj-}quv|fZ4-cznwd8Y1QpjqePfcxY3S(w*t=~ca)pySLK<)A}v&5A1%+2ZL zl3zp|yLl2BhA6X;viqc`gaqqoNkKKPpKErTSW)u8b7Y+0{zXK6=cJ_E82DAo=__SIK%xTtul5E*|tF zrZ)K@&WfB{koJHAU0v@qYSeyYEY_76imUkzorfP2prga)yuAUMYj&LK>P85kyssHA zLO9o&+CnLLViR#fm9DFf3q8MmeXpGH6vNqC-V0lw=Mi7dBd-10p2-}{WKy*4F>Gr> zYU=z>Ohb}(_ML1(CHInRt?5_%cxFQ={(6MHeV;;g1rYYDK>rx8%_E@uP~ZvtFXI`~ zgy{RUkan}j!)appzsOEH;~|?$UsRF5PtzbrNEzc_7HD{wH`{)SFQ`S(A&6^Q&D%7G z#ity8o-`tmpkyl2A>ej|z()(?n*RSh|UHk|t{ zDPe>kqL6Z+?9EXvTwgjv79`}rwGhn$z{buN5!ltpa0l5dODIuCUinz<`}-nri5RYM zz`MVgk^%ELHAzK%*iM1zX`&PD)ljvd|1IF=hj+bqiTV0p-?jvY1=^t66{ad)gov>xVe{fZK)8bL=fH))3&z)e#v`k(_L#`$(l;KMYzDchLaE|Y zci2n0UbIu>H%;S7Oj;?_hMGKBubc*x^WR?5h=`0#TW5TAiK=o&)iMrtx6>beFpce~q@RLd=3Pn4H~oP!rx0kwiqY4Du&B(e z*x4d{Rd_fuZok@@IA}6^?APVwg~IG@oQ@@%FXe=p>l@JqL+V7z?m)d*Vafd5ALL~e zl^CZbqZwcawtvN}z*Pc)VJZ+dEOV-;L zlP-IFm?=xnTGsgXw@$w#^p|ymeX+e;qnL5?98GWUyeq=c{|^vr|4wRmzYj5yvCX^X zx16UBMe7F0sEx(Sd@;2ApgqKS?$sum)8(VBf77n*DyC0rnC`eCUUGblx;GP@owZ$! z>2$BO8hg2%8kN1-0?V2A6@4AKo;l|a_=dC2F}w%@qwn^dn|EzJFaMTbmj23<5acmH})joVhM7me#P|9^6T{9lJyHh)3zgv-@!JKMbx`#f6D7VYkW z_Rw$(^4MD-N(zc9vI?rQ3hGu0Y8pyv8p=x23JMwu3LGn$;s3?K@3uSO8U8;z1T?Dl Q?m0jZdM4NFbZ_4K7b&}hYybcN literal 0 HcmV?d00001 diff --git a/docs/images/factory_init_injections_and_contexts.png b/docs/images/factory_init_injections_and_contexts.png new file mode 100644 index 0000000000000000000000000000000000000000..a3328ed00ceb77c36fa18bc30df5aa26edce29d6 GIT binary patch literal 7370 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 R#Y!?DQ;<`UErGr8|2KeBw50$5 literal 0 HcmV?d00001 diff --git a/docs/images/factory_method_injections.png b/docs/images/factory_method_injections.png new file mode 100644 index 0000000000000000000000000000000000000000..95a44af706bacc859c92f6481a847537928ab125 GIT binary patch literal 8747 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 literal 0 HcmV?d00001 diff --git a/docs/providers.rst b/docs/providers.rst index 84f96890..55f665a9 100644 --- a/docs/providers.rst +++ b/docs/providers.rst @@ -72,6 +72,8 @@ Example below shows how to create ``Factory`` of particular class with ``__init__`` keyword argument injections which injectable values are also provided by another factories: +.. image:: images/factory_init_injections.png + .. code-block:: python """`Factory` providers with init injections example.""" @@ -105,8 +107,8 @@ provided by another factories: KwArg('main_photo', photos_factory)) # Creating several User objects: - user1 = users_factory() # Same as: User(main_photo=Photo()) - user2 = users_factory() # Same as: User(main_photo=Photo()) + user1 = users_factory() # Same as: user1 = User(main_photo=Photo()) + user2 = users_factory() # Same as: user2 = User(main_photo=Photo()) # Making some asserts: assert isinstance(user1, User) @@ -125,6 +127,8 @@ passes positional context arguments to class's ``__init__`` method, but keyword context arguments have priority on ``KwArg`` injections (this could be useful for testing). So, please, follow the example below: +.. image:: images/factory_init_injections_and_contexts.png + .. code-block:: python """`Factory` providers with init injections and context arguments example.""" @@ -177,12 +181,12 @@ useful for testing). So, please, follow the example below: KwArg('credit_card', credit_cards_factory)) # Creating several User objects: - user1 = users_factory(1) # Same as: User(1, - # main_photo=Photo(), - # credit_card=CreditCard()) - user2 = users_factory(2) # Same as: User(2, - # main_photo=Photo(), - # credit_card=CreditCard()) + user1 = users_factory(1) # Same as: user1 = User(1, + # main_photo=Photo(), + # credit_card=CreditCard()) + user2 = users_factory(2) # Same as: user2 = User(2, + # main_photo=Photo(), + # credit_card=CreditCard()) # Making some asserts: assert user1.id == 1 @@ -211,12 +215,146 @@ useful for testing). So, please, follow the example below: Factory providers and attribute injections ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Attributes example. +Example below shows how to create ``Factory`` of particular class with +attribute injections. Those injections are done by setting specified attributes +with injectable values right after object's creation. + +.. image:: images/factory_attribute_injections.png + +.. code-block:: python + + """`Factory` providers with attribute injections example.""" + + from objects.providers import Factory + from objects.injections import Attribute + + + class User(object): + + """Example class User.""" + + def __init__(self): + """Initializer.""" + self.main_photo = None + self.credit_card = None + + + class Photo(object): + + """Example class Photo.""" + + + class CreditCard(object): + + """Example class CreditCard.""" + + + # User, Photo and CreditCard factories: + credit_cards_factory = Factory(CreditCard) + photos_factory = Factory(Photo) + users_factory = Factory(User, + Attribute('main_photo', photos_factory), + Attribute('credit_card', credit_cards_factory)) + + # Creating several User objects: + user1 = users_factory() # Same as: user1 = User() + # user1.main_photo = Photo() + # user1.credit_card = CreditCard() + user2 = users_factory() # Same as: user2 = User() + # user2.main_photo = Photo() + # user2.credit_card = CreditCard() + + # Making some asserts: + assert user1 is not user2 + + assert isinstance(user1.main_photo, Photo) + assert isinstance(user1.credit_card, CreditCard) + + assert isinstance(user2.main_photo, Photo) + assert isinstance(user2.credit_card, CreditCard) + + assert user1.main_photo is not user2.main_photo + assert user1.credit_card is not user2.credit_card + Factory providers and method injections ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - - Method example. +Current example shows how to create ``Factory`` of particular class with +method injections. Those injections are done by calling of specified method +with injectable value right after object's creation and attribute injections +are done. + +Method injections are not very popular in Python due Python best practices +(usage of public attributes instead of setter methods), but it may appear in +some cases. + +.. image:: images/factory_method_injections.png + +.. code-block:: python + + """`Factory` providers with method injections example.""" + + from objects.providers import Factory + from objects.injections import Method + + + class User(object): + + """Example class User.""" + + def __init__(self): + """Initializer.""" + self.main_photo = None + self.credit_card = None + + def set_main_photo(self, photo): + """Set user's main photo.""" + self.main_photo = photo + + def set_credit_card(self, credit_card): + """Set user's credit card.""" + self.credit_card = credit_card + + + class Photo(object): + + """Example class Photo.""" + + + class CreditCard(object): + + """Example class CreditCard.""" + + + # User, Photo and CreditCard factories: + credit_cards_factory = Factory(CreditCard) + photos_factory = Factory(Photo) + users_factory = Factory(User, + Method('set_main_photo', photos_factory), + Method('set_credit_card', credit_cards_factory)) + + # Creating several User objects: + user1 = users_factory() # Same as: user1 = User() + # user1.set_main_photo(Photo()) + # user1.set_credit_card(CreditCard()) + user2 = users_factory() # Same as: user2 = User() + # user2.set_main_photo(Photo()) + # user2.set_credit_card(CreditCard()) + + # Making some asserts: + assert user1 is not user2 + + assert isinstance(user1.main_photo, Photo) + assert isinstance(user1.credit_card, CreditCard) + + assert isinstance(user2.main_photo, Photo) + assert isinstance(user2.credit_card, CreditCard) + + assert user1.main_photo is not user2.main_photo + assert user1.credit_card is not user2.credit_card + + Instance providers & Injections ------------------------------- diff --git a/examples/providers/factory_attribute_injections.py b/examples/providers/factory_attribute_injections.py new file mode 100644 index 00000000..1e5f1e79 --- /dev/null +++ b/examples/providers/factory_attribute_injections.py @@ -0,0 +1,52 @@ +"""`Factory` providers with attribute injections example.""" + +from objects.providers import Factory +from objects.injections import Attribute + + +class User(object): + + """Example class User.""" + + def __init__(self): + """Initializer.""" + self.main_photo = None + self.credit_card = None + + +class Photo(object): + + """Example class Photo.""" + + +class CreditCard(object): + + """Example class CreditCard.""" + + +# User, Photo and CreditCard factories: +credit_cards_factory = Factory(CreditCard) +photos_factory = Factory(Photo) +users_factory = Factory(User, + Attribute('main_photo', photos_factory), + Attribute('credit_card', credit_cards_factory)) + +# Creating several User objects: +user1 = users_factory() # Same as: user1 = User() + # user1.main_photo = Photo() + # user1.credit_card = CreditCard() +user2 = users_factory() # Same as: user2 = User() + # user2.main_photo = Photo() + # user2.credit_card = CreditCard() + +# Making some asserts: +assert user1 is not user2 + +assert isinstance(user1.main_photo, Photo) +assert isinstance(user1.credit_card, CreditCard) + +assert isinstance(user2.main_photo, Photo) +assert isinstance(user2.credit_card, CreditCard) + +assert user1.main_photo is not user2.main_photo +assert user1.credit_card is not user2.credit_card diff --git a/examples/providers/factory_init_injections.py b/examples/providers/factory_init_injections.py index 02d79998..9d068ed3 100644 --- a/examples/providers/factory_init_injections.py +++ b/examples/providers/factory_init_injections.py @@ -29,8 +29,8 @@ users_factory = Factory(User, KwArg('main_photo', photos_factory)) # Creating several User objects: -user1 = users_factory() # Same as: User(main_photo=Photo()) -user2 = users_factory() # Same as: User(main_photo=Photo()) +user1 = users_factory() # Same as: user1 = User(main_photo=Photo()) +user2 = users_factory() # Same as: user2 = User(main_photo=Photo()) # Making some asserts: assert isinstance(user1, User) diff --git a/examples/providers/factory_init_injections_and_contexts.py b/examples/providers/factory_init_injections_and_contexts.py index de78273a..a43e5f5a 100644 --- a/examples/providers/factory_init_injections_and_contexts.py +++ b/examples/providers/factory_init_injections_and_contexts.py @@ -48,12 +48,12 @@ users_factory = Factory(User, KwArg('credit_card', credit_cards_factory)) # Creating several User objects: -user1 = users_factory(1) # Same as: User(1, - # main_photo=Photo(), - # credit_card=CreditCard()) -user2 = users_factory(2) # Same as: User(2, - # main_photo=Photo(), - # credit_card=CreditCard()) +user1 = users_factory(1) # Same as: user1 = User(1, + # main_photo=Photo(), + # credit_card=CreditCard()) +user2 = users_factory(2) # Same as: user2 = User(2, + # main_photo=Photo(), + # credit_card=CreditCard()) # Making some asserts: assert user1.id == 1 diff --git a/examples/providers/factory_method_injections.py b/examples/providers/factory_method_injections.py new file mode 100644 index 00000000..83897a52 --- /dev/null +++ b/examples/providers/factory_method_injections.py @@ -0,0 +1,60 @@ +"""`Factory` providers with method injections example.""" + +from objects.providers import Factory +from objects.injections import Method + + +class User(object): + + """Example class User.""" + + def __init__(self): + """Initializer.""" + self.main_photo = None + self.credit_card = None + + def set_main_photo(self, photo): + """Set user's main photo.""" + self.main_photo = photo + + def set_credit_card(self, credit_card): + """Set user's credit card.""" + self.credit_card = credit_card + + +class Photo(object): + + """Example class Photo.""" + + +class CreditCard(object): + + """Example class CreditCard.""" + + +# User, Photo and CreditCard factories: +credit_cards_factory = Factory(CreditCard) +photos_factory = Factory(Photo) +users_factory = Factory(User, + Method('set_main_photo', photos_factory), + Method('set_credit_card', credit_cards_factory)) + +# Creating several User objects: +user1 = users_factory() # Same as: user1 = User() + # user1.set_main_photo(Photo()) + # user1.set_credit_card(CreditCard()) +user2 = users_factory() # Same as: user2 = User() + # user2.set_main_photo(Photo()) + # user2.set_credit_card(CreditCard()) + +# Making some asserts: +assert user1 is not user2 + +assert isinstance(user1.main_photo, Photo) +assert isinstance(user1.credit_card, CreditCard) + +assert isinstance(user2.main_photo, Photo) +assert isinstance(user2.credit_card, CreditCard) + +assert user1.main_photo is not user2.main_photo +assert user1.credit_card is not user2.credit_card