MTES-MCT / metadata-postgresql

Plume : gestion des métadonnées du patrimoine PostgreSQL
https://mtes-mct.github.io/metadata-postgresql/
GNU Affero General Public License v3.0
0 stars 1 forks source link

Compatibilité de Plume sous Linux #169

Closed WREATCHED closed 8 months ago

WREATCHED commented 8 months ago

Contexte Courriel du 17/10/2023 de Ludovic Granjon _Bonjour Je m'intéresse à votre plugin qgis plume Envisagez-vous une version utilisable sous Linux ? En vous remerciant pour votre retour Bonne journée Ludovic Granjon

Ludovic Granjon Géomaticien LEEISA UAR 3456 Centre de recherche de Montabo 275 route de Montabo BP 70620 - 97334 CAYENNE cedex_

Retours Il s'avère effectivement que les instructions subprocess.STARTUPINFO() pour mettre à jour les bibliothèques nécessaires au fonctionnement de Plume, ne sont pas reconnus sous Linux.

Solutions

import platform
# Obtenir des informations sur le système d'exploitation
system_info = platform.system()
release_info = platform.release()
# Afficher les informations sur le système d'exploitation
print(f"Système d'exploitation : {system_info}")
print(f"Version : {release_info}")

En fonction de l'OS par exemple :

def updatePip() :
    si = subprocess.STARTUPINFO() 
    si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    try:
       _sortie = subprocess.run(['python3', '-m', 'pip', 'install', '--upgrade', '--retries', '0', '--timeout', '5', '--quiet', '--quiet', '--quiet', 'pip'], check=True, startupinfo=si, env = getPathPip()) 
    except subprocess.CalledProcessError as err :
       return False
    return True

deviendrait

def updatePipLinux():
    try:
        _sortie = subprocess.run(['python3', '-m', 'pip', 'install', '--upgrade', '--retries', '0', '--timeout', '5', '--quiet', '--quiet', '--quiet', 'pip'], check=True, env=getPathPip())
    except subprocess.CalledProcessError as err:
        return False
    return True

Il faudrait pouvoir tester sous cet environnement ?

WREATCHED commented 8 months ago

Code J'ai modifier mes deux fonctions en fonction de ce que me retourne la troisième

#==================================================
# Obtenir des informations sur le système d'exploitation
def getOsInfo() : return ( platform.system(), platform.release() ) 
#==================================================
def updatePip() :
    if getOsInfo()[0].upper() == "WINDOWS" :
       si = subprocess.STARTUPINFO() 
       si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    try:
       if getOsInfo()[0].upper() == "WINDOWS" :
          _sortie = subprocess.run(['python3', '-m', 'pip', 'install', '--upgrade', '--retries', '0', '--timeout', '5', '--quiet', '--quiet', '--quiet', 'pip'], check=True, startupinfo=si, env = getPathPip())
       else :     
          _sortie = subprocess.run(['python3', '-m', 'pip', 'install', '--upgrade', '--retries', '0', '--timeout', '5', '--quiet', '--quiet', '--quiet', 'pip'], check=True, env=getPathPip())
    except subprocess.CalledProcessError as err :
       return False
    return True
#==================================================
def updateRequierement(mPathPerso) :
    if getOsInfo()[0].upper() == "WINDOWS" :
       si = subprocess.STARTUPINFO() 
       si.dwFlags |= subprocess.STARTF_USESHOWWINDOW
    try:
       if getOsInfo()[0].upper() == "WINDOWS" :
          _sortie = subprocess.run(['python3', '-m', 'pip', 'install', '-r', mPathPerso], check=True, startupinfo=si, env = getPathPip() )
       else :     
          _sortie = subprocess.run(['python3', '-m', 'pip', 'install', '-r', mPathPerso], check=True, env=getPathPip())

    except subprocess.CalledProcessError as err:
       return  False
    return True

Test L'installation se passe bien avec juste un effet de bord d'ouverture des deux sessions DOS qui se referment toutes seules.

image

LudovicGranjon commented 8 months ago

