Exemple #1
0
 def get(self, project_db):
     SetupProjectDatabase.init(project_db)
     try:
         m = Project_config.get()
         return {
             "has_weather":
             climate.Weather_sta_cli.select().count() > 0
             and climate.Weather_wgn_cli.select().count() > 0,
             "input_files_dir":
             utils.full_path(project_db, m.input_files_dir),
             "input_files_last_written":
             utils.json_encode_datetime(m.input_files_last_written),
             "swat_last_run":
             utils.json_encode_datetime(m.swat_last_run)
         }
     except Project_config.DoesNotExist:
         abort(404,
               message="Could not retrieve project configuration data.")
Exemple #2
0
	def put(self, project_db):
		try:
			SetupProjectDatabase.init(project_db)
			args = self.get_args_reflect(change.Codes_sft, project_db)

			if change.Codes_sft.select().count() > 0:
				result = self.save_args(change.Codes_sft, args, id=1)
			else:
				result = self.save_args(change.Codes_sft, args, is_new=True)

			if result > 0:
				return 200

			abort(400, message='Unable to update calibration codes.')
		except change.Codes_sft.DoesNotExist:
			abort(404, message='Could not find calibration codes in database.')
		except Exception as ex:
			abort(400, message="Unexpected error {ex}".format(ex=ex))
Exemple #3
0
	def put(self, project_db, id):
		try:
			SetupProjectDatabase.init(project_db)
			args = self.get_args('exco_om_exc', project_db)

			m = Exco_om_exc.get(Exco_om_exc.id == id)
			result = save_exco_om_exc(m, args)

			if result > 0:
				return 200

			abort(400, message='Unable to update om exco properties {id}.'.format(id=id))
		except IntegrityError as e:
			abort(400, message='Exco om properties name must be unique.')
		except Exco_om_exc.DoesNotExist:
			abort(404, message='Exco om properties {id} does not exist'.format(id=id))
		except Exception as ex:
			abort(400, message="Unexpected error {ex}".format(ex=ex))
Exemple #4
0
	def put(self, project_db, id):
		try:
			SetupProjectDatabase.init(project_db)
			args = self.get_args('cntable_lum', project_db)

			m = Cntable_lum.get(Cntable_lum.id == id)
			result = save_cntable_lum(m, args)

			if result > 0:
				return 200

			abort(400, message='Unable to update curve number table {id}.'.format(id=id))
		except IntegrityError as e:
			abort(400, message='Curve number table name must be unique.')
		except Cntable_lum.DoesNotExist:
			abort(404, message='Curve number table {id} does not exist'.format(id=id))
		except Exception as ex:
			abort(400, message="Unexpected error {ex}".format(ex=ex))
 def get(self, project_db):
     SetupProjectDatabase.init(project_db)
     if Rout_unit_con.select().count() > 0:
         m = Rout_unit_con.select(
             fn.Max(Rout_unit_con.lat).alias('n'),
             fn.Min(Rout_unit_con.lat).alias('s'),
             fn.Max(Rout_unit_con.lon).alias('e'),
             fn.Min(Rout_unit_con.lon).alias('w')).scalar(as_tuple=True)
         return {'n': m[0], 's': m[1], 'e': m[2], 'w': m[3]}
     elif Chandeg_con.select().count() > 0:  # Quick fix for lte
         m = Chandeg_con.select(
             fn.Max(Chandeg_con.lat).alias('n'),
             fn.Min(Chandeg_con.lat).alias('s'),
             fn.Max(Chandeg_con.lon).alias('e'),
             fn.Min(Chandeg_con.lon).alias('w')).scalar(as_tuple=True)
         return {'n': m[0], 's': m[1], 'e': m[2], 'w': m[3]}
     else:
         return {'n': 0, 's': 0, 'e': 0, 'w': 0}
