def setUp(self): # Modify test behavior of celery based on environment settings update_celery_configuration(app) self.inasafe_work_dir = os.environ['InaSAFEQGIS'] # generate tempfile hazard = os.path.join( self.inasafe_work_dir, 'safe/test/data/hazard/continuous_flood_20_20.asc') exposure = os.path.join( self.inasafe_work_dir, 'safe/test/data/exposure/pop_binary_raster_20_20.asc') aggregation = os.path.join( self.inasafe_work_dir, 'safe/test/data/boundaries/district_osm_jakarta.shp') hazard = archive_layer(hazard) exposure = archive_layer(exposure) aggregation = archive_layer(aggregation) test_deploy_dir = os.path.join(DEPLOY_OUTPUT_DIR, 'test_deploy') self.test_deploy_dir = test_deploy_dir def convert_dir_to_url(deploy_dir): tail_name = deploy_dir.replace(DEPLOY_OUTPUT_DIR, '') return urlparse.urljoin(DEPLOY_OUTPUT_URL, tail_name) if not os.path.exists(test_deploy_dir): os.makedirs(test_deploy_dir) hazard_temp = tempfile.mktemp(suffix='.zip', dir=test_deploy_dir) exposure_temp = tempfile.mktemp(suffix='.zip', dir=test_deploy_dir) aggregation_temp = tempfile.mktemp(suffix='.zip', dir=test_deploy_dir) shutil.move(hazard, hazard_temp) shutil.move(exposure, exposure_temp) shutil.move(aggregation, aggregation_temp) self.hazard_temp = convert_dir_to_url(hazard_temp) self.exposure_temp = convert_dir_to_url(exposure_temp) self.aggregation_temp = convert_dir_to_url(aggregation_temp) self.keywords_file = os.path.join( self.inasafe_work_dir, 'safe/test/data/hazard/continuous_flood_20_20.xml')
def run_analysis(hazard, exposure, function, aggregation=None, generate_report=False): """Run analysis""" hazard_file = download_layer(hazard) exposure_file = download_layer(exposure) aggregation_file = None if aggregation: aggregation_file = download_layer(aggregation) arguments = CommandLineArguments() arguments.hazard = hazard_file arguments.exposure = exposure_file arguments.aggregation = aggregation_file arguments.impact_function = function # generate names for impact results # create date timestamp date_folder = datetime.datetime.now().strftime('%Y%m%d') deploy_dir = os.path.join(DEPLOY_OUTPUT_DIR, date_folder) try: os.mkdir(deploy_dir) except: pass # create temporary file name without extension tmp = tempfile.mktemp(dir=deploy_dir) arguments.output_file = tmp impact_layer = run_impact_function(arguments) if impact_layer.is_raster: new_name = '%s.tif' % tmp else: new_name = '%s.shp' % tmp # generating qml styles file qgis_impact_layer = get_layer(new_name) generate_styles(impact_layer, qgis_impact_layer) # if asked to generate report if generate_report: arguments.report_template = '' arguments.output_file = new_name build_report(arguments) # archiving the layer new_name = archive_layer(new_name) # new_name is a file path to archived layer # we need to return the url new_basename = os.path.basename(new_name) output_url = urlparse.urljoin(DEPLOY_OUTPUT_URL, '%s/%s' % (date_folder, new_basename)) return output_url
def run_analysis(hazard, exposure, function, aggregation=None, generate_report=False): """Run analysis""" hazard_file = download_layer(hazard) exposure_file = download_layer(exposure) aggregation_file = None if aggregation: aggregation_file = download_layer(aggregation) arguments = CommandLineArguments() arguments.hazard = hazard_file arguments.exposure = exposure_file arguments.aggregation = aggregation_file arguments.impact_function = function # generate names for impact results # create date timestamp date_folder = datetime.datetime.now().strftime('%Y%m%d') deploy_dir = os.path.join(DEPLOY_OUTPUT_DIR, date_folder) try: os.mkdir(deploy_dir) except: pass # create temporary file name without extension tmp = tempfile.mktemp(dir=deploy_dir) arguments.output_file = tmp impact_layer = run_impact_function(arguments) if impact_layer.is_raster: new_name = '%s.tif' % tmp else: new_name = '%s.shp' % tmp # generating qml styles file qgis_impact_layer = get_layer(new_name) generate_styles(impact_layer, qgis_impact_layer) # if asked to generate report if generate_report: arguments.report_template = '' arguments.output_file = new_name build_report(arguments) # archiving the layer new_name = archive_layer(new_name) # new_name is a file path to archived layer # we need to return the url new_basename = os.path.basename(new_name) output_url = urlparse.urljoin( DEPLOY_OUTPUT_URL, '%s/%s' % (date_folder, new_basename) ) return output_url