<div dir="ltr"><div>Ciao,</div><div><br></div><div>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.</div><div>Una cosa del genere puoi farla con functools.partial, partendo dall'esempio di Matteo:<br></div><div><br></div><div><span style="font-family:monospace">from functools import partial</span></div><div><span style="font-family:monospace">from eventuale_modulo_config import landscape<br></span></div><div><span style="font-family:monospace">from mocks import collaboratori as collaboratori_mock</span></div><div><span style="font-family:monospace">from validators import collaboratori<br></span></div><div><span style="font-family:monospace"><br></span></div><div><pre>def decoratore_generic(func, collaboratori):
def inner(*args, **kwargs):
...
return inner
<br></pre><pre>if landscape == "TEST":<br></pre><pre> decoratore = partial(decoratore_generic, collaboratori_mock)<br></pre><pre>else:<br> decoratore = partial(decoratore_generic, collaboratori)</pre><pre><br>
@decoratore()
def func1():
pass
</pre></div><div><span style="font-family:monospace"><br></span></div><div><br></div><div><br></div><div><br></div><div>Fede<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Il giorno ven 2 ott 2020 alle ore 17:12 Federico Fissore <<a href="mailto:federico@fsfe.org">federico@fsfe.org</a>> ha scritto:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Matteo Scarpa wrote on 02/10/20 16:30:<br>
> Lo puoi fare scrivendo una cosa tipo:<br>
> <br>
> def decoratore(func, collaboratori):<br>
> def inner(*args, **kwargs):<br>
> ...<br>
> return inner<br>
> <br>
> @decoratore(collaboratore1)<br>
> def func1():<br>
> pass<br>
> <br>
> Spero di essere stato chiaro. Se vuoi vedere cose piú avanzate <br>
> suggerisco di dare una sbirciata al sorgente di Flask che fa proprio <br>
> queste cose.<br>
> <br>
<br>
Ti ringrazio Matteo, darò un'occhiata ai sorgenti di Flask<br>
<br>
La mia idea era di evitare di passare tutti i collaboratori ogni volta <br>
che aggiungo il decoratore: l'unico modo che conosco per farlo è <br>
definirli a livello di modulo, quindi in fase di testing diventa poi <br>
difficile passare al decoratore un collaboratore finto o mocckato, a <br>
meno di fare monkey patching<br>
<br>
federico<br>
_______________________________________________<br>
Python mailing list<br>
<a href="mailto:Python@lists.python.it" target="_blank">Python@lists.python.it</a><br>
<a href="https://lists.python.it/mailman/listinfo/python" rel="noreferrer" target="_blank">https://lists.python.it/mailman/listinfo/python</a><br>
</blockquote></div>