144 lines
5.2 KiB
Python
144 lines
5.2 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: UTF-8 -*-
|
||
#Nom : : sites.py
|
||
#Description :
|
||
#Copyright : 2021, CEN38
|
||
#Auteur : Colas Geier
|
||
#Version : 1.0
|
||
|
||
from ..tools import _get_table
|
||
from ..pers.pers import _get_table,_merge_author,_merge_relation
|
||
|
||
|
||
|
||
from ..params import con
|
||
from ..pers import pers
|
||
schema = 'sites'
|
||
auteur = pers.get_auteur()
|
||
organisme = pers.get_organisme()
|
||
lst_tab = con.dialect.get_table_names(con,schema=schema)
|
||
columns_sitetab = con.dialect.get_columns(con,schema=schema,table_name='sites')
|
||
columns_geomtab = con.dialect.get_columns(con,schema=schema,table_name='r_sites_geom')
|
||
|
||
|
||
#####################################
|
||
### schema sites ###
|
||
#####################################
|
||
def _get_typ_milieux(ids=None, nom=None):
|
||
table = 'type_milieu'
|
||
df = _get_table(con, schema, table, ids=ids, nom=nom)
|
||
return df
|
||
|
||
def _get_typo_sdage(ids=None, nom=None):
|
||
table = 'typo_sdage'
|
||
df = _get_table(con, schema, table, ids=ids, nom=nom)
|
||
return df
|
||
|
||
def _get_typ_site(ids=None, nom=None):
|
||
table = 'type_site'
|
||
df = _get_table(con, schema, table, ids=ids, nom=nom)
|
||
return df
|
||
|
||
|
||
def get_sitesInfos(ids=None, nom=None, columns=None, with_nameOrga=False, details=False,
|
||
params_col={}, milieu=None, statut='actif'):
|
||
from pandas import merge
|
||
|
||
drop = []
|
||
table = 'sites'
|
||
typ_milieux = _get_typ_milieux()
|
||
typo_sdage = _get_typo_sdage()
|
||
typ_site = _get_typ_site()
|
||
|
||
if milieu:
|
||
m = _get_typ_milieux(nom=milieu)
|
||
params_col = {**params_col, 'id_type_milieu':m.id[0].astype(str)}
|
||
|
||
df = _get_table(con, schema, table, ids=ids, nom=nom, cols=columns, params_col=params_col, statut=statut)
|
||
|
||
if not df.empty:
|
||
# 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=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 = merge(df, 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 = merge(df, 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 = merge(df, 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(id_site=None, nom_site=None, columns=None, last_update=False,
|
||
with_nameOrga=False, params_col={}, milieu=None, statut='actif'):
|
||
|
||
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')
|
||
|
||
if milieu:
|
||
m = _get_typ_milieux(nom=milieu)
|
||
params_col = {**params_col, 'id_type_milieu':m.id[0].astype(str)}
|
||
|
||
table = 'sites'
|
||
df = _get_table(con, schema, table, ids=id_site, nom=nom_site, cols='id', params_col=params_col, statut=statut)
|
||
idSite = df.id.tolist()
|
||
if 'id_type_milieu' in params_col.keys():
|
||
del params_col['id_type_milieu']
|
||
|
||
if idSite:
|
||
if 'id_site' in params_col.keys() : params_col['id_site'] = idSite
|
||
else: params_col = {**params_col, 'id_site':idSite}
|
||
table = 'r_sites_geom'
|
||
# df = _get_table(con, schema, table, params_col={'id_site':idSite}, cols=columns)
|
||
df = _get_table(con, schema, table, params_col=params_col, cols=columns)
|
||
if last_update:
|
||
df.sort_values(['id_site','date'], inplace=True)
|
||
df.reset_index(inplace=True, drop=True)
|
||
df.drop_duplicates(subset=['id_site'], keep='last', inplace=True)
|
||
df.reset_index(inplace=True, drop=True)
|
||
|
||
if 'id_auteur' in df.columns:
|
||
df.drop(columns='id_auteur', inplace=True)
|
||
df = _merge_relation(df=df,table='r_geomsites_auteur',schema=schema, left_id='id',right_id='id_geom_site')
|
||
df = _merge_author(df=df, col_aut='id_auteur', orga=with_nameOrga)
|
||
|
||
if 'auteur' in df.columns:
|
||
df.rename(columns={'auteur': 'auteur_geom'}, inplace=True)
|
||
|
||
return df
|
||
|
||
def new_site(df):
|
||
from ..tools.sites import tab_sites
|
||
final_col = [col['name'] for col in columns_sitetab]
|
||
aut = df['auteur']
|
||
|
||
|
||
|
||
|
||
|
||
|
||
# lst_site = ['38RD0146','38RD0147','38RD0148','38RD0149','38RD0150','38RD0151','38RD0152',
|
||
# '38RD0153','38RD0155','38RD0156','38RD0157','38RD0158','38RD0159','38RD0160',
|
||
# '38RD0161','38RD0162','38RD0163','38RD0164','38RD0165']
|
||
# df = zh.get_sitesInfos(id_site=lst_site)
|
||
# df.loc[df.auteur=='INCONNU','auteur'] = 'Gereco Environnement' |