From db81a67c53270c699bcac444aef5261417108d72 Mon Sep 17 00:00:00 2001 From: Piero Toffanin Date: Thu, 29 Mar 2018 17:55:19 -0400 Subject: [PATCH] Better error handling, tweaks --- app/static/app/js/components/Map.jsx | 2 +- app/static/app/js/main.jsx | 2 +- plugins/measure/api.py | 3 ++- plugins/measure/public/MeasurePopup.jsx | 4 +++- plugins/measure/public/MeasurePopup.scss | 6 ++++++ worker/tasks.py | 9 ++++++--- 6 files changed, 19 insertions(+), 7 deletions(-) diff --git a/app/static/app/js/components/Map.jsx b/app/static/app/js/components/Map.jsx index 9d96478f..a385b5fa 100644 --- a/app/static/app/js/components/Map.jsx +++ b/app/static/app/js/components/Map.jsx @@ -268,7 +268,7 @@ class Map extends React.Component { handleMapMouseDown(e){ // Make sure the share popup closes - this.shareButton.hidePopup(); + if (this.sharePopup) this.shareButton.hidePopup(); } render() { diff --git a/app/static/app/js/main.jsx b/app/static/app/js/main.jsx index 29d442bf..6bad3c37 100644 --- a/app/static/app/js/main.jsx +++ b/app/static/app/js/main.jsx @@ -6,7 +6,7 @@ import PluginsAPI from './classes/plugins/API'; // Main is always executed first in the page -// We share some objects to avoid having to include it +// We share some objects to avoid having to include them // as a dependency in each component (adds too much space overhead) window.ReactDOM = ReactDOM; window.React = React; diff --git a/plugins/measure/api.py b/plugins/measure/api.py index 1a2ee9b2..d86d321c 100644 --- a/plugins/measure/api.py +++ b/plugins/measure/api.py @@ -40,12 +40,13 @@ class TaskVolume(TaskNestedView): os.path.dirname(os.path.abspath(__file__)), "calc_volume.grass" ), context.serialize()).get() + if isinstance(output, dict) and 'error' in output: raise GrassEngineException(output['error']) cols = output.split(':') if len(cols) == 7: return Response({'volume': str(abs(float(cols[6])))}, status=status.HTTP_200_OK) else: - raise GrassEngineException("Invalid GRASS output: {}".format(output)) + raise GrassEngineException(output) except GrassEngineException as e: return Response({'error': str(e)}, status=status.HTTP_200_OK) diff --git a/plugins/measure/public/MeasurePopup.jsx b/plugins/measure/public/MeasurePopup.jsx index 366570fc..a59dae38 100644 --- a/plugins/measure/public/MeasurePopup.jsx +++ b/plugins/measure/public/MeasurePopup.jsx @@ -36,6 +36,8 @@ module.exports = class MeasurePopup extends React.Component { lastCoord.dd.x )); + console.log(layers); + // Did we select a layer? if (layers.length > 0){ const layer = layers[layers.length - 1]; @@ -95,7 +97,7 @@ module.exports = class MeasurePopup extends React.Component {

Perimeter: {this.props.model.lengthDisplay}

{volume === null && !error &&

Volume: computing...

} {typeof volume === "number" &&

Volume: {volume.toFixed("2")} Cubic Meters ({(volume * 35.3147).toFixed(2)} Cubic Feet)

} - {error &&

Volume: {error}

} + {error &&

Volume: 200 ? 'long' : '')}>{error}

} ); } } \ No newline at end of file diff --git a/plugins/measure/public/MeasurePopup.scss b/plugins/measure/public/MeasurePopup.scss index 004a85c4..b8241e1b 100644 --- a/plugins/measure/public/MeasurePopup.scss +++ b/plugins/measure/public/MeasurePopup.scss @@ -2,4 +2,10 @@ p{ margin: 0; } + + .error.long{ + overflow: scroll; + display: block; + max-height: 200px; + } } \ No newline at end of file diff --git a/worker/tasks.py b/worker/tasks.py index c5603309..ad84d38d 100644 --- a/worker/tasks.py +++ b/worker/tasks.py @@ -8,7 +8,7 @@ from django.db.models import Q from app.models import Project from app.models import Task -from app.plugins.grass_engine import grass +from app.plugins.grass_engine import grass, GrassEngineException from nodeodm import status_codes from nodeodm.models import ProcessingNode from webodm import settings @@ -82,5 +82,8 @@ def process_pending_tasks(): @app.task def execute_grass_script(script, serialized_context = {}): - ctx = grass.create_context(serialized_context) - return ctx.execute(script) + try: + ctx = grass.create_context(serialized_context) + return ctx.execute(script) + except GrassEngineException as e: + return {'error': str(e)} \ No newline at end of file