Module admin.register#

Gestion du registre de Plume.

Les classes, propriétés, concepts et ensembles de concepts de Plume sont publiés dans le registre http://registre.data.developpement-durable.gouv.fr/plume.

Ce module définit les classes et méthodes permettant la mise à jour de ce registre.

Pour qu’il soit utilisable, il est nécessaire de disposer d’un fichier /admin/local/credentials.json contenant un dictionnaire à trois clés :

  • api pour l’URL de base de l’API du registre.

  • user pour l’identifiant.

  • password pour le mot de passe.

Routine Listings#

Initialisation du requêteur :

>>> api = RegisterApi()

Interrogation simple d’un élément du registre :

>>> api.get('id')

'id' est l’identifiant de l’objet dans le registre, avec ou sans slash initial. Par exemple 'plume/isExternal' pour la propriété plume:isExternal.

Consultation du contenu du registre pour un élément :

>>> api.post('id')

Mise à jour d’un élément dans le registre :

>>> api.put('id')

Suppression d’un élément du registre :

>>> api.delete('id')

Mise à jour massive du registre (avec ajout des éléments manquants, mais pas suppression des éléments obsolètes) :

>>> api.update()

References#

benoitdavidfr/registre

class admin.register.ClassDefinition(iri)#

Bases : ObjectDefinition

Définition d’une classe de Plume.

Parameters:
irirdflib.term.URIRef

L’IRI de la classe, présumée référencée dans plume.rdf.metagraph.SHAPE.

Raises:
ValueError

Si la classe n’utilise pas l’espace de nommage de Plume. Il est alors considéré qu’il ne s’agit pas d’une classe créée par Plume.

Notes

À ce stade, le libellé et la description de la classe sont ceux de la propriété qui l’introduit, étant entendu que, dans le schéma des métadonnées communes de Plume, toute classe autre que dcat:Dataset est nécessairement introduite par au moins une propriété et, en pratique, jamais plus d’une pour l’heure.

Methods

parameters()

Renvoie la description de l'objet sous forme de paramètres utilisables par une requête HTTP POST.

class admin.register.ConceptDefinition(iri, scheme_iri=None)#

Bases : ObjectDefinition

Définition d’un concept de Plume.

Parameters:
irirdflib.term.URIRef

L’IRI du concept, présumé référencé dans plume.rdf.thesaurus.VOCABULARIES.

scheme_irirdflib.term.URIRef, optional

L’IRI de l’ensemble auquel appartient le concept. Si non renseigné, le constructeur ira chercher l’information dans le graphe. À noter qu’il est essentiel de fournir cette information lorsque le concept considéré apparaît dans plusieurs ensembles.

Raises:
ValueError

Si l’ensemble dont fait partie le concept n’utilise pas l’espace de nommage de Plume. Il est alors considéré qu’il ne s’agit pas d’un thésaurus créé par Plume.

Methods

parameters()

Renvoie la description de l'objet sous forme de paramètres utilisables par une requête HTTP POST.

class admin.register.ConceptSchemeDefinition(iri)#

Bases : ObjectDefinition

Définition d’un ensemble de concepts de Plume.

Parameters:
irirdflib.term.URIRef

L’IRI de l’ensemble de concepts, présumé référencé dans plume.rdf.thesaurus.VOCABULARY.

Raises:
ValueError

Si l’ensemble n’utilise pas l’espace de nommage de Plume. Il est alors considéré qu’il ne s’agit pas d’un thésaurus créé par Plume.

Methods

parameters()

Renvoie la description de l'objet sous forme de paramètres utilisables par une requête HTTP POST.

class admin.register.DefinitionsCollection#

Bases : dict

Répertoire de définitions des objets du registre de Plume.

Les objets de cette classe sont initialisés par lecture du schéma des métadonnées communes, plume.rdf.metagraph.SHAPE, et de la compilation des thésaurus de Plume, plume.rdf.thesaurus.VOCABULARY. Sont conservés les propriétés, classes, concepts et ensemble de concepts utilisant l’espace de nommage de Plume, ainsi que tous les concepts de ensembles de concepts utilisant l’espace de nommage de Plume.

