From e2e062ed1241923241af1ffad1f98fb61f717afc Mon Sep 17 00:00:00 2001 From: Tom LAVEILLE Date: Wed, 12 Feb 2025 17:28:52 +0100 Subject: [PATCH] outils de rename pour bd psql --- CenRa_POSTGIS/CenRa_Postgis.py | 24 ++ CenRa_POSTGIS/metadata.txt | 4 +- CenRa_POSTGIS/postgis_creator.py | 1 + CenRa_POSTGIS/postgis_editor.py | 1 + CenRa_POSTGIS/postgis_rename.py | 187 +++++++++++ CenRa_POSTGIS/tools/icons/page_rename.png | Bin 0 -> 4948 bytes .../tools/ui/CenRa_PostgisRename_base.ui | 314 ++++++++++++++++++ plugins.xml | 6 +- 8 files changed, 532 insertions(+), 5 deletions(-) create mode 100644 CenRa_POSTGIS/postgis_rename.py create mode 100644 CenRa_POSTGIS/tools/icons/page_rename.png create mode 100644 CenRa_POSTGIS/tools/ui/CenRa_PostgisRename_base.ui diff --git a/CenRa_POSTGIS/CenRa_Postgis.py b/CenRa_POSTGIS/CenRa_Postgis.py index d87cf1ab..7636fc5f 100644 --- a/CenRa_POSTGIS/CenRa_Postgis.py +++ b/CenRa_POSTGIS/CenRa_Postgis.py @@ -21,6 +21,7 @@ from .tools.resources import ( ) from .postgis_editor import Postgis_Editor from .postgis_creator import Postgis_Creator +from .postgis_rename import Postgis_Rename from .about_form import AboutDialog from PyQt5.QtCore import * @@ -30,6 +31,7 @@ class PgPostgis: """ Constructor. """ self.action_editor = None self.action_creator = None + self.action_rename = None # self.issues = None self.provider = None self.locator_filter = None @@ -58,6 +60,7 @@ class PgPostgis: icon = QIcon(resources_path('icons', 'page_new.png')) icon2 = QIcon(resources_path('icons', 'page_ajout.png')) + icon3 = QIcon(resources_path('icons', 'page_rename.png')) # Open the online help self.help_action = QAction(icon, "CenRa_Postgis", iface.mainWindow()) @@ -75,6 +78,21 @@ class PgPostgis: self.postgis_editor = QAction(icon2, 'dossier_editor',None) self.toolBar.addAction(self.postgis_editor) self.postgis_editor.triggered.connect(self.open_editor) + if not self.action_rename: + self.action_rename = Postgis_Rename() + + self.postgis_rename = QAction(icon3, 'dossier_rename',None) + self.toolBar.addAction(self.postgis_rename) + self.postgis_rename.triggered.connect(self.open_rename) + + if os.environ['USERNAME'] == 'tlaveille' or os.environ['USERNAME'] == 'lpoulin' or os.environ['USERNAME'] == 'rclement': + self.action_rename.setEnabled(True) + self.postgis_rename.setEnabled(True) + self.postgis_rename.setVisible(1) + else: + self.action_rename.setEnabled(False) + self.postgis_rename.setEnabled(False) + self.postgis_rename.setVisible(0) def open_about_dialog(self): """ @@ -94,12 +112,18 @@ class PgPostgis: self.action_creator.show() self.action_creator.raise_() + def open_rename(self): + self.action_rename.show() + self.action_rename.raise_() + def unload(self): """ Unload the plugin. """ if self.action_editor: iface.removePluginMenu('CenRa_Postgis',self.postgis_editor) if self.action_creator: iface.removePluginMenu('CenRa_Postgis',self.postgis_creator) + if self.action_rename: + iface.removePluginMenu('CenRa_Postgis',self.postgis_rename) if self.provider: QgsApplication.processingRegistry().removeProvider(self.provider) diff --git a/CenRa_POSTGIS/metadata.txt b/CenRa_POSTGIS/metadata.txt index 48fffbf1..05aad1ce 100644 --- a/CenRa_POSTGIS/metadata.txt +++ b/CenRa_POSTGIS/metadata.txt @@ -12,7 +12,7 @@ name=CenRa_POSTGIS qgisMinimumVersion=3.0 description=Permet de crée un dossier dans la base PostGis -version=2.5 +version=2.6 author=Conservatoire d'Espaces Naturels de Rhône-Alpes email=si_besoin@cen-rhonealpes.fr @@ -21,7 +21,7 @@ email=si_besoin@cen-rhonealpes.fr # Optional items: # Uncomment the following line and add your changelog entries: -changelog=

