From d1a01e5d79faa67f03fc11539ccfa4e0ccda6fca Mon Sep 17 00:00:00 2001 From: Matt Prahl Date: Wed, 17 Aug 2016 10:27:16 -0400 Subject: [PATCH] Add owner and timestamp columns to the module_builds table --- migrations/versions/1a44272e8b4c_.py | 41 ++++++++++++++++++++++++++++ rida/models.py | 15 +++++++--- rida/views.py | 1 + 3 files changed, 53 insertions(+), 4 deletions(-) create mode 100644 migrations/versions/1a44272e8b4c_.py diff --git a/migrations/versions/1a44272e8b4c_.py b/migrations/versions/1a44272e8b4c_.py new file mode 100644 index 00000000..463d87ca --- /dev/null +++ b/migrations/versions/1a44272e8b4c_.py @@ -0,0 +1,41 @@ +"""Adds the owner, time_completed, time_modified, and time_submitted columns to the module_builds table + +Revision ID: 1a44272e8b4c +Revises: a7a553e5ca1d +Create Date: 2016-08-17 17:00:31.126429 + +""" + +# revision identifiers, used by Alembic. +revision = '1a44272e8b4c' +down_revision = 'a7a553e5ca1d' + +from alembic import op +import sqlalchemy as sa +from datetime import datetime + +epoch = datetime.utcfromtimestamp(0).strftime('%Y-%m-%d %H:%M:%S') + + +def upgrade(): + op.add_column('module_builds', sa.Column('owner', sa.String(), server_default='Unknown User', nullable=False)) + op.add_column('module_builds', sa.Column('time_completed', sa.DateTime(), nullable=True, server_default=epoch)) + op.add_column('module_builds', sa.Column('time_modified', sa.DateTime(), nullable=True, server_default=epoch)) + op.add_column('module_builds', sa.Column('time_submitted', sa.DateTime(), nullable=False, server_default=epoch)) + + # Remove migration-only defaults. Using batch_alter_table() recreates the table instead of using ALTER COLUMN + # on simplistic DB engines. Thanks SQLite! + with op.batch_alter_table('module_builds') as b: + b.alter_column('owner', server_default=None) + b.alter_column('time_completed', server_default=None) + b.alter_column('time_modified', server_default=None) + b.alter_column('time_submitted', server_default=None) + + +def downgrade(): + # Thanks again! + with op.batch_alter_table('module_builds') as b: + b.drop_column('time_submitted') + b.drop_column('time_modified') + b.drop_column('time_completed') + b.drop_column('owner') diff --git a/rida/models.py b/rida/models.py index c2b6b677..c296e205 100644 --- a/rida/models.py +++ b/rida/models.py @@ -25,12 +25,11 @@ """ SQLAlchemy Database models for the Flask app """ - -from rida import db, log +from datetime import datetime from sqlalchemy.orm import validates - import modulemd as _modulemd +from rida import db, log import rida.messaging @@ -83,6 +82,10 @@ class ModuleBuild(RidaBase): modulemd = db.Column(db.String, nullable=False) koji_tag = db.Column(db.String) # This gets set after 'wait' scmurl = db.Column(db.String) + owner = db.Column(db.String, nullable=False) + time_submitted = db.Column(db.DateTime, nullable=False) + time_modified = db.Column(db.DateTime) + time_completed = db.Column(db.DateTime) # A monotonically increasing integer that represents which batch or # iteration this module is currently on for successive rebuilds of its @@ -125,7 +128,8 @@ class ModuleBuild(RidaBase): return session.query(cls).filter(cls.id==event['msg']['id']).first() @classmethod - def create(cls, session, conf, name, version, release, modulemd, scmurl): + def create(cls, session, conf, name, version, release, modulemd, scmurl, username): + now = datetime.utcnow() module = cls( name=name, version=version, @@ -133,6 +137,9 @@ class ModuleBuild(RidaBase): state="init", modulemd=modulemd, scmurl=scmurl, + owner=username, + time_submitted=now, + time_modified=now ) session.add(module) session.commit() diff --git a/rida/views.py b/rida/views.py index cb18e69b..0ccb7d0f 100644 --- a/rida/views.py +++ b/rida/views.py @@ -114,6 +114,7 @@ def submit_build(): release=mmd.release, modulemd=yaml, scmurl=url, + username=username ) def failure(message, code):