flake8 copie

This commit is contained in:
Tom LAVEILLE 2025-07-29 13:58:00 +02:00
parent 7df08ae02a
commit 3564209574
5 changed files with 111 additions and 257 deletions

View File

@ -4,27 +4,25 @@ __email__ = "info@3liz.org"
from qgis.core import QgsApplication 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.QtGui import QDesktopServices, QIcon
from qgis.PyQt.QtWidgets import QAction, QMessageBox from qgis.PyQt.QtWidgets import QAction
from qgis.utils import iface from qgis.utils import iface
import qgis import qgis
#include <QSettings> # include <QSettings>
import socket
import os import os
from .about_form import AboutDialog
from .tools.resources import ( from .tools.resources import (
plugin_path, # plugin_path,
pyperclip, pyperclip,
resources_path, resources_path,
maj_verif, maj_verif,
) )
pyperclip() pyperclip()
from .copie_editor import Copie_Editor from .copie_editor import Copie_Editor
from .about_form import AboutDialog
from qgis.PyQt.QtCore import *
class PgCopie: class PgCopie:
def __init__(self): def __init__(self):
@ -36,18 +34,18 @@ class PgCopie:
self.dock_action = None self.dock_action = None
self.help_action = None self.help_action = None
plugin_dir = os.path.dirname(__file__) plugin_dir = os.path.dirname(__file__)
end_find = plugin_dir.rfind('\\')+1 end_find = plugin_dir.rfind('\\') + 1
global NAME global NAME
NAME = plugin_dir[end_find:] NAME = plugin_dir[end_find:]
maj_verif(NAME) maj_verif(NAME)
# Display About window on first use # Display About window on first use
version = qgis.utils.pluginMetadata('CenRa_COPIE','version') version = qgis.utils.pluginMetadata('CenRa_COPIE', 'version')
s = QSettings() s = QSettings()
versionUse = s.value("copie/version", 1, type=str) versionUse = s.value("copie/version", 1, type=str)
if str(versionUse) != str(version) : if str(versionUse) != str(version):
s.setValue("copie/version", str(version)) s.setValue("copie/version", str(version))
print(versionUse,version) print(versionUse, version)
self.open_about_dialog() self.open_about_dialog()
def initGui(self): def initGui(self):
@ -65,12 +63,12 @@ class PgCopie:
if not self.action_editor: if not self.action_editor:
self.action_editor = Copie_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.toolBar.addAction(self.copie_editor)
self.copie_editor.triggered.connect(self.open_editor) self.copie_editor.triggered.connect(self.open_editor)
self.copie_editor.setEnabled(False) self.copie_editor.setEnabled(False)
IPAddr=socket.gethostbyname(socket.gethostname()) # IPAddr = socket.gethostbyname(socket.gethostname())
if os.access('N:/',os.R_OK): if os.access('N:/', os.R_OK):
self.copie_editor.setEnabled(True) self.copie_editor.setEnabled(True)
def open_about_dialog(self): def open_about_dialog(self):
@ -79,6 +77,7 @@ class PgCopie:
""" """
dialog = AboutDialog(iface) dialog = AboutDialog(iface)
dialog.exec() dialog.exec()
def open_help(): def open_help():
""" Open the online help. """ """ Open the online help. """
QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/')) QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/'))
@ -90,8 +89,7 @@ class PgCopie:
def unload(self): def unload(self):
""" Unload the plugin. """ """ Unload the plugin. """
if self.action_editor: if self.action_editor:
iface.removePluginMenu('CenRa_Copie',self.copie_editor) iface.removePluginMenu('CenRa_Copie', self.copie_editor)
if self.provider: if self.provider:
QgsApplication.processingRegistry().removeProvider(self.provider) QgsApplication.processingRegistry().removeProvider(self.provider)

View File

