2018-04-05 10:35 GMT+02:00 Lorenzo Mainardi <lorma...@gmail.com>: > Buongiorno a tutti, > ho una webapp che usa Flask + SQLAlchemy. Mi devo mettere in regola con il > GDPR usando un prodotto esterno che cifra/decifra al volo alcuni campi del > DB. > Ad esempio: supponiamo che io abbia il numero di carta di credito > 1234-5678-8765-4321. > Quando lo voglio scrivere nel db passo il numero della carta di credito al > servizio (tramite una API REST) e lui mi ritorna il dato cifrato > 0000-1111-2222-3333 che poi vado a salvare nel db. > > Quando voglio leggere un dato dal DB, devo fare il contrario. > > Come posso integrare questa roba con SQLAlchemy? > Avevo pensato di usare un decoratore, ma poi mi sono un po' arenato. >
Puoi utilizzare un tipo personalizzato: http://docs.sqlalchemy.org/en/latest/core/custom_types.html#augmenting-existing-types Il problema รจ passare i parametri per l'API esterna che usi, ma li puoi salvare come variabili globali o salvarli nell'instanza di dialect che viene passato ai metodi del tipo personalizzato. Ad esempio: class SecureString(types.TypeDecorator): '''Encrypt Unicode values using some API. ''' impl = types.Unicode def process_bind_param(self, value, dialect): return api.encrypt(value, dialect.encrypt_api_params) def process_result_value(self, value, dialect): return api.decrypt(value, dialect.encrypt_api_params) def copy(self, **kw): return MyType(self.impl.length) engine = create_engine('postgresql://scott:tiger@localhost:5432/mydatabase') engine.dialect.encrypt_api_params = { 'a': 1, 'b': 2 } Manlio _______________________________________________ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python