Exemple #6
0
	def put(self, project_db, id):
		table = change.Water_balance_sft
		item_table = change.Water_balance_sft_item
		description = 'Calibration'

		parser = reqparse.RequestParser()
		parser.add_argument('id', type=int, required=False, location='json')
		parser.add_argument('name', type=str, required=True, location='json')
		parser.add_argument('items', type=list, required=False, location='json')
		args = parser.parse_args(strict=False)

		try:
			SetupProjectDatabase.init(project_db)
			result = self.save_args(table, args, id=id)

			if args['items'] is not None:
				items = []
				for c in args['items']:
					items.append({
						'water_balance_sft_id': id,
						'name': c['name'],
						'surq_rto': c['surq_rto'],
						'latq_rto': c['latq_rto'],
						'perc_rto': c['perc_rto'],
						'et_rto': c['et_rto'],
						'tileq_rto': c['tileq_rto'],
						'pet': c['pet'],
						'sed': c['sed'],
						'orgn': c['orgn'],
						'orgp': c['orgp'],
						'no3': c['no3'],
						'solp': c['solp']
					})
				
				item_table.delete().where(item_table.water_balance_sft_id == id).execute()
				lib.bulk_insert(project_base.db, item_table, items)

			return 200
		except IntegrityError as e:
			abort(400, message='{item} save error. '.format(item=description) + str(e))
		except table.DoesNotExist:
			abort(404, message='{item} {id} does not exist'.format(item=description, id=id))
		except Exception as ex:
			abort(400, message="Unexpected error {ex}".format(ex=ex))
Exemple #7
0
    def post(self, project_db):
        args = get_landuse_args()
        try:
            SetupProjectDatabase.init(project_db)

            m = Landuse_lum()
            result = save_landuse_args(self, m, args)

            if result > 0:
                return 200

            abort(400,
                  message='Unable to update channel properties {id}.'.format(
                      id=id))
        except IntegrityError as e:
            abort(400, message='Channel properties name must be unique.')
        except Plant_ini.DoesNotExist:
            abort(400,
                  message=invalid_name_msg.format(name=args['plnt_com_name']))
        except Management_sch.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['mgt_name']))
        except Cntable_lum.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['cn2_name']))
        except Cons_prac_lum.DoesNotExist:
            abort(400,
                  message=invalid_name_msg.format(name=args['cons_prac_name']))
        except Urban_urb.DoesNotExist:
            abort(400,
                  message=invalid_name_msg.format(name=args['urban_name']))
        except Ovn_table_lum.DoesNotExist:
            abort(400,
                  message=invalid_name_msg.format(name=args['ov_mann_name']))
        except Tiledrain_str.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['tile_name']))
        except Septic_str.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['sep_name']))
        except Filterstrip_str.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['vfs_name']))
        except Grassedww_str.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['grww_name']))
        except Bmpuser_str.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['bmp_name']))
        except Exception as ex:
            abort(400, message="Unexpected error {ex}".format(ex=ex))
Exemple #8
0
	def put(self, project_db):
		try:
			SetupProjectDatabase.init(project_db)
			args = self.get_args('exco_om_exc', project_db, True)

			param_dict = {}
			for key in args.keys():
				if args[key] is not None and key != 'selected_ids':
					param_dict[key] = args[key]

			query = Exco_om_exc.update(param_dict).where(Exco_om_exc.id.in_(args['selected_ids']))
			result = query.execute()

			if result > 0:
				return 200

			abort(400, message='Unable to update exco om properties.')
		except Exception as ex:
			abort(400, message="Unexpected error {ex}".format(ex=ex))
Exemple #9
0
	def get(self, project_db, sort, reverse, page, items_per_page):
		table = change.Plant_gro_sft
		list_name = 'calibrations'

		SetupProjectDatabase.init(project_db)
		total = table.select().count()

		sort_val = SQL(sort)
		if reverse == 'true':
			sort_val = SQL(sort).desc()

		m = table.select().order_by(sort_val).paginate(int(page), int(items_per_page))
		ml = []
		for v in m:
			d = model_to_dict(v, recurse=True)
			d['items'] = len(v.items)
			ml.append(d)

		return {'total': total, list_name: ml}
