With a bit of duck typing I came out with an easier solution (to my needs).
The only risky thing I had to use "private" _props dictionary. from sqlalchemy.orm import object_mapper for name, prop in object_mapper(item_to_be_deleted)._props.iteritems(): if 'delete' in getattr(prop, 'cascade', ()): print name Thanks again you for your support On Feb 3, 6:04 pm, Michael Bayer <mike...@zzzcomputing.com> wrote: > On Feb 3, 2011, at 11:58 AM, neurino wrote: > > > > > > > > > > > That is great! > > > Just for eventual followers I fix imports: > > > from sqlalchemy.orm import object_mapper > > from sqlalchemy.orm.attributes import instance_state > > > m = object_mapper(item_to_be_deleted) > > for rec in m.cascade_iterator("delete", > > instance_state(item_to_be_deleted)): > > obj = rec[0] > > print "item will be deleted !", obj > > > Anyway there's some way to stop recursiveness after a given level (or > > just 1)? > > > That's because for me deleting one ctrl_unit means deleting hundreds > > of `Acquisition`s with thousands of `Data` each that means a **lot** > > of queries and I could assume the user is smart enough to know that if > > he deletes an Acquisition he deletes its data too... > > > I'm looking at cascade_iterator def source, I could hack that end > > enclose directly in my code, the halt_on parameter is unused, as far > > as I understand. > > > Thanks for your support > > halt_on works, you use that, its a callable. > > > > > > > > > neurino > > > On Feb 3, 5:19 pm, Michael Bayer <mike...@zzzcomputing.com> wrote: > >> you could use the mapper's "cascade" function > > >> from sqlalchemy.orm import object_mapper, instance_state > >> m = object_mapper(item_to_be_deleted) > >> for rec in m.cascade_iterator("delete", > >> instance_state(item_to_be_deleted)): > >> obj = rec[0] > >> print "item will be deleted !", obj > > >> On Feb 3, 2011, at 6:15 AM, neurino wrote: > > >>> Can I show the user a warning like: > > >>> "if you delete this item also [list of other items] will be > >>> removed" > > >>> whichever is the item? > > >>> I was using something like this: > > >>> import inspect > >>> def get_items(item_to_be_deleted): > >>> """get_items(item_to_be_deleted) -> [(child_item_name, > >>> number_of_child_items)]""" > >>> return [(name, len(inst)) for (name, inst) in > >>> inspect.getmembers(item_to_be_deleted) > >>> if isinstance(inst, orm.collections.InstrumentedList)] > > >>> and it worked until all relationships had cascade delete but now I > >>> have one without it and it shows in the list too while it shouldn't... > > >>> Any tips? > > >>> Thank you for your support > >>> neurino > > >>> -- > >>> You received this message because you are subscribed to the Google Groups > >>> "sqlalchemy" group. > >>> To post to this group, send email to sqlalchemy@googlegroups.com. > >>> To unsubscribe from this group, send email to > >>> sqlalchemy+unsubscr...@googlegroups.com. > >>> For more options, visit this group > >>> athttp://groups.google.com/group/sqlalchemy?hl=en. > > > -- > > You received this message because you are subscribed to the Google Groups > > "sqlalchemy" group. > > To post to this group, send email to sqlalchemy@googlegroups.com. > > To unsubscribe from this group, send email to > > sqlalchemy+unsubscr...@googlegroups.com. > > For more options, visit this group > > athttp://groups.google.com/group/sqlalchemy?hl=en. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.