Browse Source

Add Volume-specific Dataset model

Matthias Vogelgesang 7 years ago
parent
commit
712f968005
4 changed files with 59 additions and 1 deletions
  1. 31 0
      migrations/versions/ff16bb058061_.py
  2. 14 0
      nova/logic.py
  3. 13 0
      nova/models.py
  4. 1 1
      nova/views.py

+ 31 - 0
migrations/versions/ff16bb058061_.py

@@ -0,0 +1,31 @@
+"""Add Volume model
+
+Revision ID: ff16bb058061
+Revises: d34c125c98cc
+Create Date: 2016-09-30 16:35:42.954336
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = 'ff16bb058061'
+down_revision = 'd34c125c98cc'
+
+from alembic import op
+import sqlalchemy as sa
+
+
+def upgrade():
+    ### commands auto generated by Alembic - please adjust! ###
+    op.create_table('volumes',
+    sa.Column('id', sa.Integer(), nullable=False),
+    sa.Column('slices', sa.String(), nullable=True),
+    sa.ForeignKeyConstraint(['id'], ['datasets.id'], ),
+    sa.PrimaryKeyConstraint('id')
+    )
+    ### end Alembic commands ###
+
+
+def downgrade():
+    ### commands auto generated by Alembic - please adjust! ###
+    op.drop_table('volumes')
+    ### end Alembic commands ###

+ 14 - 0
nova/logic.py

@@ -25,6 +25,20 @@ def create_dataset(name, user, collection, description=None):
     return dataset
 
 
+def create_volume(name, user, collection, slices):
+    root = app.config['NOVA_ROOT_PATH']
+    path = os.path.join(root, user.name, collection.name, name)
+
+    dataset = models.Volume(name=name, path=path, collection=collection, slices=slices)
+    abspath = os.path.join(root, path)
+    os.makedirs(abspath)
+
+    access = models.Access(user=user, dataset=dataset, owner=True, writable=True, seen=True)
+    db.session.add_all([dataset, access])
+    db.session.commit()
+    return dataset
+
+
 def import_sample_scan(name, user, path, description=None):
     collection = models.Collection(user=user, name=name, description=description)
     dataset = models.SampleScan(name=name, path=path, collection=collection,

+ 13 - 0
nova/models.py

@@ -170,6 +170,19 @@ class SampleScan(Dataset):
     order = db.relationship('Order')
 
 
+class Volume(Dataset):
+
+    __tablename__ = 'volumes'
+
+    __mapper_args__ = {
+        'polymorphic_identity': 'volume'
+    }
+
+    id = db.Column(db.Integer, db.ForeignKey('datasets.id'), primary_key=True)
+
+    slices = db.Column(db.String)
+
+
 class Access(db.Model):
 
     __tablename__ = 'accesses'

+ 1 - 1
nova/views.py

@@ -393,7 +393,7 @@ def share(dataset_id, user_id=None):
 @login_required(admin=False)
 def process(dataset_id):
     parent = Dataset.query.filter(Dataset.id == dataset_id).first()
-    child = logic.create_dataset(request.form['name'], current_user, parent.collection)
+    child = logic.create_volume(request.form['name'], current_user, parent.collection, request.form['outname'])
     db.session.add(Process(source=parent, destination=child))
 
     tasks.reconstruct.delay(current_user.token, child.id, parent.id,