def put(self, project_db): parser = reqparse.RequestParser() parser.add_argument('id', type=int, required=False, location='json') parser.add_argument('day_start', type=int, required=True, location='json') parser.add_argument('yrc_start', type=int, required=True, location='json') parser.add_argument('day_end', type=int, required=True, location='json') parser.add_argument('yrc_end', type=int, required=True, location='json') parser.add_argument('step', type=int, required=False, location='json') args = parser.parse_args(strict=True) SetupProjectDatabase.init(project_db) result = Time_sim.update_and_exec(args['day_start'], args['yrc_start'], args['day_end'], args['yrc_end'], args['step']) if result == 1: return 200 abort(400, message='Unable to update time_sim table.')
def __init__(self, project_db, editor_version, swat_exe, weather_dir, weather_save_dir='', weather_import_format='plus', wgn_import_method='database', wgn_db='C:/SWAT/SWATPlus/Databases/swatplus_wgn.sqlite', wgn_table='wgn_cfsr_world', wgn_csv_sta_file=None, wgn_csv_mon_file=None, year_start=None, day_start=None, year_end=None, day_end=None, input_files_dir=None, swat_version=None): # Setup project databases and import GIS data SetupProject(project_db, editor_version, project_db.replace('.sqlite', '.json', 1)) rel_input_files = 'Scenarios/Default/TxtInOut' if input_files_dir is None else utils.rel_path( project_db, input_files_dir) input_files_path = utils.full_path(project_db, rel_input_files) if weather_import_format != 'plus' and weather_save_dir == '': weather_save_dir = rel_input_files # Set project config table arguments used by APIs m = Project_config.get() m.wgn_db = wgn_db m.wgn_table_name = wgn_table m.weather_data_dir = utils.rel_path( project_db, weather_dir ) if weather_import_format == 'plus' else utils.rel_path( project_db, weather_save_dir) m.input_files_dir = rel_input_files result = m.save() # Import WGN wgn_api = WgnImport(project_db, True, False, wgn_import_method, wgn_csv_sta_file, wgn_csv_mon_file) wgn_api.import_data() # Import weather files if weather_import_format == 'plus': weather_api = WeatherImport(project_db, True, True) weather_api.import_data() else: weather_api = Swat2012WeatherImport(project_db, True, True, weather_dir) weather_api.import_data() # Set time_sim if parameters given if year_start is not None: Time_sim.update_and_exec(day_start, year_start, day_end, year_end, 0) # Write input files write_api = WriteFiles(project_db, swat_version) write_api.write() # Run the model cwd = os.getcwd() os.chdir(input_files_path) run_result = os.system(swat_exe) print(run_result) # Import output files to db if successful run if run_result == 0: os.chdir(cwd) output_db_file = os.path.join(input_files_path, '../', 'Results', 'swatplus_output.sqlite') output_api = ReadOutput(input_files_path, output_db_file) output_api.read() m = Project_config.get() m.swat_last_run = datetime.now() m.output_last_imported = datetime.now() result = m.save()
def put(self, project_db): parser = reqparse.RequestParser() parser.add_argument('input_files_dir', type=str, required=False, location='json') parser.add_argument('time', type=dict, required=False, location='json') parser.add_argument('print', type=dict, required=False, location='json') parser.add_argument('print_objects', type=list, required=False, location='json') args = parser.parse_args(strict=False) SetupProjectDatabase.init(project_db) try: m = Project_config.get() m.input_files_dir = utils.rel_path(project_db, args['input_files_dir']) result = m.save() time = args['time'] result = Time_sim.update_and_exec(time['day_start'], time['yrc_start'], time['day_end'], time['yrc_end'], time['step']) prt = args['print'] q = Print_prt.update(nyskip=prt['nyskip'], day_start=prt['day_start'], day_end=prt['day_end'], yrc_start=prt['yrc_start'], yrc_end=prt['yrc_end'], interval=prt['interval'], csvout=prt['csvout'], dbout=prt['dbout'], cdfout=prt['cdfout'], soilout=prt['soilout'], mgtout=prt['mgtout'], hydcon=prt['hydcon'], fdcout=prt['fdcout']) result = q.execute() prtObj = args['print_objects'] if prtObj is not None: for o in prtObj: Print_prt_object.update( daily=o['daily'], monthly=o['monthly'], yearly=o['yearly'], avann=o['avann']).where( Print_prt_object.id == o['id']).execute() if result > 0: return 200 abort(400, message="Unable to update project configuration table.") except Project_config.DoesNotExist: abort(404, message="Could not retrieve project configuration data.")