hi
is there an official way to undo creation and setup of a complex
object? esp. its relations...
lets say there is A with references and collections and many2manys.
def setup():
my_b = query(B).first()
my_X = query(X).first()
a = A() #in case of creating_new
a.name = 'abc'
a.b_ref = my_b
a.c_ref = C(name=cc)
a.d_ref = D(name=dd)
a.assoc_X.append( my_X)
return a
and now the above has to be cancelled.
we have invented this way to do it, but it is not at all obvious (yes
there is only one session staying):
def cancel( obj, creating_new =True):
updating = not creating_new
if updating:
session.expire( obj)
else:
for k in references_created_new( obj): #should walk c_ref, d_ref
session.expunge( getattr(obj, k) )
session.expunge( obj)
the test is that after
a=setup()
cancel( a, True)
session.flush() should do nothing.
i could not make it with anything less than this to work. maybe
there's even more to it...
it's not clear in references_created_new() how to distinguish the refs
to existing persistent objects from just-created not-yet-persistent
ones - maybe checking in session.new or what..
ciao
svilen
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---