[Python] dependency injection con i decoratori

Federico Cerchiari federicocerchiari a gmail.com
Sab 3 Ott 2020 09:33:26 CEST


Ciao,

se ho capito bene quello che vuoi fare hai bisogno che il decoratore abbia
uno o più parametri valorizzati in base all'enviroment test/non test.
Una cosa del genere puoi farla con functools.partial, partendo dall'esempio
di Matteo:

from functools import partial
from eventuale_modulo_config import landscape
from mocks import collaboratori as collaboratori_mock
from validators import collaboratori

def decoratore_generic(func, collaboratori):
	def inner(*args, **kwargs):
		...
	return inner

if landscape == "TEST":

        decoratore = partial(decoratore_generic, collaboratori_mock)

else:
        decoratore = partial(decoratore_generic, collaboratori)



@decoratore()
def func1():
	pass





Fede

Il giorno ven 2 ott 2020 alle ore 17:12 Federico Fissore <federico a fsfe.org>
ha scritto:

> Matteo Scarpa wrote on 02/10/20 16:30:
> > Lo puoi fare scrivendo una cosa tipo:
> >
> > def decoratore(func, collaboratori):
> >       def inner(*args, **kwargs):
> >               ...
> >       return inner
> >
> > @decoratore(collaboratore1)
> > def func1():
> >       pass
> >
> > Spero di essere stato chiaro. Se vuoi vedere cose piú avanzate
> > suggerisco di dare una sbirciata al sorgente di Flask che fa proprio
> > queste cose.
> >
>
> Ti ringrazio Matteo, darò un'occhiata ai sorgenti di Flask
>
> La mia idea era di evitare di passare tutti i collaboratori ogni volta
> che aggiungo il decoratore: l'unico modo che conosco per farlo è
> definirli a livello di modulo, quindi in fase di testing diventa poi
> difficile passare al decoratore un collaboratore finto o mocckato, a
> meno di fare monkey patching
>
> federico
> _______________________________________________
> Python mailing list
> Python a lists.python.it
> https://lists.python.it/mailman/listinfo/python
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20201003/07491693/attachment.html>


Maggiori informazioni sulla lista Python