[Python] dependency injection con i decoratori

Matteo Scarpa matteo.scarpa a fundor333.com
Ven 2 Ott 2020 16:30:14 CEST


> ciao a tutti
>
> vorrei transformare una parte di codice da una chiamata a funzione a
> un decoratore: il codice fa dei controlli sulla validità di un json
> web token, quindi non è parte della business logic ma è un
> pre-requisito di ogni controller
>
> il problema è che a questo decoratore servono collaboratori, e non so
> come passarglieli
>
> per ora il workaround è mettere i collaboratori nella App [0], e
> recuperarli a runtime, ma mi chiedo se esistano metodi migliori
>
> ciao
>
> federico


Se ho capito bene tu vuoi fare una cosa tipo quella che fa flask con gli
url no? Esempio:

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

In cui viene definito il path route nel decoratore.

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.

Buon lavoro

Fundor333

-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20201002/14ae50a5/attachment.html>


Maggiori informazioni sulla lista Python