|
@@ -0,0 +1,41 @@
|
|
|
+"""
|
|
|
+dfd042c7
|
|
|
+SQLAlchemy 0.5.8 version of a805d4bd, see the docstring of that module for an explanation of this workaround.
|
|
|
+"""
|
|
|
+from sqlalchemy.types import PickleType as _PickleType
|
|
|
+from sqlalchemy import util
|
|
|
+
|
|
|
+
|
|
|
+class PickleType(_PickleType):
|
|
|
+
|
|
|
+ def process_bind_param(self, value, dialect):
|
|
|
+ dumps = self.pickler.dumps
|
|
|
+ protocol = self.protocol
|
|
|
+ if value is None:
|
|
|
+ return None
|
|
|
+ return dumps(value, protocol)
|
|
|
+
|
|
|
+ def process_result_value(self, value, dialect):
|
|
|
+ loads = self.pickler.loads
|
|
|
+ if value is None:
|
|
|
+ return None
|
|
|
+ return loads(str(value))
|
|
|
+
|
|
|
+ def copy_value(self, value):
|
|
|
+ if self.mutable:
|
|
|
+ return self.pickler.loads(self.pickler.dumps(value, self.protocol))
|
|
|
+ else:
|
|
|
+ return value
|
|
|
+
|
|
|
+ def compare_values(self, x, y):
|
|
|
+ if self.comparator:
|
|
|
+ return self.comparator(x, y)
|
|
|
+ elif self.mutable and not hasattr(x, '__eq__') and x is not None:
|
|
|
+ util.warn_deprecated("Objects stored with PickleType when mutable=True must implement __eq__() for reliable comparison.")
|
|
|
+ return self.pickler.dumps(x, self.protocol) == self.pickler.dumps(y, self.protocol)
|
|
|
+ else:
|
|
|
+ return x == y
|
|
|
+
|
|
|
+ def is_mutable(self):
|
|
|
+ return self.mutable
|
|
|
+
|