title: SQLAlchemy "event.listen" for all models
body: <p>I have fields created_by and updated_by in each models. These fields are automatically filled with sqlalchemy.event.listen (formerly MapperExtension). For each model, I write:
  </p>
  
  <pre><code>event.listen(Equipment, 'before_insert', get_created_by_id)
  event.listen(Equipment, 'before_update', get_updated_by_id)
  </code></pre>
  
  <p>When the model was a lot of code gets ugly. Is it possible to apply event.listen immediately to all models or several?</p>
  
  <p>UPD: I'm trying to do so:
  </p>
  
  <pre><code>import pylons
  from sqlalchemy import event, sql
  from sqlalchemy import Table, ForeignKey, Column
  from sqlalchemy.databases import postgresql
  from sqlalchemy.schema import UniqueConstraint, CheckConstraint
  from sqlalchemy.types import String, Unicode, UnicodeText, Integer, DateTime,\
                               Boolean, Float
  from sqlalchemy.orm import relation, backref, synonym, relationship
  from sqlalchemy import func
  from sqlalchemy import desc
  from sqlalchemy.orm.exc import NoResultFound
  
  from myapp.model.meta import Session as s
  from myapp.model.meta import metadata, DeclarativeBase
  
  from pylons import request
  
  def created_by(mapper, connection, target):
      identity = request.environ.get('repoze.who.identity')
      if identity:
          id = identity['user'].user_id
          target.created_by = id
  
  def updated_by(mapper, connection, target):
      identity = request.environ.get('repoze.who.identity')
      if identity:
          id = identity['user'].user_id
          target.updated_by = id
  
  from sqlalchemy.ext.declarative import declared_attr
  from sqlalchemy.ext.declarative import has_inherited_table
  
  class TestMixin(DeclarativeBase):
      __tablename__ = 'TestMixin'
  
      id =  Column(Integer, autoincrement=True, primary_key=True)
  
  event.listen(TestMixin, 'before_insert', created_by)
  event.listen(TestMixin, 'before_update', updated_by)
  
  class MyClass(TestMixin):
      __tablename__ = 'MyClass'
      __mapper_args__ = {'concrete':True}
  
      id =  Column(Integer, autoincrement=True, primary_key=True)
  
      created_by = Column(Integer, ForeignKey('user.user_id',
                          onupdate="cascade", ondelete="restrict"))
  
      updated_by = Column(Integer, ForeignKey('user.user_id',
                          onupdate="cascade", ondelete="restrict"))
  </code></pre>
  
  <p>When I add a new MyClass object I have created_by = None. If I create event.listen for MyClass all is fine. What's wrong?</p>