12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- """
- dfd042c7
- SQLAlchemy 0.5.8 version of a805d4bd, see the docstring of that module
- for an explanation of this workaround.
- """
- from __future__ import absolute_import
- 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.")
- a = self.pickler.dumps(x, self.protocol)
- b = self.pickler.dumps(y, self.protocol)
- return a == b
- else:
- return x == y
- def is_mutable(self):
- return self.mutable
|