Dans ce premier tutoriel de
notre série de l'été consacrée à la prise en main de l'API Python
d'ArcGIS, je vous propose de commencer par entamer le premier volet de capacités de
l'API : l'organisation et l'administration du SIG. Cela comprend la gestion
des utilisateurs, des groupes, des items et des serveurs.
Dans cet article, nous allons nous concentrer sur l'automatisation de
l'administration d'utilisateurs et de groupes et de leur contenu, en apprenant
à ajouter et supprimer des utilisateurs et transférer le contenu d'un
utilisateur supprimé, créer des groupes, ajouter des utilisateurs dans des
groupes etc.
Notez que vous aurez pour cela besoin d'un
compte possédant les privilèges administrateur dans votre organisation.
Vous pouvez suivre le tutoriel ci-dessous pas à pas pour obtenir les
explications des différentes étapes, et écrire le code par vous-même ou
retrouver le code complet et commenté
sur mon Github
ou alors le récupérer via
cet item ArcGIS.
0 - Un mot sur l'environnement de développement
Quand il s'agit d'utiliser l'API Python d'ArcGIS, mon environnement de
développement de prédilection est généralement
ArcGIS Notebooks. Basé sur
Jupyter Notebook, il me
permet une connexion transparente à mon portail SIG, à ses données, ses
utilisateurs, etc. et et il simplifie mon processus d'écriture via des
extraits de code et des actions interactives. Il est accessible par défaut
dans ArcGIS Online
si vous avez les droits nécessaires (c'est l'interface que vous verrez ici),
dans ArcGIS Pro, et via un
rôle serveur additionnel dans ArcGIS Enterprise.C'est l'interface que vous verrez dans les captures d'écran de ces tutoriels.
Bien sûr, si vous avez déjà un IDE favori (je pense par exemple aux
aficionados de VSCode), vous pouvez le conserver sans problème. Dans ce cas,
veillez simplement à
installer l'API et ses dépendances
dans votre environnement.
J'ouvre donc un nouveau Notebook, en choisissant le runtime Standard qui
sera suffisant pour les capacités auxquelles nous allons faire appel
aujourd'hui.
1 - Connexion au GIS
La première étape est de se connecter à votre portail SIG, nous la
répèterons systématiquement au début de chaque tutoriel. Il faut pour cela
commencer à importer la
classe GIS du module gis, qui représente notre organisation.
Il va ensuite falloir vous authentifier. Pour cela, plusieurs options sont
possibles :
Si vous utilisez un ArcGIS Notebook dans ArcGIS Online ou ArcGIS
Enterprise, vous pouvez vous connecter de manière très simple avec la cellule déjà
écrite à l'ouverture de votre Notebook :
Cela vous authentifie directement avec le profil de l'utilisateur avec
lequel vous êtes actuellement connectés.
Si écrivez votre script depuis un Notebook ArcGIS Pro et que vous
êtes bien connectés à un portail, vous pouvez également utiliser cette
méthode, ou bien opter pour :
Si vous travaillez dans un environnement qui n'est pas directement
connecté à votre portail, il va falloir passer vos informations d'authentifications et l'url du
portail auquel vous souhaitez vous connecter en paramètre de la fonction GIS
: Cela s'appelle une connexion depuis un compte intégré, lorsque vous utilisez
le magasin d'identité d'ArcGIS. Notez que si votre environnement d'exécution
est interactif, vous n'êtes pas obligés de rentrer directement votre mot de
passe dans le code. Dans ce cas, l'exécution sera suspendue et il vous sera
demandé de le compléter interactivement au moment de l'exécution de la
cellule contenant ce code. L'exécution reprendra après que vous ayez indiqué
des identifiants valides.
D'autres méthodes d'authentification sont disponibles, notamment pour ArcGIS
Enterprise si vous utilisez d'autres magasins d'identité (LDAP, Active
Directory, etc.). Nous ne les verrons pas en détail dans cet article, mais
vous pouvez obtenir plus d'information sur
la page de l'aide en ligne dédiée aux méthodes d'authentification avec
l'API Python.
2 - Ajouter des utilisateurs à votre portail depuis un fichier CSV
2a - Lecture du CSV en tant que dataframe pandas
Les
DataFrames pandas
permettent de gérer les données tabulaires de manière très efficace dans
Python. Nous allons donc transformer nos données csv en pandas dataframe.
Pour cela, il faut importer la bibliothèque tierce pandas puis utiliser sa
fonction read_csv() : Notez que nous passons en paramètre de la fonction le chemin d'accès vers
le CSV. Pour la démo, j'en héberge un sur Github que vous pouvez utiliser
si vous le souhaitez.Vous trouverez le lien complet vers ce CSV à cet url, veillez à le remplacer dans le code. Vous pouvez également renseigner le chemin d'accès
vers votre propre CSV.
Si vous utilisez ArcGIS Notebooks, notez que l'environnement d'exécution
n'a pas accès à vos fichiers locaux enregistrés sur votre machine. Vous
pouvez ajouter le CSV dans l'environnement du Notebook en suivant les
étapes montrées ci-dessous :
Vous verrez aussi que si vous utilisez un environnement interactif, vous obtenez une visualisation du dataframe, ce qui vous permet de voir si les données sont correctement importées :
Vous verrez aussi que si vous utilisez un environnement interactif, vous obtenez une visualisation du dataframe, ce qui vous permet de voir si les données sont correctement importées :
2b - Itérer dans la liste des utilisateurs et les ajouter au portail
Pour ajouter les utilisateurs au portail, nous allons utiliser la fonction
create() de la classe
UserManager
de l'API.
Comprendre la fonction gis.users.create() :
Voici la description de la fonction dans la doc :
create(username, password, firstname, lastname, email, role,
description=None, provider='arcgis', idp_username=None, level=2,
thumbnail=None, user_type=None, credits=- 1, groups=None,
email_text=None)
Nous allons renseigner les paramètres utiles. Pour savoir à quoi
sert quel paramètre, vous pouvez consulter la
documentation de la classe
UserManager
, ou bien exécuter la cellule ci-dessous :
Pour chaque fonction de l'API Python d'ArcGIS, vous pouvez accéder à
la doc sans sortir de votre IDE en ajoutant un ? à la
fin du nom complet de la fonction.
Utiliser la fonction gis.users.create() :
Nous allons parcourir chacun des utilisateurs du dataframe
(le tableau importé juste avant) avec une boucle d'itération
for. Pour chaque itération, nous allons utiliser la fonction
create() en allant récupérer les valeurs du
tableau pour renseigner les paramètres de la fonction.
df["element_entete"][i] permet d'aller récupérer l'information qui se trouve dans la colonne "element_entete" (par exemple dans notre dataframe : "Prenom") et dans la ligne i. A la première itération de la boucle, i aura une valeur de 0, puis de 1 à la deuxième itération, etc. jusqu'à avoir parcouru la totalité des lignes du tableau :
df["element_entete"][i] permet d'aller récupérer l'information qui se trouve dans la colonne "element_entete" (par exemple dans notre dataframe : "Prenom") et dans la ligne i. A la première itération de la boucle, i aura une valeur de 0, puis de 1 à la deuxième itération, etc. jusqu'à avoir parcouru la totalité des lignes du tableau :
3 - Supprimer un utilisateur et transférer son contenu
3a - Accéder à l'utilisateur à supprimer
Pour accéder à un utilisateur, nous allons utiliser la fonction
get() de la classe
UserManager
de l'API :
3b - Supprimer l'utilisateur et réassigner son contenu
Nous allons pour cela utiliser la fonction delete de la classe
User
:
La fonction delete nous permet de tirer parti du paramètre
reassign_to, qui nous permet de transférer le contenu de
l'utilisateur supprimé à un autre utilisateur. Je vais donc accéder à un
autre utilisateur pour lui transférer le contenu.J'aurais également pu transférer le contenu à mon propre profil en indiquant gis.users.me. Notez que si vous souhaitez réassigner un contenu sans supprimer un utilisateur, vous pouvez utiliser la fonction reassign_to de la classe Item.
3bis - Supprimer par lots tous les utilisateurs inactifs de votre portail
Maintenant que nous savons supprimer des utilisateurs, nous pouvons nous en
servir par exemple pour supprimer tous les utilisateurs de type viewer
inactifs de notre portail.
3bis a - Rechercher tous les utilisateurs du portail
Pour rechercher les viewers, nous allons utiliser la fonction search() de la classe UserManager de l'API :
3bis b - Création d'une liste de viewers à conserver
3bis c - Itération dans la liste et vérification de l'inactivité du viewer avant suppression
Nous pouvons maintenant itérer dans la liste de tous nos viewers. Nous utilisons la propriété lastLogin de la classe User pour vérifier que le viewer est bien inactif. Vous pouvez si vous le souhaitez rajouter d'autres conditions de suppression basées sur d'autres propriétés de cette classe. Notez que sans itération, il est également possible de supprimer en lot une liste d'utilisateurs avec la fonction delete_users() de la classe UserManager.
4 - Automatiser la gestion des groupes (création, inscription
d'utilisateurs)
4a - Création des groupes
De la même manière que nous avons pu utiliser l'API pour ajouter des
utilisateurs par lot, nous allons pouvoir créer des groupes dans notre org à
partir d'un fichier csv. Pour cela, nous utiliserons la fonction
create() de la classe
GroupManager. Comme tout à l'heure, nous commencerons par transformer le csv en
dataframe pandas, que nous parcourons ensuite avec une boucle for pour créer
les groupes les uns après les autres.Vous trouverez le csv à cet url, remplacez-le dans le code.A nouveau, un environnement interactif vous permet de voir vos
groupes être créés au fur et à mesure directement dans votre
IDE:
4b - Ajouter des utilisateurs dans les groupes
Je veux maintenant faire en sorte d'ajouter tous les membres de mon
organisation appartenant à la catégorie "Direction des solutions" au
groupe de contenus partagés pour l'équipe de la direction des
solutions.Pour cela, vous devez avoir défini des catégories dans votre org (disponible dans ArcGIS Online, et depuis la v11.1 d'ArcGIS Enterprise) et les avoir attribuées au membre de votre organisation. Plus d'infos dans cette doc sous le chapitre "Classer les membres". Je commence par accéder à la liste de tous les utilisateurs de mon org appartenant à la catégorie "Direction des Solutions" (à adapter selon les catégories de votre org) avec la fonction search() de la classe UserManager de l'API :
J'accède ensuite au groupe contenant les démos partagées avec la
fonction search() de la classe
GroupManager
de l'API , en faisant une query sur le titre (title) du groupe:
Notez
que nous faisons ici une utilisation assez simple de la fonction
search(), en faisant une requête uniquement sur le titre du groupe. Il
est en réalité possible de faire des recherches avec des query beaucoup
plus élaborées, car cette méthode implémente les opérations de l'API
REST. Si vous souhaitez faire des recherches plus avancées, vous pouvez voir la liste complète des champs sur lesquels vous pouvez baser votre recherche en vous rendant dans la section de la Search Reference dédiée aux groupes dans la documentation.
Je peux ensuite récupérer la liste des inscrits dans ce groupe avec la fonction
get_members() de la classe
Group
de l'API :
Je vais ensuite itérer parmi tous les utilisateurs de la catégorie
Direction des Solutions récupérés précédemment, vérifier s'ils sont
déjà membres du groupe, les ajouter à une liste s'ils ne le sont pas,
puis ajouter tous les membres de cette liste au groupe avec la
fonction add_users() de la classe
Group
de l'API :
Je peux maintenant réutiliser la fonction
get_members() pour vérifier que les utilisateurs ont bien
été rajoutés au groupe :
L'API permet également de retirer les membres d'un groupe
avec la fonction remove_users(). Nous allons
l'utiliser ici par exemple pour retirer tous les
utilisateurs dont le nom d'utilisateur commence par un "a"
(oui, c'est complètement arbitraire). Notez qu'il n'est pas
possible de supprimer le propriétaire ("owner") du
groupe.
Je peux à nouveau vérifier que tout s'est bien passé, toujours avec la fonction get_members() appliquée au groupe.
Maintenant que nous savons créer des groupes et y inscrire
des utilisateurs, il serait bien de pouvoir y partager du
contenu non? Cette fonctionnalité est disponible dans l'API
Python, mais nous le verrons dans un autre tutoriel de cette
série, qui sera consacré à la création, à la publication et
au partage du contenu dans votre SIG web. Pour aujourd'hui,
nous nous contenterons de supprimer ces groupes de démo pour
ne pas encombrer votre organisation.
4c - Suppression des groupes
Nous pouvons supprimer les groupes de démo pour ne pas laisser de trace de nos tests :
C'est terminé pour cette semaine ! Vous pouvez dès à présent vous rendre sur le deuxième tutoriel de la série qui se penche sur un autre processus d'administration : la gestion les crédits d'une organisation ArcGIS
Online (affectation, suivi, notifications d'alerte) et la planification de l'exécution d'un Notebook. Si vous
êtes utilisateurs d'ArcGIS Enterprise, alors ce tutoriel ne
vous concernera pas (vous pourrez cependant jeter un coup
d’œil pour l'utilisation des notifications, qui peut
également fonctionner chez vous). Dans ce cas, je vous donne
rendez-vous dans 2 semaines où nous créerons un Dashboard de
supervision de notre organisation, qui fonctionnera aussi
bien dans Online que dans Enterprise !
Aucun commentaire:
Enregistrer un commentaire