-
Notifications
You must be signed in to change notification settings - Fork 5
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[SettingsManager] Création d'un module héritant de PyQt.QtCore.QSettings #258
Comments
Point avec Catherine, Gaël et Stéphanie du CD94 concernant le déploiement massif du plugin QGIS via un zipAu CD 94 ils prépare une version LTR de QGIS qui est configurée et customisée sur un poste "admin", à laquelle ils ajoutent des plugins dont le plugin Isogeo. Ensuite cette version est "chargée" dans un "centre logiciel" à partir duquel elle sera déployée sur les postes des utilisateurs sans nécessiter d'action de leur part. Les plugins sont donc encapsulés dans cette version déployée. L'objectif c'est de faire en sorte qu'un maximum de configurations communes à tous les utilisateurs puisse être effectué une seule fois. Ce qu'on cherche c'est que les configurations du plugin Isogeo effectuées sur le poste "admin" avant le chargement dans le centre logiciel se répercutent sur les postes utilisateur après le déploiement. Je pense notamment à l'authentification pour laquelle Stéphanie m'a dit que ça n'était pas le cas alors qu'elle dépose le fichier dans le dossier Globalement, tout ça confirme la nécessité de se poser la question de où on enregistre les paramètres. J'ai toujours tendance à vouloir les enregistrer dans des fichiers + dans les paramètres de QGIS. Mais se pose la question des conflits, pour chaque paramètre il va falloir décider, si sa valeur dans le fichier est différente de celle des paramètres, quelle valeur conserver. Le plugin sera prochaine déployé pour plusieurs dizaines d'utilisateurs. Stéphanie m'a dit, après que je lui ais demandé, qu'on pourrait effectuer des tests de déploiement, une fois que j'aurai une version suffisamment mature du plugin à leur faire tester. Puisque je ne maîtrise pas les modalités technique de leur processus de déploiement, l'idée serait de constater dans leur environnement 2 types de comportement :
|
+ handle case when "add_metadata_url_portal" is not 0 or 1
the main module instantiate the SettingsManager and the instance is given has init arg to Authenticator, DataBaseManager, MetadataDisplayer, PortalURLManager, QuickSearchManager, CacheManager, ResultsManager and SearchFormManager
Convenu je sais plus quand : @Erzalt doit lire le ticket, lire la doc en ligne du plugin QGIS et organiser un point avec @SimonSAMPERE pour organiser la recette |
Ma version actuelle de QGIS est la |
@Erzalt effectivement j'aurais dû le préciser, il faudrait que tu installes la version 3.34.5 (la dernière version LTR) |
point du 21/05 entre @Erzalt et @SimonSAMPERE
Les recherches rapides
L'URL du portail
Les credentials (
|
|
Gdoc sur les fichiers de configuration à créer pour chaque test : https://docs.google.com/spreadsheets/d/1ulO3ZB4ojbRXu1J-QfDzi0c_v2gzD-fZmytGbvyV7D4/edit#gid=405601901 |
Ressources pour faire les 2 scripts Python de :
checker les scripts à exécuter dans QGIS, notamment : # -*- coding: utf-8 -*-
from qgis.PyQt.QtCore import QSettings
import json
from pprint import pprint
from pathlib import Path
qsettings = QSettings()
matching = {
r"C:\Users\SimonSAMPERE\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\isogeo-plugin-qgis\config.json": {
"api_base_url": "isogeo/env/api_base_url",
"api_auth_url": "isogeo/env/api_auth_url",
"app_base_url": "isogeo/env/app_base_url",
"help_base_url": "isogeo/env/help_base_url",
"background_map_url": "isogeo/settings/background_map_url",
"portal_base_url": "isogeo/settings/portal_base_url",
"add_metadata_url_portal": "isogeo/settings/add_metadata_url_portal",
},
r"C:\Users\SimonSAMPERE\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\isogeo-plugin-qgis\_auth\client_secrets.json": {
"client_id": "isogeo/auth/app_id",
"client_secret": "isogeo/auth/app_secret",
},
r"C:\Users\SimonSAMPERE\AppData\Roaming\QGIS\QGIS3\profiles\default\python\plugins\isogeo-plugin-qgis\_user\quicksearches.json": "isogeo/user/quicksearches/"
}
for config_file_path in matching:
if Path(config_file_path).stem == "quicksearches":
keys = matching[config_file_path]
with open(Path(config_file_path), "r") as json_file:
config_json_content = json.load(json_file)
elif Path(config_file_path).stem == "config":
keys = matching[config_file_path]
with open(Path(config_file_path), "r") as json_file:
config_json_content = json.load(json_file)
for key in keys:
qsettings_key = keys[key]
json_value = config_json_content.get(key)
qsetting_value = qsettings.value(qsettings_key)
if qsetting_value == json_value:
print("☻ {} : '{}'".format(qsettings_key, json_value))
else:
print("Ø {} : '{}' vs '{}'".format(qsettings_key, json_value, qsetting_value))
else:
keys = matching[config_file_path]
with open(Path(config_file_path), "r") as json_file:
config_json_content = json.load(json_file)
for key in keys:
qsettings_key = keys[key]
json_value = config_json_content.get("web").get(key)
qsetting_value = qsettings.value(qsettings_key)
if qsetting_value == json_value:
print("☻ {} : '{}'".format(qsettings_key, json_value))
else:
print("Ø {} : '{}' vs '{}'".format(qsettings_key, json_value, qsetting_value)) |
Reste encore les cas 8 et 9 qui viendront dans un autre commentaire RecetteSe référer à ces tableaux. Les informations sur les résultats des scripts se trouvent dans les dossiers associés. Cas correspondants aux attendusLes cas 1, 3, 4 et 6 sont ok ✔️ Cas ne correspondants pas aux attendusCas 2 et 5Pour les cas 2 et 5, je remarque que les urls des quicksearches ne sont pas récupérés tel quels. Ils sont regénérés en fonction de l'url entré dans api_base_url.
Url fournis dans les quicksearches : Url dans les quicksearches après installation : (c'est un comportement qui me semble logique, mais il n'est pas spécifié donc je le remonte) Cas 7 📼Pour le cas 7, les quicksearches ne sont pas récupérées.
|
@Erzalt , merci pour ce magnifique et réjouissant premier retour de recette ✨ Comme tu l'avais pressenti pour les cas 2 et 5, le comportement est conforme à ce qui est attendu mais j'avais effectivement oublié de t'indiquer cette subtilité. Pour que les recherches rapides restent fonctionnel, le plugin remplace la base de l'URL de l'API s'il a changé. Venons-en maintenant au 📼. Figure-toi que la encore le comportement est attendu mais que je l'avais mal décrit dans ce commentaire. Puisque les recherches rapides sont initialement (3.4.0) uniquement stockées dans le fichier Du coup tu peux poursuivre la recette puisque tous les comportements sont conformes (c'est juste moi qui les avais mal décrit, sorry). |
Résumé état actuel de la recette :
|
Bravo ! Pas de bugs à déclarer ! 🎉 |
Merci beaucoup @Erzalt et bravo pour cette recette menée d'une main de maître 🦾 |
Objectif
Modulariser et centraliser la gestion des
QSettings
. Gérer la persistence des différents paramètres. Dans certains cas, on veut que les paramètres puisse être inscrit dans un fichier JSON en plus desQSettings
et inversement. Deux cas de figure :Plugin configuré sur un poste puis zippé et installé sur un autre poste. Pour que le paramétrage effectué sur le premier poste se répercute sur le second, il faut que les paramètres en question aient été stockés dans des fichiers JSON qui se trouvent dans le ZIP.
Plugin mis à jour. Il y a un risque que tous les paramètre stockés dans des fichiers JSON soient supprimés lorsque ces fichiers seront écrasés. Il faut donc les stocker également dans les
QSettings
pour pourvoir les remettre dans les fichiers JSON lors du premier re-démarrage du plugin après la mise à jour.L'idéal serait donc de dupliquer tous les paramètres et de décider pour chacun si c'est le JSON ou le QSetting qui doit prévaloir dans chaque situation.
Il faut également penser à la récupération de la valeur des paramètres stockés dans le format de la précédente version du plugin Isogeo.
Principe
Créer une nouvelle classe pour gérer le stockage et la récupération de tous les paramètres dans les
QSettings
, cela concerne :Le
SettingsManager
serat instancié dans le script de chaque module ayant besoin d’interagir avec les paramètres, comme c'est le cas avec leIsogeoPlgTools
.Dans chaque configuration, vérifier que la valeur des paramètres après installation/mise à jour est conforme aux SPEF.
Inventaire des paramètres
Paramètres natifs de QGIS
locale/userLocale
proxy/proxyEnabled
proxy/proxyType
proxy/proxyHost
proxy/proxyPort
qgis/style
PostgreSQL/connections/.../database
PostgreSQL/connections/.../host
PostgreSQL/connections/.../port
PostgreSQL/connections/.../username
PostgreSQL/connections/.../password
PostgreSQL/connections/.../service
PostgreSQL/connections/.../savePassword
PostgreSQL/connections/.../saveUsername
Oracle/connections/.../database
Oracle/connections/.../host
Oracle/connections/.../port
Oracle/connections/.../username
Oracle/connections/.../password
Oracle/connections/.../savePassword
Oracle/connections/.../saveUsername
projections/layerDefaultCrs
app/projections/defaultProjectCrs
Paramètres du plugin Isogeo
isogeo/user/editor
isogeo/settings/portal_base_url
isogeo/settings/add_metadata_url_portal
isogeo/settings/georelation
isogeo/env/api_base_url
isogeo/env/api_auth_url
isogeo/env/app_base_url
isogeo/env/help_base_url
isogeo/settings/background_map_url
isogeo/auth/app_id
isogeo/auth/app_secret
isogeo/settings/invalid_pgdb_conn
isogeo/settings/prefered_pgdb_conn
isogeo/settings/invalid_ora_conn
isogeo/settings/prefered_ora_conn
config.json
api_base_url
api_auth_url
app_base_url
help_base_url
background_map_url
db_connections.json
quicksearches.json
SPET
SettingsManager
héritant dePyQt.QtCore.QSettings
. - 0,25jSettingsManager
en remplacement dePyQt.QtCore.QSettings
dans tous les modules - 0,25jIsogeo
Authenticator
DataBaseManager
MetadataDisplayer
PortalURLManager
SearchFormManager
IsogeoPlgTools
GeoServiceManager
ResultsManager
UserInformer
--> nécessaire depuis qu'il ne prend plus la méthodetr
en argumentPyQt.QtCore.QSettings
- 0,25jLimitationsChecker
LayerAdder
quicksearches.json
dans leSettingsManager
QSettings
auSettingsManager
QSettings
avec celui duquicksearches.json
, si doublons, on conserve celui duquicksearches.json
, sauf pour_current
etDernière recherche
SettingsManager
dans leQuickSearchManager
quicksearch.json
+ pas de quicksearch dans les QSettingsquicksearch.json
+ des quicksearches dans les QSettingsquicksearch.json
sans_current
etDernière recherche
+ pas de quicksearch dans les QSettingsquicksearch.json
avec_current
etDernière recherche
+ des quicksearches dans les QSettingsconfig.json
- 1jSettingsManager
une méthode de récupération de la valeur des paramètres concernés depuis le fichierconfig.json
ou lesQSettings
avec prévalence des valeurs enregistrées dans le fichierconfig.json
sur celles desQSettings
en cas de conflitSettingsManager
une méthode d'ajout et de modification des paramètres concernés dans lesQSettings
ET dans le fichierconfig.json
PortalURLManager
l'utilisation des méthodes susmentionnées duSettingsManager
Authenticator
vers leSettingsManager
- 2jconfig.json
dans leSettingsManager
isogeo/env/api_base_url
,isogeo/env/api_auth_url
,isogeo/env/app_base_url
etisogeo/env/help_base_url
ajouter la prévalence des valeurs enregistrées dans lesQSettings
sur celles du fichierconfig.json
en cas de conflit, uniquement si celles du fichierconfig.json
sont les valeurs par défautQSettings
sur le fichierclient_secrets.json
, il faudrait faire l'inverse pour permettre d'écraser les credentials des utilisateurs via un déploiement massif en utilisant un ZIPinvalid_pgdb_conn
,prefered_pgdb_conn
,invalid_ora_conn
etprefered_ora_conn
restent uniquement dans lesQSettings
db_connections.json
dans lesQSettings
db_connections.json
dans leSettingsManager
cache.json
- 2jQSettings
, potentiellement sous forme de liste dansisogeo/user/unreachable_filepath
SettingsManager
ouCacheManager
)QSettings
des infos stockées dans le fichiercache.json
cache.json
cache.json
est vraiment utile pour les services (cached_unreach_service
) et les bases PostGIS (cached_unreach_postgis
) inaccessibles, selon il faudra nettoyer leCacheManager
ou faire le passage du cache uniquement dans lesQSettings
SettingsManager
en voyant si une même instance ne peut pas être transmise d'un module à l'autre dans certains casTests
Pour tester correctement il va falloir publier le plugin QGIS dans le dépôt des extensions QGIS sous forme de version expérimentale.
Voici les différentes cas d'installation à tester :
"ZIP non-personnalisé" : tel qu'on peut le trouver sur le SharePoint
"ZIP personnalisé" :
_user/quicksearches.json
config.json
(portal_base_url
)config.json
(add_metadata_url_portal
)_user/db_connections.json
"plugin personnalisé" :
quicksearches.json
du ZIP personnalisé --> elles doivent être conservéesquicksearches.json
du ZIP personnalisé mais des critères de recherche différents --> le ZIP personnalisé prévaut donc écrasement des recherches rapides initiale au profit de celles issues du ZIP personnaliséconfig.json
du ZIP personnalisé (portal_base_url
) --> le ZIP personnalisé prévaut donc la valeur initiale est remplacée par celle figurant dans leconfig.json
du ZIP personnaliséconfig.json
du ZIP personnalisé (add_metadata_url_portal
) --> le ZIP personnalisé prévaut donc la valeur initiale est remplacée par celle figurant dans leconfig.json
du ZIP personnaliséRessources
dépôt isogeo2office
The text was updated successfully, but these errors were encountered: