#!/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'