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.

Reply via email to