Contesto: I percorsi Flask sono definiti per diversi endpoint API e ciascun endpoint chiama una classe controller con determinati parametri (uid, id_progetto, ecc.).È un buon modello per aumentare le eccezioni in un decoratore python?
@app.route('/sample/route', methods=['POST'])
@require_json_payload
@require_fields({
'pid',
'params'
})
def route_handler(arg1, arg2):
#input filtering
...
try:
proj_cntr.sample_method(
pid = pid,
... = ...
)
except ProjCntrException:
#handle error
#response generation
...
Il controller (proj_cntr) è responsabile per determinare, ad esempio, se la data del PID è valido, castrato dato utente è autorizzato a eseguire l'azione, e di altre convalida logica di business.
ho notato che sono c/incollando un sacco di codice come questo in diversi controller:
if not project_object:
sys_logger.info('...')
raise ProjCntrException('PID %d does not exist' % pid)
Mettendo questi controlli (convalide) in decoratori sembra la cosa migliore da fare. Ma non sono sicuro quale modello di gestione degli errori sia la migliore pratica nel caso in cui la validazione non passi.
1) Devo creare eccezioni personalizzate specifiche (InvalidProjException, PermissionsException, ecc.) Per ogni decoratore da sollevare?
Preoccupazioni: il blocco catch del metodo del chiamante apparirà gonfio. Inoltre, è bene fare l'ipotesi che il chiamante sappia quali eccezioni sollevano i decoratori del callee?
2) Il decoratore passa un argomento di errore aggiuntivo al metodo e il metodo decide quale eccezione generare. In questo modo il metodo del chiamante è consapevole del tipo di eccezione da prevedere e gestire.
Preoccupazioni: L'approccio sembra un po 'eccessivo e disordinato.
Ci scusiamo per la domanda prolissa. Ogni pensiero/idea è molto apprezzato.
Sicuramente, ho finito per mettere quante più informazioni possibile nelle docstring di entrambi i decoratori e i metodi decorati. –