Bibliothèques Python pour Scenari

Présentation

Thibaut ARRIBE - tha@kelis.fr

Objectifs : Nouveautés Scenari 6.3

  • Exécutable client en ligne de commande pour l'administration système

  • Bibliothèque Python pour l'administration système

  • API pour scripter des appels vers un serveur Scenari

Un exécutable pour l'administration système

De quoi parle-t-on ?

Un nouvel exécutable en ligne de commande

Objectif :

  • remplacer SCENARIbatch

    • backup-pre.sh

    • backup-post.sh

  • enrichir les actions disponibles en ligne de commande pour un administrateur système

Principes

Un produit Scenari correspond à un exécutable

Exécutable produit par Builder

URLs publiques (accès depuis le web) ou privées (accès local au serveur) pré-configurées dans l'exécutable

Installation

Récupération du package à l'issue d'un post build

Installation du package

1
pip install SCENARIsuite-starter_6.3.8nightly_python.tar.gz

Dépendances

Python 3.10 ou plus

Package requests

Remarque : Comment gérer plusieurs versions de serveur ?

Les numéros de version majeure et medium font partie du nom du package.

Il est donc possible d'installer côte à côte :

  • scsuitestarter_6_3

  • scsuitestarter_6_4

    ...

Toutes les versions mineures d'un serveur Scenari sont compatibles avec la dernière version de l’exécutable.

Utilisation

1
[executable] [commande] [arguments] [conf] [-v]
2
3
 - [executable] : Le nom de votre exécutable. Il est de forme codeserveur_x_x
4
5
 - [commande] : Voir la liste des commandes disponibles ci-après.
6
7
 - [arguments] : Certaines commandes acceptent des arguments. Consulter leur documentation ci-après
8
9
 - [conf] : paramètres de la configuration du serveur. Valeurs possibles :
10
   -u [login] ou --user [login] : surchage du nom de l'utilisateur
11
   -p [password] ou --password [password] : surchage du mot de passe
12
   -c [./maconf.json] ou --conf [./maconf.json] : surchage de la conf du portail
13
   -l ou --local : chargement de la conf système pour un usage depuis le serveur hébergeant le portail Scenari
14
15
 - [-v] : ajouter -v ou --verbose [level] pour rendre l'executable plus bavard. Valeurs de level possibles :
16
   -v debug : tous les logs de niveau debug
17
   -v info : tous les logs de niveau info (une ligne de log par appel réussi)
18
   -v warning : tous les logs de niveau warning
19
   -v error : tous les logs de niveau erreur (valeur par défaut). Les logs d'erreur sont également loggué dans le flux stderr.
20
   -v none : désactive les logs d'erreur sur la sortie standard (les erreurs restent publiées sur le flux stderr).
21
   -v : équivalent à -v info.

Authentification

Option 1 : passage du user et mot de passe dans la commande

1
scsuitestarter_6_3 ping -u system -p monPassWord
2
scsuitestarter_6_3 ping --user system --password monPassWord

Option 2 : externalisation de l'auth dans un fichier

1
scsuitestarter_6_3 ping -c maconf.json
2
scsuitestarter_6_3 ping --conf maconf.json

Avec conf.json :

1
{
2
  "user":"system",
3
  "password":"monPassWord"
4
}

Appels local ou distant

Par défaut les appels utilisent les URLs publiques

1
scsuitestarter_6_3 ping -l -c maconf.json
2
scsuitestarter_6_3 ping --localhost -c maconf.json

Exemples de commandes possibles

  • help

  • ping

  • backup_pre, backup_post

  • backupinplace_pre, backupinplace_post

  • odb_checkauto

  • store_gc

  • actlogs_purge

  • ...

Lister les commandes disponibles

1
scsuitestarter_6_3 -h
1
Liste des commandes disponibles :
2
3
backup_post
4
     Cette commande informe les portlets chain qu'il est à nouveau possible de supprimer des blobs du disque.
