# Source code for sqlalchemy_utils.models

    from datetime import datetime

    import sqlalchemy as sa

    class Timestamp(object):
        """Adds `created` and `updated` columns to a derived declarative model.

        The `created` column is handled through a default and the `updated`
        column is handled through a `before_update` event that propagates
        for all derived declarative models.

        ::

            import sqlalchemy as sa
            from sqlalchemy_utils import Timestamp

            class SomeModel(Base, Timestamp):
                __tablename__ = 'somemodel'
                id = sa.Column(sa.Integer, primary_key=True)
        """

        created = sa.Column(sa.DateTime, default=datetime.utcnow, nullable=False)
        updated = sa.Column(sa.DateTime, default=datetime.utcnow, nullable=False)

    @sa.event.listens_for(Timestamp, 'before_update', propagate=True)
    def timestamp_before_update(mapper, connection, target):
        # When a model with a timestamp is updated; force update the updated
        # timestamp.
        target.updated = datetime.utcnow()