xcaeag / MenuFromProject-Qgis-Plugin

Build layers shortcuts menus based on QGis projects
8 stars 9 forks source link

Feature: allow use a QGS or QGZ from a remote HTTP server #36

Closed Guts closed 3 years ago

Guts commented 3 years ago

Close #28 partiellement.

Pardon, j'ai fini tard hier soir donc j'avais plus la force pour une explication. Comme j'aime bien ce plugin, je m'en sers pour remonter en puissance sur le développement de plugins sur mon temps perso.

Principaux changements

Refacto

Divers

Ce qui manque avant une prochaine release

Bonux stage

ping @xcaeag

xcaeag commented 3 years ago

Je teste un peu, essaie de comprendre !

Une erreur lié à notre architecture peut être : l'appel à Path.resolve() provoque une erreur lorsque le répertoire est un répertoire réseau, sur lequel on peut écrire pourtant.

>>> dir = Path('f:/')
>>> dir.resolve()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "W:\OSGeo4W64\apps\Python37\lib\pathlib.py", line 1123, in resolve
    s = self._flavour.resolve(self, strict=strict)
  File "W:\OSGeo4W64\apps\Python37\lib\pathlib.py", line 189, in resolve
    s = self._ext_to_normal(_getfinalpathname(s))
PermissionError: [WinError 5] Accès refusé: 'f:\\'

Puis une autre sur le décorateur lru_cache ?? (Python 3.7) en précisant un maxsize, ça passe.

  File "\\NAS01\appdata2008\culos\AppData\Roaming\.qgisltr\profiles\xcu/python/plugins\menu_from_project\logic\qgs_manager.py", line 148, in 
    def read_from_http(uri: str, cache_folder: Path):
  File "W:\OSGEO4~1\apps\Python37\lib\functools.py", line 474, in lru_cache
    raise TypeError('Expected maxsize to be an integer or None')
TypeError: Expected maxsize to be an integer or None

A la création du cache (QGIS n'existait pas encore chez moi..)

  File "\\NAS01\appdata2008\culos\AppData\Roaming\.qgisltr\profiles\xcu/python/plugins\menu_from_project\menu_from_project.py", line 60, in 
    cache_folder.mkdir(exist_ok=True)
  File "W:\OSGEO4~1\apps\Python37\lib\pathlib.py", line 1230, in mkdir
    self._accessor.mkdir(self, mode)
FileNotFoundError: [WinError 3] Le chemin d’accès spécifié est introuvable: 'C:\\Users\\culos\\.cache\\QGIS\\Layersmenufromproject'

je poursuis !

xcaeag commented 3 years ago

Passés ces petits soucis, ça fonctionne ! C'est magique.

haubourg commented 3 years ago

Super taf @Guts ! Merci Xavier pour la revue (et bonne annnée)

* Idéalement il vaudrait mieux utiliser le chemin du cache de QGIS je pense mais je n'ai pas trouvé de variable qui l'indique.

A tout hasard, ce serait pas le cache QtNetwork tout simplement ?

https://doc.qt.io/qt-5/qnetworkdiskcache.html

Je vais tester ça dans ma nouvelle structure aussi, dès que j'aurais un setup qui marche..

Guts commented 3 years ago

Merci @haubourg mais ça n'est pas encore terminé, cf mes remarques en description. Je vais essayer de m'en occuper demain soir, histoire d'enfin offrir mes étrennes à Florian B. et son équipe 😉 !

A tout hasard, ce serait pas le cache QtNetwork tout simplement ? https://doc.qt.io/qt-5/qnetworkdiskcache.html

Peut-être mais Je ne suis pas sûr. Aujourd'hui, je suis sous Windows et je retrouve pas mes petits, mais de mémoire, le chemin est quelque chose comme ~/.cache/QGIS/QGIS3.

xcaeag commented 3 years ago

Hello,

J'avais utilisé un temps QgsProcessingUtils.tempFolder(), pour un usage un peu différent. Sinon, est-ce qu'il ne faudrait pas rendre unique le nom du fichier dans le cache ? Les risques sont faibles que deux fichiers portent le même nom, mais ?

Guts commented 3 years ago

J'avais utilisé un temps QgsProcessingUtils.tempFolder(), pour un usage un peu différent.

Merci pour la piste. Par contre, il s'agit d'un pointeur de dossier temporaire et non de cache, non ? (j'ai pas regardé, c'est juste d'après le nom)

Sinon, est-ce qu'il ne faudrait pas rendre unique le nom du fichier dans le cache ? Les risques sont faibles que deux fichiers portent le même nom, mais ?

Oui, c'est prévu via un hash de l'url, un peu à la manière de que fait scrapy pour les images.

xcaeag commented 3 years ago

C'est du temporaire oui, dédié aux scripts 'processing'. sous windows : C:/Users/xxx/AppData/Local/Temp/processing_...

Guts commented 3 years ago

C'est du temporaire oui, dédié aux scripts 'processing'. sous windows : C:/Users/xxx/AppData/Local/Temp/processing_...

Ok donc c'est pas ce qu'on cherche exactement.

HS : j'ai glissé une capture du plugin dans ma blog-notes https://static.geotribu.fr/articles/2021/2021-01-19_pyqgis_utiliser_icones_integrees/ #inception ;)

xcaeag commented 3 years ago

La version expérimentale est publiée, en attente de validation. Mais ne ne connais pas trop de testeurs !

ici un projet exemple : http://adour-garonne.eaufrance.fr/upload/DATA/SIG/aeag-web.qgz