The decorators fall into two groups: annotations and interception recipes.
- The annotating decorators (appender, remover, iterator,
- internally_instrumented, link) indicate the method's purpose and take no
+ The annotating decorators (appender, remover, iterator, linker, converter,
+ internally_instrumented) indicate the method's purpose and take no
arguments. They are not written with parens::
@collection.appender
return fn
@staticmethod
- def link(fn):
+ def linker(fn):
"""Tag the method as a the "linked to attribute" event handler.
This optional event handler will be called when the collection class
that has been linked, or None if unlinking.
"""
- setattr(fn, '_sa_instrument_role', 'link')
+ setattr(fn, '_sa_instrument_role', 'linker')
return fn
@staticmethod
def link_to_self(self, data):
"""Link a collection to this adapter, and fire a link event."""
setattr(data, '_sa_adapter', self)
- if hasattr(data, '_sa_on_link'):
- getattr(data, '_sa_on_link')(self)
+ if hasattr(data, '_sa_linker'):
+ getattr(data, '_sa_linker')(self)
def unlink(self, data):
"""Unlink a collection from any adapter, and fire a link event."""
setattr(data, '_sa_adapter', None)
- if hasattr(data, '_sa_on_link'):
- getattr(data, '_sa_on_link')(None)
+ if hasattr(data, '_sa_linker'):
+ getattr(data, '_sa_linker')(None)
def adapt_like_to_iterable(self, obj):
"""Converts collection-compatible objects to an iterable of values.
if hasattr(method, '_sa_instrument_role'):
role = method._sa_instrument_role
assert role in ('appender', 'remover', 'iterator',
- 'link', 'converter')
+ 'linker', 'converter')
roles[role] = name
# transfer instrumentation requests from decorated function