Hi all!
I'm using 0.7.3 and I am facing a problem.
The problem is that I'm using the get_history function from
sqlalchemy.orm.attributes to get the history from a composite property
of an object. When the composite property is set, everything is ok,
but when it is not set, I get an error.
This is an example I have written to demonstrate the problem:
=============================
from sqlalchemy import Column, Integer
from sqlalchemy.orm import composite
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm.attributes import get_history
Base = declarative_base()
class Point(object):
def __init__(self, x, y):
self.x = x
self.y = y
def __composite_values__(self):
return self.x, self.y
def __repr__(self):
return "Point(x=%r, y=%r)" % (self.x, self.y)
def __eq__(self, other):
return isinstance(other, Point) and other.x == self.x and
other.y == self.y
def __ne__(self, other):
return not self.__eq__(other)
class Example(Base):
__tablename__ = 'example'
id = Column(Integer, primary_key=True)
x = Column(Integer)
y = Column(Integer)
point = composite(Point, x, y)
success = Example()
success.point = Point(1,2)
get_history(success, 'point')
fail = Example()
get_history(fail, 'point')
===============================
For the first example the property is set, and we can get the history.
But for the second object the property has not been set and when we
call get_history an error will occur.
This is the stacktrace:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
get_history(fail, 'point')
File "/**/python2.7/site-packages/sqlalchemy/orm/attributes.py",
line 1168, in get_history
return get_state_history(instance_state(obj), key, passive)
File "/**/python2.7/site-packages/sqlalchemy/orm/attributes.py",
line 1171, in get_state_history
return state.get_history(key, passive)
File "/**/python2.7/site-packages/sqlalchemy/orm/state.py", line
104, in get_history
return self.manager[key].impl.get_history(self, self.dict,
passive)
File "/**/python2.7/site-packages/sqlalchemy/orm/
descriptor_props.py", line 40, in get_history
return prop.get_history(state, dict_, passive)
File "/**/python2.7/site-packages/sqlalchemy/orm/
descriptor_props.py", line 258, in get_history
(),[self.composite_class(*added)], ()
TypeError: __init__() takes exactly 3 arguments (1 given)
It looks like an instance of a Point will be created without
parameters.
Is this a programming error?
Cheers!
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.