"""Tools to work with resource files.""" import configparser import shutil import tempfile # import base64 # import psycopg2 # import psycopg2.extras import os from os.path import abspath, join, pardir, dirname from qgis.core import QgsDataSourceUri from .SQLRequet import geom, champ_contour, champ_travaux_prevus_multilinestring, champ_travaux_prevus_point, champ_travaux_prevus_multipolygon, champ_vegethab_multipolygon, champ_vegethab_multilinestring, champ_vegethab_point, champ_viergeLigne, champ_viergePoint, champ_viergePolygone from qgis.PyQt import uic __copyright__ = "Copyright 2019, 3Liz" __license__ = "GPL version 3" __email__ = "info@3liz.org" __revision__ = "$Format:%H$" def plugin_path(*args): """Get the path to plugin root folder. :param args List of path elements e.g. ['img', 'logos', 'image.png'] :type args: str :return: Absolute path to the plugin path. :rtype: str """ path = dirname(dirname(__file__)) path = abspath(abspath(join(path, pardir))) for item in args: path = abspath(join(path, item)) return path def plugin_name(): """Return the plugin name according to metadata.txt. :return: The plugin name. :rtype: basestring """ metadata = metadata_config() name = metadata["general"]["name"] return name def metadata_config() -> configparser: """Get the INI config parser for the metadata file. :return: The config parser object. :rtype: ConfigParser """ path = plugin_path("metadata.txt") config = configparser.ConfigParser() config.read(path, encoding='utf8') return config def plugin_test_data_path(*args, copy=False): """Get the path to the plugin test data path. :param args List of path elements e.g. ['img', 'logos', 'image.png'] :type args: str :param copy: If the file must be copied into a temporary directory first. :type copy: bool :return: Absolute path to the resources folder. :rtype: str """ path = abspath(abspath(join(plugin_path(), "test", "data"))) for item in args: path = abspath(join(path, item)) if copy: temp = tempfile.mkdtemp() shutil.copy(path, temp) return join(temp, args[-1]) else: return path def resources_path(*args): """Get the path to our resources folder. :param args List of path elements e.g. ['img', 'logos', 'image.png'] :type args: str :return: Absolute path to the resources folder. :rtype: str """ path = abspath(abspath(join(plugin_path(), "CenRa_POSTGIS\\tools"))) for item in args: path = abspath(join(path, item)) return path def load_ui(*args): """Get compile UI file. :param args List of path elements e.g. ['img', 'logos', 'image.png'] :type args: str :return: Compiled UI file. """ ui_class, _ = uic.loadUiType(resources_path("ui", *args)) return ui_class def pyperclip(): dst = dirname(dirname(__file__)) + "\\tools\\" if os.access('N:/', os.R_OK): src = 'N:/SI_Systeme d information/Z_QGIS/PLUGIN/PythonSQL.py' try: shutil.copy(src, dst) except FileNotFoundError: print('404') except UnboundLocalError: print('404') def send_issues(url, titre, body, labels): import requests import urllib.request import json # import os # import qgis # usr = os.environ['USERNAME'] token = '9d0a4e0bea561710e0728f161f7edf4e5201e112' url = url + '?token=' + token headers = {'Authorization': 'token ' + token, 'accept': 'application/json', 'Content-Type': 'application/json'} payload = {'title': titre, 'body': body, 'labels': labels} try: urllib.request.urlopen('https://google.com') binar = True except ValueError: binar = False r = '' if binar: r = requests.post(url, data=json.dumps(payload), headers=headers) return r def maj_verif(NAME): import qgis import urllib.request iface = qgis.utils.iface from qgis.core import Qgis # url = qgis.utils.pluginMetadata(NAME, 'repository') # URL = url+'/raw/branch/main/plugins.xml' URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml' # print(URL) version = qgis.utils.pluginMetadata(NAME, 'version') len_version = len(version) try: urllib.request.urlopen('https://google.com') binar = True except urllib.error.URLError: binar = False if binar: try: version_web = str(urllib.request.urlopen(URL).read()) plugin_num = version_web.find(NAME) valeur_version_web = version_web.find('', plugin_num) + 9 version_plugin = version_web[valeur_version_web:valeur_version_web + len_version] if version_plugin != version: iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30) except urllib.error.URLError: print("error gitea version ssl") else: iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30) def devlog(NAME): import qgis devmaj = '' devmaj = devmaj + qgis.utils.pluginMetadata(NAME, 'changelog') return devmaj def create_contour(self, schema, cur, con, host, port, dbname, user, mdp): # Creation de la table contour # Verifie si la checkbox est cochee if self.couche_contour.isChecked(): if self.annee_1.text() == 'aaaa' or self.annee_1.text() == '': tablename = schema + "_contour" else: tablename = schema + "_contour_" + self.annee_1.text() tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename + "','gid')" SQL_contour = "CREATE TABLE " + schema + "." + tablename + champ_contour cur.execute(SQL_contour) cur.execute(RETURNE) sequence_name = cur.fetchone()[0] SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();" SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();" SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();" SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();" SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() FROM layer_styles WHERE description = 'contour_modele_v3'""" SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;" cur.execute(SQL_pkey) cur.execute(SQL_trigger_area_m2) cur.execute(SQL_trigger_area_ha) cur.execute(SQL_trigger_date_creation) cur.execute(SQL_trigger_date_maj) # Enregistrement du style (comme style par defaut) dans la table layer_styles cur.execute(SQL_style) cur.execute(SQL_GRANT_TABLE) con.commit() # Affichage de la table uri = QgsDataSourceUri() # set host name, port, database name, username and password uri.setConnection(host, port, dbname, user, mdp) # set database schema, table name, geometry column and optionaly subset (WHERE clause) uri.setDataSource(schema, tablename, geom) self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") def create_travaux(self, schema, cur, con, host, port, dbname, user, mdp): # Creation de la table travaux prevus if self.couche_travaux_prevus.isChecked(): # **********Poly if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '': tablename = schema + "_travaux_prevus_poly" else: tablename = schema + "_travaux_prevus_poly_" + self.annee_5.text() tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename + "','gid')" SQL_travaux_prevus = "CREATE TABLE " + schema + "." + tablename + champ_travaux_prevus_multipolygon cur.execute(SQL_travaux_prevus) cur.execute(RETURNE) sequence_name = cur.fetchone()[0] SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();" SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();" SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();" SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();" SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() FROM layer_styles WHERE description = 'travaux_prevus_poly_modele_v3'""" SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;" cur.execute(SQL_pkey) cur.execute(SQL_trigger_date_creation) cur.execute(SQL_trigger_date_maj) cur.execute(SQL_trigger_area_m2) cur.execute(SQL_trigger_area_ha) # Enregistrement du style (comme style par defaut) dans la table layer_styles cur.execute(SQL_style) cur.execute(SQL_GRANT_TABLE) con.commit() # Affichage de la table uri = QgsDataSourceUri() # set host name, port, database name, username and password uri.setConnection(host, port, dbname, user, mdp) # set database schema, table name, geometry column and optionaly subset (WHERE clause) uri.setDataSource(schema, tablename, geom) self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") # **********ligne if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '': tablename = schema + "_travaux_prevus_ligne" else: tablename = schema + "_travaux_prevus_ligne_" + self.annee_5.text() tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename + "','gid')" SQL_travaux_prevus = "CREATE TABLE " + schema + "." + tablename + champ_travaux_prevus_multilinestring cur.execute(SQL_travaux_prevus) cur.execute(RETURNE) sequence_name = cur.fetchone()[0] SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();" SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();" SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();" SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();" SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() FROM layer_styles WHERE description = 'travaux_prevus_ligne_modele_v3'""" SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;" cur.execute(SQL_pkey) cur.execute(SQL_trigger_date_creation) cur.execute(SQL_trigger_date_maj) cur.execute(SQL_trigger_length_m) cur.execute(SQL_trigger_length_km) # Enregistrement du style (comme style par defaut) dans la table layer_styles cur.execute(SQL_style) cur.execute(SQL_GRANT_TABLE) con.commit() # Affichage de la table uri = QgsDataSourceUri() # set host name, port, database name, username and password uri.setConnection(host, port, dbname, user, mdp) # set database schema, table name, geometry column and optionaly subset (WHERE clause) uri.setDataSource(schema, tablename, geom) self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") # **********point if self.annee_5.text() == 'aaaa' or self.annee_5.text() == '': tablename = schema + "_travaux_prevus_point" else: tablename = schema + "_travaux_prevus_point_" + self.annee_5.text() tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename + "','gid')" SQL_travaux_prevus = "CREATE TABLE " + schema + "." + tablename + champ_travaux_prevus_point cur.execute(SQL_travaux_prevus) cur.execute(RETURNE) sequence_name = cur.fetchone()[0] SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" SQL_trigger_date_creation = "CREATE TRIGGER date_creation" + tablename + " BEFORE INSERT ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_creation();" SQL_trigger_date_maj = "CREATE TRIGGER date_maj" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.date_maj();" SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();" SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) SELECT f_table_catalog, '""" + schema + "', '" + tablename + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() FROM layer_styles WHERE description = 'travaux_prevus_point_modele_v3'""" SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;" cur.execute(SQL_pkey) cur.execute(SQL_trigger_date_creation) cur.execute(SQL_trigger_date_maj) cur.execute(SQL_trigger_coordonnees) # Enregistrement du style (comme style par defaut) dans la table layer_styles cur.execute(SQL_style) cur.execute(SQL_GRANT_TABLE) con.commit() # Affichage de la table uri = QgsDataSourceUri() # set host name, port, database name, username and password uri.setConnection(host, port, dbname, user, mdp) # set database schema, table name, geometry column and optionaly subset (WHERE clause) uri.setDataSource(schema, tablename, geom) self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") def create_habita(self, schema, cur, con, host, port, dbname, user, mdp): # Creation de la table habitat if self.couche_habitat.isChecked(): if self.annee_2.text() == 'aaaa' or self.annee_2.text() == '': tablename = schema + "_habitat" else: tablename = schema + "_habitat_" + self.annee_2.text() tablename_1 = tablename + "_points" RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename_1 + "','gid')" tablename_qgis = tablename_1[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis SQL_VEGETHAB = "CREATE TABLE " + schema + "." + tablename_1 + champ_vegethab_point print(RETURNE) print('') print(SQL_VEGETHAB) cur.execute(SQL_VEGETHAB) cur.execute(RETURNE) sequence_name = cur.fetchone()[0] SQL_pkey = "ALTER TABLE " + schema + "." + tablename_1 + " ADD CONSTRAINT " + tablename_1 + "_pkey" + " PRIMARY KEY (gid)" SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename_1 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_1 + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();" SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) SELECT f_table_catalog, '""" + schema + "', '" + tablename_1 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() FROM layer_styles WHERE description = 'vegethab_points_modele_v3'""" SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename_1 + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename_1 + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;" cur.execute(SQL_pkey) cur.execute(SQL_trigger_coordonnees) cur.execute(SQL_style) cur.execute(SQL_GRANT_TABLE) con.commit() # Affichage de la table uri = QgsDataSourceUri() # set host name, port, database name, username and password uri.setConnection(host, port, dbname, user, mdp) # set database schema, table name, geometry column and optionaly subset (WHERE clause) uri.setDataSource(schema, tablename_1, geom) self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") tablename_2 = tablename + "_lignes" RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename_2 + "','gid')" tablename_qgis = tablename_2[1:] SQL_VEGETHAB = "CREATE TABLE " + schema + "." + tablename_2 + champ_vegethab_multilinestring cur.execute(SQL_VEGETHAB) cur.execute(RETURNE) sequence_name = cur.fetchone()[0] SQL_pkey = "ALTER TABLE " + schema + "." + tablename_2 + " ADD CONSTRAINT " + tablename_2[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();" SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename_2 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_2 + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();" SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) SELECT f_table_catalog, '""" + schema + "', '" + tablename_2 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() FROM layer_styles WHERE description = 'vegethab_lignes_modele_v3'""" SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename_2 + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename_2 + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;" cur.execute(SQL_pkey) cur.execute(SQL_trigger_length_m) cur.execute(SQL_trigger_length_km) cur.execute(SQL_style) cur.execute(SQL_GRANT_TABLE) con.commit() # Affichage de la table uri = QgsDataSourceUri() # set host name, port, database name, username and password uri.setConnection(host, port, dbname, user, mdp) # set database schema, table name, geometry column and optionaly subset (WHERE clause) uri.setDataSource(schema, tablename_2, geom) self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") tablename_3 = tablename + "_polygones" RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename_3 + "','gid')" tablename_qgis = tablename_3[1:] SQL_VEGETHAB = "CREATE TABLE " + schema + "." + tablename_3 + champ_vegethab_multipolygon cur.execute(SQL_VEGETHAB) cur.execute(RETURNE) sequence_name = cur.fetchone()[0] SQL_pkey = "ALTER TABLE " + schema + "." + tablename_3 + " ADD CONSTRAINT " + tablename_3[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();" SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename_3 + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename_3 + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();" SQL_style = """INSERT INTO layer_styles (f_table_catalog, f_table_schema, f_table_name, f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, update_time) SELECT f_table_catalog, '""" + schema + "', '" + tablename_3 + """', f_geometry_column, stylename, styleqml, stylesld, useasdefault, "owner", ui, now() FROM layer_styles WHERE description = 'vegethab_polygones_modele_v3'""" SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename_3 + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename_3 + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;" cur.execute(SQL_pkey) cur.execute(SQL_trigger_area_m2) cur.execute(SQL_trigger_area_ha) cur.execute(SQL_style) cur.execute(SQL_GRANT_TABLE) con.commit() # Affichage de la table uri = QgsDataSourceUri() # set host name, port, database name, username and password uri.setConnection(host, port, dbname, user, mdp) # set database schema, table name, geometry column and optionaly subset (WHERE clause) uri.setDataSource(schema, tablename_3, geom) self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") def create_vierge(self, schema, cur, con, host, port, dbname, user, mdp): # Creation de la table vierge if self.couche_vierge.isChecked(): if self.annee_4.text() == 'aaaa' or self.annee_4.text() == '': tablename = schema + "_" + self.nom_couche_vierge.text().lower() else: tablename = schema + "_" + self.nom_couche_vierge.text().lower() + "_" + self.annee_4.text() tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis if self.couche_vierge_point.isChecked() == 1: champ_vierge = champ_viergePoint if self.couche_vierge_ligne.isChecked() == 1: champ_vierge = champ_viergeLigne if self.couche_vierge_polygone.isChecked() == 1: champ_vierge = champ_viergePolygone RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename + "','gid')" SQL_vierge = "CREATE TABLE " + schema + "." + tablename + champ_vierge cur.execute(SQL_vierge) cur.execute(RETURNE) sequence_name = cur.fetchone()[0] SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename[len(schema):] + "_pkey" + " PRIMARY KEY (gid)" SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();" SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();" SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();" SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();" SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();" SQL_GRANT_TABLE = "GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_qgis;GRANT DELETE, INSERT, REFERENCES, SELECT, TRIGGER, TRUNCATE, UPDATE ON " + schema + "." + tablename + " TO grp_sig;GRANT ALL ON SEQUENCE " + sequence_name + " TO grp_qgis;" cur.execute(SQL_pkey) cur.execute(SQL_GRANT_TABLE) if self.couche_vierge_point.isChecked() == 1: cur.execute(SQL_trigger_coordonnees) if self.couche_vierge_ligne.isChecked() == 1: cur.execute(SQL_trigger_length_m) cur.execute(SQL_trigger_length_km) if self.couche_vierge_polygone.isChecked() == 1: cur.execute(SQL_trigger_area_m2) cur.execute(SQL_trigger_area_ha) con.commit() # Affichage de la table uri = QgsDataSourceUri() # set host name, port, database name, username and password uri.setConnection(host, port, dbname, user, mdp) # set database schema, table name, geometry column and optionaly subset (WHERE clause) uri.setDataSource(schema, tablename, geom) self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")