Skip to content

Commit

Permalink
Merge pull request #222 from Geoplateforme/dev
Browse files Browse the repository at this point in the history
v0.1.35
  • Loading branch information
vsasyan-ignf authored Feb 11, 2025
2 parents d4a375f + 0c3a8c0 commit d4f4a5a
Show file tree
Hide file tree
Showing 62 changed files with 2,272 additions and 1,093 deletions.
4 changes: 3 additions & 1 deletion .github/workflows/code-quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ jobs:
python-version: ${{ matrix.python-version }}
- name: Install dependencies
run: |
pip install --upgrade pip setuptools flit
pip install --upgrade pip
pip install --upgrade setuptools
pip install --upgrade flit
flit install --extras test
- name: "Analyse code with black"
run: black --diff --check sdk_entrepot_gpf tests
Expand Down
1 change: 1 addition & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
"dépubliée",
"dépubliées",
"dépublier",
"egpf",
"EPSG",
"fontawesome",
"Géoplateforme",
Expand Down
25 changes: 25 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,30 @@
# CHANGE LOG

## v0.1.35

### [Added]

* Ajout d'un jeu de données raster d'exemple (`3_dataset_raster`).

### [Changed]

* Modification du nom du traitement raster dans le workflow exemple.
* Possibilité d'appeler le programme via des executables : `egpf` (ou `entrepot_gpf`)
* Possibilité d'observer les différentes vérifications sur une livraison (action `--check`)
* Possibilités de supprimer des fichiers d'une la livraison (action `--deletes-files FILE [FILE]`)
* Possibilités de supprimer automatiquement les fichiers ayant produit une erreur lors de la livraison (action `--delete-failed-files`)
* StoreEntity : nomenclatures des entités au pluriel (`entity_titles`)
* StoreEntity : liste des champs à récupérer en mode liste pour chaque entités (`_entity_fields`)

### [Changed]

* UploadAction : correction message fichier distant non trouvé en local
* Couverture des tests : on masque les fichiers couverts à 100%
* Réorganisation des appels du cli.

### [Fixed]


## v0.1.34

### [Added]
Expand Down
2 changes: 1 addition & 1 deletion check.sh
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ echo
# Lancement des tests et vérification de la couverture
coverage run -m unittest discover -b -p *TestCase.py
code+=$?
coverage report -m --fail-under=75
coverage report -m --skip-covered --fail-under=75
code+=$?
coverage html

Expand Down
1 change: 1 addition & 0 deletions docs/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ Des tutoriels sont disponibles pour voir des cas concrets d'utilisation de A à
* [Tutoriel 1 : héberger une archive pour la rendre téléchargeable](tutoriel_1_archive.md)
* [Tutoriel 2 : téléverser des données vecteur et les publier en flux](tutoriel_2_flux_vecteur.md)
* [Tutoriel 3 : téléverser des données raster et les publier en flux](tutoriel_3_flux_raster.md)
* [Tutoriel PCRS : téléverser des PCRS et les publier en flux](tutoriel_pcrs.md)

## Développement

Expand Down
46 changes: 21 additions & 25 deletions docs/tutoriel_3_flux_raster.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,33 +12,29 @@ Suivez la page [configuration](configuration.md) pour définir le fichier de con

## Récupération du jeu de données

Le jeu de données « 1_dataset_raster » contient des données raster à téléverser.
Le jeu de données « 3_dataset_raster » contient des données raster à téléverser.

Récupérez les données en lançant la commande :

```sh
python -m sdk_entrepot_gpf dataset -n 4_dataset_raster_gpf
python -m sdk_entrepot_gpf dataset -n 3_dataset_raster
```

Observez la structure du fichier :

