Voici la documentation : https://geoplateforme.pages.gpf-tech.ign.fr/documentation

Skip to content
Validations sur la source (29)
......@@ -14,7 +14,7 @@ include:
- project: geoplateforme/templates
ref: main
file:
- "/ci/docker.yml"
- "/ci/docker-v2.yml"
- "/ci/dependency-track.yml"
- "/ci/sonarqube.yml"
......@@ -22,7 +22,11 @@ include:
# only cache local items.
variables:
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
PROJECT_FOLDER: "src"
PIP_DISABLE_PIP_VERSION_CHECK: 1
PIP_EXTRA_INDEX_URL: https://gitlab-ci-token:${CI_JOB_TOKEN}@${CI_API_V4_URL}/groups/55/-/packages/pypi/
PIP_PROGRESS_BAR: "off"
PIP_RETRIES: 0
PROJECT_FOLDER: "gpf_check_md5"
WITH_DOCKER_JOBS: "false"
# Pip's cache doesn't store the python packages
......@@ -66,7 +70,7 @@ flake8:
changes:
- "**/*.py"
before_script:
- python -m pip install -U flake8
- python -m pip install -U -r requirements/development.txt
script:
- flake8 $PROJECT_FOLDER --count --select=E9,F63,F7,F82 --show-source --statistics
- flake8 $PROJECT_FOLDER --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
......@@ -91,7 +95,6 @@ test:
# - tags
before_script:
- python3 -m pip install -U -r requirements.txt
- python3 -m pip install -U -r requirements/base.txt
- python3 -m pip install -U -r requirements/testing.txt
script:
- pytest
......@@ -116,8 +119,8 @@ build:pip-wheel:
- main
- tags
before_script:
- python -m pip install -U -r requirements/base.txt
- python -m pip install -U -r requirements/development.txt
- python -m pip install -U -r requirements.txt
- python -m pip install -e .
script:
- python setup.py sdist bdist_wheel
artifacts:
......@@ -125,6 +128,26 @@ build:pip-wheel:
- .pypirc # required by job gitlab:pypi
- dist/*
build:documentation:licenses:
stage: build
image: python:3.9-slim-bullseye
only:
refs:
- main
- tags
before_script:
- python -m pip install -U pip setuptools wheel
- python -m pip install -U "pip-licenses>=3.5,<5"
- python -m pip install -U -r requirements.txt
script:
- pip-licenses --format=markdown --from mixed --with-authors --with-description --with-urls --output-file=docs/misc/licenses.md
artifacts:
name: documentation
expose_as: "License page"
paths:
- docs/misc/licenses.md
when: always
build:documentation:
stage: build
image: python:3.9-slim-bullseye
......@@ -132,8 +155,12 @@ build:documentation:
refs:
- main
- tags
needs:
- job: build:documentation:licenses
artifacts: true
before_script:
- python -m pip install -U -r requirements/base.txt
- python -m pip install -U -r requirements.txt
- python -m pip install -e .
- python -m pip install -U -r requirements/documentation.txt
script:
- sphinx-build -b html -d docs/_build/cache -j auto -q docs build/docs
......@@ -145,11 +172,6 @@ build:documentation:
when: always
# -- DEPLOYMENT JOBS -------------------------------------------------------------------
gitlab:container:
extends: .docker-build
variables:
DOCKER_IMG_NAME: "$CI_REGISTRY_IMAGE/gpf-md5-checker"
gitlab:pypi:
stage: deploy
image: python:3.9-slim-bullseye
......
......@@ -16,11 +16,18 @@ Unreleased
-->
## 0.6.0 - 2022-12-20
- Rename main folder into package name to avoid conflict
- Use gpf-entrepot-toolbelt as main dependency
- Rework packaging and CI tasks
- Rework of documentation
## 0.5.0 - 2022-12-16
- Fix Status returned
- CI: add artifact for test report and coverage
- Replace (TECHNICAL) ?ERROR by TECHNICAL_ERROR
- Replace (TECHNICAL) ERROR by TECHNICAL_ERROR
- Fix typo
## 0.4.0 - 2022-12-06
......
......@@ -7,10 +7,19 @@ ENV PYTHONUNBUFFERED 1
# Remove assert statements and any code conditional on __debug__. See: https://docs.python.org/3/using/cmdline.html#cmdoption-O
ENV PYTHONOPTIMIZE 2
# PIP - DISABLE WARNING ABOUT ROOT USER
ENV PIP_ROOT_USER_ACTION ignore
# PIP - DISABLE VERSION CHECK
ENV PIP_DISABLE_PIP_VERSION_CHECK 1
# PIP - HIDE PROGRESS BAR
ENV PIP_PROGRESS_BAR off
# PIP - EXTRA_INDEX_URL
ENV PIP_EXTRA_INDEX_URL https://gitlab.gpf-tech.ign.fr/api/v4/groups/55/packages/pypi
WORKDIR /user/app
COPY requirements.txt .
COPY requirements/base.txt ./requirements/
COPY requirements/base*.txt ./requirements/
RUN python -m pip install --no-cache-dir -U pip && \
python -m pip install --no-cache-dir -U setuptools wheel
......@@ -19,6 +28,6 @@ COPY . .
RUN python -m pip install -U --no-cache-dir -r requirements.txt
RUN python -m pip install -U -e .
RUN python -m pip install -U .
CMD ["bash"]
# Script de vérification des données de la Géoplateforme - Signature md5
[![pipeline status](https://gitlab.gpf-tech.ign.fr/geoplateforme/scripts-verification/check-md5/badges/main/pipeline.svg)](https://gitlab.gpf-tech.ign.fr/geoplateforme/scripts-verification/check-md5/-/commits/main)
[![coverage report](https://gitlab.gpf-tech.ign.fr/geoplateforme/scripts-verification/check-md5/badges/main/coverage.svg)](https://gitlab.gpf-tech.ign.fr/geoplateforme/scripts-verification/check-md5/-/commits/main)
[![Quality Gate Status](https://sonar.gpf-tech.ign.fr/api/project_badges/measure?project=geoplateforme_scripts-verification_check-md5&metric=alert_status&token=squ_a1848e7921a855498181cc95806b2418da16a756)](https://sonar.gpf-tech.ign.fr/dashboard?id=geoplateforme_scripts-verification_check-md5)
[![Latest Release](https://gitlab.gpf-tech.ign.fr/geoplateforme/scripts-verification/check-md5/-/badges/release.svg)](https://gitlab.gpf-tech.ign.fr/geoplateforme/scripts-verification/check-md5/-/releases)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![flake8](https://img.shields.io/badge/linter-flake8-green)](https://flake8.pycqa.org/)
[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)
[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
----
## Contribuer
......
......@@ -12,7 +12,7 @@ from datetime import datetime
sys.path.insert(0, os.path.abspath(r".."))
# project
from src import __about__
from gpf_check_md5 import __about__
# -- Build environment -----------------------------------------------------
on_rtd = os.environ.get("READTHEDOCS", None) == "True"
......@@ -184,7 +184,7 @@ def run_apidoc(_):
cur_dir = os.path.normpath(os.path.dirname(__file__))
output_path = os.path.join(cur_dir, "_apidoc")
modules = os.path.normpath(os.path.join(cur_dir, "../src/"))
modules = os.path.normpath(os.path.join(cur_dir, "../gpf_check_md5/"))
exclusions = ["../input", "../output", "/tests"]
main(["-e", "-f", "-M", "-o", output_path, modules] + exclusions)
......
......@@ -2,11 +2,13 @@
## Prérequis système
- Python >= 3.9
- Python >= 3.10
- Accès réseau sur :
- l'instance GitLab : <https://gitlab.gpf-tech.ign.fr>
- le dépôt officiel de paquets Python : <https://pypi.org/>
- un [jeton d'accès personnel ou Personal Access Token (PAT)](https://gitlab.gpf-tech.ign.fr/-/profile/personal_access_tokens) avec le scope `read_api`
- un jeton d'accès personnel (_Personal Access Token (PAT)_) avec le scope `read_api` ou a minima `read_registry`. Voir la page [Authentification](/usage/authentication).
----
## Cloner le dépôt
......@@ -16,6 +18,8 @@ Exemple pour Oslandia avec l'utilisateur `geojulien` :
git clone --config 'credential.helper=store' https://geojulien@gitlab.gpf-tech.ign.fr/geoplateforme/scripts-verification/check-md5.git
```
----
### Derrière le proxy
L'Usine Logicielle étant en accès restreint derrière un filtre IP, les personnes ne disposant pas d'IP fixe passent par un proxy qui pointe sur un serveur de rebond dont l'IP fixe est autorisée.
......@@ -26,18 +30,58 @@ Exemple avec un proxy de type socks :
git clone --config http.proxy='socks5://127.0.0.1:8645' --config 'credential.helper=store' https://geojulien@gitlab.gpf-tech.ign.fr/geoplateforme/scripts-verification/check-md5.git
```
## Démarrage rapide
----
## Installation
### Environnement virtuel
Il est recommandé de travailler dans un environnement virtuel afin de garantir la meilleure reproductibilité.
Exemple sur une distribution Linux de type Ubuntu LTS :
```sh
# environnement virtuel
# créer l'environnement virtuel
python3 -m venv .venv
# activer l'environnement virtuel
source .venv/bin/activate
# mise à jour de pip dans l'environnement virtuel
# mise à jour de pip et des packages de base dans l'environnement virtuel
python -m pip install -U pip setuptools wheel
```
Exemple sur Windows 10+, avec PowerShell (attention à [adapter la politique d'exécution des scripts](https://static.geotribu.fr/articles/2020/2020-06-19_setup_python/#autoriser-lutilisation-des-environnements-virtuels) avant) :
```powershell
# créer l'environnement virtuel
py -3 -m venv .venv
# activer l'environnement virtuel
.venv/Scripts/Activate
# mise à jour de pip et des packages de base dans l'environnement virtuel
python -m pip install -U pip setuptools wheel
```
### Démarrage rapide
Exemple sur une distribution Linux de type Ubuntu LTS qui accède à l'Usine Logicielle sans proxy :
```sh
# installation des dépendances de base
python -m pip install -U -r requirements.txt
# installation du projet en mode développement
python -m pip install -e .
```
### Derrière un proxy
Pour les proxy de type socks, installer préalablement PySocks dans le même environnement que le reste :
```sh
python -m pip install -U "PySocks<2"
```
Puis installer tour à tour les dépendances issues de <pypi.org> puis celles du registre de l'Usine Logicielle :
```sh
python -m pip install -U -r requirements/base-pypi.txt
python -m pip install -U -r requirements/base-gpf.txt --proxy socks5://localhost:8645 --index-url https://gitlab.gpf-tech.ign.fr/api/v4/groups/55/-/packages/pypi/simple
```
......@@ -8,11 +8,22 @@
---
[![pipeline status](https://gitlab.gpf-tech.ign.fr/geoplateforme/scripts-verification/check-md5/badges/main/pipeline.svg)](https://gitlab.gpf-tech.ign.fr/geoplateforme/scripts-verification/check-md5/-/commits/main)
[![coverage report](https://gitlab.gpf-tech.ign.fr/geoplateforme/scripts-verification/check-md5/badges/main/coverage.svg)](https://gitlab.gpf-tech.ign.fr/geoplateforme/scripts-verification/check-md5/-/commits/main)
[![Quality Gate Status](https://sonar.gpf-tech.ign.fr/api/project_badges/measure?project=geoplateforme_scripts-verification_check-md5&metric=alert_status&token=squ_a1848e7921a855498181cc95806b2418da16a756)](https://sonar.gpf-tech.ign.fr/dashboard?id=geoplateforme_scripts-verification_check-md5)
[![Latest Release](https://gitlab.gpf-tech.ign.fr/geoplateforme/scripts-verification/check-md5/-/badges/release.svg)](https://gitlab.gpf-tech.ign.fr/geoplateforme/scripts-verification/check-md5/-/releases)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![flake8](https://img.shields.io/badge/linter-flake8-green)](https://flake8.pycqa.org/)
[![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/)
[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)
```{toctree}
---
caption: Usage
maxdepth: 1
---
usage/authentication
usage/installation
usage/cli
```
......
# Authentification
Le projet est publié sur le registre privé de l'Usine Logicielle (GitLab).
De plus, il dépend d'autres packages publiés sur le même registre.
Pour y accéder, installer ou publier, il faut donc disposer d'un jeton d'authentification (_token_) qui est passé dans les différentes requêtes HTTP/S en remplacement du mot de passe et qui bénéficie de droits délimités.
## Créer un jeton d'authentification
1. Se rendre dans [la section dédiée de son profil GitLab](https://gitlab.gpf-tech.ign.fr/-/profile/personal_access_tokens)
1. Créer un jeton avec les droits (~ _scope_) requis. Dans le doute, cocher `api` mais il faudra alors être prudent/e car il s'agit du niveau maximum.
1. Stocker le nom et la valeur du jeton bien au chaud dans un gestionnaire de mots de passe ~~ou sur un post-it derrière soi~~
Exemple pour un jeton ayant accès en lecture/écriture sur le registre des packages, requis pour l'installation et la publication du projet :
![Jeton d'authentification pour accéder au registre des packages GitLab](/static/gitlab_personal_access_token_registry.png)
### Stocker les identifiants de manière sécurisée
Installer [keyring](https://pypi.org/project/keyring/) pour interagir avec le trousseau système, si possible dans un environnement virtuel :
```sh
python3 -m pip install -U keyring
```
Par exemple, si le token est nommé `registry` :
```sh
> keyring set https://gitlab.gpf-tech.ign.fr/api/v4/groups/55/-/packages/pypi/ registry
Password for 'registry' in 'https://gitlab.gpf-tech.ign.fr/api/v4/groups/55/-/packages/pypi/':
```
A l'invite, entrer la valeur du jeton (_token_).
......@@ -7,7 +7,7 @@ Une fois l'outil installé, il est appelable en ligne de commande : *{{ cli_name
{{ cli_usage }}
```{sphinx_argparse_cli}
:module: src.cli
:module: gpf_check_md5.cli
:hook:
:func: main
:prog: gpf-md5-checker
......
# Installation
Il est possible d'installer le projet de deux façon différentes, en plus de [celle du mode développement](development/setup).
Il est possible d'installer le projet de deux façon différentes, en plus de [celle du mode développement](/development/setup).
## Pip
### Prérequis
- Python >= 3.9
- Python >= 3.10
- Accès réseau sur:
- l'instance GitLab : <https://gitlab.gpf-tech.ign.fr>
- le dépôt officiel de paquets Python : <https://pypi.org/>
- un [jeton d'accès personnel ou Personal Access Token (PAT)](https://gitlab.gpf-tech.ign.fr/-/profile/personal_access_tokens) avec le scope `read_api`
- un jeton d'accès personnel (_Personal Access Token (PAT)_) avec le scope `read_api` ou a minima `read_registry`. Voir la page [Authentification](/usage/authentication).
### Installer
......
......@@ -40,7 +40,7 @@ __uri_repository__ = (
__uri_tracker__ = f"{__uri_repository__}issues/"
__uri__ = __uri_repository__
__version__ = "0.5.0"
__version__ = "0.6.0"
__version_info__ = tuple(
[
int(num) if num.isdigit() else num
......
......@@ -11,8 +11,17 @@ from os import getenv
from pathlib import Path
from typing import List
# 3rd party
from gpf_entrepot_toolbelt.orchestrator.check_livraison import check_livraison_structure
from gpf_entrepot_toolbelt.orchestrator.models import (
GpfOrchestratorParameters,
OutputDataStructure,
)
from gpf_entrepot_toolbelt.orchestrator.status import Status
from gpf_entrepot_toolbelt.utils.dict_counter import count_dict_values
# package
from src.__about__ import (
from gpf_check_md5.__about__ import (
__author__,
__cli_usage__,
__summary__,
......@@ -21,11 +30,8 @@ from src.__about__ import (
__uri_homepage__,
__version__,
)
from src.constants import Status, arg_type_path_folder
from src.md5sum import run
from src.orchestrator.check_livraison import check_livraison_structure
from src.orchestrator.models import GpfOrchestratorParameters, OutputDataStructure
from src.utils.dict_counter import count_dict_values
from gpf_check_md5.constants import arg_type_path_folder
from gpf_check_md5.md5sum import run
# ############################################################################
# ########## MAIN ################
......
......@@ -4,20 +4,11 @@
# standard lib
from argparse import ArgumentTypeError
from enum import Enum
from pathlib import Path
from typing import Union
# package
from src.utils.check_path import check_path
class Status(Enum):
"""Output status for GPF orchestrator."""
SUCCESS = 0
FAILURE = 1
TECHNICAL_ERROR = 2
# 3rd party
from gpf_entrepot_toolbelt.utils.check_path import check_path
def arg_type_path_folder(input_path: Union[Path, str]) -> Path:
......
......@@ -14,8 +14,8 @@ from pathlib import Path
from typing import Tuple
# package
from src.constants import Status
from src.utils.check_path import check_path
from gpf_entrepot_toolbelt.orchestrator.status import Status
from gpf_entrepot_toolbelt.utils.check_path import check_path
# -- GLOBALS
......
-i https://pypi.org/simple
# Common requirements
# -------------------
setuptools
wheel
# Project requirements
# --------------------
-r requirements/base.txt
-r requirements/base-pypi.txt
-r requirements/base-gpf.txt
# change index-url for next lines
--extra-index-url https://gitlab.gpf-tech.ign.fr/api/v4/groups/55/-/packages/pypi/simple
gpf-entrepot-toolbelt>=0.2,<1
......@@ -54,7 +54,7 @@ use_parentheses = True
addopts =
--junitxml=junit/test-results.xml
--cov-config=setup.cfg
--cov=src
--cov=gpf_check_md5
--cov-report=html
--cov-report=xml
--cov-report=term
......