'Mark the method as removing an entity in the collection.
Adds "remove from collection" handling to the method.  The decorator
argument indicates which method argument holds the SQLAlchemy-relevant
value to be removed. Arguments can be specified positionally (i.e.
integer) or by name::
@collection.removes(1)
def zap(self, item): ...
For methods where the value to remove is not known at call-time, use
collection.removes_return.'

@staticmethod
def removes(arg):

    def decorator(fn):
        fn._sa_instrument_before = ('fire_remove_event', arg)
        return fn
    return decorator
