diff --git a/CenRa_COPIE/CenRa_Copie.py b/CenRa_COPIE/CenRa_Copie.py index c719971c..86a9e7b4 100644 --- a/CenRa_COPIE/CenRa_Copie.py +++ b/CenRa_COPIE/CenRa_Copie.py @@ -4,27 +4,25 @@ __email__ = "info@3liz.org" from qgis.core import QgsApplication -from qgis.PyQt.QtCore import QCoreApplication, Qt, QTranslator, QUrl +from qgis.PyQt.QtCore import QSettings, QUrl from qgis.PyQt.QtGui import QDesktopServices, QIcon -from qgis.PyQt.QtWidgets import QAction, QMessageBox +from qgis.PyQt.QtWidgets import QAction from qgis.utils import iface import qgis -#include -import socket +# include import os +from .about_form import AboutDialog from .tools.resources import ( - plugin_path, + # plugin_path, pyperclip, resources_path, maj_verif, ) pyperclip() from .copie_editor import Copie_Editor -from .about_form import AboutDialog -from qgis.PyQt.QtCore import * class PgCopie: def __init__(self): @@ -36,18 +34,18 @@ class PgCopie: self.dock_action = None self.help_action = None plugin_dir = os.path.dirname(__file__) - end_find = plugin_dir.rfind('\\')+1 + end_find = plugin_dir.rfind('\\') + 1 global NAME NAME = plugin_dir[end_find:] maj_verif(NAME) # Display About window on first use - version = qgis.utils.pluginMetadata('CenRa_COPIE','version') + version = qgis.utils.pluginMetadata('CenRa_COPIE', 'version') s = QSettings() versionUse = s.value("copie/version", 1, type=str) - if str(versionUse) != str(version) : + if str(versionUse) != str(version): s.setValue("copie/version", str(version)) - print(versionUse,version) + print(versionUse, version) self.open_about_dialog() def initGui(self): @@ -65,12 +63,12 @@ class PgCopie: if not self.action_editor: self.action_editor = Copie_Editor() - self.copie_editor = QAction(icon, 'Copie',None) + self.copie_editor = QAction(icon, 'Copie', None) self.toolBar.addAction(self.copie_editor) self.copie_editor.triggered.connect(self.open_editor) self.copie_editor.setEnabled(False) - IPAddr=socket.gethostbyname(socket.gethostname()) - if os.access('N:/',os.R_OK): + # IPAddr = socket.gethostbyname(socket.gethostname()) + if os.access('N:/', os.R_OK): self.copie_editor.setEnabled(True) def open_about_dialog(self): @@ -79,6 +77,7 @@ class PgCopie: """ dialog = AboutDialog(iface) dialog.exec() + def open_help(): """ Open the online help. """ QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/')) @@ -90,8 +89,7 @@ class PgCopie: def unload(self): """ Unload the plugin. """ if self.action_editor: - iface.removePluginMenu('CenRa_Copie',self.copie_editor) - + iface.removePluginMenu('CenRa_Copie', self.copie_editor) if self.provider: QgsApplication.processingRegistry().removeProvider(self.provider) diff --git a/CenRa_COPIE/about_form.py b/CenRa_COPIE/about_form.py index 991375bc..4f7e92fa 100644 --- a/CenRa_COPIE/about_form.py +++ b/CenRa_COPIE/about_form.py @@ -3,7 +3,7 @@ import os.path from pathlib import Path from qgis.PyQt import uic -from qgis.PyQt.QtGui import QPixmap +# from qgis.PyQt.QtGui import QPixmap from qgis.PyQt.QtWidgets import QDialog from .tools.resources import devlog @@ -43,4 +43,4 @@ class AboutDialog(QDialog, ABOUT_FORM_CLASS): Run some actions when the user closes the dialog """ - self.close() \ No newline at end of file + self.close() diff --git a/CenRa_COPIE/copie_editor.py b/CenRa_COPIE/copie_editor.py index 7900ff1b..fe006553 100644 --- a/CenRa_COPIE/copie_editor.py +++ b/CenRa_COPIE/copie_editor.py @@ -4,78 +4,70 @@ from __future__ import absolute_import # Import the PyQt and QGIS libraries from builtins import next from builtins import str -from builtins import object -import qgis +# from builtins import object +# import qgis from qgis.PyQt.QtCore import QSettings -from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog -from qgis.PyQt.QtGui import QIcon - -from qgis.PyQt.QtCore import * -from qgis.PyQt.QtGui import * +from qgis.PyQt.QtWidgets import QDialog, QMessageBox from qgis.PyQt import QtGui - -from qgis.core import * -from qgis.core import QgsDataSourceUri -import os +from qgis.core import QgsDataSourceUri, QgsSettings, QgsWkbTypes try: from .tools.PythonSQL import login_base -except: +except ValueError: print('Pas de fichier PythonSQL') -from .tools.SQLRequet import * + from .tools.resources import ( load_ui, resources_path, - send_issues, + # send_issues, ) -from .issues import CenRa_Issues +# from .issues import CenRa_Issues from qgis.utils import iface -import os.path -import webbrowser, os -import psycopg2 -import psycopg2.extras -import base64 +# import os +# import os.path +# import webbrowser +# import psycopg2 +# import psycopg2.extras +# import base64 EDITOR_CLASS = load_ui('CenRa_Copie_base.ui') -class Copie_Editor(QDialog, EDITOR_CLASS): +class Copie_Editor(QDialog, EDITOR_CLASS): def __init__(self, parent=None): _ = parent super().__init__() self.setupUi(self) self.settings = QgsSettings() self.s = QSettings() - self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png'))) + self.setWindowIcon(QtGui.QIcon(resources_path('icons', 'icon.png'))) self.iface = iface def raise_(self): """Run method that performs all the real work""" layer = self.iface.activeLayer() - if layer == None : - #self.iface.messageBar().pushMessage(u"Vous devez sélectionner une table !", level=QgsMessageBar.WARNING, duration=5) - self.iface.messageBar().pushMessage("Ooops", u"Vous devez sélectionner une table !", level=Qgis.Warning, duration=5) + if layer is None: + # self.iface.messageBar().pushMessage(u"Vous devez sélectionner une table !", level=QgsMessageBar.WARNING, duration=5) + self.iface.messageBar().pushMessage("Ooops", u"Vous devez sélectionner une table !", level=1, duration=5) - else : + else: # Récupération des sources de la couche active list_sources = layer.source().split(" ") - # dbname + # dbname source_db = [s for s in list_sources if "dbname" in s][0].split("'")[1] - # schema + # schema source_schema = [s for s in list_sources if "table" in s][0].split('"')[1] - # tablename + # tablename source_tablename = [s for s in list_sources if "table" in s][0].split('"')[3] - account = login_base("account") sigdb = account[5] - if source_db != sigdb: - #self.iface.messageBar().pushMessage(u"Un référentiel ne peut être copié, utilisez les filtres !", level=QgsMessageBar.CRITICAL, duration=10) - self.iface.messageBar().pushMessage("Ooops", u"Vous ne pouvez copier des couches que dans sigXX", level=Qgis.Critical, duration=5) + # self.iface.messageBar().pushMessage(u"Un référentiel ne peut être copié, utilisez les filtres !", level=QgsMessageBar.CRITICAL, duration=10) + self.iface.messageBar().pushMessage("Ooops", u"Vous ne pouvez copier des couches que dans sigXX", level=2, duration=5) else: user = account[0] mdp = account[1] @@ -85,7 +77,7 @@ class Copie_Editor(QDialog, EDITOR_CLASS): cur = account[7] con = account[8] - # Creation de la liste des schemas de la base de donnees + # Creation de la liste des schemas de la base de donnees SQL = """WITH list_schema AS ( SELECT catalog_name, schema_name FROM information_schema.schemata @@ -102,26 +94,25 @@ class Copie_Editor(QDialog, EDITOR_CLASS): list_brut = str(next(cur)) - list = list_brut [2:-3] + list = list_brut[2:-3] listItems = list.split(",") con.close() self.schema.clear() self.schema.addItems(listItems) - self.schema.setCurrentIndex(-1) # Pour ne pas commencer la liste au premier schema + # Pour ne pas commencer la liste au premier schema + self.schema.setCurrentIndex(-1) - - self.table_source.setText(source_schema + "." + source_tablename) # Affiche le nom de la table source + # Affiche le nom de la table source + self.table_source.setText(source_schema + "." + source_tablename) # show the dialog self.show() # Run the dialog event loop result = self.exec() # See if OK was pressed if result: - #******************************debut script********************************* - - + # ******************************debut script********************************* account = login_base("account") user = account[0] mdp = account[1] @@ -136,45 +127,45 @@ class Copie_Editor(QDialog, EDITOR_CLASS): # Récupération des sources de la couche active list_sources = layer.source().split(" ") - # dbname + # dbname source_db = [s for s in list_sources if "dbname" in s][0].split("'")[1] - # schema + # schema source_schema = [s for s in list_sources if "table" in s][0].split('"')[1] - # tablename + # tablename source_tablename = [s for s in list_sources if "table" in s][0].split('"')[3] - if self.schema.currentIndex() == -1 : + if self.schema.currentIndex() == - 1: QMessageBox.warning(None, "Oups :", "Veuillez choisir un dossier de destination.") - return - + return + schema = self.schema.currentText() - if self.table_destination.text() == '' : + if self.table_destination.text() == '': QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de destination.") - return - - if self.annee.text() == 'aaaa' or self.annee.text() == '': + return + + if self.annee.text() == 'aaaa' or self.annee.text() == '': tablename = schema + "_" + self.table_destination.text().lower() - else : + else: tablename = schema + "_" + self.table_destination.text().lower() + "_" + self.annee.text() tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis - if self.table_vide.isChecked() == 1 : + if self.table_vide.isChecked() == 1: SQL_table = "CREATE TABLE " + schema + "." + tablename + " AS SELECT * FROM " + source_schema + "." + source_tablename + " LIMIT 0;" - else : + else: SQL_table = "CREATE TABLE " + schema + "." + tablename + " AS SELECT * FROM " + source_schema + "." + source_tablename SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)" SQL_sequence_01 = "CREATE SEQUENCE " + schema + "." + tablename + "_gid_seq" + " INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1;" - SQL_sequence_02 = "ALTER TABLE " + schema + "." + tablename + " ALTER COLUMN gid SET DEFAULT nextval(\'" + schema + "." + tablename + "_gid_seq\'::regclass);" + SQL_sequence_02 = "ALTER TABLE " + schema + "." + tablename + " ALTER COLUMN gid SET DEFAULT nextval(\'" + schema + "." + tablename + "_gid_seq\'::regclass);" SQL_sequence_03 = "SELECT setval(\'" + schema + "." + tablename + "_gid_seq\'::regclass, (SELECT max(gid) AS max_gid FROM " + schema + "." + tablename + "));" SQL_sequence_04 = "ALTER SEQUENCE " + schema + "." + tablename + "_gid_seq" + " OWNED BY " + schema + "." + tablename + ".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_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_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();" cur.execute(SQL_table) @@ -184,38 +175,38 @@ class Copie_Editor(QDialog, EDITOR_CLASS): cur.execute(SQL_sequence_03) cur.execute(SQL_sequence_04) - RETURNE = "SELECT pg_get_serial_sequence('"+schema + "."+ tablename+"','gid')" + RETURNE = "SELECT pg_get_serial_sequence('" + schema + "." + tablename + "','gid')" cur.execute(RETURNE) sequence_name = cur.fetchone()[0] print(sequence_name) - 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;" + 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_GRANT_TABLE) - if layer.wkbType() == QgsWkbTypes.PointGeometry : + if layer.wkbType() == QgsWkbTypes.PointGeometry: cur.execute(SQL_trigger_coordonnees) - if layer.wkbType() == QgsWkbTypes.LineGeometry : + if layer.wkbType() == QgsWkbTypes.LineGeometry: cur.execute(SQL_trigger_length_m) - cur.execute(SQL_trigger_length_km) + cur.execute(SQL_trigger_length_km) - if layer.wkbType() == QgsWkbTypes.PolygonGeometry : + if layer.wkbType() == QgsWkbTypes.PolygonGeometry: cur.execute(SQL_trigger_area_m2) cur.execute(SQL_trigger_area_ha) - - con.commit() - - ### Affichage de la 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) + # 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") layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") - + con.commit() con.close() - #self.iface.messageBar().pushMessage("Table \"" + source_schema + "." + source_tablename + u"\" copiée dans \"" + schema + "." + tablename + "\"." , level=QgsMessageBar.INFO, duration=10) - self.iface.messageBar().pushMessage("Bravo!", "Table \"" + source_schema + "." + source_tablename + u"\" copiée dans \"" + schema + "." + tablename + "\".", level=Qgis.Success, duration=5) + # self.iface.messageBar().pushMessage("Table \"" + source_schema + "." + source_tablename + u"\" copiée dans \"" + schema + "." + tablename + "\"." , level=QgsMessageBar.INFO, duration=10) + self.iface.messageBar().pushMessage("Bravo!", "Table \"" + source_schema + "." + source_tablename + u"\" copiée dans \"" + schema + "." + tablename + "\".", level=3, duration=5) pass diff --git a/CenRa_COPIE/tools/SQLRequet.py b/CenRa_COPIE/tools/SQLRequet.py deleted file mode 100644 index 68133ce6..00000000 --- a/CenRa_COPIE/tools/SQLRequet.py +++ /dev/null @@ -1,141 +0,0 @@ - -geom = "geom" -champ_travaux_prevus_multipolygon="""(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, surface_m2 double precision, surface_ha double precision, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))""" -champ_travaux_prevus_multilinestring="""(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, longueur_m double precision, longueur_km double precision, date_creation date, date_maj date, geom geometry(MultiLineString,2154))""" -champ_travaux_prevus_point = """(gid serial NOT NULL, groupe_gestion text, gestion_lib text, id_gestion text, datedebut date, datefin date, commentaire text, x_wgs84 double precision, y_wgs84 double precision, date_creation date, date_maj date, geom geometry(Point,2154))""" - -champ_viergePolygone = """(gid serial NOT NULL, commentaire text, surface_m2 double precision, surface_ha double precision, geom geometry(MultiPolygon,2154))""" -champ_viergeLigne = """(gid serial NOT NULL, commentaire text, longueur_m double precision, longueur_km double precision, geom geometry(MultiLineString,2154))""" -champ_viergePoint = """(gid serial NOT NULL, commentaire text, x_wgs84 double precision, y_wgs84 double precision, geom geometry(Point,2154))""" - -champ_habitat = """(gid serial NOT NULL, cd_cb_01 text, lb_cb97_fr_01 text, occupation_01 integer, cd_cb_02 text, lb_cb97_fr_02 text, occupation_02 integer, cd_cb_03 text, lb_cb97_fr_03 text, occupation_03 integer, milieu_code text, milieu_libelle text, surface_m2 double precision, surface_ha double precision, commentaire text, date_creation date, date_maj date, geom geometry(MultiPolygon,2154))""" - -champ_contour="""(gid serial NOT NULL, date_creation date, date_maj date, utilisateur character varying, dept character(2), nom character varying, surface_m2 double precision, surface_ha double precision, type_site character varying, type_milieu character varying, date_premier_pg integer, date_debut_pg integer, date_fin_pg integer, referent character varying, gestion_deleguee character varying, terrain_militaire character(3), ens character(3), zh character(3), adapt_pmr character(3), inform character(3), guide character(3), ouverture_public character(3), obs character(3), anim character(3), n2000_anim character(3), contrat_n2000_conseil character(3), n2000_op character(3), contrat_n2000_benef character(3), contrat_agri character(3), bc_habitat integer, bc_amphibien integer, bc_coleoptere integer, bc_crustace integer, bc_mammifere integer, bc_chiroptere integer, bc_mollusque integer, bc_odonate integer, bc_oiseau integer, bc_orthoptere integer, bc_poisson integer, bc_reptile integer, bc_rhopalocere integer, bc_heterocere integer, bc_autre_invertebre integer, bc_flore integer, bc_bryophyte integer, bc_champignon integer, suiv_analyse_sol character(3), suiv_piezo character(3), suiv_climat character(3), suiv_topo character(3), suiv_habitat character(3), suiv_amphibien character(3), suiv_coleoptere character(3), suiv_crustace character(3), suiv_mammifere character(3), suiv_chiroptere character(3), suiv_mollusque character(3), suiv_odonate character(3), suiv_oiseau character(3), suiv_orthoptere character(3), suiv_poisson character(3), suiv_reptile character(3), suiv_rhopalocere character(3), suiv_heterocere character(3), suiv_autre_invertebre character(3), suiv_flore character(3), suiv_bryophyte character(3), suiv_champignon character(3), suiv_analyse_eau character(3), suiv_phenologie character(3), suiv_frequentation character(3), suiv_paysager character(3), suiv_autre character(3), commentaire text, geom geometry(MultiPolygon,2154)) -""" - -champ_vegethab_point = """( - gid serial NOT NULL , - cd_eu_01 character varying(254) COLLATE pg_catalog."default", - lb_eu_01 character varying(254) COLLATE pg_catalog."default", - occupati_1 bigint, - cd_eu_02 character varying(254) COLLATE pg_catalog."default", - lb_eu_02 character varying(254) COLLATE pg_catalog."default", - occupati_2 bigint, - cd_eu_03 character varying(254) COLLATE pg_catalog."default", - lb_eu_03 character varying(254) COLLATE pg_catalog."default", - occupati_3 bigint, - milieu_cod character varying(254) COLLATE pg_catalog."default", - milieu_lib character varying(254) COLLATE pg_catalog."default", - surface_m2 numeric, - surface_ha numeric, - commentair character varying(254) COLLATE pg_catalog."default", - date_creat date, - date_maj date, - num_phyto character varying(254) COLLATE pg_catalog."default", - type_unite character varying(254) COLLATE pg_catalog."default", - dynamique character varying(254) COLLATE pg_catalog."default", - gestio_obs character varying(254) COLLATE pg_catalog."default", - degrad_obs character varying(254) COLLATE pg_catalog."default", - eta_conser character varying(254) COLLATE pg_catalog."default", - clas_phyto character varying(254) COLLATE pg_catalog."default", - alli_phyto character varying(254) COLLATE pg_catalog."default", - syntaxon character varying(254) COLLATE pg_catalog."default", - n2000 character varying(254) COLLATE pg_catalog."default", - lrr_aura character varying(254) COLLATE pg_catalog."default", - lrr_cbna character varying(254) COLLATE pg_catalog."default", - lrr_cbnmc character varying(254) COLLATE pg_catalog."default", - vege_enjeu character varying(254) COLLATE pg_catalog."default", - num_photo character varying(254) COLLATE pg_catalog."default", - nature_obs character varying(254) COLLATE pg_catalog."default", - date_sais date, - s_al_phyto character varying(254) COLLATE pg_catalog."default", - alli_name character varying(254) COLLATE pg_catalog."default", - salli_name character varying(254) COLLATE pg_catalog."default", - class_name character varying(254) COLLATE pg_catalog."default", - geom geometry(Point,2154) -) -""" -champ_vegethab_multilinestring = """( - gid serial NOT NULL , - cd_eu_01 character varying(254) COLLATE pg_catalog."default", - lb_eu_01 character varying(254) COLLATE pg_catalog."default", - occupati_1 bigint, - cd_eu_02 character varying(254) COLLATE pg_catalog."default", - lb_eu_02 character varying(254) COLLATE pg_catalog."default", - occupati_2 bigint, - cd_eu_03 character varying(254) COLLATE pg_catalog."default", - lb_eu_03 character varying(254) COLLATE pg_catalog."default", - occupati_3 bigint, - milieu_cod character varying(254) COLLATE pg_catalog."default", - milieu_lib character varying(254) COLLATE pg_catalog."default", - surface_m2 numeric, - surface_ha numeric, - commentair character varying(254) COLLATE pg_catalog."default", - date_creat date, - date_maj date, - num_phyto character varying(254) COLLATE pg_catalog."default", - type_unite character varying(254) COLLATE pg_catalog."default", - dynamique character varying(254) COLLATE pg_catalog."default", - gestio_obs character varying(254) COLLATE pg_catalog."default", - degrad_obs character varying(254) COLLATE pg_catalog."default", - eta_conser character varying(254) COLLATE pg_catalog."default", - clas_phyto character varying(254) COLLATE pg_catalog."default", - alli_phyto character varying(254) COLLATE pg_catalog."default", - syntaxon character varying(254) COLLATE pg_catalog."default", - n2000 character varying(254) COLLATE pg_catalog."default", - lrr_aura character varying(254) COLLATE pg_catalog."default", - lrr_cbna character varying(254) COLLATE pg_catalog."default", - lrr_cbnmc character varying(254) COLLATE pg_catalog."default", - vege_enjeu character varying(254) COLLATE pg_catalog."default", - num_photo character varying(254) COLLATE pg_catalog."default", - nature_obs character varying(254) COLLATE pg_catalog."default", - date_sais date, - s_al_phyto character varying(254) COLLATE pg_catalog."default", - alli_name character varying(254) COLLATE pg_catalog."default", - salli_name character varying(254) COLLATE pg_catalog."default", - class_name character varying(254) COLLATE pg_catalog."default", - geom geometry(MultiLineString,2154) -) -""" -champ_vegethab_multipolygon = """( - gid serial NOT NULL , - cd_eu_01 character varying(254) COLLATE pg_catalog."default", - lb_eu_01 character varying(254) COLLATE pg_catalog."default", - occupati_1 bigint, - cd_eu_02 character varying(254) COLLATE pg_catalog."default", - lb_eu_02 character varying(254) COLLATE pg_catalog."default", - occupati_2 bigint, - cd_eu_03 character varying(254) COLLATE pg_catalog."default", - lb_eu_03 character varying(254) COLLATE pg_catalog."default", - occupati_3 bigint, - milieu_cod character varying(254) COLLATE pg_catalog."default", - milieu_lib character varying(254) COLLATE pg_catalog."default", - surface_m2 numeric, - surface_ha numeric, - commentair character varying(254) COLLATE pg_catalog."default", - date_creat date, - date_maj date, - num_phyto character varying(254) COLLATE pg_catalog."default", - type_unite character varying(254) COLLATE pg_catalog."default", - dynamique character varying(254) COLLATE pg_catalog."default", - gestio_obs character varying(254) COLLATE pg_catalog."default", - degrad_obs character varying(254) COLLATE pg_catalog."default", - eta_conser character varying(254) COLLATE pg_catalog."default", - clas_phyto character varying(254) COLLATE pg_catalog."default", - alli_phyto character varying(254) COLLATE pg_catalog."default", - syntaxon character varying(254) COLLATE pg_catalog."default", - n2000 character varying(254) COLLATE pg_catalog."default", - lrr_aura character varying(254) COLLATE pg_catalog."default", - lrr_cbna character varying(254) COLLATE pg_catalog."default", - lrr_cbnmc character varying(254) COLLATE pg_catalog."default", - vege_enjeu character varying(254) COLLATE pg_catalog."default", - num_photo character varying(254) COLLATE pg_catalog."default", - nature_obs character varying(254) COLLATE pg_catalog."default", - date_sais date, - s_al_phyto character varying(254) COLLATE pg_catalog."default", - alli_name character varying(254) COLLATE pg_catalog."default", - salli_name character varying(254) COLLATE pg_catalog."default", - class_name character varying(254) COLLATE pg_catalog."default", - geom geometry(MultiPolygon,2154) -) -""" \ No newline at end of file diff --git a/CenRa_COPIE/tools/resources.py b/CenRa_COPIE/tools/resources.py index 019ab963..3171a987 100644 --- a/CenRa_COPIE/tools/resources.py +++ b/CenRa_COPIE/tools/resources.py @@ -3,9 +3,9 @@ import configparser import shutil import tempfile -import base64 -import psycopg2 -import psycopg2.extras +# import base64 +# import psycopg2 +# import psycopg2.extras import os from os.path import abspath, join, pardir, dirname @@ -108,71 +108,77 @@ def load_ui(*args): return ui_class + def pyperclip(): - dst = dirname(dirname(__file__))+"\\tools\\" - if os.access('N:/',os.R_OK): + 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: + except FileNotFoundError: + print('404') + except UnboundLocalError: print('404') -def send_issues(url,titre,body,labels): + +def send_issues(url, titre, body, labels): import requests + import urllib.request import json - import os - import qgis + # import os + # import qgis - usr = os.environ['USERNAME'] + # usr = os.environ['USERNAME'] token = '9d0a4e0bea561710e0728f161f7edf4e5201e112' - url=url+'?token='+token - - headers = {'Authorization': 'token ' + token,'accept': 'application/json','Content-Type': 'application/json'} + 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: + 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 = 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') + # print(URL) + version = qgis.utils.pluginMetadata(NAME, 'version') len_version = len(version) try: urllib.request.urlopen('https://google.com') binar = True - except: + 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] + 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: + 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 \ No newline at end of file + devmaj = devmaj + qgis.utils.pluginMetadata(NAME, 'changelog') + return devmaj