From 90efc25228702a9d08fd09165b1dd28360eae46c Mon Sep 17 00:00:00 2001 From: Ryan Leckey Date: Thu, 30 Oct 2014 13:47:49 -0700 Subject: [PATCH] Try and use 'process_result_value' and 'process_bind_param' if possible --- sqlalchemy_utils/types/encrypted.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/sqlalchemy_utils/types/encrypted.py b/sqlalchemy_utils/types/encrypted.py index 77e4634..e3f000a 100644 --- a/sqlalchemy_utils/types/encrypted.py +++ b/sqlalchemy_utils/types/encrypted.py @@ -216,6 +216,15 @@ class EncryptedType(TypeDecorator, ScalarCoercible): """Encrypt a value on the way in.""" if value is not None: self._update_key() + + try: + value = self.underlying_type.process_bind_param( + value, dialect) + + except AttributeError: + # Doesn't have 'process_bind_param' + pass + return self.engine.encrypt(value) def process_result_value(self, value, dialect): @@ -223,7 +232,14 @@ class EncryptedType(TypeDecorator, ScalarCoercible): if value is not None: self._update_key() decrypted_value = self.engine.decrypt(value) - return self.underlying_type.python_type(decrypted_value) + + try: + return self.underlying_type.process_result_value( + decrypted_value, dialect) + + except AttributeError: + # Doesn't have 'process_result_value' + return self.underlying_type.python_type(decrypted_value) def _coerce(self, value): if isinstance(self.underlying_type, ScalarCoercible):