diff --git a/natcap/root/__main__.py b/natcap/root/__main__.py
new file mode 100644
index 0000000..926125f
--- /dev/null
+++ b/natcap/root/__main__.py
@@ -0,0 +1,4 @@
+from . import root
+
+if __name__ == '__main__':
+ root.main()
diff --git a/natcap/root/root.py b/natcap/root/root.py
index ccad04c..cc0590c 100644
--- a/natcap/root/root.py
+++ b/natcap/root/root.py
@@ -1,29 +1,29 @@
"""ROOT InVEST Model."""
-import os
-import sys
-import logging
import csv
+import logging
import multiprocessing
+import os
+import sys
from math import sqrt
import pandas as pd
-from osgeo import ogr
-from osgeo import gdal
+import pygeoprocessing
import PySide2 # pragma: no cover
-from qtpy import QtWidgets
-from qtpy import QtGui
-from natcap.invest.ui import model, inputs
from natcap.invest import spec_utils
from natcap.invest import validation
-import pygeoprocessing
-
+from natcap.invest.ui import inputs
+from natcap.invest.ui import model
from natcap.root import __version__
-from natcap.root import rootcore
-from natcap.root import preprocessing
-from natcap.root import postprocessing
-from natcap.root import optimization
from natcap.root import arith_parser as ap
+from natcap.root import optimization
+from natcap.root import postprocessing
+from natcap.root import preprocessing
+from natcap.root import rootcore
+from osgeo import gdal
+from osgeo import ogr
+from qtpy import QtGui
+from qtpy import QtWidgets
LOGGER = logging.getLogger(__name__)
@@ -171,10 +171,15 @@ class RootInputError(Exception):
"frontier.
n_dim_outline: constructs 2D "
"frontiers for all pairs of objectives."),
'name': 'Analysis Type',
- 'validation_options': {
- 'options': ["weight_table", "frontier", "n_dim_frontier",
- "n_dim_outline"],
- }
+ 'options': {
+ "weight_table": {"display_name": "Weight Table"},
+ "frontier": {"display_name": "Frontier"},
+ "n_dim_frontier": {
+ "display_name": "Sample N Dimensional Points on Frontier"},
+ "n_dim_outline": {
+ "display_name": (
+ "Construct frontiers for all pairs of objectives")},
+ },
},
'number_of_frontier_points': {
'type': 'number',
@@ -296,9 +301,19 @@ def _create_input_kwargs_from_args_spec(args_key, validate=True):
'label': model_spec[args_key]['name'],
}
- if validate:
+ arg_type = model_spec[args_key]['type']
+
+ if validate and arg_type != 'option_string':
kwargs['validator'] = validate
+ if arg_type == 'option_string':
+ spec_options = model_spec[args_key]['options']
+ kwargs['options'] = [
+ value['display_name'] for value in spec_options.values()]
+ kwargs['return_value_map'] = {
+ value['display_name']: key for (key, value) in
+ spec_options.items()}
+
return kwargs
@@ -379,7 +394,7 @@ def __init__(self):
**_create_input_kwargs_from_args_spec('optimization_suffix'))
self.optimization_container.add_input(self.optimization_suffix)
- self.frontier_type = inputs.Text(
+ self.frontier_type = inputs.Dropdown(
**_create_input_kwargs_from_args_spec('frontier_type'))
self.optimization_container.add_input(self.frontier_type)
@@ -425,7 +440,7 @@ def assemble_args(self):
return args
-if __name__ == '__main__':
+def main():
multiprocessing.freeze_support()
if '--test-imports' in sys.argv:
@@ -448,3 +463,7 @@ def assemble_args(self):
LOGGER.info('Entering event loop.')
_ = APP.exec_()
LOGGER.info('Exiting.')
+
+
+if __name__ == '__main__':
+ main()