def to_gdal(self, target_path, target_proj4=None, driver_name='ESRI Shapefile'): gdal_driver = gdal.GetDriverByName(driver_name) if not gdal_driver: raise GeoTableError('gdal driver missing (%s)' % driver_name) try: geometry_columns = _get_geometry_columns(self) except GeoTableError as e: table = self else: table = self.drop(columns=geometry_columns) as_archive = has_archive_extension(target_path) as_kmz = target_path.endswith('.kmz') with TemporaryStorage() as storage: if as_archive: gdal_dataset_path = storage.folder elif as_kmz: gdal_dataset_path = join(storage.folder, get_file_stem(target_path) + '.kml') else: gdal_dataset_path = target_path gdal_dataset = gdal_driver.Create(gdal_dataset_path, 0, 0) for layer_name, layer_t in table.groupby('geometry_layer'): _prepare_gdal_layer(layer_t, gdal_dataset, target_proj4, layer_name) gdal_dataset.FlushCache() if as_archive: compress(storage.folder, target_path) elif as_kmz: compress_zip(storage.folder, target_path)
def run_tool_json(request): settings = request.registry.settings data_folder = request.data_folder tool_definition = settings['tool_definition'] result_request = ResultRequest(request) result = result_request.prepare_arguments(tool_definition, request.params) target_folder = result.get_target_folder(data_folder) run_script(tool_definition, result.arguments, result.folder, target_folder) compress_zip(target_folder) return { 'result_id': result.id, 'result_url': request.route_path( 'result', result_id=result.id, _anchor='properties'), }
def run_tool(request): settings = request.registry.settings tool_definition = settings['tool_definition'] data_type_by_suffix = settings['data_type_by_suffix'] data_folder = settings['data.folder'] try: result_arguments = get_result_arguments( tool_definition, request.params, data_type_by_suffix, data_folder, request.authenticated_userid) except DataTypeError as e: raise HTTPBadRequest(dict(e.args)) result_id, target_folder = prepare_result_response_folder(data_folder) run_script( target_folder, tool_definition, result_arguments, data_type_by_suffix) compress_zip(target_folder, excludes=EXCLUDED_FILE_NAMES) return HTTPSeeOther(request.route_path( 'result', id=result_id, _anchor='properties'))
def run_tool_json(request): settings = request.registry.settings data_folder = request.data_folder tool_definition = settings['tool_definition'] result_request = ResultRequest(request) result = result_request.prepare_arguments(tool_definition, request.params) target_folder = result.get_target_folder(data_folder) run_script(tool_definition, result.arguments, result.folder, target_folder, quietly=settings['quietly']) compress_zip(target_folder) return { 'result_id': result.id, 'result_url': request.route_path('result', result_id=result.id), }
def send_result_response(endpoint_url, result_folder): result_token = open(join(result_folder, 'y.token')).read() result_properties = load_settings(join( result_folder, 'y.cfg'), 'result_properties') # Assume relative paths response = requests.post(endpoint_url, headers={ 'Authorization': 'Bearer ' + result_token, }, data={ 'result_progress': 100, 'result_properties': json.dumps(result_properties), }, files={ 'target_folder': open(compress_zip(join(result_folder, 'y')), 'rb'), }) if response.status_code == 400: raise HTTPBadRequest