From 525d53a9064273578eecc1e130882c8d19f58356 Mon Sep 17 00:00:00 2001
From: Patrick Jentsch <p.jentsch@uni-bielefeld.de>
Date: Tue, 6 Aug 2019 11:47:04 +0200
Subject: [PATCH] Redesign db models.

---
 app/models.py                                 | 47 ++++++++++++++-----
 ...t.py => 717796966c8c_initial_migration.py} | 27 ++++++++---
 2 files changed, 54 insertions(+), 20 deletions(-)
 rename migrations/versions/{1d405e6a9d7b_initial_commit.py => 717796966c8c_initial_migration.py} (69%)

diff --git a/app/models.py b/app/models.py
index e053387a..41a7ca5a 100644
--- a/app/models.py
+++ b/app/models.py
@@ -25,10 +25,12 @@ class Role(db.Model):
     A Role can be associated with many User rows.
     """
     __tablename__ = 'roles'
+    # Primary key
     id = db.Column(db.Integer, primary_key=True)
-    name = db.Column(db.String(64), unique=True)
     default = db.Column(db.Boolean, default=False, index=True)
+    name = db.Column(db.String(64), unique=True)
     permissions = db.Column(db.Integer)
+    # Relationships
     users = db.relationship('User', backref='role', lazy='dynamic')
 
     def __init__(self, **kwargs):
@@ -101,12 +103,15 @@ class User(UserMixin, db.Model):
     Model for Users that are registered to Opaque.
     """
     __tablename__ = 'users'
+    # Primary key
     id = db.Column(db.Integer, primary_key=True)
+    confirmed = db.Column(db.Boolean, default=False)
     email = db.Column(db.String(64), unique=True, index=True)
-    username = db.Column(db.String(64), unique=True, index=True)
     password_hash = db.Column(db.String(128))
     role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))
-    confirmed = db.Column(db.Boolean, default=False)
+    username = db.Column(db.String(64), unique=True, index=True)
+    # Relationships
+    jobs = db.relationship('Job', backref='job', lazy='dynamic')
 
     def __repr__(self):
         """
@@ -204,21 +209,33 @@ class AnonymousUser(AnonymousUserMixin):
         return False
 
 
-class Job():
+class Job(db.Model):
     """
     Class to define Jobs.
     """
     __tablename__ = 'jobs'
+    # Primary key
     id = db.Column(db.Integer, primary_key=True)
-    title = db.Column(db.String(32))
     description = db.Column(db.String(64))
-    service = db.Column(db.String(64), index=True)
-    user_id = db.Column(db.Integer, db.ForeignKey('users.id'), index=True)
-    requested_cpus = db.Column(db.Integer, default=None)
-    requested_memory = db.Column(db.Integer, default=None)
-    service_args = db.Column(db.String(255))  # JSON string representation {'lang': new_ocr_job_form.language.data, 'version': new_ocr_job_form.version. }
-    status = db.Column(db.String(64))
-    cmd_args = db.Column(db.String(255))  # For extra cmd arguments
+    '''
+    ' Requested ressources.
+    ' Example: {"n_cores": 2,
+    '           "mem_mb": 4096
+    '           }
+    '''
+    ressources = db.Column(db.String(255))
+    service = db.Column(db.String(64))
+    '''
+    ' Service specific arguments in JSON format.
+    ' Example: {"args": ["--keep-intermediates", "skip-binarization"],
+    '           "lang": "eng",
+    '           "version": "latest"
+    '           }
+    '''
+    service_args = db.Column(db.String(255))
+    status = db.Column(db.String(8))
+    title = db.Column(db.String(32))
+    user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
 
     def __init__(self, **kwargs):
         super(Job, self).__init__(**kwargs)
@@ -230,7 +247,11 @@ class Job():
         return '<Job %r>' % self.title
 
 
-login_manager.anonymous_user = AnonymousUser  # Flask-Login is told to use the application’s custom anonymous user by setting its class in the login_manager.anonymous_user attribute.
+'''
+' Flask-Login is told to use the application’s custom anonymous user by setting
+' its class in the login_manager.anonymous_user attribute.
+'''
+login_manager.anonymous_user = AnonymousUser
 
 
 @login_manager.user_loader
diff --git a/migrations/versions/1d405e6a9d7b_initial_commit.py b/migrations/versions/717796966c8c_initial_migration.py
similarity index 69%
rename from migrations/versions/1d405e6a9d7b_initial_commit.py
rename to migrations/versions/717796966c8c_initial_migration.py
index 515c3de0..aa35e674 100644
--- a/migrations/versions/1d405e6a9d7b_initial_commit.py
+++ b/migrations/versions/717796966c8c_initial_migration.py
@@ -1,8 +1,8 @@
-"""Initial commit
+"""initial migration
 
-Revision ID: 1d405e6a9d7b
+Revision ID: 717796966c8c
 Revises: 
-Create Date: 2019-08-05 16:36:07.187004
+Create Date: 2019-08-06 11:39:51.067875
 
 """
 from alembic import op
