Skip to content

Commit

Permalink
Merge pull request #43 from ignf-sidc/sprint_20
Browse files Browse the repository at this point in the history
Sprint 20 : v0.1.16
  • Loading branch information
vsasyan-ignf authored Nov 21, 2023
2 parents 8c6004d + d07600f commit 39a92bc
Show file tree
Hide file tree
Showing 36 changed files with 1,440 additions and 400 deletions.
10 changes: 5 additions & 5 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
"rcfile",
"recupere",
"requêtage",
"requêter",
"setuptools",
"sharings",
"sidc",
Expand Down Expand Up @@ -62,18 +63,17 @@
"python.analysis.extraPaths": [
".",
],
"python.linting.enabled": true,
"python.linting.pylintEnabled": true,
"python.linting.mypyEnabled": true,
"python.linting.mypyArgs": [
"pylint.args": ["--rcfile=.pylintrc"],
"mypy-type-checker.args": [
"--strict",
"--check-untyped-defs",
"--show-column-numbers",
"--config-file mypy.ini",
],
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.formatOnSave": true,
},
"python.formatting.provider": "black",
// ASSOCIATIONS DE FICHIERS
"files.associations": {
// .pylintrc est au format .ini
Expand Down
131 changes: 131 additions & 0 deletions docs/comme-module.md
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))
```
4 changes: 2 additions & 2 deletions docs/configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -125,12 +125,12 @@ Pour cela, il faut ajouter deux lignes dans le fichier de configuration. Voici u
```ini
[store_authentification]
# L'url de récupération du token d'authentification (cf. doc)
token_url=https://geoplateforme-gpf-iam.qua.gpf-tech.ign.fr/realms/geoplateforme/protocol/openid-connect/token
token_url= https://sso-qua.priv.geopf.fr/realms/geoplateforme/protocol/openid-connect/token
# Autres paramètres à conserver (client_id, ...)

[store_api]
# L'url d'entrée de l'API (cf. doc)
root_url=https://geoplateforme-gpf-warehouse.qua.gpf-tech.ign.fr
root_url=https://data-qua.priv.geopf.fr/api
# Autres paramètres à conserver (datastore, ...)
```

Expand Down
2 changes: 1 addition & 1 deletion docs/configuration_details.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ Cette partie de la configuration permet au module de vous authentifier et de ré

| Paramètre | Type | Défaut | Description |
| ---------------------- | ---- | -------------- | --------------------------------------------------------------- |
| `token_url` | str | <https://sso.geopf.fr/realms/geoplateforme/protocol/openid-connect/token> | URL du service d'authentification de la Géoplateforme. Elle n'est à priori pas à changer, sauf si vous [utilisez un environnement particulier](/configuration/#utiliser-un-environnement-particulier-qualification) (test, qualification, ...). |
| `token_url` | str | <https://sso.geopf.fr/realms/geoplateforme/protocol/openid-connect/token> | URL du service d'authentification de la Géoplateforme. Elle n'est à priori pas à changer, sauf si vous [utilisez un environnement particulier](configuration.md#utiliser-un-environnement-particulier-qualification) (test, qualification, ...). |
| `http_proxy` | str | `null` | Indiquez ici le proxy HTTP à utiliser si besoin. |
| `https_proxy` | str | `null` | Indiquez ici le proxy HTTPS à utiliser si besoin. |
| `grant_type` | str | `password` | Indiquez ici le type d'authentification à utiliser (`password` ou `client_credentials`). |
Expand Down
2 changes: 1 addition & 1 deletion ignf_gpf_sdk/__init__.py
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"
Loading

0 comments on commit 39a92bc

Please sign in to comment.