Browse Source

Add Reconstruction model

Matthias Vogelgesang 7 years ago
parent
commit
f4e319f61f
4 changed files with 64 additions and 4 deletions
  1. 34 0
      migrations/versions/7dbb6f237041_.py
  2. 1 0
      nova/__init__.py
  3. 21 0
      nova/models.py
  4. 8 4
      nova/views.py

+ 34 - 0
migrations/versions/7dbb6f237041_.py

@@ -0,0 +1,34 @@
+"""Add Reconstruction model
+
+Revision ID: 7dbb6f237041
+Revises: 1d40d3fc3d0c
+Create Date: 2016-10-07 11:56:14.711593
+
+"""
+
+# revision identifiers, used by Alembic.
+revision = '7dbb6f237041'
+down_revision = '1d40d3fc3d0c'
+
+from alembic import op
+import sqlalchemy as sa
+
+
+def upgrade():
+    ### commands auto generated by Alembic - please adjust! ###
+    op.create_table('reconstructions',
+    sa.Column('id', sa.Integer(), nullable=False),
+    sa.Column('flats', sa.String(), nullable=True),
+    sa.Column('darks', sa.String(), nullable=True),
+    sa.Column('projections', sa.String(), nullable=True),
+    sa.Column('output', sa.String(), nullable=True),
+    sa.ForeignKeyConstraint(['id'], ['processes.id'], ),
+    sa.PrimaryKeyConstraint('id')
+    )
+    ### end Alembic commands ###
+
+
+def downgrade():
+    ### commands auto generated by Alembic - please adjust! ###
+    op.drop_table('reconstructions')
+    ### end Alembic commands ###

+ 1 - 0
nova/__init__.py

@@ -53,6 +53,7 @@ admin.add_view(AdminModelView(nova.models.Dataset, db.session))
 admin.add_view(AdminModelView(nova.models.Access, db.session))
 admin.add_view(AdminModelView(nova.models.Notification, db.session))
 admin.add_view(AdminModelView(nova.models.Process, db.session))
+admin.add_view(AdminModelView(nova.models.Reconstruction, db.session))
 
 
 from nova.resources import Datasets, Dataset

+ 21 - 0
nova/models.py

@@ -247,9 +247,30 @@ class Process(db.Model):
     source = db.relationship('Dataset', foreign_keys=[source_id])
     destination = db.relationship('Dataset', foreign_keys=[destination_id])
 
+    __mapper_args__ = {
+        'polymorphic_identity': 'process',
+        'polymorphic_on': type
+    }
+
     def __repr__(self):
         return '<Process(src={}, dst={})>'.format(self.source.name, self.destination.name)
 
 
+class Reconstruction(Process):
+
+    __tablename__ = 'reconstructions'
+
+    __mapper_args__ = {
+        'polymorphic_identity': 'reconstruction'
+    }
+
+    id = db.Column(db.Integer, db.ForeignKey('processes.id'), primary_key=True)
+
+    flats = db.Column(db.String())
+    darks = db.Column(db.String())
+    projections = db.Column(db.String())
+    output = db.Column(db.String())
+
+
 flask_whooshalchemyplus.whoosh_index(app, Dataset)
 flask_whooshalchemyplus.whoosh_index(app, User)

+ 8 - 4
nova/views.py

@@ -400,11 +400,15 @@ def process(dataset_id):
     parent = Dataset.query.filter(Dataset.id == dataset_id).first()
     child = logic.create_dataset(models.Volume, request.form['name'], current_user, parent.collection, slices=request.form['outname'])
 
-    result = tasks.reconstruct.delay(current_user.token, child.id, parent.id,
-        request.form['flats'], request.form['darks'], request.form['projections'],
-        request.form['outname'])
+    flats = request.form['flats']
+    darks = request.form['darks']
+    projections = request.form['projections']
+    output = request.form['outname']
 
-    db.session.add(Process(source=parent, destination=child, task_uuid=result.id))
+    result = tasks.reconstruct.delay(current_user.token, child.id, parent.id, flats, darks, projections, output)
+
+    db.session.add(models.Reconstruction(source=parent, destination=child, task_uuid=result.id,
+                                         flats=flats, darks=darks, projections=projections, output=output))
     db.session.commit()
 
     return redirect(url_for('index'))