Les clés du dictionnaire sont les identifiants des objets dans le registre (sans le slash initial), les valeurs sont les objets ObjectDefinition qui les décrivent.

Methods

clear()

copy()

fromkeys(iterable[, value])

Create a new dictionary with keys from iterable and values set to value.

get(key[, default])

Return the value for key if key is in the dictionary, else default.

items()

keys()

pop(key[, default])

If the key is not found, return the default if given; otherwise, raise a KeyError.

popitem(/)

Remove and return a (key, value) pair as a 2-tuple.

setdefault(key[, default])

Insert key with a value of default if key is not in the dictionary.

update([E, ]**F)

If E is present and has a .keys() method, then does: for k in E: D[k] = E[k] If E is present and lacks a .keys() method, then does: for k, v in E: D[k] = v In either case, this is followed by: for k in F: D[k] = F[k]

values()

class admin.register.ObjectDefinition(objid, objtype, title, graph, subject)#

Bases : object

Définition d’un objet RDF créé par Plume.

Attributes:
objidstr

Fragment d’URI constituant l’identifiant de l’objet dans le registre (sans le slash initial).

parentstr

Identifiant de l’objet parent, le cas échéant.

objtype{“R”, “E”}

Type d’objet. R (registre) pour un ensemble de concepts, E (élément) pour un concept, une propriété ou une classe.

titlestr

Le libellé principal de l’objet.

graphrdflib.graph.Graph

Graphe contenant la description de l’objet.

subjectrdflib.term.URIRef

URI de l’objet, qui est donc le sujet de tous les triplets RDF le décrivant.

jsonvallist

Désérialisation python de la sérialisation JSON-LD de graph.

Methods

parameters()

Renvoie la description de l'objet sous forme de paramètres utilisables par une requête HTTP POST.

parameters()#

Renvoie la description de l’objet sous forme de paramètres utilisables par une requête HTTP POST.

Returns:
bytes

Représentation binaire d’un objet JSON.

class admin.register.PropertyDefinition(iri)#

Bases : ObjectDefinition

Définition d’une propriété de Plume.

Parameters:
irirdflib.term.URIRef

L’IRI de la propriété, présumée référencée dans plume.rdf.metagraph.SHAPE.

Raises:
ValueError

Si la propriété n’utilise pas l’espace de nommage de Plume. Il est alors considéré qu’il ne s’agit pas d’une propriété créée par Plume.

Notes

Dans le schéma des métadonnées communes de Plume, une même propriété utilisée par plusieurs classes peut avoir des libellés et descriptions légèrement différents pour faciliter la compréhension ou donner des conseils de saisie. Néanmoins, la question ne se pose pas à date pour les propriétés ajoutées par Plume. On conserve ici toutes les valeurs trouvées, mais il n’y en aura en fait qu’une.

Methods

parameters()

Renvoie la description de l'objet sous forme de paramètres utilisables par une requête HTTP POST.

class admin.register.RegisterApi#

Bases : object

Requêteur sur le registre de Plume.

Attributes:
apistr

URL de base de l’API du registre.

requesturllib.Request

Dernière requête envoyée à l’API.

rawbytes

Résultat brut de la dernière requête envoyée à l’API.

responsedict or list

Désérialisation python du JSON résultant de la dernière requête renvoyée à l’API.

errcodeint

Si la dernière requête a produit une erreur, code de l’erreur, sinon None.

reasonstr

Si la dernière requête a produit une erreur, la description textuelle de l’erreur, sinon None.

Methods

delete(objid)