Exemple #10
0
    def post(self, project_db):
        try:
            SetupProjectDatabase.init(project_db)
            args = self.get_args('om_water_ini', project_db)

            m = Om_water_ini()
            result = save_om_water(m, args)

            if result > 0:
                return model_to_dict(m), 201

            abort(
                400,
                message='Unable to update organic mineral water {id}.'.format(
                    id=id))
        except IntegrityError as e:
            abort(400, message='Organic mineral water name must be unique.')
        except Exception as ex:
            abort(400, message="Unexpected error {ex}".format(ex=ex))
Exemple #11
0
	def put(self, project_db):
		SetupProjectDatabase.init(project_db)
		args = get_recallrec_args(True)

		try:
			param_dict = {}

			if args['rec_typ'] is not None:
				param_dict['rec_typ'] = args['rec_typ']

			con_table = Recall_con
			con_prop_field = Recall_con.rec_id
			prop_table = Recall_rec

			con_param_dict = {}
			if args['wst_name'] is not None:
				con_param_dict['wst_id'] = self.get_id_from_name(Weather_sta_cli, args['wst_name'])
			if args['elev'] is not None:
				con_param_dict['elev'] = args['elev']

			con_result = 1
			if (len(con_param_dict) > 0):
				con_query = con_table.update(con_param_dict).where(con_table.id.in_(args['selected_ids']))
				con_result = con_query.execute()

			if con_result > 0:
				result = 1
				if (len(param_dict) > 0):
					prop_ids = con_table.select(con_prop_field).where(con_table.id.in_(args['selected_ids']))
					query = prop_table.select().where(prop_table.id.in_(prop_ids))
					sim = Time_sim.get_or_create_default()
					for m in query:
						update_recall_rec(project_base.db, m, m.id, sim, args['rec_typ'])

					query2 = prop_table.update(param_dict).where(prop_table.id.in_(prop_ids))
					result = query2.execute()

				if result > 0:
					return 200

			abort(400, message='Unable to update routing unit properties.')
		except Exception as ex:
			abort(400, message="Unexpected error {ex}".format(ex=ex))
Exemple #12
0
    def put(self, project_db):
        SetupProjectDatabase.init(project_db)
        args = get_res_args(True)
        try:
            param_dict = {}

            if args['init_name'] is not None:
                param_dict['init_id'] = self.get_id_from_name(
                    Initial_res, args['init_name'])
            if args['rel_name'] is not None:
                param_dict['rel_id'] = self.get_id_from_name(
                    D_table_dtl, args['rel_name'])
            if args['hyd_name'] is not None:
                param_dict['hyd_id'] = self.get_id_from_name(
                    Hydrology_wet, args['hyd_name'])
            if args['sed_name'] is not None:
                param_dict['sed_id'] = self.get_id_from_name(
                    Sediment_res, args['sed_name'])
            if args['nut_name'] is not None:
                param_dict['nut_id'] = self.get_id_from_name(
                    Nutrients_res, args['nut_name'])

            query = Wetland_wet.update(param_dict).where(
                Wetland_wet.id.in_(args['selected_ids']))
            result = query.execute()

            if result > 0:
                return 200

            abort(400, message='Unable to update wetland .')
        except Initial_res.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['init_name']))
        except D_table_dtl.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['rel_name']))
        except Hydrology_wet.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['hyd_name']))
        except Sediment_res.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['sed_name']))
        except Nutrients_res.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['nut_name']))
        except Exception as ex:
            abort(400, message="Unexpected error {ex}".format(ex=ex))
