Browse Source

List datasets derived from another dataset

Matthias Vogelgesang 7 years ago
parent
commit
848a038795
3 changed files with 41 additions and 13 deletions
  1. 7 12
      nova/__init__.py
  2. 28 0
      nova/templates/dataset/detail.html
  3. 6 1
      nova/views.py

+ 7 - 12
nova/__init__.py

@@ -45,24 +45,19 @@ migrate = Migrate(app, db)
 celery = Celery(app.import_name, broker=app.config['CELERY_BROKER_URL'])
 
 
-from nova.models import (User, Collection, Dataset, Access, Notification,
-        Taxon, Order, Family, Genus, SampleScan)
+import nova.models
 
 class AdminModelView(ModelView):
     def is_accessible(self):
         return current_user.is_authenticated and current_user.is_admin
 
 admin = Admin(app)
-admin.add_view(AdminModelView(User, db.session))
-admin.add_view(AdminModelView(Collection, db.session))
-admin.add_view(AdminModelView(Dataset, db.session))
-admin.add_view(AdminModelView(Access, db.session))
-admin.add_view(AdminModelView(Notification, db.session))
-admin.add_view(AdminModelView(Taxon, db.session))
-admin.add_view(AdminModelView(Order, db.session))
-admin.add_view(AdminModelView(Family, db.session))
-admin.add_view(AdminModelView(Genus, db.session))
-admin.add_view(AdminModelView(SampleScan, db.session))
+admin.add_view(AdminModelView(nova.models.User, db.session))
+admin.add_view(AdminModelView(nova.models.Collection, db.session))
+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))
 
 
 from nova.resources import Datasets, Dataset

+ 28 - 0
nova/templates/dataset/detail.html

@@ -29,6 +29,34 @@
     {% endif %}
   </div>
 </div>
+{% if children %}
+<div class="row">
+  <div class="col-lg-12">
+    <h3>Derived datasets</h3>
+  </div>
+</div>
+{% for dataset in children %}
+<div class="row dataset-pad">
+  <div class="col-lg-1">
+    {% if dataset.has_thumbnail %}
+    <img class="img-responsive" width="64" height="64" src="{{ url_for("show_dataset", name=collection.user.name, collection_name=collection.name, dataset_name=dataset.name, path='.thumb.jpg') }}"/>
+    {% else %}
+    <img class="img-responsive" src="https://placeholdit.imgix.net/~text?txtsize=33&txt=%C3%97&w=64&h=64"/>
+    {% endif %}
+  </div>
+  <div class="col-lg-11">
+    <h3 class="dataset-link">
+      <a href="{{ url_for("show_dataset", name=collection.user.name, collection_name=collection.name, dataset_name=dataset.name) }}">{{ dataset.name }}</a>
+    </h3>
+    <p>
+    {% if dataset.description %}
+      {{ dataset.description }}
+    {% endif %}
+    </p>
+  </div>
+</div>
+{% endfor %}
+{% endif %}
 {% if dataset.type == "samplescan" %}
 <div class="row">
   <div class="col-lg-12">

+ 6 - 1
nova/views.py

@@ -405,6 +405,7 @@ def process(dataset_id):
         request.form['outname'])
 
     db.session.add(Process(source=parent, destination=child, task_uuid=result.id))
+    db.session.commit()
 
     return redirect(url_for('index'))
 
@@ -444,6 +445,9 @@ def show_dataset(name, collection_name, dataset_name, path=''):
     # FIXME: check access rights
     # FIXME: scream if no dataset found
 
+    children = Dataset.query.join(Process.destination).\
+        filter(Process.source_id == dataset.id).all()
+
     parts = path.split('/')
     subpaths = []
 
@@ -459,7 +463,8 @@ def show_dataset(name, collection_name, dataset_name, path=''):
             else:
                 subpaths.append((part, part))
 
-    params = dict(collection=collection, dataset=dataset, path=path, list_files=list_files,
+    params = dict(collection=collection, dataset=dataset, children=children,
+                  path=path, list_files=list_files,
                   subpaths=subpaths, files=files, dirs=dirs, origin=[])
 
     return render_template('dataset/detail.html', **params)