BERATools 0.2.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. beratools/__init__.py +9 -0
  2. beratools/core/__init__.py +0 -0
  3. beratools/core/algo_centerline.py +351 -0
  4. beratools/core/constants.py +86 -0
  5. beratools/core/dijkstra_algorithm.py +460 -0
  6. beratools/core/logger.py +85 -0
  7. beratools/core/tool_base.py +133 -0
  8. beratools/gui/__init__.py +15 -0
  9. beratools/gui/batch_processing_dlg.py +463 -0
  10. beratools/gui/beratools.json +2300 -0
  11. beratools/gui/bt_data.py +487 -0
  12. beratools/gui/bt_gui_main.py +691 -0
  13. beratools/gui/cli.py +18 -0
  14. beratools/gui/gui.json +8 -0
  15. beratools/gui/img/BERALogo.png +0 -0
  16. beratools/gui/img/closed.gif +0 -0
  17. beratools/gui/img/closed.png +0 -0
  18. beratools/gui/img/open.gif +0 -0
  19. beratools/gui/img/open.png +0 -0
  20. beratools/gui/img/tool.gif +0 -0
  21. beratools/gui/img/tool.png +0 -0
  22. beratools/gui/map_window.py +146 -0
  23. beratools/gui/tool_widgets.py +493 -0
  24. beratools/gui_tk/ASCII Banners.txt +248 -0
  25. beratools/gui_tk/__init__.py +20 -0
  26. beratools/gui_tk/beratools_main.py +515 -0
  27. beratools/gui_tk/bt_widgets.py +442 -0
  28. beratools/gui_tk/cli.py +18 -0
  29. beratools/gui_tk/gui.json +8 -0
  30. beratools/gui_tk/img/BERALogo.png +0 -0
  31. beratools/gui_tk/img/closed.gif +0 -0
  32. beratools/gui_tk/img/closed.png +0 -0
  33. beratools/gui_tk/img/open.gif +0 -0
  34. beratools/gui_tk/img/open.png +0 -0
  35. beratools/gui_tk/img/tool.gif +0 -0
  36. beratools/gui_tk/img/tool.png +0 -0
  37. beratools/gui_tk/main.py +14 -0
  38. beratools/gui_tk/map_window.py +144 -0
  39. beratools/gui_tk/runner.py +1481 -0
  40. beratools/gui_tk/tooltip.py +55 -0
  41. beratools/third_party/pyqtlet2/__init__.py +9 -0
  42. beratools/third_party/pyqtlet2/leaflet/__init__.py +26 -0
  43. beratools/third_party/pyqtlet2/leaflet/control/__init__.py +6 -0
  44. beratools/third_party/pyqtlet2/leaflet/control/control.py +59 -0
  45. beratools/third_party/pyqtlet2/leaflet/control/draw.py +52 -0
  46. beratools/third_party/pyqtlet2/leaflet/control/layers.py +20 -0
  47. beratools/third_party/pyqtlet2/leaflet/core/Parser.py +24 -0
  48. beratools/third_party/pyqtlet2/leaflet/core/__init__.py +2 -0
  49. beratools/third_party/pyqtlet2/leaflet/core/evented.py +180 -0
  50. beratools/third_party/pyqtlet2/leaflet/layer/__init__.py +5 -0
  51. beratools/third_party/pyqtlet2/leaflet/layer/featuregroup.py +34 -0
  52. beratools/third_party/pyqtlet2/leaflet/layer/icon/__init__.py +1 -0
  53. beratools/third_party/pyqtlet2/leaflet/layer/icon/icon.py +30 -0
  54. beratools/third_party/pyqtlet2/leaflet/layer/imageoverlay.py +18 -0
  55. beratools/third_party/pyqtlet2/leaflet/layer/layer.py +105 -0
  56. beratools/third_party/pyqtlet2/leaflet/layer/layergroup.py +45 -0
  57. beratools/third_party/pyqtlet2/leaflet/layer/marker/__init__.py +1 -0
  58. beratools/third_party/pyqtlet2/leaflet/layer/marker/marker.py +91 -0
  59. beratools/third_party/pyqtlet2/leaflet/layer/tile/__init__.py +2 -0
  60. beratools/third_party/pyqtlet2/leaflet/layer/tile/gridlayer.py +4 -0
  61. beratools/third_party/pyqtlet2/leaflet/layer/tile/tilelayer.py +16 -0
  62. beratools/third_party/pyqtlet2/leaflet/layer/vector/__init__.py +5 -0
  63. beratools/third_party/pyqtlet2/leaflet/layer/vector/circle.py +15 -0
  64. beratools/third_party/pyqtlet2/leaflet/layer/vector/circlemarker.py +18 -0
  65. beratools/third_party/pyqtlet2/leaflet/layer/vector/path.py +5 -0
  66. beratools/third_party/pyqtlet2/leaflet/layer/vector/polygon.py +14 -0
  67. beratools/third_party/pyqtlet2/leaflet/layer/vector/polyline.py +18 -0
  68. beratools/third_party/pyqtlet2/leaflet/layer/vector/rectangle.py +14 -0
  69. beratools/third_party/pyqtlet2/leaflet/map/__init__.py +1 -0
  70. beratools/third_party/pyqtlet2/leaflet/map/map.py +220 -0
  71. beratools/third_party/pyqtlet2/mapwidget.py +45 -0
  72. beratools/third_party/pyqtlet2/web/custom.js +43 -0
  73. beratools/third_party/pyqtlet2/web/map.html +23 -0
  74. beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/layers-2x.png +0 -0
  75. beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/layers.png +0 -0
  76. beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/marker-icon-2x.png +0 -0
  77. beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/marker-icon.png +0 -0
  78. beratools/third_party/pyqtlet2/web/modules/leaflet_193/images/marker-shadow.png +0 -0
  79. beratools/third_party/pyqtlet2/web/modules/leaflet_193/leaflet.css +656 -0
  80. beratools/third_party/pyqtlet2/web/modules/leaflet_193/leaflet.js +6 -0
  81. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.codeclimate.yml +14 -0
  82. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.editorconfig +4 -0
  83. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.gitattributes +22 -0
  84. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/.travis.yml +43 -0
  85. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/LICENSE +20 -0
  86. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/layers-2x.png +0 -0
  87. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/layers.png +0 -0
  88. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/marker-icon-2x.png +0 -0
  89. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/marker-icon.png +0 -0
  90. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/marker-shadow.png +0 -0
  91. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/spritesheet-2x.png +0 -0
  92. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/spritesheet.png +0 -0
  93. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/images/spritesheet.svg +156 -0
  94. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/leaflet.draw.css +10 -0
  95. beratools/third_party/pyqtlet2/web/modules/leaflet_draw_414/leaflet.draw.js +10 -0
  96. beratools/third_party/pyqtlet2/web/modules/leaflet_rotatedMarker_020/LICENSE +22 -0
  97. beratools/third_party/pyqtlet2/web/modules/leaflet_rotatedMarker_020/leaflet.rotatedMarker.js +57 -0
  98. beratools/tools/Beratools_r_script.r +1120 -0
  99. beratools/tools/Ht_metrics.py +116 -0
  100. beratools/tools/__init__.py +7 -0
  101. beratools/tools/batch_processing.py +132 -0
  102. beratools/tools/canopy_threshold_relative.py +670 -0
  103. beratools/tools/canopycostraster.py +222 -0
  104. beratools/tools/centerline.py +176 -0
  105. beratools/tools/common.py +885 -0
  106. beratools/tools/fl_regen_csf.py +428 -0
  107. beratools/tools/forest_line_attributes.py +408 -0
  108. beratools/tools/forest_line_ecosite.py +216 -0
  109. beratools/tools/lapis_all.py +103 -0
  110. beratools/tools/least_cost_path_from_chm.py +152 -0
  111. beratools/tools/line_footprint_absolute.py +363 -0
  112. beratools/tools/line_footprint_fixed.py +282 -0
  113. beratools/tools/line_footprint_functions.py +720 -0
  114. beratools/tools/line_footprint_relative.py +64 -0
  115. beratools/tools/ln_relative_metrics.py +615 -0
  116. beratools/tools/r_cal_lpi_elai.r +25 -0
  117. beratools/tools/r_generate_pd_focalraster.r +101 -0
  118. beratools/tools/r_interface.py +80 -0
  119. beratools/tools/r_point_density.r +9 -0
  120. beratools/tools/rpy_chm2trees.py +86 -0
  121. beratools/tools/rpy_dsm_chm_by.py +81 -0
  122. beratools/tools/rpy_dtm_by.py +63 -0
  123. beratools/tools/rpy_find_cellsize.py +43 -0
  124. beratools/tools/rpy_gnd_csf.py +74 -0
  125. beratools/tools/rpy_hummock_hollow.py +85 -0
  126. beratools/tools/rpy_hummock_hollow_raster.py +71 -0
  127. beratools/tools/rpy_las_info.py +51 -0
  128. beratools/tools/rpy_laz2las.py +40 -0
  129. beratools/tools/rpy_lpi_elai_lascat.py +466 -0
  130. beratools/tools/rpy_normalized_lidar_by.py +56 -0
  131. beratools/tools/rpy_percent_above_dbh.py +80 -0
  132. beratools/tools/rpy_points2trees.py +88 -0
  133. beratools/tools/rpy_vegcoverage.py +94 -0
  134. beratools/tools/tiler.py +206 -0
  135. beratools/tools/tool_template.py +54 -0
  136. beratools/tools/vertex_optimization.py +620 -0
  137. beratools/tools/zonal_threshold.py +144 -0
  138. beratools-0.2.0.dist-info/METADATA +63 -0
  139. beratools-0.2.0.dist-info/RECORD +142 -0
  140. beratools-0.2.0.dist-info/WHEEL +4 -0
  141. beratools-0.2.0.dist-info/entry_points.txt +2 -0
  142. beratools-0.2.0.dist-info/licenses/LICENSE +22 -0