Exemple #13
0
	def get(self, project_db, id):
		SetupProjectDatabase.init(project_db)
		table = change.Calibration_cal
		description = 'Calibration'
		try:
			m = table.get(table.id == id)
			item = model_to_dict(m, recurse=True, backrefs=True, max_depth=1)

			obj_options = []
			parm_type = m.cal_parm.obj_typ
			obj_typ = table_mapper.cal_to_obj.get(parm_type, None)
			if obj_typ is not None:
				obj_table = table_mapper.obj_typs.get(obj_typ, None)
				if obj_table is not None:
					t = obj_table.select(obj_table.id, obj_table.name).order_by(obj_table.name)
					obj_options = [{'value': v.id, 'text': v.name} for v in t]

			return {'item': item, 'obj_options': obj_options}
		except table.DoesNotExist:
			abort(404, message='{description} {id} does not exist'.format(description=description, id=id))
Exemple #14
0
    def post(self, project_db):
        try:
            SetupProjectDatabase.init(project_db)

            args = self.get_args('aquifer_aqu', project_db)
            result = self.save_args(Aquifer_aqu,
                                    args,
                                    is_new=True,
                                    lookup_fields=['init'])

            if result > 0:
                return 200

            abort(400,
                  message='Unable to update aquifer properties {id}.'.format(
                      id=id))
        except IntegrityError as e:
            abort(400, message='Aquifer properties name must be unique.')
        except Exception as ex:
            abort(400, message="Unexpected error {ex}".format(ex=ex))
Exemple #15
0
 def base_get(self,
              project_db,
              id,
              table,
              description,
              back_refs=False,
              max_depth=1):
     SetupProjectDatabase.init(project_db)
     try:
         m = table.get(table.id == id)
         if back_refs:
             d = model_to_dict(m, backrefs=True, max_depth=max_depth)
             self.get_obj_name(d)
             return d
         else:
             return model_to_dict(m, recurse=False)
     except table.DoesNotExist:
         abort(404,
               message='{description} {id} does not exist'.format(
                   description=description, id=id))
	def post(self, project_db):
		SetupProjectDatabase.init(project_db)
		args = get_hyd_args()

		try:
			e = Hydrology_hyd.get(Hydrology_hyd.name == args['name'])
			abort(400, message='Hydrology name must be unique. A hydrology with this name already exists.')
		except Hydrology_hyd.DoesNotExist:
			try:
				m = Hydrology_hyd()
				result = save_hyd(m, args)

				if result > 0:
					return model_to_dict(m), 201

				abort(400, message='Unable to update hydrology properties {id}.'.format(id=id))
			except IntegrityError as e:
				abort(400, message='Hydrology properties name must be unique.')
			except Exception as ex:
				abort(400, message="Unexpected error {ex}".format(ex=ex))
    def __init__(self,
                 file_name,
                 table_name,
                 db_file,
                 delete_existing=False,
                 related_id=0,
                 ignore_id_col=True):
        self.__abort = False
        SetupProjectDatabase.init(db_file)
        self.file_name = file_name
        self.table = table_mapper.types.get(table_name, None)

        self.table_name = table_name
        self.delete_existing = delete_existing
        self.related_id = related_id
        self.ignore_id_col = ignore_id_col

        if self.table is None:
            sys.exit(
                "Table '{table}' does not exist.".format(table=table_name))
Exemple #18
0
    def put(self, project_db, id):
        args = get_soil_plant_args()
        try:
            SetupProjectDatabase.init(project_db)

            m = Soil_plant_ini.get(Soil_plant_ini.id == id)
            m.name = args['name']
            m.sw_frac = args['sw_frac']
            m.nutrients_id = self.get_id_from_name(Nutrients_sol,
                                                   args['nutrients_name'])
            m.pest_id = self.get_id_from_name(Pest_hru_ini, args['pest_name'])
            m.path_id = self.get_id_from_name(Path_hru_ini, args['path_name'])
            m.hmet_id = self.get_id_from_name(Hmet_hru_ini, args['hmet_name'])
            m.salt_id = self.get_id_from_name(Salt_hru_ini, args['salt_name'])

            result = m.save()

            if result > 0:
                return 200

            abort(400,
                  message='Unable to update soil plant  {id}.'.format(id=id))
        except IntegrityError as e:
            abort(400, message='Soil plant properties name must be unique.')
        except Soil_plant_ini.DoesNotExist:
            abort(404,
                  message='Soil plant properties {id} does not exist'.format(
                      id=id))
        except Nutrients_sol.DoesNotExist:
            abort(400,
                  message=invalid_name_msg.format(name=args['nutrients_name']))
        except Pest_hru_ini.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['pest_name']))
        except Path_hru_ini.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['path_name']))
        except Hmet_hru_ini.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['hmet_name']))
        except Salt_hru_ini.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['salt_name']))
        except Exception as ex:
            abort(400, message="Unexpected error {ex}".format(ex=ex))
