diff --git a/lib/galaxy/model/mapping.py b/lib/galaxy/model/mapping.py index 811f6583f75..3a2cea873a2 100644 --- a/lib/galaxy/model/mapping.py +++ b/lib/galaxy/model/mapping.py @@ -14,6 +14,7 @@ try: pkg_resources.require( "psycopg2" ) except: pass import sys +import datetime from sqlalchemy.ext.sessioncontext import SessionContext from sqlalchemy.ext.assignmapper import assign_mapper @@ -26,19 +27,27 @@ from galaxy.util.bunch import Bunch metadata = DynamicMetaData( threadlocal=False ) context = SessionContext( create_session ) -now = func.current_timestamp( type=DateTime ) +# NOTE REGARDING TIMESTAMPS: +# It is currently difficult to have the timestamps calculated by the +# database in a portable way, so we're doing it in the client. This +# also saves us from needing to postfetch on postgres. HOWEVER: it +# relies on the client's clock being set correctly, so if clustering +# web servers, use a time server to ensure synchronization + +# Return the current time in UTC without any timezone information +now = datetime.datetime.utcnow User.table = Table( "galaxy_user", metadata, Column( "id", Integer, primary_key=True), - Column( "create_time", DateTime, PassiveDefault( now ) ), - Column( "update_time", DateTime, PassiveDefault( now ), onupdate=now ), + Column( "create_time", DateTime, default=now ), + Column( "update_time", DateTime, default=now, onupdate=now ), Column( "email", TrimmedString( 255 ), nullable=False ), Column( "password", TrimmedString( 40 ), nullable=False ) ) History.table = Table( "history", metadata, Column( "id", Integer, primary_key=True), - Column( "create_time", DateTime, PassiveDefault( now ) ), - Column( "update_time", DateTime, PassiveDefault( now ), onupdate=now ), + Column( "create_time", DateTime, default=now ), + Column( "update_time", DateTime, default=now, onupdate=now ), Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ) ), Column( "name", TrimmedString( 255 ) ), Column( "hid_counter", Integer, default=1 ), @@ -54,8 +63,8 @@ History.table = Table( "history", metadata, Dataset.table = Table( "dataset", metadata, Column( "id", Integer, primary_key=True ), - Column( "create_time", DateTime, PassiveDefault( now ) ), - Column( "update_time", DateTime, PassiveDefault( now ), onupdate=now ), + Column( "create_time", DateTime, default=now ), + Column( "update_time", DateTime, default=now, onupdate=now ), Column( "hid", Integer ), Column( "history_id", Integer, ForeignKey( "history.id" ) ), Column( "name", TrimmedString( 255 ) ), @@ -76,8 +85,8 @@ Dataset.table = Table( "dataset", metadata, DatasetFileName.table = Table( "dataset_filename", metadata, Column( "id", Integer, primary_key=True ), - Column( "create_time", DateTime, PassiveDefault( now ) ), - Column( "update_time", DateTime, PassiveDefault( now ), onupdate=now ), + Column( "create_time", DateTime, default=now ), + Column( "update_time", DateTime, default=now, onupdate=now ), Column( "filename", TEXT ), Column( "extra_files_path", TEXT, nullable=True, default=None ), Column( "readonly", Boolean, default=False ) ) @@ -97,8 +106,8 @@ DatasetChildAssociation.table = Table( "dataset_child_association", metadata, Job.table = Table( "job", metadata, Column( "id", Integer, primary_key=True ), - Column( "create_time", DateTime, PassiveDefault( now ) ), - Column( "update_time", DateTime, PassiveDefault( now ), onupdate=now ), + Column( "create_time", DateTime, default=now ), + Column( "update_time", DateTime, default=now, onupdate=now ), Column( "history_id", Integer, ForeignKey( "history.id" ) ), Column( "tool_id", String( 255 ) ), Column( "state", String( 64 ) ), @@ -130,8 +139,8 @@ JobToOutputDatasetAssociation.table = Table( "job_to_output_dataset", metadata, Event.table = Table( "event", metadata, Column( "id", Integer, primary_key=True ), - Column( "create_time", DateTime, PassiveDefault( now ) ), - Column( "update_time", DateTime, PassiveDefault( now ), onupdate=now ), + Column( "create_time", DateTime, default=now ), + Column( "update_time", DateTime, default=now, onupdate=now ), Column( "history_id", Integer, ForeignKey( "history.id" ), nullable=True ), Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), nullable=True ), Column( "message", TrimmedString( 1024 ) ), @@ -140,8 +149,8 @@ Event.table = Table( "event", metadata, GalaxySession.table = Table( "galaxy_session", metadata, Column( "id", Integer, primary_key=True ), - Column( "create_time", DateTime, PassiveDefault( now ) ), - Column( "update_time", DateTime, PassiveDefault( now ), onupdate=now ), + Column( "create_time", DateTime, default=now ), + Column( "update_time", DateTime, default=now, onupdate=now ), Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), nullable=True ), Column( "remote_host", String( 255 ) ), Column( "remote_addr", String( 255 ) ), @@ -149,14 +158,14 @@ GalaxySession.table = Table( "galaxy_session", metadata, GalaxySessionToHistoryAssociation.table = Table( "galaxy_session_to_history", metadata, Column( "id", Integer, primary_key=True ), - Column( "create_time", DateTime, PassiveDefault( now ) ), + Column( "create_time", DateTime, default=now ), Column( "session_id", Integer, ForeignKey( "galaxy_session.id" ) ), Column( "history_id", Integer, ForeignKey( "history.id" ) ) ) StoredWorkflow.table = Table( "stored_workflow", metadata, Column( "id", Integer, primary_key=True ), - Column( "create_time", DateTime, PassiveDefault( now ) ), - Column( "update_time", DateTime, PassiveDefault( now ), onupdate=now ), + Column( "create_time", DateTime, default=now ), + Column( "update_time", DateTime, default=now, onupdate=now ), Column( "name", String ), Column( "user_id", Integer, ForeignKey( "galaxy_user.id" ), nullable=False ), Column( "encoded_value", String )