mirror of
https://github.com/sqlalchemy/sqlalchemy.git
synced 2026-05-14 04:37:15 -04:00
7d74fc7785
test objects - added copy_function, compare_function arguments to InstrumentedAttribute - added MutableType mixin, copy_value/compare_values methods to TypeEngine, PickleType - ColumnProperty and DeferredProperty propigate the TypeEngine copy/compare methods to the attribute instrumentation - cleanup of UnitOfWork, removed unused methods - UnitOfWork "dirty" list is calculated across the total collection of persistent objects when called, no longer has register_dirty. - attribute system can still report "modified" status fairly quickly, but does extra work for InstrumentedAttributes that have detected a "mutable" type where catching the __set__() event is not enough (i.e. PickleTypes) - attribute tracking modified to be more intelligent about detecting changes, particularly with mutable types. TypeEngine objects now take a greater role in defining how to compare two scalar instances, including the addition of a MutableType mixin which is implemented by PickleType. unit-of-work now tracks the "dirty" list as an expression of all persistent objects where the attribute manager detects changes. The basic issue thats fixed is detecting changes on PickleType objects, but also generalizes type handling and "modified" object checking to be more complete and extensible.
29 lines
902 B
Python
29 lines
902 B
Python
"""since the cPickle module as of py2.4 uses erroneous relative imports, define the various
|
|
picklable classes here so we can test PickleType stuff without issue."""
|
|
|
|
|
|
class Foo(object):
|
|
def __init__(self, moredata):
|
|
self.data = 'im data'
|
|
self.stuff = 'im stuff'
|
|
self.moredata = moredata
|
|
def __eq__(self, other):
|
|
return other.data == self.data and other.stuff == self.stuff and other.moredata==self.moredata
|
|
|
|
|
|
class Bar(object):
|
|
def __init__(self, x, y):
|
|
self.x = x
|
|
self.y = y
|
|
def __eq__(self, other):
|
|
return other.__class__ is self.__class__ and other.x==self.x and other.y==self.y
|
|
def __str__(self):
|
|
return "Bar(%d, %d)" % (self.x, self.y)
|
|
|
|
class BarWithoutCompare(object):
|
|
def __init__(self, x, y):
|
|
self.x = x
|
|
self.y = y
|
|
def __str__(self):
|
|
return "Bar(%d, %d)" % (self.x, self.y)
|
|
|