Exemple #19
0
    def put_con(self, project_db, id, prop_name, con_table, prop_table):
        args = self.get_con_args(prop_name)
        try:
            SetupProjectDatabase.init(project_db)

            params = {
                'name': args['name'],
                'area': args['area'],
                'lat': args['lat'],
                'lon': args['lon'],
                'elev': args['elev'],
            }

            params['{}_id'.format(prop_name)] = self.get_id_from_name(
                prop_table, args['{}_name'.format(prop_name)])

            if args['wst_name'] is not None:
                params['wst_id'] = self.get_id_from_name(
                    climate.Weather_sta_cli, args['wst_name'])

            result = con_table.update(params).where(
                con_table.id == id).execute()

            if result > 0:
                return 200

            abort(400, message='Unable to update Hru {id}.'.format(id=id))
        except IntegrityError:
            abort(400, message='Name must be unique.')
        except con_table.DoesNotExist:
            abort(404, message='Object {id} does not exist'.format(id=id))
        except prop_table.DoesNotExist:
            abort(400,
                  message=self.__invalid_name_msg.format(
                      name=args['{}_name'.format(prop_name)]))
        except climate.Weather_sta_cli.DoesNotExist:
            abort(
                400,
                message=self.__invalid_name_msg.format(name=args['wst_name']))
        except Exception as ex:
            abort(400, message="Unexpected error {ex}".format(ex=ex))
Exemple #20
0
    def put(self, project_db, id):
        args = get_routingunit_args()
        try:
            SetupProjectDatabase.init(project_db)

            m = Rout_unit_rtu.get(Rout_unit_rtu.id == id)
            m.name = args['name']
            m.description = args['description']
            if args['dlr_name']:
                m.dlr_id = self.get_id_from_name(Delratio_del,
                                                 args['dlr_name'])
            if args['topo_name']:
                m.topo_id = self.get_id_from_name(Topography_hyd,
                                                  args['topo_name'])
            if args['field_name']:
                m.field_id = self.get_id_from_name(Field_fld,
                                                   args['field_name'])

            result = m.save()

            if result > 0:
                return 200

            abort(400,
                  message='Unable to update routing unit properties {id}.'.
                  format(id=id))
        except IntegrityError as e:
            abort(400, message='Routing unit properties name must be unique.')
        except Rout_unit_rtu.DoesNotExist:
            abort(404,
                  message='Routing unit properties {id} does not exist'.format(
                      id=id))
        except Topography_hyd.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['topo_name']))
        except Delratio_del.DoesNotExist:
            abort(400, message=invalid_name_msg.format(name=args['dlr_name']))
        except Field_fld.DoesNotExist:
            abort(400,
                  message=invalid_name_msg.format(name=args['field_name']))
        except Exception as ex:
            abort(400, message="Unexpected error {ex}".format(ex=ex))
Exemple #21
0
    def get(self, project_db, sort, reverse, page, items_per_page):
        table = Plant_ini
        list_name = 'plants'
        SetupProjectDatabase.init(project_db)
        total = table.select().count()

        sort_val = SQL(sort)
        if reverse == 'true':
            sort_val = SQL(sort).desc()

        m = table.select().order_by(sort_val).paginate(int(page),
                                                       int(items_per_page))
        ml = [{
            'id': v.id,
            'name': v.name,
            'rot_yr_ini': v.rot_yr_ini,
            'description': v.description,
            'num_plants': len(v.plants)
        } for v in m]

        return {'total': total, list_name: ml}
