Exemplo n.º 1
0
    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.')
Exemplo n.º 2
0
    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()
Exemplo n.º 3
0
    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.")