6
0
Eric Tröbs 4 ani în urmă
părinte
comite
7c9eba234f

+ 32 - 0
pycs/frontend/WebServer.py

@@ -1,4 +1,5 @@
 from glob import glob
+from json import dumps
 from os import path, getcwd
 from os.path import exists
 from time import time
@@ -275,6 +276,37 @@ class WebServer:
             # return default success response
             return response()
 
+        @self.__flask.route('/projects/<project_identifier>/predictions', methods=['GET'])
+        def download_predictions(project_identifier):
+            # abort if project id is not valid
+            if project_identifier not in app_status['projects'].keys():
+                return make_response('project does not exist', 404)
+
+            project = app_status['projects'][project_identifier]
+
+            # create export
+            result = []
+
+            for data_key in project['data']:
+                data_obj = project['data'][data_key]
+                data_res = {
+                    'type': data_obj['type'],
+                    'filename': data_obj['name'] + data_obj['extension'],
+                    'predictions': []
+                }
+
+                for result_key in data_obj['predictionResults']:
+                    result_obj = data_obj['predictionResults'][result_key]
+                    data_res['predictions'].append(result_obj)
+
+                result.append(data_res)
+
+            # send to user
+            rsp = make_response(dumps(result))
+            rsp.headers['Content-Type'] = 'text/json;charset=UTF-8'
+            rsp.headers['Content-Disposition'] = 'attachment;filename=predictions.json'
+            return rsp
+
         # finally start web server
         host = app_status['settings']['frontend']['host']
         port = app_status['settings']['frontend']['port']

+ 9 - 0
webui/src/components/projects/project-model-interaction-window.vue

@@ -11,6 +11,12 @@
                     @click="fit">fit model with new data
       </button-input>
     </div>
+
+    <div>
+      <button-input type="primary"
+                    @click="download">download predicted data
+      </button-input>
+    </div>
   </div>
 </template>
 
@@ -27,6 +33,9 @@ export default {
     },
     fit: function () {
       this.socket.post('/projects/' + this.currentProject.id, {'fit': true});
+    },
+    download: function () {
+      window.location.href = this.socket.baseurl + '/projects/' + this.currentProject.id + '/predictions'
     }
   }
 }