pycen/zh.py
2021-10-08 15:14:47 +02:00

685 lines
29 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
#Nom : : zh.py
#Description :
#Copyright : 2021, CEN38
#Auteur : Colas Geier
#Version : 1.0
import pandas as pd
# import pandas_access as mdb
# import numpy as np
# from sqlalchemy.sql.expression import column
from sqlalchemy import create_engine
from geoalchemy2 import Geometry
from .pers.pers import _get_table
from .sites.sites import _get_typ_milieux
from .tools import _get_relation_autor
#####################################
### schema personnes ###
#####################################
# class pers:
# def __init__(self):
# from .params import con
# self.schema = 'personnes'
# self.con = con
# # self._get_table = _get_table
# def get_auteur(self, nom=None, prenom=None):
# sql = 'SELECT * FROM %s.personne'%self.schema
# if nom or prenom : sql = sql + ' WHERE '
# if nom :
# sql = sql + 'nom IN %(nom)s'
# nom = to_upper(nom)
# if nom and prenom : sql = sql + ' AND '
# if prenom :
# sql = sql + 'prenom IN %(prenom)s'
# prenom = to_upperfirst(prenom)
# df = pd.read_sql(
# sql = sql,
# con = self.con,
# params = {'nom': to_tuple(nom), 'prenom': to_tuple(prenom) })
# return df
# def get_organisme(self, ids=None, nom=None):
# table = 'organisme'
# return _get_table(self.con, self.schema, table, ids=ids, nom=nom)
#####################################
### schema sites ###
#####################################
# class sites:
# def __init__(self):
# from .params import con
# from .pers import pers
# self.schema = 'sites'
# self.con = con
# self.typ_milieux = self._get_typ_milieux()
# self.typo_sdage = self._get_typo_sdage()
# self.typ_site = self._get_typ_site()
# self.auteur = pers.get_auteur()
# self.organisme = pers.get_organisme()
# def _get_typ_milieux(self, ids=None, nom=None):
# table = 'type_milieu'
# df = _get_table(self.con, self.schema, table, ids=ids, nom=nom)
# return df
# def _get_typo_sdage(self, ids=None, nom=None):
# table = 'typo_sdage'
# df = _get_table(self.con, self.schema, table, ids=ids, nom=nom)
# return df
# def _get_typ_site(self, ids=None, nom=None):
# table = 'type_site'
# df = _get_table(self.con, self.schema, table, ids=ids, nom=nom)
# return df
# def _merge_orga(self, df, split_cols):
# org = self.organisme
# aut = self.auteur
# df = df.copy()
# for c in split_cols:
# if not isinstance(df[c], int): df[c] = df[c].astype(float)
# df[c].replace(aut.id.tolist(), aut.id_organisme.tolist(), inplace=True)
# df[c].replace(org.id.tolist(), org.nom.tolist(), inplace=True)
# df['organisme'] = None
# for c in split_cols:
# df.loc[df.organisme.isna(), 'organisme'] = df.loc[df['organisme'].isna(), c]
# for c in split_cols:
# comp = df.loc[~df[c].isna(),'organisme'].compare(df.loc[~df[c].isna(), c])
# if not comp.empty:
# comp['test'] = comp.apply(lambda x: x['other'] in x['self'], axis=1)
# comp = comp[~comp.test]
# if not comp.empty:
# df.loc[comp.index,'organisme'] = comp.self + ' & ' + comp.other
# df.drop(columns=split_cols, inplace=True)
# return df
# def _merge_author(self, df, col_aut, orga=False):
# # récupération des auteurs
# aut = self.auteur.fillna('')
# aut['nom_prenom'] = (aut['nom'] + ' ' + aut['prenom']).str.strip()
# aut['id'] = aut['id'].astype(str)
# # merge des auteurs
# r_id = df[['id', col_aut]].copy()
# r_idSplit = r_id[col_aut].str.split(' & ', expand=True)
# r_id = r_id.join(r_idSplit)
# cSplit = r_idSplit.shape[1]
# cSplit = list(range(cSplit))
# if orga:
# # récup des organismes
# org = self._merge_orga(r_id, cSplit)
# r_id[cSplit] = r_id[cSplit].replace(aut['id'].tolist(),aut['nom_prenom'].tolist())
# r_id = _aggr_cols(r_id,cSplit,' & ') \
# .rename(columns={'aggreg': 'auteur'}) \
# .drop(columns=cSplit)
# if orga:
# # merge des organismes
# r_id = pd.merge(r_id,org, on=['id', col_aut])
# df = pd.merge(df,r_id, on=['id', col_aut]) \
# .drop(columns=[col_aut])
# return df
# def _merge_relation(self, df, table, schema, id=None, left_id=None,right_id=None):
# con = self.con
# if id:
# params = {id: df[id].tolist() }
# elif left_id and right_id:
# params = {right_id: df[left_id].tolist() }
# mrg = _get_table(con, schema, table, params_col=params)
# if table == 'r_sites_auteur' or table == 'r_geomsites_auteur':
# mrg = mrg[[right_id,'id_auteur']].groupby(
# [right_id])['id_auteur'].apply(lambda x: ' & '.join(x.astype(str)))
# mrg = pd.DataFrame(data=mrg)
# if id:
# df = pd.merge(df,mrg, how='left', on=id)
# elif left_id and right_id:
# df = pd.merge(df,mrg, how='left', left_on=left_id, right_on=right_id)
# return df
# def get_sitesInfos(self, ids=None, nom=None, columns=None, with_nameOrga=False, details=False, params_col={}):
# drop = []
# table = 'sites'
# df = _get_table(self.con, self.schema, table, ids=ids, nom=nom, cols=columns, params_col=params_col)
# # récupération des auteurs
# if 'id_auteur' in df.columns:
# df.drop(columns='id_auteur', inplace=True)
# df = _merge_relation(df=df,table='r_sites_auteur',schema=self.schema, left_id='id',right_id='id_site')
# df = _merge_author(df=df, col_aut='id_auteur', orga=with_nameOrga)
# # merge type_site
# if 'id_type_site' in df.columns:
# df = pd.merge(df, self.typ_site, how='left', left_on='id_type_site', right_on='id', suffixes=('','_y') ) \
# .drop(columns=['id_type_site', 'id_y']) \
# .rename(columns={'nom_y': 'type_site', 'description': 'desc_type_site'})
# drop += ['desc_type_site']
# # merge typo_sdage
# if 'id_typo_sdage' in df.columns:
# df = pd.merge(df, self.typo_sdage, how='left', left_on='id_typo_sdage', right_on='id', suffixes=('','_y') ) \
# .drop(columns=['id_typo_sdage', 'id_y']) \
# .rename(columns={'nom_y': 'typo_sdage', 'description': 'desc_typo_sdage'})
# drop += ['desc_typo_sdage']
# # merge type_milieu
# if 'id_type_milieu' in df.columns:
# df = pd.merge(df, self.typ_milieux, how='left', left_on='id_type_milieu', right_on='id', suffixes=('','_y') ) \
# .drop(columns=['id_type_milieu', 'id_y']) \
# .rename(columns={'nom_y': 'type_milieu', 'description': 'desc_type_milieu', 'nom_court': 'nom_court_milieu'})
# drop += ['desc_type_milieu', 'nom_court_milieu']
# if not details:
# df.drop(columns=drop, inplace=True)
# return df.sort_values('id')
# def get_sitesGeom(self, id_site=None, nom_site=None, columns=None, last_update=False, with_nameOrga=False, params_col={}):
# # from shapely.wkb import loads
# # import geopandas as gpd # set_geometry
# if columns:
# if not isinstance(columns, list): columns = [columns]
# if 'id' not in columns: columns.insert(0,'id')
# if 'id_site' not in columns: columns.insert(1,'id_site')
# if 'geom' not in columns: columns.insert(2,'geom')
# table = 'sites'
# df = _get_table(self.con, self.schema, table, ids=id_site, nom=nom_site, cols='id', params_col=params_col)
# idSite = df.id.tolist()
# table = 'r_sites_geom'
# df = _get_table(self.con, self.schema, table, params_col={'id_site':idSite}, cols=columns)
# if last_update:
# df.drop_duplicates(subset=['id_site'], keep='last', inplace=True)
# df.reset_index(inplace=True, drop=True)
# # df = _set_geom(df)
# # df['geom'] = [(loads(geom, hex=True)) for geom in df['geom']]
# # df = df.set_geometry('geom', crs='EPSG:2154')
# # merge auteur
# if 'id_auteur' in df.columns:
# df.drop(columns='id_auteur', inplace=True)
# df = _merge_relation(df=df,table='r_geomsites_auteur',schema=self.schema, left_id='id',right_id='id_geom_site')
# df = _merge_author(df=df, col_aut='id_auteur', orga=with_nameOrga)
# return df
#####################################
### schema zh ###
#####################################
class zh():
def __init__(self):
from .params import con
from .tools import _get_relation_tab
self.schema = 'zones_humides'
self.con = con
self.typ_milieux = _get_typ_milieux(nom='Tourbières et marais')
self.id_milieux = self.typ_milieux.id.values[0]
self._get_relation_tab = _get_relation_tab
self.lst_tab = con.dialect.get_table_names(con,schema=self.schema)
self.columns_rSiteFcts = con.dialect.get_columns(con,schema=self.schema,table_name='r_site_fctecosociopatri')
self.columns_r_SiteCon = con.dialect.get_columns(con,schema=self.schema,table_name='r_site_type_connect')
self.columns_rSiteCritDelim = con.dialect.get_columns(con,schema=self.schema,table_name='r_site_critdelim')
self.columns_r_SiteHabs = con.dialect.get_columns(con,schema=self.schema,table_name='r_site_habitat')
self.columns_rSiteRegHyd = con.dialect.get_columns(con,schema=self.schema,table_name='r_site_reghydro')
self.columns_r_SiteSub = con.dialect.get_columns(con,schema=self.schema,table_name='r_site_sub')
self.columns_r_SiteUsgPrss = con.dialect.get_columns(con,schema=self.schema,table_name='r_site_usageprocess')
def _get_param(self, param_table, type_table=None, type_court=True):
if type_table:
typ = _get_table(self.con, self.schema, table=type_table)
par = _get_table(self.con, self.schema, table=param_table, params_col={'id_type':typ.id.tolist()})
df = pd.merge(par, typ, left_on='id_type', right_on='id', how='left', suffixes=(None, '_typ')) \
.drop(columns=['id_type','id_typ'])
if 'description_typ' in df.columns: del df['description_typ']
if type_court: df = df.drop(columns=['nom_typ']).rename(columns={'nom_court_typ':'type'})
else : df = df.drop(columns=['nom_court_typ'],errors='ignore').rename(columns={'nom_typ':'type'})
df = df.set_index(['id', 'type']).reset_index()
else:
df = _get_table(self.con, self.schema, table=param_table)
return df
# def _get_relation_tab(self, tab, id_site=None, nom_site=None, last_update=False, geom=False,params_col={}):
# table = 'sites'
# dfSG = get_sitesGeom(columns='date', id_site=id_site, nom_site=nom_site, last_update=last_update,params_col=params_col)
# if not geom and not dfSG.empty:
# dfSG.drop('geom',1,inplace=True)
# ids = dfSG.id.tolist()
# table = tab
# if ids :
# df = _get_table(self.con, self.schema, table, params_col={'id_geom_site':ids})
# # if not df.empty:
# df = pd.merge(dfSG,df, how='left', left_on='id', right_on='id_geom_site', suffixes=('_x', None)) \
# .drop(['id_x','id_geom_site'],1) \
# .set_index('id').reset_index()
# return df
# else:
# print('PAS de géometries de sites sélectionnées ...')
def get_delim(self, id_site=None, nom_site=None, last_update=True, geom=False,
nom_type_court=True,statut='actif'):
table = 'r_site_critdelim'
df = self._get_relation_tab(
schema=self.schema,tab=table,id_site=id_site,nom_site=nom_site,last_update=last_update,geom=geom,
params_col={'id_type_milieu':self.id_milieux.astype(str)}, statut=statut)
dic = self._get_param(type_table='type_param_delim_fct', param_table='param_delim_fct', type_court=nom_type_court)
if not df.empty:
df = _get_relation_autor(df, relation_tab='r_rsitedelim_auteur', schema=self.schema,
id_df='id', id_relation='id_sitedelim', id_rela_auth='id_auteur' )
df = pd.merge(df,dic, how='left', left_on='id_crit_delim', right_on='id', suffixes=(None,'_y')) \
.drop(['id_y','id_crit_delim'],1) \
.rename(columns={'description_y':'desc_param', 'nom_court':'nom_court_crit','nom':'nom_crit'}) \
.sort_values('id_site')
if df.nom_court_crit.isnull().sum() == df.shape[0] : del df['nom_court_crit']
# typ = df.type.unique()
# x = {}
# for t in typ:
# x[t] = df[df.type == t]
# x[t] = x[t].rename(columns={'nom': t}) \
# .reset_index(drop=True)
return df
def get_fct(self, id_site=None, nom_site=None, last_update=True, geom=False, nom_type_court=True,statut='actif'):
table = 'r_site_fctecosociopatri'
df = self._get_relation_tab(schema=self.schema,tab=table,id_site=id_site,nom_site=nom_site,last_update=last_update,geom=geom,
params_col={'id_type_milieu':self.id_milieux.astype(str)}, statut=statut)
dic = self._get_param(type_table='type_param_fct', param_table='param_fct_eco_socio_patri', type_court=nom_type_court)
if not df.empty:
df = _get_relation_autor(df, relation_tab='r_rsitefct_auteur', schema=self.schema,
id_df='id', id_relation='id_sitefct', id_rela_auth='id_auteur' )
df = pd.merge(df,dic, how='left', left_on='id_fct', right_on='id', suffixes=(None,'_y')) \
.drop(['id_y','id_fct'],1) \
.rename(columns={'description_y':'desc_param', 'nom_court':'nom_court_fct','nom':'nom_fct'}) \
.sort_values('id_site')
if df.nom_court_fct.isnull().sum() == df.shape[0] : del df['nom_court_fct']
return df
def get_connex(self, id_site=None, nom_site=None, last_update=True, geom=False,statut='actif'):
table = 'r_site_type_connect'
df = self._get_relation_tab(schema=self.schema,tab=table,id_site=id_site,nom_site=nom_site,last_update=last_update,geom=geom,
params_col={'id_type_milieu':self.id_milieux.astype(str)}, statut=statut)
dic = self._get_param(param_table='param_type_connect')
if not df.empty:
df = _get_relation_autor(df, relation_tab='r_rsiteconnect_auteur', schema=self.schema,
id_df='id', id_relation='id_siteconnect', id_rela_auth='id_auteur' )
df = pd.merge(df,dic, how='left', left_on='id_param_connect', right_on='id', suffixes=(None,'_y')) \
.drop(['id_y','id_param_connect'],1) \
.rename(columns={'description_y':'desc_param', 'nom':'connexion'}) \
.sort_values('id_site')
return df
def get_sub(self, id_site=None, nom_site=None, last_update=True, geom=False,statut='actif'):
table = 'r_site_sub'
df = self._get_relation_tab(schema=self.schema,tab=table,id_site=id_site,nom_site=nom_site,last_update=last_update,geom=geom,
params_col={'id_type_milieu':self.id_milieux.astype(str)}, statut=statut)
dic = self._get_param(type_table='type_param_sub', param_table='param_sub', type_court=False)
d1 = dic[dic.type == 'Submersion étendue']
d2 = dic[dic.type == 'Submersion fréquente']
if not df.empty:
df = _get_relation_autor(df, relation_tab='r_rsitesub_auteur', schema=self.schema,
id_df='id', id_relation='id_sitesub', id_rela_auth='id_auteur' )
df = pd.merge(df,d1, how='left', left_on='id_etendsub', right_on='id', suffixes=(None,'_y')) \
.drop(['id_y','id_etendsub', 'type'],1) \
.rename(columns={'description':'desc_param_etend', 'nom':'Submersion étendue'})
df = pd.merge(df,d2, how='left', left_on='id_freqsub', right_on='id', suffixes=(None,'_y')) \
.drop(['id_y','id_freqsub', 'type'],1) \
.rename(columns={'description':'desc_param_freq', 'nom':'Submersion fréquente'}) \
.sort_values('id_site')
df.rename(columns={'id_origsub': 'origine_sub'}, inplace=True)
if df['desc_param_etend'].isnull().sum() == df.shape[0] : del df['desc_param_etend']
if df['desc_param_freq'].isnull().sum() == df.shape[0] : del df['desc_param_freq']
return df
def get_usageprocess(self, id_site=None, nom_site=None, last_update=True, geom=False,statut='actif'):
table = 'r_site_usageprocess'
df = self._get_relation_tab(schema=self.schema,tab=table,id_site=id_site,nom_site=nom_site,last_update=last_update,geom=geom,
params_col={'id_type_milieu':self.id_milieux.astype(str)}, statut=statut)
dic1 = self._get_param(param_table='param_activ_hum')
dic2 = self._get_param(param_table='param_position')
dic3 = self._get_param(param_table='param_impact')
if not df.empty:
df = _get_relation_autor(df, relation_tab='r_rsiteusage_auteur', schema=self.schema,
id_df='id', id_relation='id_siteusage', id_rela_auth='id_auteur' )
df = pd.merge(df,dic1, how='left', left_on='id_activ_hum', right_on='id', suffixes=(None,'_y')) \
.drop(['id_y','id_activ_hum'],1) \
.rename(columns={'description':'desc_param_usag', 'nom':'activite_hum'})
df = pd.merge(df,dic2, how='left', left_on='id_position', right_on='id', suffixes=(None,'_y')) \
.drop(['id_y','id_position'],1) \
.rename(columns={'description':'desc_param_pos', 'nom':'position'}) \
.sort_values('id_site')
df = pd.merge(df,dic3, how='left', left_on='id_impact', right_on='id', suffixes=(None,'_y')) \
.drop(['id_y','id_impact'],1) \
.rename(columns={'description':'desc_param_imp', 'nom':'impact'}) \
.sort_values('id_site')
return df
def _get_r_toponymie(self, ids=None):
table = 'r_toponymie'
df = _get_table(self.con, self.schema, table=table, ids=ids)
dic1 = self._get_param(param_table='liste_table_topohydro')
if not df.empty:
df = pd.merge(df,dic1, how='left', left_on='id_orig', right_on='id', suffixes=(None,'_y')) \
.drop(['id_y','id_orig'],1)
n_tab = df.nom_table.unique()
for tab in n_tab:
iids = df.loc[df.nom_table == tab, 'id_topo'].to_list()
if tab == 'orig_hydro': dic = _get_table(self.con, self.schema, table='orig_hydro', ids=iids)
if tab == 'troncon_hydro': dic = ref_hydro.get_troncon(cols=['id','nom'], ids=iids)
df.loc[df.nom_table == tab, 'id_topo'] = df.loc[df.nom_table == tab, 'id_topo'].replace(dic.id.to_list(),dic.nom.to_list())
if tab == 'troncon_hydro': df = pd.merge(df, dic, how='left', left_on='id_topo', right_on='nom', suffixes=(None,'_y')) \
.drop(columns=['id_y', 'nom'])
df.rename(columns={'id_topo':'toponymie'})
return df
def get_regHydro(self, id_site=None, nom_site=None, last_update=True, geom=False,statut='actif'):
table = 'r_site_reghydro'
df = self._get_relation_tab(schema=self.schema,tab=table,id_site=id_site,nom_site=nom_site,last_update=last_update,geom=geom,
params_col={'id_type_milieu':self.id_milieux.astype(str)}, statut=statut)
dic1 = self._get_param(param_table='param_reg_hydro')
dic2 = self._get_param(param_table='param_permanence')
if not df.empty:
df = _get_relation_autor(df, relation_tab='r_rsitehydro_auteur', schema=self.schema,
id_df='id', id_relation='id_sitehydro', id_rela_auth='id_auteur' )
# dic3 = self._get_r_toponymie(ids=df.rmq_toponymie.unique().tolist())
df.in_out = df.in_out.replace([True,False],['entree','sortie'])
df = pd.merge(df,dic1, how='left', left_on='id_reg_hydro', right_on='id', suffixes=(None,'_y')) \
.drop(['id_y','id_reg_hydro'],1) \
.rename(columns={'description':'desc_param_regHydri', 'nom':'regime_hydri'})
if df.id_permanence.isna().all() :
df.rename(columns={'id_permanence':'permanence'}, inplace=True)
df['desc_param_perm'] = None
else:
df = pd.merge(df,dic2, how='left', left_on='id_permanence', right_on='id', suffixes=(None,'_y')) \
.drop(['id_y','id_permanence'],1) \
.rename(columns={'description':'desc_param_perm', 'nom':'permanence'})
# df = pd.merge(df,dic3, left_on='rmq_toponymie', right_on='id', suffixes=(None,'_y')) \
# .drop(['id_y','rmq_toponymie'],1) \
# .rename(columns={'description':'desc_topo'}) \
# .sort_values('id_site')
return df
def get_habitat(self, id_site=None, nom_site=None, last_update=True, geom=False,statut='actif'):
table = 'r_site_habitat'
df = self._get_relation_tab(schema=self.schema,tab=table,id_site=id_site,nom_site=nom_site,last_update=last_update,geom=geom,
params_col={'id_type_milieu':self.id_milieux.astype(str)}, statut=statut)
if not df.empty:
df = _get_relation_autor(df, relation_tab='r_rsitehab_auteur', schema=self.schema,
id_df='id', id_relation='id_sitehab', id_rela_auth='id_auteur' )
ids = df[~df.id_cb.isna()].id_cb.unique().tolist()
dic = ref_hab().get_CB(ids=ids,cols=['id','lb_hab_fr'])
df = pd.merge(df,dic, how='left', left_on='id_cb', right_on='id', suffixes=(None,'_y')) \
.drop(['id_y'], 1) \
.rename(columns={'id_cb':'code_cb'}) \
.sort_values('id_site')
return df
def get_sitesInfos(self, id_site=None, nom_site=None, columns=None, with_nameOrga=False, statut='actif'):
from .sites.sites import get_sitesInfos
df = get_sitesInfos(ids=id_site, nom=nom_site, columns=columns, with_nameOrga=with_nameOrga,
params_col={'id_type_milieu':self.id_milieux.astype(str)}, statut=statut)
return df
def get_sitesGeom(self, id_site=None, nom_site=None, columns=None, last_update=True, with_nameOrga=False,
params_col={}, statut='actif'):
from .sites.sites import get_sitesGeom
if params_col:
params_col = {**params_col, 'id_type_milieu':self.id_milieux.astype(str) }
df = get_sitesGeom(id_site=id_site, nom_site=nom_site, columns=columns,
with_nameOrga=with_nameOrga,last_update=last_update,
params_col=params_col , statut=statut)
drop_cols = ['link_pdf', 'rmq_fct_majeur',
'rmq_interet_patri', 'rmq_bilan_menace', 'rmq_orient_act',
'rmq_usage_process']
cols = df.columns
c = cols[cols.isin(drop_cols)]
if not c.empty:
df.drop(columns=c, inplace=True)
return df
def get_evaluation(self, id_site=None, nom_site=None, columns=None, last_update=True, with_nameOrga=False,
params_col={}, statut='actif'):
from .sites.sites import get_sitesGeom
if params_col:
params_col = {**params_col, 'id_type_milieu':self.id_milieux.astype(str) }
df = get_sitesGeom(id_site=id_site, nom_site=nom_site, columns=columns,
with_nameOrga=with_nameOrga,last_update=last_update,
params_col=params_col, statut=statut)
df.drop(columns=['geom'], inplace=True)
return df
def get_bilan(self, code_site=None, nom_site=None, statut='actif',last_update=True):
'''
:code_site: list,str. Code du site de la zh.
:nom_site: list,str. Nom du site de la zh.
'''
info = self.get_sitesInfos(id_site=code_site, nom_site=nom_site,statut=statut)
CB = self.get_habitat(id_site=code_site, nom_site=nom_site,last_update=last_update,statut=statut)
delim = self.get_delim(id_site=code_site, nom_site=nom_site,last_update=last_update,statut=statut)
desc = self.get_usageprocess(id_site=code_site, nom_site=nom_site,last_update=last_update,statut=statut)
rghyd = self.get_regHydro(id_site=code_site, nom_site=nom_site,last_update=last_update,statut=statut)
subm = self.get_sub(id_site=code_site, nom_site=nom_site,last_update=last_update,statut=statut)
conn = self.get_connex(id_site=code_site, nom_site=nom_site,last_update=last_update,statut=statut)
fct = self.get_fct(id_site=code_site, nom_site=nom_site,last_update=last_update,statut=statut)
evall = self.get_evaluation(id_site=code_site, nom_site=nom_site,last_update=last_update,statut=statut)
print('subm : {}'.format(subm))
print('conn : {}'.format(conn))
if subm.empty:
sub_con = conn.rename(columns={
'description': 'desc_connex',
'valid': 'valid_cnx',
})
elif conn.empty:
sub_con = subm.rename(columns={'valid': 'valid_sub',})
else:
sub_con = pd.merge(subm, conn, how='outer', on=['id', 'id_site', 'date_geom','auteur_geom']) \
.rename(columns={
'description': 'desc_connex',
'valid_x': 'valid_sub',
'valid_y': 'valid_cnx',
})
fctmt = {
'entree_eau': rghyd[rghyd.in_out == 'entree'].drop(columns=['in_out']),
'sortie_eau': rghyd[rghyd.in_out == 'sortie'].drop(columns=['in_out']),
'sub_connex': sub_con,
}
lst_df = {
'infos':info,
'corine_biotope': CB,
'delimitation': delim,
'description': desc,
'fonctionnement': fctmt,
'fonction': fct,
'evaluation': evall}
for key in lst_df:
if isinstance(lst_df[key], pd.DataFrame): lst_df[key].name = key
if isinstance(lst_df[key], dict):
for d in lst_df[key]:
lst_df[key][d].name = d
lst_df[key]['title'] = key
return lst_df
#####################################
### schema ref_habitats ###
#####################################
class ref_hab:
def __init__(self):
from .params import con
self.schema = 'ref_habitats'
self.con = con
def get_CB(self, ids=None, cols=None, params_col={}):
table = 'corine_biotope'
df = _get_table(self.con, self.schema, table=table, ids=ids, cols=cols, params_col=params_col)
return df
#####################################
### schema ref_hydro ###
#####################################
class ref_hydro:
def __init__(self):
from .params import con
self.schema = 'ref_hydro'
self.con = con
def get_troncon(self, ids=None, cols=None, params_col={}):
table = 'troncon_hydro'
df = _get_table(self.con, self.schema, table=table, ids=ids, cols=cols, params_col=params_col)
# df = _set_geom(df)
return df
def get_coursEau(self, ids=None, cols=None, params_col={}):
table = 'cours_eau'
df = _get_table(self.con, self.schema, table=table, ids=ids, cols=cols, params_col=params_col)
# df = _set_geom(df)
return df
def get_masseEau(self, ids=None, cols=None, params_col={}):
table = 'masse_eau'
df = _get_table(self.con, self.schema, table=table, ids=ids, cols=cols, params_col=params_col)
# df = _set_geom(df)
return df
def get_planEau(self, ids=None, cols=None, params_col={}):
table = 'plan_eau'
df = _get_table(self.con, self.schema, table=table, ids=ids, cols=cols, params_col=params_col)
# df = _set_geom(df)
return df
def get_ssbv(self, ids=None, cols=None, params_col={}):
table = 'ssbv'
df = _get_table(self.con, self.schema, table=table, ids=ids, cols=cols, params_col=params_col)
# df = _set_geom(df)
return df
#####################################
### Update ###
#####################################
def update_to_sql(df, con, table_name, schema_name, key_name):
a = []
b = []
table = table_name
schema = schema_name
primary_key = key_name
if isinstance(primary_key, str): primary_key = [primary_key]
for col in df.columns:
if col in primary_key:
b.append("t.{col}=f.{col}".format(col=col))
else:
a.append("{col}=t.{col}".format(col=col))
df.to_sql(
name = 'temp_table',
con = con,
schema = schema,
if_exists = 'replace',
index = False,
method = 'multi'
)
update_stmt_1 = "UPDATE {sch}.{final_table} f".format(sch=schema,final_table=table)
update_stmt_2 = " FROM {sch}.temp_table t".format(sch=schema)
update_stmt_6 = " WHERE %s"%' AND '.join(b)
update_stmt_3 = " SET "
update_stmt_4 = ", ".join(a)
update_stmt_5 = update_stmt_1 + update_stmt_3 + update_stmt_4 + update_stmt_2 + update_stmt_6 + ";"
drop_stmt = "DROP TABLE {sch}.temp_table ;".format(sch=schema)
with con.begin() as cnx:
cnx.execute(update_stmt_5)
cnx.execute(drop_stmt)
return print('END update')
# [SQL: INSERT INTO zones_humides.r_site_reghydro (id, id_geom_site, id_reg_hydro, id_permanence, rmq_toponymie, in_out)
# VALUES (%(id)s, %(id_geom_site)s, %(id_reg_hydro)s, %(id_permanence)s, %(rmq_toponymie)s, %(in_out)s)]
# [parameters: ({'id': 0, 'id_geom_site': 5, 'id_reg_hydro': '0', 'id_permanence': '1', 'rmq_toponymie': '', 'in_out': True},
# {'id': 1, 'id_geom_site': 5, 'id_reg_hydro': '1', 'id_permanence': '1', 'rmq_toponymie': '', 'in_out': False},
# {'id': 2, 'id_geom_site': 6, 'id_reg_hydro': '0', 'id_permanence': '1', 'rmq_toponymie': '', 'in_out': True},
# {'id': 3, 'id_geom_site': 6, 'id_reg_hydro': '1', 'id_permanence': '1', 'rmq_toponymie': '', 'in_out': False},
# {'id': 4, 'id_geom_site': 7, 'id_reg_hydro': '2', 'id_permanence': '2', 'rmq_toponymie': 'plusieurs petites sources dans versant', 'in_out': True},
# {'id': 5, 'id_geom_site': 7, 'id_reg_hydro': '1', 'id_permanence': '2', 'rmq_toponymie': 'longe la route D209a', 'in_out': False},
# {'id': 6, 'id_geom_site': 8, 'id_reg_hydro': '0', 'id_permanence': '2', 'rmq_toponymie': '', 'in_out': True},
# {'id': 7, 'id_geom_site': 8, 'id_reg_hydro': '3', 'id_permanence': None, 'rmq_toponymie': '', 'in_out': False}
# ... displaying 10 of 5779 total bound parameter sets ...
# {'id': 5777, 'id_geom_site': 1951, 'id_reg_hydro': '0', 'id_permanence': None, 'rmq_toponymie': '', 'in_out': True},
# {'id': 5778, 'id_geom_site': 1951, 'id_reg_hydro': '3', 'id_permanence': None, 'rmq_toponymie': '', 'in_out': False})]