-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #43 from ignf-sidc/sprint_20
Sprint 20 : v0.1.16
- Loading branch information
Showing
36 changed files
with
1,440 additions
and
400 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1 +1,132 @@ | ||
# Utilisation comme module Python | ||
|
||
## Configuration | ||
|
||
Afin d'utiliser cette librairie comme module, vous devrez [écrire un fichier de configuration](configuration.md) comme pour les autres utilisations. | ||
|
||
Ce fichier devra être chargé au début de votre script grâce à la classe `Config` : | ||
|
||
```py | ||
# Importation de la classe Config | ||
from ignf_gpf_sdk.io.Config import Config | ||
|
||
# Chargement de mon fichier de config | ||
Config().read("config.ini") | ||
``` | ||
|
||
## Livraison de données | ||
|
||
### Avec la classe `UploadAction` | ||
|
||
Pour livrer des données, vous pouvez utiliser les [fichiers de descripteur de livraison](upload_descriptor.md) et appeler la classe `UploadAction`. | ||
Cela sera plus simple d'un point de vue Python mais moins modulaire. | ||
|
||
Voici un exemple de code Python permettant de le faire (à lancer après le chargement de la config !) : | ||
|
||
```py | ||
# Importation des classes DescriptorFileReader et UploadAction | ||
from ignf_gpf_sdk.io.DescriptorFileReader import DescriptorFileReader | ||
from ignf_gpf_sdk.workflow.action.UploadAction import UploadAction | ||
|
||
# Instanciation d'une DescriptorFileReader | ||
descriptor_file_reader = DescriptorFileReader(p_descriptor) | ||
|
||
# Instanciation d'une UploadAction à partir du Reader | ||
o_upload_action = UploadAction(o_dataset, behavior=s_behavior) | ||
# On crée la livraison | ||
o_upload = o_upload_action.run() | ||
# On ferme la livraison et on monitore les exécutions de vérification | ||
b_status = UploadAction.monitor_until_end(o_upload, Livraison.callback_check) | ||
``` | ||
|
||
!!! note "Note" | ||
|
||
Vous pouvez préciser l'id d'un autre datastore s'il ne faut pas utiliser celui indiquer en configuration : | ||
|
||
```py | ||
# On crée la livraison en précisant un datastore spécifique | ||
o_upload = o_upload_action.run(datastore='id-datastore-spécifique') | ||
``` | ||
|
||
### Sans la classe `UploadAction` | ||
|
||
Si vous souhaitez livrer les données de manière plus flexible, vous pouvez également utiliser directement la classe `Upload` pour créer, compléter et fermer votre livraison. | ||
|
||
Voici un exemple de code Python permettant de le faire (à lancer après le chargement de la config !) : | ||
|
||
```py | ||
from pathlib import Path | ||
# Importation de la classe Upload | ||
from ignf_gpf_sdk.store.Upload import Upload | ||
|
||
# Attributs pour créer ma livraison (cf. la documentation) | ||
# https://data.geopf.fr/api/swagger-ui/index.html#/Livraisons%20et%20vérifications/create | ||
info = { | ||
"name": "Nom de la livraison à créer", | ||
"description": "Description de la livraison à créer", | ||
"type": "VECTOR", | ||
"srs": "EPSG:2154", | ||
} | ||
|
||
# Création d'une livraison | ||
upload = Upload.api_create(info) | ||
|
||
# Ajout des informations complémentaires (commentaires et étiquettes) | ||
upload.api_add_comment({"text": "mon commentaire"}) | ||
upload.api_add_tags({"tag1": "valeur1", "tag2": "valeur2"}) | ||
|
||
# Téléversement des fichiers | ||
# Listes des fichiers : chemin local -> chemin distant | ||
files = {Path('mon_fichier.zip') : 'chemin/api/'} | ||
# Pour chaque fichier | ||
for local_path, api_path in files.items(): | ||
# On le téléverse en utilisant la méthode api_push_data_file | ||
upload.api_push_data_file(local_path, api_path) | ||
|
||
# Téléversement des fichiers md5 | ||
upload.api_push_md5_file(Path('checksum.md5')) | ||
|
||
# Fermeture de la livraison | ||
upload.api_close() | ||
``` | ||
|
||
!!! note "Note" | ||
|
||
Vous pouvez préciser l'id d'un autre datastore s'il ne faut pas utiliser celui indiquer en configuration : | ||
|
||
```py | ||
# Création d'une livraison en précisant un datastore spécifique | ||
upload = Upload.api_create(info, datastore='id-datastore-spécifique') | ||
``` | ||
|
||
## Traitement et publications des données | ||
|
||
D'un point de vue API Entrepôt, pour traiter et publier des données, vous allez créer : | ||
|
||
* des exécutions de traitement (`processing execution`) ; | ||
* des configurations (`configuration`) ; | ||
* des offres (`offering`). | ||
|
||
Avec ce SDK, vous pouvez le faire en manipulant des workflows ou directement en manipulant les classes ProcessingExecution, Configuration et Offering. | ||
|
||
La première méthode est plus simple (et généreusement configurable !), la seconde méthode sera plus complexe mais très flexible. | ||
|
||
### En utilisant des workflows | ||
|
||
On part ici du principe que vous avez déjà écrit [votre workflow](workflow.md). | ||
|
||
```py | ||
# Importation de la classe JsonHelper | ||
from ignf_gpf_sdk.helper.JsonHelper import JsonHelper | ||
# Importation des classes Workflow, GlobalResolver et StoreEntityResolver | ||
from ignf_gpf_sdk.workflow.Workflow import Workflow | ||
from ignf_gpf_sdk.workflow.resolver.GlobalResolver import GlobalResolver | ||
from ignf_gpf_sdk.workflow.resolver.StoreEntityResolver import StoreEntityResolver | ||
``` | ||
|
||
La première étape consiste à charger le fichier de workflow et à instancier la classe associée. Vous pouvez utiliser notre classe de lecture JSON qui gère les fichier `.jsonc` (c'est à dire avec des commentaires). | ||
|
||
```py | ||
p_workflow = Path("mon_workflow.jsonc").absolute() | ||
o_workflow = Workflow(p_workflow.stem, JsonHelper.load(p_workflow)) | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,3 @@ | ||
"""Python API to simplify the use of the GPF HTTPS API.""" | ||
|
||
__version__ = "0.1.15" | ||
__version__ = "0.1.16" |
Oops, something went wrong.