@@ -0,0 +1,487 @@
1
+ #!/usr/bin/env python3
2
+ """ This file is intended to be a helper for running BERA tools from a Python script.
3
+ """
4
+
5
+ # This script is part of the BERA Tools geospatial library.
6
+ # Created: 23/03/2023
7
+ # Author: Richard Zeng
8
+ # License: MIT
9
+
10
+ import os
11
+ from os import path
12
+ from pathlib import Path
13
+ from inspect import getsourcefile
14
+
15
+ import platform
16
+ import json
17
+ from json.decoder import JSONDecodeError
18
+ import multiprocessing
19
+ from collections import OrderedDict
20
+
21
+ from beratools.tools.common import *
22
+ from beratools.core.constants import *
23
+
24
+ running_windows = platform.system() == 'Windows'
25
+
26
+
27
+ def default_callback(value):
28
+ """
29
+ A simple default callback that outputs using the print function. When
30
+ tools are called without providing a custom callback, this function
31
+ will be used to print to standard output.
32
+ """
33
+ print(value)
34
+
35
+
36
+ class BTData(object):
37
+ """
38
+ An object for interfacing with the BERA Tools executable.
39
+ """
40
+
41
+ def __init__(self):
42
+ if running_windows:
43
+ self.ext = '.exe'
44
+ else:
45
+ self.ext = ''
46
+ self.exe_name = "BERA_tools{}".format(self.ext)
47
+ self.exe_path = path.dirname(path.abspath(__file__))
48
+
49
+ self.work_dir = ""
50
+ self.user_folder = Path('')
51
+ self.data_folder = Path('')
52
+ self.verbose = False
53
+ self.show_advanced = BT_SHOW_ADVANCED_OPTIONS
54
+ self.max_procs = -1
55
+ self.recent_tool = None
56
+ self.ascii_art = None
57
+ self.get_working_dir()
58
+ self.get_user_folder()
59
+
60
+ # set maximum available cpu core for tools
61
+ self.max_cpu_cores = min(BT_MAXIMUM_CPU_CORES, multiprocessing.cpu_count())
62
+
63
+ # load bera tools
64
+ self.tool_history = []
65
+ self.settings = {}
66
+ self.bera_tools = None
67
+ self.tools_list = []
68
+ self.sorted_tools = []
69
+ self.upper_toolboxes = []
70
+ self.lower_toolboxes = []
71
+ self.toolbox_list = []
72
+ self.get_bera_tools()
73
+ self.get_bera_tool_list()
74
+ self.get_bera_toolboxes()
75
+ self.sort_toolboxes()
76
+
77
+ self.setting_file = None
78
+ self.get_data_folder()
79
+ self.get_setting_file()
80
+ self.gui_setting_file = Path(self.exe_path).joinpath(r'gui.json')
81
+
82
+ self.load_saved_tool_info()
83
+ self.load_gui_data()
84
+ self.get_tool_history()
85
+
86
+ self.default_callback = default_callback
87
+ self.start_minimized = False
88
+
89
+ def set_bera_dir(self, path_str):
90
+ """
91
+ Sets the directory to the BERA Tools executable file.
92
+ """
93
+ self.exe_path = path_str
94
+
95
+ def add_tool_history(self, tool, params):
96
+ if 'tool_history' not in self.settings:
97
+ self.settings['tool_history'] = OrderedDict()
98
+
99
+ self.settings['tool_history'][tool] = params
100
+ self.settings['tool_history'].move_to_end(tool, last=False)
101
+
102
+ def save_tool_info(self):
103
+ if self.recent_tool:
104
+ if 'gui_parameters' not in self.settings.keys():
105
+ self.settings['gui_parameters'] = {}
106
+
107
+ self.settings['gui_parameters']['recent_tool'] = self.recent_tool
108
+
109
+ with open(self.setting_file, 'w') as file_setting:
110
+ try:
111
+ json.dump(self.settings, file_setting, indent=4)
112
+ except JSONDecodeError:
113
+ pass
114
+
115
+ def save_setting(self, key, value):
116
+ # check setting directory existence
117
+ data_path = Path(self.setting_file).resolve().parent
118
+ if not data_path.exists():
119
+ data_path.mkdir()
120
+
121
+ self.load_saved_tool_info()
122
+
123
+ if value is not None:
124
+ if 'gui_parameters' not in self.settings.keys():
125
+ self.settings['gui_parameters'] = {}
126
+
127
+ self.settings['gui_parameters'][key] = value
128
+
129
+ with open(self.setting_file, 'w') as write_settings_file:
130
+ json.dump(self.settings, write_settings_file, indent=4)
131
+
132
+ def get_working_dir(self):
133
+ current_file = Path(getsourcefile(lambda: 0)).resolve()
134
+ btool_dir = current_file.parents[1]
135
+ self.work_dir = btool_dir
136
+
137
+ def get_user_folder(self):
138
+ self.user_folder = Path.home().joinpath('.beratools')
139
+ if not self.user_folder.exists():
140
+ self.user_folder.mkdir()
141
+
142
+ def get_data_folder(self):
143
+ self.data_folder = self.user_folder.joinpath('.data')
144
+ if not self.data_folder.exists():
145
+ self.data_folder.mkdir()
146
+
147
+ def get_logger_file_name(self, name):
148
+ if not name:
149
+ name = 'beratools'
150
+
151
+ logger_file_name = self.user_folder.joinpath(name).with_suffix('.log')
152
+ return logger_file_name.as_posix()
153
+
154
+ def get_setting_file(self):
155
+ self.setting_file = self.data_folder.joinpath('saved_tool_parameters.json')
156
+
157
+ def get_verbose_mode(self):
158
+ return self.verbose
159
+
160
+ def set_verbose_mode(self, val=True):
161
+ self.verbose = val
162
+ self.save_setting('verbose_mode', val)
163
+
164
+ def set_max_procs(self, val=-1):
165
+ """
166
+ Sets the flag used by BERA Tools to determine whether to use compression for output rasters.
167
+ """
168
+ self.max_procs = val
169
+ self.save_setting('max_procs', val)
170
+
171
+ def get_max_procs(self):
172
+ return self.max_procs
173
+
174
+ def get_max_cpu_cores(self):
175
+ return self.max_cpu_cores
176
+
177
+ def run_tool(self, tool_api, args, callback=None, verbose=True):
178
+ """
179
+ Runs a tool and specifies tool arguments.
180
+ Returns 0 if completes without error.
181
+ Returns 1 if error encountered (details are sent to callback).
182
+ Returns 2 if process is cancelled by user.
183
+ """
184
+ try:
185
+ if callback is None:
186
+ callback = self.default_callback
187
+ except Exception as err:
188
+ callback(str(err))
189
+ return 1
190
+
191
+ # Call script using new process to make GUI responsive
192
+ try:
193
+ proc = None
194
+
195
+ # convert to valid json string
196
+ args_string = str(args).replace("'", '"')
197
+ args_string = args_string.replace('True', 'true')
198
+ args_string = args_string.replace('False', 'false')
199
+
200
+ tool_name = self.get_bera_tool_name(tool_api)
201
+ tool_type = self.get_bera_tool_type(tool_name)
202
+ tool_args = None
203
+
204
+ if tool_type == 'python':
205
+ tool_args = [self.work_dir.joinpath(f'tools/{tool_api}.py').as_posix(),
206
+ '-i', args_string, '-p', str(self.get_max_procs()),
207
+ '-v', str(self.verbose)]
208
+ elif tool_type == 'executable':
209
+ print(globals().get(tool_api))
210
+ tool_args = globals()[tool_api](args_string)
211
+ lapis_path = self.work_dir.joinpath('./third_party/Lapis_0_8')
212
+ os.chdir(lapis_path.as_posix())
213
+ except Exception as err:
214
+ callback(str(err))
215
+ return 1
216
+
217
+ return tool_type, tool_args
218
+
219
+ def about(self):
220
+ """
221
+ Retrieves the help description for BERA Tools.
222
+ """
223
+ try:
224
+ about_text = 'BERA Tools provide a series of tools developed by AppliedGRG lab.\n\n'
225
+ about_text += self.ascii_art
226
+ return about_text
227
+ except (OSError, ValueError) as err:
228
+ return err
229
+
230
+ def license(self):
231
+ """
232
+ Retrieves the license information for BERA Tools.
233
+ """
234
+ try:
235
+ with open(os.path.join(self.exe_path, r'..\..\LICENSE.txt'), 'r') as f:
236
+ ret = f.read()
237
+
238
+ return ret
239
+ except (OSError, ValueError) as err:
240
+ return err
241
+
242
+ def load_saved_tool_info(self):
243
+ data_path = Path(self.setting_file).parent
244
+ if not data_path.exists():
245
+ data_path.mkdir()
246
+
247
+ saved_parameters = {}
248
+ json_file = Path(self.setting_file)
249
+ if json_file.exists():
250
+ with open(json_file) as open_file:
251
+ try:
252
+ saved_parameters = json.load(open_file, object_pairs_hook=OrderedDict)
253
+ except json.decoder.JSONDecodeError:
254
+ pass
255
+
256
+ self.settings = saved_parameters
257
+
258
+ # parse file
259
+ if 'gui_parameters' in self.settings.keys():
260
+ gui_settings = self.settings['gui_parameters']
261
+
262
+ # TODO remove working dir
263
+ # if 'working_directory' in gui_settings.keys():
264
+ # self.work_dir = str(gui_settings['working_directory'])
265
+ if 'verbose_mode' in gui_settings.keys():
266
+ self.verbose = str(gui_settings['verbose_mode'])
267
+ else:
268
+ self.verbose = False
269
+
270
+ if 'max_procs' in gui_settings.keys():
271
+ self.max_procs = gui_settings['max_procs']
272
+
273
+ if 'recent_tool' in gui_settings.keys():
274
+ self.recent_tool = gui_settings['recent_tool']
275
+ if not self.get_bera_tool_api(self.recent_tool):
276
+ self.recent_tool = None
277
+
278
+ def load_gui_data(self):
279
+ gui_settings = {}
280
+ if not self.gui_setting_file.exists():
281
+ print("gui.json not exist.")
282
+ else:
283
+ # read the settings.json file if it exists
284
+ with open(self.gui_setting_file, 'r') as file_gui:
285
+ try:
286
+ gui_settings = json.load(file_gui)
287
+ except json.decoder.JSONDecodeError:
288
+ pass
289
+
290
+ # parse file
291
+ if 'ascii_art' in gui_settings.keys():
292
+ bera_art = ''
293
+ for line_of_art in gui_settings['ascii_art']:
294
+ bera_art += line_of_art
295
+ self.ascii_art = bera_art
296
+
297
+ def get_tool_history(self):
298
+ tool_history = []
299
+ self.load_saved_tool_info()
300
+ if self.settings:
301
+ if 'tool_history' in self.settings:
302
+ tool_history = self.settings['tool_history']
303
+
304
+ if tool_history:
305
+ self.tool_history = []
306
+ for item in tool_history:
307
+ item = self.get_bera_tool_name(item)
308
+ self.tool_history.append(item)
309
+
310
+ def get_saved_tool_params(self, tool_api, variable=None):
311
+ self.load_saved_tool_info()
312
+
313
+ if 'tool_history' in self.settings:
314
+ if tool_api in list(self.settings['tool_history']):
315
+ tool_params = self.settings['tool_history'][tool_api]
316
+ if tool_params:
317
+ if variable:
318
+ if variable in tool_params.keys():
319
+ saved_value = tool_params[variable]
320
+ return saved_value
321
+ else: # return all params
322
+ return tool_params
323
+
324
+ return None
325
+
326
+ def get_bera_tools(self):
327
+ tool_json = os.path.join(self.exe_path, r'beratools.json')
328
+ if os.path.exists(tool_json):
329
+ tool_json = open(os.path.join(self.exe_path, r'beratools.json'))
330
+ self.bera_tools = json.load(tool_json)
331
+ else:
332
+ print('Tool configuration file not exists')
333
+
334
+ def get_bera_tool_list(self):
335
+ self.tools_list = []
336
+ self.sorted_tools = []
337
+
338
+ for toolbox in self.bera_tools['toolbox']:
339
+ category = []
340
+ for item in toolbox['tools']:
341
+ if item['name']:
342
+ category.append(item['name'])
343
+ self.tools_list.append(item['name']) # add tool to list
344
+
345
+ self.sorted_tools.append(category)
346
+
347
+ def sort_toolboxes(self):
348
+ for toolbox in self.toolbox_list:
349
+ if toolbox.find('/') == (-1): # Does not contain a sub toolbox, i.e. does not contain '/'
350
+ self.upper_toolboxes.append(toolbox) # add to both upper toolbox list and lower toolbox list
351
+ self.lower_toolboxes.append(toolbox)
352
+ else: # Contains a sub toolbox
353
+ self.lower_toolboxes.append(toolbox) # add to only the lower toolbox list
354
+
355
+ def get_bera_toolboxes(self):
356
+ toolboxes = []
357
+ for toolbox in self.bera_tools['toolbox']:
358
+ tb = toolbox['category']
359
+ toolboxes.append(tb)
360
+
361
+ self.toolbox_list = toolboxes
362
+
363
+ def get_bera_tool_params(self, tool_name):
364
+ new_params = {'parameters': []}
365
+ tool = {}
366
+ batch_tool_list = []
367
+ for toolbox in self.bera_tools['toolbox']:
368
+ for single_tool in toolbox['tools']:
369
+ if single_tool['batch_processing']:
370
+ batch_tool_list.append(single_tool['name'])
371
+
372
+ if tool_name == single_tool['name']:
373
+ tool = single_tool
374
+
375
+ for key, value in tool.items():
376
+ if key != 'parameters':
377
+ new_params[key] = value
378
+
379
+ # convert json format for parameters
380
+ if 'parameters' not in tool.keys():
381
+ print('issue')
382
+
383
+ for param in tool['parameters']:
384
+ new_param = {'name': param['parameter']}
385
+ if 'variable' in param.keys():
386
+ new_param['flag'] = param['variable']
387
+ # restore saved parameters
388
+ saved_value = self.get_saved_tool_params(tool['tool_api'], param['variable'])
389
+ if saved_value is not None:
390
+ new_param['saved_value'] = saved_value
391
+ else:
392
+ new_param['flag'] = 'FIXME'
393
+
394
+ if not param['output']:
395
+ if param['type'] == 'list':
396
+ if tool_name == 'Batch Processing':
397
+ new_param['parameter_type'] = {'OptionList': batch_tool_list}
398
+ new_param['data_type'] = 'String'
399
+ else:
400
+ new_param['parameter_type'] = {'OptionList': param['data']}
401
+ new_param['data_type'] = 'String'
402
+ if param['typelab'] == 'text':
403
+ new_param['data_type'] = 'String'
404
+ elif param['typelab'] == 'int':
405
+ new_param['data_type'] = 'Integer'
406
+ elif param['typelab'] == 'float':
407
+ new_param['data_type'] = 'Float'
408
+ elif param['typelab'] == 'bool':
409
+ new_param['data_type'] = 'Boolean'
410
+ elif param['type'] == 'text':
411
+ new_param['parameter_type'] = 'String'
412
+ elif param['type'] == 'number':
413
+ if param['typelab'] == 'int':
414
+ new_param['parameter_type'] = 'Integer'
415
+ else:
416
+ new_param['parameter_type'] = 'Float'
417
+ elif param['type'] == 'file':
418
+ new_param['parameter_type'] = {'ExistingFile': [param['typelab']]}
419
+ else:
420
+ new_param['parameter_type'] = {'ExistingFile': ''}
421
+ else:
422
+ new_param["parameter_type"] = {'NewFile': [param['typelab']]}
423
+
424
+ new_param['description'] = param['description']
425
+
426
+ if param['type'] == 'raster':
427
+ for i in new_param["parameter_type"].keys():
428
+ new_param['parameter_type'][i] = 'Raster'
429
+ elif param['type'] == 'lidar':
430
+ for i in new_param["parameter_type"].keys():
431
+ new_param['parameter_type'][i] = 'Lidar'
432
+ elif param['type'] == 'vector':
433
+ for i in new_param["parameter_type"].keys():
434
+ new_param['parameter_type'][i] = 'Vector'
435
+ elif param['type'] == 'Directory':
436
+ new_param['parameter_type'] = {'Directory': [param['typelab']]}
437
+
438
+ new_param['default_value'] = param['default']
439
+ if "optional" in param.keys():
440
+ new_param['optional'] = param['optional']
441
+ else:
442
+ new_param['optional'] = False
443
+
444
+ new_params['parameters'].append(new_param)
445
+
446
+ return new_params
447
+
448
+ def get_bera_tool_parameters_list(self, tool_name):
449
+ params = self.get_bera_tool_params(tool_name)
450
+ param_list = {}
451
+ for item in params['parameters']:
452
+ param_list[item['flag']] = item['default_value']
453
+
454
+ return param_list
455
+
456
+ def get_bera_tool_args(self, tool_name):
457
+ params = self.get_bera_tool_params(tool_name)
458
+ tool_args = params['parameters']
459
+
460
+ return tool_args
461
+
462
+ def get_bera_tool_name(self, tool_api):
463
+ tool_name = None
464
+ for toolbox in self.bera_tools['toolbox']:
465
+ for tool in toolbox['tools']:
466
+ if tool_api == tool['tool_api']:
467
+ tool_name = tool['name']
468
+
469
+ return tool_name
470
+
471
+ def get_bera_tool_api(self, tool_name):
472
+ tool_api = None
473
+ for toolbox in self.bera_tools['toolbox']:
474
+ for tool in toolbox['tools']:
475
+ if tool_name == tool['name']:
476
+ tool_api = tool['tool_api']
477
+
478
+ return tool_api
479
+
480
+ def get_bera_tool_type(self, tool_name):
481
+ tool_type = None
482
+ for toolbox in self.bera_tools['toolbox']:
483
+ for tool in toolbox['tools']:
484
+ if tool_name == tool['name']:
485
+ tool_type = tool['tool_type']
486
+
487
+ return tool_type