```text
4_dataset_raster_gpf/
├── test
│ ├── 977-2018-0510-1979-U20N-0M50-E100.jp2
│ ├── 977-2018-0510-1979-U20N-0M50-E100.tab
│ ├── 977-2018-0510-1980-U20N-0M50-E100.jp2
│ ├── 977-2018-0510-1980-U20N-0M50-E100.tab
│ ├── 977-2018-0510-1981-U20N-0M50-E100.jp2
│ ├── 977-2018-0510-1981-U20N-0M50-E100.tab
│ ├── 977-2018-0510-1982-U20N-0M50-E100.jp2
│ └── 977-2018-0510-1982-U20N-0M50-E100.tab
├── test.md5
3_dataset_raster/
├── ain
│ ├── 01-2021-0920-6564-LA93-0M50-E100.tiff
│ ├── 01-2021-0920-6565-LA93-0M50-E100.tiff
│ ├── 01-2021-0921-6564-LA93-0M50-E100.tiff
│ └── 01-2021-0921-6565-LA93-0M50-E100.tiff
└── ain.md5
└── upload_descriptor.jsonc
```

Les données que la Géoplateforme va traiter sont situées dans le dossier `test`.
Le fichier `test.md5` permettra de valider les données téléversées côté Géoplateforme.
Les données que la Géoplateforme va traiter sont situées dans le dossier `ain`.
Le fichier `ain.md5` permettra de valider les données téléversées côté Géoplateforme.

Enfin, le fichier `upload_descriptor.json` permet de décrire la livraison à effectuer.

Expand All @@ -59,7 +55,7 @@ Chaque dataset contient :
Livrez les données en indiquant le chemin du fichier descripteur au programme :

```sh
python -m sdk_entrepot_gpf upload -f 4_dataset_raster_gpf/upload_descriptor.jsonc
python -m sdk_entrepot_gpf upload -f 3_dataset_raster/upload_descriptor.jsonc
```