Super, merci ! Cela fonctionne pour moi, pas de fenêtre DOS qui s'ouvrent J'ai du installer python3-pyqt5.qtquick pour que cela fonctionne

J'ai pu importer une métadonnées depuis un catalogue

Par contre je n'ai pas réussi à importer depuis un fichier xml :

2023-10-18T10:35:34 WARNING Traceback (most recent call last): File "/home/xxxx/.local/share/QGIS/QGIS3/profiles/qgis-2_28/python/plugins/plume/plume_ui.py", line 62, in safe_pg_connection yield File "/home/xxxx/.local/share/QGIS/QGIS3/profiles/qgis-2_28/python/plugins/plume/plume_ui.py", line 391, in clickButtonsActions metagraph = importObjetMetagraphInspire(self) File "/home/xxxx/.local/share/QGIS/QGIS3/profiles/qgis-2_28/python/plugins/plume/bibli_plume.py", line 420, in importObjetMetagraphInspire MonFichierPath = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop') File "/usr/lib/python3.10/os.py", line 680, in getitem raise KeyError(key) from None KeyError: 'USERPROFILE'

         During handling of the above exception, another exception occurred:

         Traceback (most recent call last):
          File "/home/xxxx/.local/share/QGIS/QGIS3/profiles/qgis-2_28/python/plugins/plume/plume_ui.py", line 307, in clickButtonsActions
          with self.safe_pg_connection() :
          File "/usr/lib/python3.10/contextlib.py", line 153, in __exit__
          self.gen.throw(typ, value, traceback)
          File "/home/lgranjon/.local/share/QGIS/QGIS3/profiles/qgis-2_28/python/plugins/plume/plume_ui.py", line 89, in safe_pg_connection
          zMess = str(err_Exception) + "\n" + str(traceback.format_tb(Exception.__traceback__))
          File "/usr/lib/python3.10/traceback.py", line 57, in format_tb
          return extract_tb(tb, limit=limit).format()
          File "/usr/lib/python3.10/traceback.py", line 72, in extract_tb
          return StackSummary.extract(walk_tb(tb), limit=limit)
          File "/usr/lib/python3.10/traceback.py", line 364, in extract
          for f, lineno in frame_gen:
          File "/usr/lib/python3.10/traceback.py", line 329, in walk_tb
          yield tb.tb_frame, tb.tb_lineno
         AttributeError: 'getset_descriptor' object has no attribute 'tb_frame'

KeyError: 'USERPROFILE -> semble lié à windows

Par contre AttributeError: 'getset_descriptor' object has no attribute 'tb_frame' viendrait plutot de ma version de python en 3.10 j'ai l'impression

L'export n'est pas possible non plus

2023-10-18T10:39:05 WARNING Traceback (most recent call last): File "/home/xxxx/.local/share/QGIS/QGIS3/profiles/qgis-2_28/python/plugins/plume/plume_ui.py", line 1184, in _mObjetQMenuItem.triggered.connect(lambda : self.clickButtonsExportActions()) File "/home/xxxx/.local/share/QGIS/QGIS3/profiles/qgis-2_28/python/plugins/plume/plume_ui.py", line 428, in clickButtonsExportActions exportObjetMetagraph(self, self.schema, self.table, mItemExport, self.metagraph.available_export_formats(no_duplicate=True, format=mItemExport)) File "/home/xxxx/.local/share/QGIS/QGIS3/profiles/qgis-2_28/python/plugins/plume/bibliplume.py", line 370, in exportObjetMetagraph InitDir = os.path.join(os.path.join(os.environ['USERPROFILE']), 'Desktop') + "\" + "metadata" + str(schema) + "_" + str(table) + "" + export_extension_from_format(format) File "/usr/lib/python3.10/os.py", line 680, in getitem raise KeyError(key) from None KeyError: 'USERPROFILE'

Merci

WREATCHED commented 8 months ago

Envoie d'une version de correction pour les chemins Windows vs Linux

LudovicGranjon commented 8 months ago

Bonjour Tout semble parfaitement fonctionner : chargement du plugin, import, export Merci