From 2b3b5116ae96bcfb3a4674af03a6a2a8008b75da Mon Sep 17 00:00:00 2001 From: Benjamin Bertrand <benjamin.bertrand@esss.se> Date: Fri, 15 Dec 2017 14:24:29 +0100 Subject: [PATCH] Make sure to store timestamps in UTC See http://docs.sqlalchemy.org/en/latest/core/compiler.html#utc-timestamp-function --- app/models.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/app/models.py b/app/models.py index f9996be..2a4d964 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) -- GitLab