5
Cette commande se termine par des appels de purge de données obsolètes et de controle de cohérence (ces appels peuvent être désactivés en utilisant la l'argument --strict)
6
7
	 Argument(s):
8
	 	--strict : à utiliser pour désactiver les purges de données et contrôle de cohérence en fin d'execution
9
		--portlet [chain] : à utiliser pour appeler le service sur un unique portlet. Par défaut, la commande s'applique à tous les portlets chain et depot du portail.
10
		
11
backup_pre
12
     Copie les fichier de la db interne et vérouille la suppression des blobs pour les portlets chains, elle copie un ensemble cohérent des données dans un répertoire de
13
backup pour les portlets depot.
14
15
     Argument(s):
16
        --portlet [chain] : à utiliser pour appeler le service sur un unique portlet. Par défaut, la commande s'applique à tous les portlets chain et depot du portail.
17
        
18
backupinplace_post
19
     Cette commande est à appeler après un backup du répertoire data par "snapshot". Elle indique aux différents portlets qu'ils peuvent réouvrir les accès en ecriture.
20
Cette commande se termine par des appels de purge de données obsolètes et de controle de cohérence (ces appels peuvent être désactivés en utilisant la l'argument --strict)
21
22
	 Argument(s):
23
	    --strict : à utiliser pour désactiver les purges de données et contrôle de cohérence en fin d'execution
24
		--portlet [chain] : à utiliser pour appeler le service sur un unique portlet. Par défaut, la commande s'applique à tous les portlets du portail ayant un service backupinplace.
25
		
26
backupinplace_pre
27
     Cette commande prépare chaque portlet à un backup rapide de type "snapshot". Les données en ram sont sérialisées sur disque pour permettre un backup cohérent. Après
28
appel de ce service, le répertoire data du portail peut être backupé par snapshot. Le portail est accessible en lecture seule entre les appels de backupinplace_pre et backupinplace_post
29
30
     Argument(s):
31
        --portlet [chain] : à utiliser pour appeler le service sur un unique portlet. Par défaut, la commande s'applique à tous les portlets du portail ayant un service backupinplace.
32
        
33
help
34
     Affiche cette page d'aide
35
        
36
odb_checkauto
37
     Lance un test de cohérence de la base de données interne.
38
	 Argument:
39
		--portlet [chain] : à utiliser pour appeler le service sur un unique portlet. Par défaut, la commande s'applique à tous les portlets du portail ayant une base de données interne.
40
		
41
odb_rebuild
42
     Lance une renconstruction de la base de données interne.
43
	 Argument:
44
		--portlet [chain] : à utiliser pour appeler le service sur un unique portlet. Par défaut, la commande s'applique à tous les portlets du portail ayant une base de données interne.
45
		
46
ping
47
     Effectue une requête de ping d'un portlet du portail. Cette commande permet de tester l'URL, les logins et mots de passe.
48
	 Argument:
49
		--portlet [chain] : à utiliser pour appeler le service sur un unique portlet. Par défaut, la commande s'applique à tous les portlets du portail.
50
		
51
print_conf
52
     Cette commande permet d'afficher le contenu (simplifié avec les URLs uniquement ou complet) de la configuration chargée par l'exécutable. Elle permet de
53
de récupérer cette configuration pour la modifier (changement d'URL, ajout d'un portlet...)
54
55
    Argument(s):
56
	    --full : à utiliser pour afficher la configuration complète (par défaut, elle ne contient que les URLs vers les portlets).
57
        
58
store_gc
59
     Lance le garbage collector d'un store (stockage de documents d'un depot).
60
	 Argument:
61
		--portlet [depot] : à utiliser pour appeler le service sur un unique portlet. Par défaut, la commande s'applique à tous les portlets du portail ayant un store.

Exemple de script bash de backup

1
#!/bin/bash
2
3
# Lancement du backup sur tous les portlets
4
scsuitestarter_6_3 backup_pre -c maconf.json
5
6
7
# TODO - ajouter ici mes actions de backup scriptées
8
9
10
# Cloture du mode backup sur tous les portlets
11
scsuitestarter_6_3 backup_post -c maconf.json

Remarque : Changement de posture des actions de backup

Les commandes backup_pre et backup_post sont plus complètes que celles existantes dans SCENARIbatch :

  • Action de contrôle des bases de données

  • Action de purge des fichiers stockés sur disque par un depot

  • ...

Attention : Comment gérer plusieurs serveurs dans la même version ?

Pour changer les URLs d'appels, il est possible de demander à l'exécutable de produire un fichier de configuration personnalisable

1
scsuitestarter_6_3 print_conf -c maconf.json

Exemple de retour :

1
{
2
  'portlets': {
3
    'chain': {'url': 'https://suite-starter.mondomain.fr/~~chain'},
4
    'depot': {'url': 'https://suite-starter.mondomain.fr/~~write'}
5
	}
6
}

Ce fichier peut être édité (URL changés, login et mot de passe ajoutés) et appelé avec le paramètre -c de l'exécutable.

Une librairie Python pour créer ses propres scripts d'administration

Il s'agit du même package Python qui s'utilise directement depuis un script Python

Toutes les fonctions de l'exécutable sont réputées de niveau API.

Instanciation d'un objet ScPortal

1
import scsuitestarter_6_3.portal
2
3
# system_conf permet de charger les URLs système au lieu des URLs publique (False par défaut)
4
# overridden_conf_file permet de référencer un fichier de conf (None par défaut)
5
# override_props permet de surcharger la conf par défaut et celle du fichier passé en paramètre.
6
monserver= scsuitestarter_6_3.portal.new_portal(system_conf=False, overridden_conf_file="maconf.json", override_props={"user":"admin"})

Exemple de script de backup

1
import scsuitestarter_6_3.portal
2
3
monserver= scsuitestarter_6_3.portal.new_portal(system_conf=False, overridden_conf_file="maconf.json")
4
5
# Ping pour vérifier l'accès au serveur sans déclencher de backup
6
monserver.ping()
7
8
# Lancement du backup sur tous les portlets
9
monserver.backup_pre()
10
11
12
# TODO - ajouter ici mes actions de backup scriptées
13
14
15
# Cloture du mode backup sur tous les portlets
16
monserver.backup_post()

Une API pour scripter des appels à un serveur Scenari

De quoi parle-t-on ?

Une API complémentaire à l'exécutable

  • La plus stable et générique possible

  • Distribuée via pypi

Installation

1
pip install scenaripy-api

Exemples d'action

Créer un utilisateur ou groupe

Lui donner des permissions sur un serveur, un atelier, un espace

Faire une recherche dans un atelier

Télécharger ou uploader des items

Créer ou administrer des ateliers

Lancer une génération et télécharger son résultat

Envoyer des contenus sur un depot

...

Exemple : Création d'un groupe et d'un user et association de rôle à un atelier

1
import scsuitestarter_6_3.portal
2
import scenaripy_api
3
4
monserver= scsuitestarter_6_3.portal.new_portal(system_conf=False, overridden_conf_file="maconf.json")
5
6
#Creation d'un group
7
scenaripy_api.create_or_update_group(monserver, account="group1", roles=["main:reader"])
8
9
#Creation d'un user associé à ce group
10
scenaripy_api.create_or_update_user(monserver, account="monUser", first_name="Mon", last_name="User", groups=["group1"])
11
12
#Association d'un role à ce groupe sur un atelier
13
wsp = scenaripy_api.search_wsp_code(monserver, title="Mon atelier")
14
scenaripy_api.set_granted_roles(monserver, account="group1", wsp_code=wsp, granted_roles=["main:author"])

Exemple : Création d'un atelier

1
import scsuitestarter_6_3.portal
2
import scenaripy_api
3
4
monserver= scsuitestarter_6_3.portal.new_portal(system_conf=False, overridden_conf_file="maconf.json")
5
6
# Création ou mise à jour d'un atelier avec la dernière version d'Opale installée sur le serveur et l'extension Emeraude.
7
scenaripy_api.create_or_update_wsp(monserver, wsp_type_key="Opale", wsp_type_options=[{"wsp_type_key":"OpaleExtEmeraude"}], title="Mon atelier Opale", alias="opale")
8
9
# Création ou mise à jour d'un atelier avec la dernière version d'Opale 5 installée sur le serveur sans extension.
10
scenaripy_api.create_or_update_wsp(monserver, wsp_type_key="Opale", wsp_type_version="5", title="Mon atelier Opale", alias="opale")
11
12
# Création d'un atelier brouillon
13
scenaripy_api.create_or_update_wsp(monserver, wsp_type_key="Opale", alias="testDrf", wsp_drf_ref="opale", drf_title="Mon atelier brouillon")
14
15
# Création d'un atelier dérivé
16
scenaripy_api.create_or_update_wsp(monserver, wsp_type_key="Opale", alias="testDrv", wsp_drv_master="opale", drv_axis="fc")
17
18
# Création d'un second atelier dérivé dont le chemin de dérication passe par le premier avant d'aller sur le master
19
scenaripy_api.create_or_update_wsp(monserver, wsp_type_key="Opale", alias="testDrv2", wsp_drv_master="opale", drv_axis="alternance", drv_axis_path=["fc"])

Exemple : Recherche d'un item, génération et téléchargement d'une publication

1
import xml.etree.ElementTree as ET
2
3
import scsuitestarter_6_3.portal as portal
4
import scenaripy_api
5
6
server = portal.new_portal(system_conf=False, overridden_conf_file="conf.json")
7
# Namespace Scenari et d'Opale pour la serialisation
8
namespace = {
9
	"sc": "http://www.utc.fr/ics/scenari/v3/core",
10
	"sp": " http://www.utc.fr/ics/scenari/v3/primitive",
11
	"op": "utc.fr:ics/opale3"
12
}
13
14
wsp_code = scenaripy_api.search_wsp_code(server, title_fragment="Correction")
15
16
# Récupération de l'item et transformation en un objet Python ElementTree
17
item = ET.fromstring(scenaripy_api.wsp_get_item(server, wsp_code=wsp_code, ref_uri="/Module_demo/_Module-LeThe.xml"))
18
# Recherche et édition du titre
19
title = item.find(".//op:title/sc:para", namespace)
20
title.text = "Décourir le thé - titre modifié par Python"
21
22
# Enregistrement des namespaces pour la serialisation de l'item.
23
for ns in namespace:
24
	ET.register_namespace(ns, namespace[ns])
25
26
# Upload de l'item
27
scenaripy_api.wsp_set_item(server, wsp_code=wsp_code, ref_uri="/Module_demo/_Module-LeThe.xml", item=ET.tostring(item, "UTF-8"))
28

Documentation intégrée (docstring Python)

Documentation à venir sur scenari.software

Des questions ?

Liste des raccourcis clavier

Liste des fonctions de navigation et leurs raccourcis clavier correspondant :

  • Bloc Suivant : flèche droite, flèche bas, barre espace, page suivante, touche N
  • Bloc Précédent : flèche gauche, flèche haut, retour arrière, page précédente, touche P
  • Diapositive Suivante : touche T
  • Diapositive Précédente : touche S
  • Retour accueil : touche Début
  • Menu : touche M
  • Revenir à l'accueil : touche H
  • Fermer zoom : touche Échap.