Le programme doit vous indiquer que le transfert est en cours, puis qu'il attend la fin des vérification côté API avant de conclure que tout est bon. (Memo : cette partie est assez longue du à des problèmes de performance côté back. Le problème a déjà été remonté.)
Expand All @@ -80,13 +76,13 @@ Ouvrez le fichier. Vous trouverez plus de détails dans la [documentation sur le

```mermaid
---
title: Workflow de publication de données Raster en WMS et WMST
title: Workflow de publication de données Raster en WMS et WMTS
---
%% doc mermaid ici https://mermaid-js.github.io/mermaid/#/flowchart?id=flowcharts-basic-syntax
flowchart TD
A("upload") -->|pyramide| B("pyramide raster")
B -->|configuration-WMST| C("configuration WMST")
C -->|publication-WMST| D("offre WMST")
B -->|configuration-WMTS| C("configuration WMTS")
C -->|publication-WMTS| D("offre WMTS")
B -->|configuration-WMS| E("configuration WMS")
E -->|publication-WMS| F("offre WMS")
```
Expand All @@ -96,21 +92,21 @@ flowchart TD
Le workflow « generic_raster » permet de passer de la livraison à un flux WMS servant la donnée. Il comporte les étapes suivantes:

* `pyramide` : création d'une pyramide avec les données téléversées
* `configuration-WMST` : configuration d'un service de flux WMST à partir de la pyramide ;
* `publication-WMST` : publication du service de flux WMST sur le bon endpoint.
* `configuration-WMTS` : configuration d'un service de flux WMTS à partir de la pyramide ;
* `publication-WMTS` : publication du service de flux WMTS sur le bon endpoint.
* `configuration-WMS` : configuration d'un service de flux WMS à partir de la pyramide ;
* `publication-WMS` : publication du service de flux WMS sur le bon endpoint.

La partie WMST et WMS sont indépendantes : elles peuvent être traitées en parallèle ou dans n'importe quel sens.
La partie WMTS et WMS sont indépendantes : elles peuvent être traitées en parallèle ou dans n'importe quel sens.

Les commandes à lancer sont les suivantes :

```sh
# partie création de la pyramide
python -m sdk_entrepot_gpf workflow -f generic_raster.jsonc -s pyramide
# partie publication WMST
python -m sdk_entrepot_gpf workflow -f generic_raster.jsonc -s configuration-WMST
python -m sdk_entrepot_gpf workflow -f generic_raster.jsonc -s publication-WMST
# partie publication WMTS
python -m sdk_entrepot_gpf workflow -f generic_raster.jsonc -s configuration-WMTS
python -m sdk_entrepot_gpf workflow -f generic_raster.jsonc -s publication-WMTS
# partie publication WMS
python -m sdk_entrepot_gpf workflow -f generic_raster.jsonc -s configuration-WMS
python -m sdk_entrepot_gpf workflow -f generic_raster.jsonc -s publication-WMS
Expand Down
152 changes: 152 additions & 0 deletions docs/tutoriel_pcrs.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
# Tutoriel : publier un flux PCRS

La Géoplateforme permet d'héberger et diffuser vos données PCRS raster/image (Plan Corps de Rue Simplifié).

Pour cela, vous devez téléverser des dalles « PCRS » qui permettront de créer une pyramide image qui sera diffusée en flux.

Voici les prérequis pour suivre ce tutoriel :

* vous devez disposer d'un compte Géoplateforme (création en suivant ce [tuto](https://geoplateforme.github.io/tutoriels/production/controle-des-acces/entrepot/creation_compte/) ou sur [cartes.gouv](https://cartes.gouv.fr/))
* vous devez disposer d'un datastore (pour sa création, vous pouvez contacter [email protected] ou faire une demande [ici](https://cartes.gouv.fr/entrepot/demande-de-creation) en précisant votre établissement, qu'il s'agit d'une diffusion partenaire PCRS et votre identifiant utilisateur que vous trouver sur votre [espace](https://cartes.gouv.fr/mon-compte))
* vous devez avoir installé python et le module [SDK](index.md)

Vous allez avoir besoin de 3 fichiers pour réaliser le tutoriel dont le contenu va être détaillé :

* un fichier de configuration pour définir vos paramètres SDK
* un fichier descripteur qui détaille votre livraison
* un fichier de workflow en plusieurs étapes qui effectuera les traitements

## Définition de la configuration

Vous allez devoir déposer à la racine du dossier de votre projet un fichier `config.ini` contenant les informations suivantes :

```text
# Informations pour l'authentification
[store_authentification]
# paramètres du SDK
client_id=gpf-warehouse
client_secret=BK2G7Vvkn7UDc8cV7edbCnHdYminWVw2
# Votre login
login=********
# Votre mot de passe
password=********
# Informations pour l'API
[store_api]
# L'identifiant sandbox
datastore=********
```

Il faut compléter le fichier avec votre login/mot de passe et l'identifiant du datastore qui vous a été aloué.

Vous pouvez tester la validité de votre fichier avec la commande suivante :

```text
python3 -m sdk_entrepot_gpf me
```

Cela devrait renvoyer :

```text
Vos informations :
* email : ********
* nom : ********
* votre id : ********
Vous êtes membre de 1 communauté(s) :
* communauté « ******** » :
- id de la communauté : ********
- id du datastore : ********
- nom technique : ********
- droits : community, uploads, processings, datastore, stored_data, broadcast
```

Il peut être nécessaire de rajouter certains paramètres pour que cela fonctionne comme le proxy si vous en utilisez un. Vous pouvez suivre la page [configuration](configuration.md) pour compléter votre fichier si nécessaire.

## Fichier descripteur de livraison

Vous allez devoir créer un fichier `PCRS_descriptor.json` à la racine de votre projet avec les informations suivantes :

```text
{
"datasets": [
{
"data_dirs": [
"$votre_chantier_PCRS"
],
"upload_infos": {
"description": "Description de votre chantier (département, zone, date...)",
"name": "$votre_chantier_PCRS",
"srs": "EPSG:2154",
"type": "RASTER"
},
"comments": [
"Votre commentaire"
],
"tags": {
"datasheet_name": "$votre_chantier_PCRS",
"type": "PCRS"
}
}
]
}
```

Il faut remplacer 3 fois dans le fichier `$votre_chantier_PCRS` par une valeur sous la forme `PCRS_chantier_********` (ex: PCRS_chantier_HDF_A_2022). Cette valeur vous permettra de retrouver votre fiche de données sur cartes.gouv.fr. Vous pouvez également compléter le fichier avec une description et éventuellement un commentaire.

Vous déposerez vos données dans un répertoire du même nom `$votre_chantier_PCRS` à la racine de votre projet comme suit :

```text
$votre_chantier_PCRS/
├── dalle_1.tif
├── dalle_2.tif
└── ...
```

Vous pouvez maintenant effectuer la livraison en lançant la commande depuis la racine de votre projet ou en indiquant le chemin du fichier descripteur au programme :

```sh
python3 -m sdk_entrepot_gpf delivery PCRS_descriptor.jsonc
```

Le programme doit vous indiquer que le transfert est en cours, puis qu'il attend la fin des vérification côté API avant de conclure que tout est bon `INFO - BILAN : les 1 livraisons se sont bien passées` (cela peut être long selon la taille de la livraison et la qualité de votre connexion, ne fermez pas votre terminal pendant ce temps).

## Workflow

Une fois les données livrées, il faut créer la pyramide image avant de la diffuser en flux (WMSRaster et WMTS).

Ces étapes sont décrites grâces à un workflow.

Vous pouvez récupérer le template du workflow grâce à la commande suivante :

```sh
python3 -m sdk_entrepot_gpf example workflow PCRS.jsonc
```

Pour plus de détails, consultez la [documentation sur les workflows](workflow.md).

Le workflow `PCRS.jsonc` est composé de 2 étapes (une pour la génération de la pyramide et une pour la publication des flux). Il faudra lancer une commande pour chacune d'elles.

Les commandes à lancer sont les suivantes :

```sh
# partie génération de la pyramide
python3 -m sdk_entrepot_gpf workflow -f generic_raster.jsonc -s pyramide --param producteur $votre_chantier_PCRS
# partie publication
python3 -m sdk_entrepot_gpf workflow -f generic_raster.jsonc -s publication --param producteur $votre_chantier_PCRS
```

La première commande peut être longue selon le nombre de dalles livrées. Des logs doivent vous être remontés et se terminer par :

```text
INFO - Exécution de l'action 'pyramide-0' : terminée
```

Avec la deuxième commande, deux offres (une WMTS et une WMSRaster) devraient être créées :

```text
INFO - Offre créée : Offering(id=********, layer_name=$votre_chantier_PCRS)
```

Vous pouvez maintenant retrouver vos données dans cartes.gouv (https://cartes.gouv.fr/entrepot/$id_datastore/donnees/$votre_chantier_PCRS) ou les visionner dans un SIG comme QGIS en renseignant les urls des GetCapabilities des services ([WMTS](https://data.geopf.fr/wmts?service=WMTS&request=GetCapabilities) et [WMSRaster](https://data.geopf.fr/wms-r?)).
5 changes: 4 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,8 @@ dependencies = [
"types-python-dateutil",
"pyotp",
"requests_toolbelt",
"tabulate",
"types-tabulate",
]

[project.optional-dependencies]
Expand All @@ -50,7 +52,8 @@ Source = "https://github.com/Geoplateforme/sdk_entrepot"
Documentation = "https://geoplateforme.github.io/sdk-entrepot/"

[project.scripts]
realpython = "sdk_entrepot_gpf.__main__:main"
entrepot_gpf = "sdk_entrepot_gpf.scripts.main:main"
egpf = "sdk_entrepot_gpf.scripts.main:main"

[tool.black]
line-length = 200
Expand Down
2 changes: 1 addition & 1 deletion sdk_entrepot_gpf/__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 Warehouse HTTPS API."""

__version__ = "0.1.34"
__version__ = "0.1.35"
Loading

0 comments on commit d4f4a5a

Please sign in to comment.