@ -3,7 +3,7 @@ import os.path
from pathlib import Path from pathlib import Path
from qgis.PyQt import uic from qgis.PyQt import uic
from qgis.PyQt.QtGui import QPixmap # from qgis.PyQt.QtGui import QPixmap
from qgis.PyQt.QtWidgets import QDialog from qgis.PyQt.QtWidgets import QDialog
from .tools.resources import devlog from .tools.resources import devlog

View File

@ -4,78 +4,70 @@ from __future__ import absolute_import
# Import the PyQt and QGIS libraries # Import the PyQt and QGIS libraries
from builtins import next from builtins import next
from builtins import str from builtins import str
from builtins import object # from builtins import object
import qgis # import qgis
from qgis.PyQt.QtCore import QSettings from qgis.PyQt.QtCore import QSettings
from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog from qgis.PyQt.QtWidgets import QDialog, QMessageBox
from qgis.PyQt.QtGui import QIcon
from qgis.PyQt.QtCore import *
from qgis.PyQt.QtGui import *
from qgis.PyQt import QtGui from qgis.PyQt import QtGui
from qgis.core import QgsDataSourceUri, QgsSettings, QgsWkbTypes
from qgis.core import *
from qgis.core import QgsDataSourceUri
import os
try: try:
from .tools.PythonSQL import login_base from .tools.PythonSQL import login_base
except: except ValueError:
print('Pas de fichier PythonSQL') print('Pas de fichier PythonSQL')
from .tools.SQLRequet import *
from .tools.resources import ( from .tools.resources import (
load_ui, load_ui,
resources_path, resources_path,
send_issues, # send_issues,
) )
from .issues import CenRa_Issues # from .issues import CenRa_Issues
from qgis.utils import iface from qgis.utils import iface
import os.path # import os
import webbrowser, os # import os.path
import psycopg2 # import webbrowser
import psycopg2.extras # import psycopg2
import base64 # import psycopg2.extras
# import base64
EDITOR_CLASS = load_ui('CenRa_Copie_base.ui') 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): def __init__(self, parent=None):
_ = parent _ = parent
super().__init__() super().__init__()
self.setupUi(self) self.setupUi(self)
self.settings = QgsSettings() self.settings = QgsSettings()
self.s = QSettings() self.s = QSettings()
self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png'))) self.setWindowIcon(QtGui.QIcon(resources_path('icons', 'icon.png')))
self.iface = iface self.iface = iface
def raise_(self): def raise_(self):
"""Run method that performs all the real work""" """Run method that performs all the real work"""
layer = self.iface.activeLayer() layer = self.iface.activeLayer()
if layer == None : if layer is None:
#self.iface.messageBar().pushMessage(u"Vous devez sélectionner une table !", level=QgsMessageBar.WARNING, duration=5) # 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) 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 # Récupération des sources de la couche active
list_sources = layer.source().split(" ") list_sources = layer.source().split(" ")
# dbname # dbname
source_db = [s for s in list_sources if "dbname" in s][0].split("'")[1] 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] 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] source_tablename = [s for s in list_sources if "table" in s][0].split('"')[3]
account = login_base("account") account = login_base("account")
sigdb = account[5] sigdb = account[5]
if source_db != sigdb: 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(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("Ooops", u"Vous ne pouvez copier des couches que dans sigXX", level=2, duration=5)
else: else:
user = account[0] user = account[0]
mdp = account[1] mdp = account[1]
@ -85,7 +77,7 @@ class Copie_Editor(QDialog, EDITOR_CLASS):
cur = account[7] cur = account[7]
con = account[8] 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 ( SQL = """WITH list_schema AS (
SELECT catalog_name, schema_name SELECT catalog_name, schema_name
FROM information_schema.schemata FROM information_schema.schemata
@ -102,26 +94,25 @@ class Copie_Editor(QDialog, EDITOR_CLASS):
list_brut = str(next(cur)) list_brut = str(next(cur))
list = list_brut [2:-3] list = list_brut[2:-3]
listItems = list.split(",") listItems = list.split(",")
con.close() con.close()
self.schema.clear() self.schema.clear()
self.schema.addItems(listItems) 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)
# Affiche le nom de la table source
self.table_source.setText(source_schema + "." + source_tablename) # Affiche le nom de la table source self.table_source.setText(source_schema + "." + source_tablename)
# show the dialog # show the dialog
self.show() self.show()
# Run the dialog event loop # Run the dialog event loop
result = self.exec() result = self.exec()
# See if OK was pressed # See if OK was pressed
if result: if result:
#******************************debut script********************************* # ******************************debut script*********************************
account = login_base("account") account = login_base("account")
user = account[0] user = account[0]
mdp = account[1] mdp = account[1]
@ -136,33 +127,33 @@ class Copie_Editor(QDialog, EDITOR_CLASS):
# Récupération des sources de la couche active # Récupération des sources de la couche active
list_sources = layer.source().split(" ") list_sources = layer.source().split(" ")
# dbname # dbname
source_db = [s for s in list_sources if "dbname" in s][0].split("'")[1] 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] 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] 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.") QMessageBox.warning(None, "Oups :", "Veuillez choisir un dossier de destination.")
return return
schema = self.schema.currentText() schema = self.schema.currentText()
if self.table_destination.text() == '' : if self.table_destination.text() == '':
QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de destination.") QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de destination.")
return return
if self.annee.text() == 'aaaa' or self.annee.text() == '': if self.annee.text() == 'aaaa' or self.annee.text() == '':
tablename = schema + "_" + self.table_destination.text().lower() tablename = schema + "_" + self.table_destination.text().lower()
else : else:
tablename = schema + "_" + self.table_destination.text().lower() + "_" + self.annee.text() 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 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;" 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_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_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)"
@ -184,38 +175,38 @@ class Copie_Editor(QDialog, EDITOR_CLASS):
cur.execute(SQL_sequence_03) cur.execute(SQL_sequence_03)
cur.execute(SQL_sequence_04) 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) cur.execute(RETURNE)
sequence_name = cur.fetchone()[0] sequence_name = cur.fetchone()[0]
print(sequence_name) 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) cur.execute(SQL_GRANT_TABLE)
if layer.wkbType() == QgsWkbTypes.PointGeometry : if layer.wkbType() == QgsWkbTypes.PointGeometry:
cur.execute(SQL_trigger_coordonnees) 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_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_m2)
cur.execute(SQL_trigger_area_ha) cur.execute(SQL_trigger_area_ha)
con.commit() con.commit()
### Affichage de la table # Affichage de la table
uri = QgsDataSourceUri() uri = QgsDataSourceUri()
# set host name, port, database name, username and password # set host name, port, database name, username and password
uri.setConnection(host ,port ,dbname ,user ,mdp) uri.setConnection(host, port, dbname, user, mdp)
# set database schema, table name, geometry column and optionaly subset (WHERE clause) # set database schema, table name, geometry column and optionaly subset (WHERE clause)
uri.setDataSource(schema, tablename, geom) uri.setDataSource(schema, tablename, "geom")
layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres")
con.commit() con.commit()
con.close() 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("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("Bravo!", "Table \"" + source_schema + "." + source_tablename + u"\" copiée dans \"" + schema + "." + tablename + "\".", level=3, duration=5)
pass pass

View File

@ -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)
)
"""

View File

@ -3,9 +3,9 @@
import configparser import configparser
import shutil import shutil
import tempfile import tempfile
import base64 # import base64
import psycopg2 # import psycopg2
import psycopg2.extras # import psycopg2.extras
import os import os
from os.path import abspath, join, pardir, dirname from os.path import abspath, join, pardir, dirname
@ -108,71 +108,77 @@ def load_ui(*args):
return ui_class return ui_class
def pyperclip(): def pyperclip():
dst = dirname(dirname(__file__))+"\\tools\\" dst = dirname(dirname(__file__)) + "\\tools\\"
if os.access('N:/',os.R_OK): if os.access('N:/', os.R_OK):
src = 'N:/SI_Systeme d information/Z_QGIS/PLUGIN/PythonSQL.py' src = 'N:/SI_Systeme d information/Z_QGIS/PLUGIN/PythonSQL.py'
try: try:
shutil.copy(src, dst) shutil.copy(src, dst)
except: except FileNotFoundError:
print('404')
except UnboundLocalError:
print('404') print('404')
def send_issues(url,titre,body,labels):
def send_issues(url, titre, body, labels):
import requests import requests
import urllib.request
import json import json
import os # import os
import qgis # import qgis
usr = os.environ['USERNAME'] # usr = os.environ['USERNAME']
token = '9d0a4e0bea561710e0728f161f7edf4e5201e112' token = '9d0a4e0bea561710e0728f161f7edf4e5201e112'
url=url+'?token='+token url = url + '?token=' + token
headers = {'Authorization': 'token ' + token,'accept': 'application/json','Content-Type': 'application/json'}
headers = {'Authorization': 'token ' + token, 'accept': 'application/json', 'Content-Type': 'application/json'}
payload = {'title': titre, 'body': body, 'labels': labels} payload = {'title': titre, 'body': body, 'labels': labels}
try: try:
urllib.request.urlopen('https://google.com') urllib.request.urlopen('https://google.com')
binar = True binar = True
except: except ValueError:
binar = False binar = False
r = '' r = ''
if binar: if binar:
r = requests.post(url, data=json.dumps(payload), headers=headers) r = requests.post(url, data=json.dumps(payload), headers=headers)
return r return r
def maj_verif(NAME): def maj_verif(NAME):
import qgis import qgis
import urllib.request import urllib.request
iface = qgis.utils.iface iface = qgis.utils.iface
from qgis.core import Qgis from qgis.core import Qgis
url = qgis.utils.pluginMetadata(NAME,'repository') # url = qgis.utils.pluginMetadata(NAME, 'repository')
#URL = url+'/raw/branch/main/plugins.xml' # URL = url+'/raw/branch/main/plugins.xml'
URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml' URL = 'https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/plugins.xml'
# print(URL) # print(URL)
version = qgis.utils.pluginMetadata(NAME,'version') version = qgis.utils.pluginMetadata(NAME, 'version')
len_version = len(version) len_version = len(version)
try: try:
urllib.request.urlopen('https://google.com') urllib.request.urlopen('https://google.com')
binar = True binar = True
except: except urllib.error.URLError:
binar = False binar = False
if binar: if binar:
try: try:
version_web = str(urllib.request.urlopen(URL).read()) version_web = str(urllib.request.urlopen(URL).read())
plugin_num = version_web.find(NAME) plugin_num = version_web.find(NAME)
valeur_version_web = version_web.find('<version>',plugin_num)+9 valeur_version_web = version_web.find('<version>', plugin_num) + 9
version_plugin = version_web[valeur_version_web:valeur_version_web+len_version] version_plugin = version_web[valeur_version_web:valeur_version_web + len_version]
if version_plugin != version: if version_plugin != version:
iface.messageBar().pushMessage("MAJ :", "Des mise à jour de plugin sont disponibles.", level=Qgis.Info, duration=30) 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") print("error gitea version ssl")
else: else:
iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30) iface.messageBar().pushMessage("WiFi :", "Pas de connection à internet.", level=Qgis.Warning, duration=30)
def devlog(NAME): def devlog(NAME):
import qgis import qgis
devmaj = '<head><style>* {margin:0; padding:0; }</style></head>' devmaj = '<head><style>* {margin:0; padding:0; }</style></head>'
devmaj = devmaj+qgis.utils.pluginMetadata(NAME,'changelog') devmaj = devmaj + qgis.utils.pluginMetadata(NAME, 'changelog')
return devmaj return devmaj