Exemple #22
0
    def get(self, project_db, sort, reverse, page, items_per_page):
        table = Management_sch
        list_name = 'mgt_sch'

        SetupProjectDatabase.init(project_db)
        total = table.select().count()

        sort_val = SQL(sort)
        if reverse == 'true':
            sort_val = SQL(sort).desc()

        m = table.select().order_by(sort_val).paginate(int(page),
                                                       int(items_per_page))
        ml = [{
            'id': v.id,
            'name': v.name,
            'num_ops': len(v.operations),
            'num_auto': len(v.auto_ops)
        } for v in m]

        return {'total': total, list_name: ml}
Exemple #23
0
    def get(self, project_db, sort, reverse, page, items_per_page):
        table = Ls_unit_def
        list_name = 'ls_units'

        SetupProjectDatabase.init(project_db)
        total = table.select().count()

        sort_val = SQL(sort)
        if reverse == 'true':
            sort_val = SQL(sort).desc()

        m = table.select().order_by(sort_val).paginate(int(page),
                                                       int(items_per_page))
        ml = [{
            'id': v.id,
            'name': v.name,
            'area': v.area,
            'num_elements': len(v.elements)
        } for v in m]

        return {'total': total, list_name: ml}
Exemple #24
0
	def put(self, project_db):
		try:
			SetupProjectDatabase.init(project_db)
			args = self.get_args('cntable_lum', project_db, True)

			remove_spaces = ['description', 'treat', 'cond_cov']

			param_dict = {}
			for key in args.keys():
				if args[key] is not None and key != 'selected_ids':
					param_dict[key] = utils.remove_space(args[key]) if key in remove_spaces else args[key]

			query = Cntable_lum.update(param_dict).where(Cntable_lum.id.in_(args['selected_ids']))
			result = query.execute()

			if result > 0:
				return 200

			abort(400, message='Unable to update curve number tables.')
		except Exception as ex:
			abort(400, message="Unexpected error {ex}".format(ex=ex))
    def post(self, project_db):
        try:
            SetupProjectDatabase.init(project_db)
            args = self.get_args('graze_ops', project_db)

            result = self.save_args(Graze_ops,
                                    args,
                                    is_new=True,
                                    lookup_fields=['fert'])

            if result > 0:
                return 201

            abort(
                400,
                message='Unable to update graze operation {id}.'.format(id=id))
        except IntegrityError as e:
            abort(400,
                  message='Graze operation name must be unique. ' + str(e))
        except Exception as ex:
            abort(400, message="Unexpected error {ex}".format(ex=ex))
Exemple #26
0
    def post(self, project_db):
        args = get_con_out_args()
        SetupProjectDatabase.init(project_db)

        try:
            m = Delratio_con_out()
            m.order = args['order']
            m.obj_typ = args['obj_typ']
            m.obj_id = args['obj_id']
            m.hyd_typ = args['hyd_typ']
            m.frac = args['frac']
            m.delratio_con_id = args['delratio_con_id']

            result = m.save()

            if result > 0:
                return model_to_dict(m), 201

            abort(400, message='Unable to create delratio outflow.')
        except Exception as ex:
            abort(400, message="Unexpected error {ex}".format(ex=ex))
Exemple #27
0
    def put(self, project_db, id):
        try:
            SetupProjectDatabase.init(project_db)
            args = get_hyd_args()
            m = Hydrology_hyd.get(Hydrology_hyd.id == id)
            result = save_hyd(m, args)

            if result > 0:
                return 200

            abort(400,
                  message='Unable to update hydrology properties {id}.'.format(
                      id=id))
        except IntegrityError as e:
            abort(400, message='Hydrology properties name must be unique.')
        except Hydrology_hyd.DoesNotExist:
            abort(404,
                  message='Hydrology properties {id} does not exist'.format(
                      id=id))
        except Exception as ex:
            abort(400, message="Unexpected error {ex}".format(ex=ex))