diff --git a/app/models.py b/app/models.py index f9996be3d0f2cd090aef5aecc6a3476a2c4eb96f..2a4d96414cd5c5187fca144a4d841be12622c79a 100644 --- a/app/models.py +++ b/app/models.py @@ -31,6 +31,16 @@ HOST_NAME_RE = re.compile('^[a-z0-9\-]{2,20}$') make_versioned(plugins=[FlaskUserPlugin()]) +# See http://docs.sqlalchemy.org/en/latest/core/compiler.html#utc-timestamp-function +class utcnow(sa.sql.expression.FunctionElement): + type = sa.types.DateTime() + + +@sa.ext.compiler.compiles(utcnow, 'postgresql') +def pg_utcnow(element, compiler, **kw): + return "TIMEZONE('utc', CURRENT_TIMESTAMP)" + + @login_manager.user_loader def load_user(user_id): """User loader callback for flask-login @@ -220,8 +230,8 @@ class Item(db.Model): } id = db.Column(db.Integer, primary_key=True) - _created = db.Column(db.DateTime, default=db.func.now()) - _updated = db.Column(db.DateTime, default=db.func.now(), onupdate=db.func.now()) + _created = db.Column(db.DateTime, default=utcnow()) + _updated = db.Column(db.DateTime, default=utcnow(), onupdate=utcnow()) ics_id = db.Column(db.Text, unique=True, index=True) serial_number = db.Column(db.Text, nullable=False) manufacturer_id = db.Column(db.Integer, db.ForeignKey('manufacturer.id')) @@ -301,7 +311,7 @@ class Item(db.Model): class ItemComment(db.Model): id = db.Column(db.Integer, primary_key=True) - timestamp = db.Column(db.DateTime, default=db.func.now(), index=True) + timestamp = db.Column(db.DateTime, default=utcnow(), index=True) text = db.Column(db.Text, nullable=False) user_id = db.Column(db.Integer, db.ForeignKey('user_account.id'), nullable=False) item_id = db.Column(db.Integer, db.ForeignKey('item.id'), nullable=False)