CenRa_POSTGIS:


04/02/2025 - Version 2.5:

- Correctif bug création de couche.


23/01/2025 - Version 2.4:

- Correctif sur les pkey.


22/01/2025 - Version 2.3:

- Correctif sur la creation de projet.


21/01/2025 - Version 2.2:

- Correctif sur la longeur des nom.


07/01/2025 - Version 2.1:

- ByPass du certif ssl ci erreur.


22/10/2024 - Version 2.0:

- Refont du code.

+changelog=

CenRa_POSTGIS:


12/02/2025 - Version 2.6:

- InDev:renomé les schema et table.


04/02/2025 - Version 2.5:

- Correctif bug création de couche.


23/01/2025 - Version 2.4:

- Correctif sur les pkey.


22/01/2025 - Version 2.3:

- Correctif sur la creation de projet.


21/01/2025 - Version 2.2:

- Correctif sur la longeur des nom.


07/01/2025 - Version 2.1:

- ByPass du certif ssl ci erreur.


22/10/2024 - Version 2.0:

- Refont du code.

# tags are comma separated with spaces allowed tags=cenra, postgis, database diff --git a/CenRa_POSTGIS/postgis_creator.py b/CenRa_POSTGIS/postgis_creator.py index 90ce8d9a..a1928568 100644 --- a/CenRa_POSTGIS/postgis_creator.py +++ b/CenRa_POSTGIS/postgis_creator.py @@ -50,6 +50,7 @@ class Postgis_Creator(QDialog, EDITOR_CLASS): # run method that performs all the real work def raise_(self): + self.activateWindow() # show the dialog self.show() # Run the dialog event loop diff --git a/CenRa_POSTGIS/postgis_editor.py b/CenRa_POSTGIS/postgis_editor.py index 9f238a19..0d591f31 100644 --- a/CenRa_POSTGIS/postgis_editor.py +++ b/CenRa_POSTGIS/postgis_editor.py @@ -50,6 +50,7 @@ class Postgis_Editor(QDialog, EDITOR_CLASS): ### Outil Ajout de nouvelles couche a un dossier def raise_(self): + self.activateWindow() first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password) first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor) first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')") diff --git a/CenRa_POSTGIS/postgis_rename.py b/CenRa_POSTGIS/postgis_rename.py new file mode 100644 index 00000000..0c03164f --- /dev/null +++ b/CenRa_POSTGIS/postgis_rename.py @@ -0,0 +1,187 @@ +# -*- coding: utf-8 -*- + +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 qgis.PyQt.QtCore import QSettings +from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog, QMessageBox +from qgis.PyQt.QtGui import QIcon +from PyQt5.QtCore import * +from PyQt5.QtGui import * +from PyQt5 import QtGui +from qgis.core import * +from qgis.core import QgsDataSourceUri + +from .tools.PythonSQL import * +from .tools.resources import ( + load_ui, + resources_path, + login_base, + send_issues, + create_vierge, + create_contour, + create_travaux, + create_habita +) +from .issues import CenRa_Issues + +import os.path +import webbrowser, os +import psycopg2 +import psycopg2.extras +import base64 +from qgis.utils import iface + +EDITOR_CLASS = load_ui('CenRa_PostgisRename_base.ui') + +first_conn = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=first_cnx password=" + password) +first_cur = first_conn.cursor(cursor_factory = psycopg2.extras.DictCursor) +first_cur.execute("SELECT mdp_w, login_w FROM pg_catalog.pg_user t1, admin_sig.vm_users_sig t2 WHERE t2.oid = t1.usesysid AND (login_w = '" + os_user + "' OR login_w = '" + os_user + "')") +res_ident = first_cur.fetchone() +mdp = base64.b64decode(str(res_ident[0])).decode('utf-8') +user = res_ident[1] + +con = psycopg2.connect("host=" + host + " port=" + port + " dbname="+dbname+" user=" + user + " password=" + mdp) +cur = con.cursor(cursor_factory = psycopg2.extras.DictCursor) +first_conn.close() + +class Postgis_Rename(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.iface = iface + + self.schema.currentIndexChanged.connect(self.Test) + self.buttonBox.accepted.connect(self.msgBox) + ### Outil Ajout de nouvelles couche a un dossier + def raise_(self): + self.activateWindow() + self.groupBox_2.hide() + GET_ALL_SCHEMA = """SELECT DISTINCT table_schema FROM information_schema.tables WHERE table_schema LIKE '_form_%' OR table_schema LIKE '_01_%' OR table_schema LIKE '_07_%' OR table_schema LIKE '_26_%' OR table_schema LIKE '_42_%' OR table_schema LIKE '_69_%' ORDER BY table_schema;""" + cur.execute(GET_ALL_SCHEMA) + AllSchema = cur.fetchall() + last_value_schema = self.schema.currentText() + last_value_departement = self.departement.currentText() + self.schema.clear() + self.departement.clear() + self.schema.addItems(['']) + for Schema in AllSchema: + self.schema.addItems(Schema) + self.departement.addItems(['','01','07','26','42','69','form']) + if last_value_schema != '': + self.schema.setCurrentIndex(self.schema.findText(last_value_schema)) + if last_value_departement != '': + self.departement.setCurrentIndex(self.departement.findText(last_value_departement)) + + def Test(self): + if self.schema.currentText() != '': + self.loadValue() + else: + self.old_name.setText('') + + def loadValue(self): + oldSchema = self.schema.currentText() + if oldSchema[:6] == '_form_': + oldSchema = self.schema.currentText()[6:] + prefixSchema = self.schema.currentText()[1:5] + else: + oldSchema = self.schema.currentText()[4:] + prefixSchema = self.schema.currentText()[1:3] + if oldSchema[:3] == 'at_': + oldSchema = oldSchema[3:] + self.animation.setChecked(1) + else: + self.animation.setChecked(0) + self.old_name.setText(oldSchema) + self.departement.setCurrentIndex(self.departement.findText(prefixSchema)) + + def updateName(self): + if self.departement.currentText() != '': + oldTableName = self.old_name.text() + newTableName = ((self.new_name.text()).lower()).replace(' ','_') + newPrefixSchema = '_'+self.departement.currentText()+'_' + if self.schema.currentText()[:6] == '_form_': + oldPrefixSchema = self.schema.currentText()[:6] + if (self.schema.currentText()[6:9]) == "at_": + oldPrefixSchema=oldPrefixSchema+'at_' + else: + oldPrefixSchema = self.schema.currentText()[:4] + if (self.schema.currentText()[4:7]) == 'at_': + oldPrefixSchema=oldPrefixSchema+'at_' + + if self.animation.isChecked(): + newPrefixSchema=newPrefixSchema+'at_' + oldSchemaName = oldPrefixSchema+oldTableName + newSchemaName = newPrefixSchema+newTableName + + if oldSchemaName != newSchemaName: + global AllSQLrun + allSQLrun='' + + SQL_UPDATE = """UPDATE public.layer_styles SET f_table_schema = '"""+newSchemaName+"""',f_table_name = replace(replace(f_table_name,'"""+oldTableName+"""','"""+newTableName+"""'),'"""+oldPrefixSchema+"""','"""+newPrefixSchema+"""') WHERE f_table_schema LIKE '"""+oldSchemaName+"""';""" + allSQLrun = allSQLrun+SQL_UPDATE + cur.execute(SQL_UPDATE) + + SQL_GET_TABLE_RENAME = """SELECT table_name,replace(replace(table_name,'"""+oldTableName+"""','"""+newTableName+"""'),'"""+oldPrefixSchema+"""','"""+newPrefixSchema+"""') from information_schema.tables WHERE table_schema LIKE '"""+oldSchemaName+"""';""" + cur.execute(SQL_GET_TABLE_RENAME) + allTableRename = cur.fetchall() + allTableList = [] + for TableRename in allTableRename: + oldTable = TableRename[0] + newTable = TableRename[1] + allTableList.append([oldTable,newSchemaName,newTable]) + SQL_RENAME_TABLE = """ALTER TABLE """+oldSchemaName+'.'+oldTable+""" RENAME TO """+newTable+""";""" + allSQLrun = allSQLrun+SQL_RENAME_TABLE + cur.execute(SQL_RENAME_TABLE) + + SQL_RENAME_SCHEMA = 'ALTER SCHEMA '+oldSchemaName+' RENAME TO '+newSchemaName + allSQLrun = allSQLrun+SQL_RENAME_SCHEMA + cur.execute(SQL_RENAME_SCHEMA) + #print(allSQLrun) + con.commit() + for LayerOpen in allTableList: + self.UnloadLoadLayers(LayerOpen[0],LayerOpen[1],LayerOpen[2]) + + + def UnloadLoadLayers(self,OldName,NewSchema,NewTable): + allLayers = (QgsProject.instance().mapLayers().values()) + listLayers = [] + listLayersName = [] + for layer in allLayers: + listLayers.append(layer) + listLayersName.append(layer.name()) + if OldName in listLayersName: + layer = (listLayers[listLayersName.index(OldName)]) + provider = layer.dataProvider() + dbname = (QgsDataSourceUri(provider.dataSourceUri()).database()) + user = QgsDataSourceUri(provider.dataSourceUri()).username() + mdp = QgsDataSourceUri(provider.dataSourceUri()).password() + host = QgsDataSourceUri(provider.dataSourceUri()).host() + port = QgsDataSourceUri(provider.dataSourceUri()).port() + + ### 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(NewSchema, NewTable, 'geom') + QgsProject.instance().removeMapLayer(layer.id()) + layer = self.iface.addVectorLayer(uri.uri(), NewTable, "postgres") + + def msgBox(self): + self.QMBquestion = QMessageBox() + self.QMBquestion.setWindowTitle(u"Attention !") + self.QMBquestion.setIcon(QMessageBox.Warning) + self.QMBquestion.setText("Attention, le renommage de dossier PostGIS peut engendrer des pertes de liaisons avec des projets QGIS !") + self.QMBquestion.setStandardButtons(QMessageBox.Yes|QMessageBox.No) + self.QMBquestion = self.QMBquestion.exec() + if self.QMBquestion == QMessageBox.Yes: + self.updateName() diff --git a/CenRa_POSTGIS/tools/icons/page_rename.png b/CenRa_POSTGIS/tools/icons/page_rename.png new file mode 100644 index 0000000000000000000000000000000000000000..a9c0019917e1b8e14cc0ac6eb4c32764feb0d1b0 GIT binary patch literal 4948 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 + + table_postgis + + + + 0 + 0 + 533 + 364 + + + + Ajout d'une table + + + + + 360 + 330 + 161 + 32 + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + 170 + 0 + 171 + 31 + + + + + 14 + 75 + true + + + + Création de table + + + + + + 10 + 80 + 511 + 101 + + + + + 75 + true + + + + Tester mon eligibilite : + + + Qt::AlignCenter + + + + + 10 + 19 + 491 + 71 + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + Compte + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + false + + + Couche + + + + + + + + + + 10 + 40 + 511 + 31 + + + + + + + + 90 + 16777215 + + + + Code analytique : + + + + + + + + + + + + 10 + 180 + 511 + 151 + + + + + 75 + true + + + + Les changement : + + + Qt::AlignCenter + + + + + 10 + 20 + 491 + 61 + + + + + + + + 50 + false + + + + Nouvau nom : + + + + + + + + 50 + false + + + + Partie renome : + + + + + + + false + + + + 75 + true + true + + + + + + + + + + + + + 10 + 80 + 491 + 61 + + + + + + + + 130 + 16777215 + + + + + 50 + false + + + + Département/Animation : + + + + + + + Animation territoriale + + + + + + + + + + + + + + buttonBox + accepted() + table_postgis + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + table_postgis + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/plugins.xml b/plugins.xml index 06f08add..0f69c8e8 100644 --- a/plugins.xml +++ b/plugins.xml @@ -1,8 +1,8 @@ - + - 2.5 + 2.6 3.16 https://plateformesig.cenra-outils.org/ CenRa_POSTGIS.zip @@ -11,7 +11,7 @@ https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_POSTGIS.zip CEN-Rhone-Alpes 2024-02-06 - 2025-02-04 + 2025-02-12 False False cenra,postgis