Génère et envoie une requête DELETE (suppression d'un objet du registre).

get(objid)

Génère et envoie une requête GET (interrogation du registre).

post(objid)

Génère et envoie une requête POST (consultation des données du registre).

put(objid[, data])

Génère et envoie une requête PUT (mise à jour du registre).

update([abort_on_failure])

Met à jour le registre distant selon les informations locales.

delete(objid)#

Génère et envoie une requête DELETE (suppression d’un objet du registre).

Cette méthode met à jour les attributs suivants:

  • errcode et reason avec respectivement le code et la description de l’erreur renvoyée par le serveur le cas échéant, None sinon.

  • raw avec la réponse brute du serveur.

  • response, qui vaut toujours None sauf dans le cas où le serveur a renvoyé une erreur sous forme de JSON. Il s’agit alors d’un dictionnaire avec une unique clé error.

Parameters:
objidstr

Identifiant (dans le registre) de l’objet à supprimer. Le slash initial peut être omis.

Examples

>>> api = RegisterApi()
>>> api.delete('plume/isExternal')
get(objid)#

Génère et envoie une requête GET (interrogation du registre).

  • errcode et reason avec respectivement le code et la description de l’erreur renvoyée par le serveur le cas échéant, None sinon.

  • raw avec le résultat brut de la requête.

  • response avec la désérialisation du résultat de la requête. En cas d’erreur, il s’agit d’un dictionnaire avec une unique clé error.

Parameters:
objidstr

Identifiant (dans le registre) de l’objet pour lequel on souhaite consulter le registre. Le slash initial peut être omis.

Raises:
ValueError

Lorsque le résultat de la requête n’est pas un JSON valide.

Examples

>>> api = RegisterApi()
>>> api.get('plume/isExternal')
>>> description = api.response
post(objid)#

Génère et envoie une requête POST (consultation des données du registre).

Cette méthode met à jour les attributs suivants:

  • errcode et reason avec respectivement le code et la description de l’erreur renvoyée par le serveur le cas échéant, None sinon.

  • raw avec le résultat brut de la requête.

  • response avec la désérialisation du résultat de la requête, qui devrait être un dictionnaire dont les clés sont id, parent, type, title, script, jsonval et htmlval lorsqu’il n’y a pas eu d’erreur, ou une unique clé error en cas d’erreur.

Parameters:
objidstr

Identifiant (dans le registre) de l’objet pour lequel on souhaite consulter le registre. Le slash initial peut être omis.

Raises:
ValueError

Lorsque le résultat de la requête n’est pas un JSON valide.

Examples

>>> api = RegisterApi()
>>> api.post('plume/isExternal')
>>> description = api.response
put(objid, data=None)#

Génère et envoie une requête PUT (mise à jour du registre).

Cette méthode met à jour les attributs suivants:

  • errcode et reason avec respectivement le code et la description de l’erreur renvoyée par le serveur le cas échéant, None sinon.

  • raw avec la réponse brute du serveur.

  • response, qui vaut toujours None sauf dans le cas où le serveur a renvoyé une erreur sous forme de JSON. Il s’agit alors d’un dictionnaire avec une unique clé error.

Parameters:
objidstr

Identifiant (dans le registre) de l’objet à ajouter ou mettre à jour. Le slash initial peut être omis.

databytes, optionnal

Les paramètres de la requête. Si non fourni, la méthode récupère les informations nécessaires dans la collection d’objets locaux, dans laquelle objid doit alors être impérativement être référencé.

Examples

>>> api = RegisterApi()
>>> api.put('plume/isExternal')
update(abort_on_failure=True)#

Met à jour le registre distant selon les informations locales.

Cette méthode boucle sur la collection d’objets de Plume :py:attr:RegistreApi.collection pour mettre à jour les éléments correspondants du registre, sans chercher à savoir s’ils avaient réellement été modifiés entre temps.

Pour l’heure, elle n’est pas capable d’identifier les éléments du registres qui n’apparaissent plus dans la collection en vue de leur suppression.

Pour chaque objet, un message dans la console indique si la mise à jour a réussi ou échoué.

Parameters:
abort_on_failurebool, default True

Si True, les mises à jour s’arrêtent à la première erreur rencontrée, sinon elles se poursuivent pour les objets suivants de la collection.