@@ -10,7 +10,7 @@ import sqlalchemy as sa
 
 
 # revision identifiers, used by Alembic.
-revision = '1d405e6a9d7b'
+revision = '717796966c8c'
 down_revision = None
 branch_labels = None
 depends_on = None
@@ -20,8 +20,8 @@ def upgrade():
     # ### commands auto generated by Alembic - please adjust! ###
     op.create_table('roles',
     sa.Column('id', sa.Integer(), nullable=False),
-    sa.Column('name', sa.String(length=64), nullable=True),
     sa.Column('default', sa.Boolean(), nullable=True),
+    sa.Column('name', sa.String(length=64), nullable=True),
     sa.Column('permissions', sa.Integer(), nullable=True),
     sa.PrimaryKeyConstraint('id'),
     sa.UniqueConstraint('name')
@@ -29,21 +29,34 @@ def upgrade():
     op.create_index(op.f('ix_roles_default'), 'roles', ['default'], unique=False)
     op.create_table('users',
     sa.Column('id', sa.Integer(), nullable=False),
+    sa.Column('confirmed', sa.Boolean(), nullable=True),
     sa.Column('email', sa.String(length=64), nullable=True),
-    sa.Column('username', sa.String(length=64), nullable=True),
     sa.Column('password_hash', sa.String(length=128), nullable=True),
     sa.Column('role_id', sa.Integer(), nullable=True),
-    sa.Column('confirmed', sa.Boolean(), nullable=True),
+    sa.Column('username', sa.String(length=64), nullable=True),
     sa.ForeignKeyConstraint(['role_id'], ['roles.id'], ),
     sa.PrimaryKeyConstraint('id')
     )
     op.create_index(op.f('ix_users_email'), 'users', ['email'], unique=True)
     op.create_index(op.f('ix_users_username'), 'users', ['username'], unique=True)
+    op.create_table('jobs',
+    sa.Column('id', sa.Integer(), nullable=False),
+    sa.Column('description', sa.String(length=64), nullable=True),
+    sa.Column('ressources', sa.String(length=255), nullable=True),
+    sa.Column('service', sa.String(length=64), nullable=True),
+    sa.Column('service_args', sa.String(length=255), nullable=True),
+    sa.Column('status', sa.String(length=8), nullable=True),
+    sa.Column('title', sa.String(length=32), nullable=True),
+    sa.Column('user_id', sa.Integer(), nullable=True),
+    sa.ForeignKeyConstraint(['user_id'], ['users.id'], ),
+    sa.PrimaryKeyConstraint('id')
+    )
     # ### end Alembic commands ###
 
 
 def downgrade():
     # ### commands auto generated by Alembic - please adjust! ###
+    op.drop_table('jobs')
     op.drop_index(op.f('ix_users_username'), table_name='users')
     op.drop_index(op.f('ix_users_email'), table_name='users')
     op.drop_table('users')
-- 
GitLab