Skip to content

Instantly share code, notes, and snippets.

@mdellavo
Created March 8, 2012 14:13
Show Gist options
  • Save mdellavo/2001161 to your computer and use it in GitHub Desktop.
Save mdellavo/2001161 to your computer and use it in GitHub Desktop.
A few SQLAlchemy mixins for common behaviors
class UTCDateTime(TypeDecorator):
impl = DateTime
def convert_bind_param(self, value, engine):
return value
def convert_result_value(self, value, engine):
return UTC.localize(value)
class StampedMixin(object):
created_on = Column(UTCDateTime, default=datetime.utcnow, nullable=False)
modified_on = Column(UTCDateTime, default=datetime.utcnow,
onupdate=datetime.now, nullable=False)
class TrackedMixin(object):
@declared_attr
def created_by_user_id(cls):
return Column(Integer, ForeignKey('users.user_id'), nullable=False)
@declared_attr
def modified_by_user_id(cls):
return Column(Integer, ForeignKey('users.user_id'), nullable=False)
@declared_attr
def created_by(cls):
return relation(
'User',
primaryjoin='%s.create_user_id == User.user_id' % cls.__name__
)
@declared_attr
def modified_by(cls):
return relation(
'User',
primaryjoin='%s.modify_user_id == User.user_id' % cls.__name__
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment