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

144 lines
5.2 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 : : 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'