From c3c4d2c8d1ba8a76a4ccd9a8d680a9730f375390 Mon Sep 17 00:00:00 2001 From: igeofr Date: Tue, 11 Jul 2023 19:40:37 +0000 Subject: [PATCH 01/66] =?UTF-8?q?Cr=C3=A9e=20la=20GeoRDP=202023-07-28?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/rdp/2023/rdp_2023-07-28.md | 71 ++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 content/rdp/2023/rdp_2023-07-28.md diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md new file mode 100644 index 0000000000..176c971930 --- /dev/null +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -0,0 +1,71 @@ +--- +title: Revue de presse du 28 juillet 2023 +authors: + - Geotribu +categories: + - revue de presse +date: 2023-07-28 14:20 +description: "" +image: "Image d'illustration de la RDP qui sert ensuite dans la mise en avant : réseaux sociaux, flux RSS... 400x800 en PNG" +license: default +robots: index, follow +tags: + - tag 1 + - tag 2 + - ... +--- + +# Revue de presse du 28 juillet 2023 + +## Intro + +![icône news générique](https://cdn.geotribu.fr/img/internal/icons-rdp-news/news.png "icône news générique"){: .img-rdp-news-thumb } + +[Commenter :fontawesome-solid-comments:](#__comments){: .md-button } +[Proposer :material-newspaper-plus:]({{ config.extra.url_contribuer }}rdp/add_news/){: .md-button } +{: align=middle } + +---- + +## Vie du site + +![logo geotribu orange](https://cdn.geotribu.fr/img/internal/charte/geotribu_logo_rectangle_384x80.png "logo geotribu orange"){: .off-glb style="border: none; box-shadow: none;" } +{: align=middle } + +---- + +## Sorties de la semaine + +---- + +## Logiciel + +---- + +## Représentation Cartographique + +---- + +## OpenStreetMap + +---- + +## Google + +---- + +## Open Data + +---- + +## Geo-event + +---- + +## Divers + +---- + +## En bref + +- Annonces diverses From fb17534780ede74a208d20f947e6137663e6f8d0 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Mon, 24 Jul 2023 14:16:21 +0200 Subject: [PATCH 02/66] =?UTF-8?q?Retire=20les=20balises=20RSS=20personnali?= =?UTF-8?q?s=C3=A9es=20Car=20elles=20sont=20d=C3=A9sormais=20g=C3=A9r?= =?UTF-8?q?=C3=A9es=20nativement=20par=20le=20th=C3=A8me?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/theme/main.html | 6 ------ 1 file changed, 6 deletions(-) diff --git a/content/theme/main.html b/content/theme/main.html index 362de1d8b5..818d72dca6 100644 --- a/content/theme/main.html +++ b/content/theme/main.html @@ -10,12 +10,6 @@ {% endif %} -{# RSS Feed #} - - - {# Meta title #} {% set title = config.site_name %} {% if page and page.meta and page.meta.title %} From 04afdfa9c7d58a9e9a08d5306767d891c9c844bb Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Wed, 19 Jul 2023 20:28:53 +0200 Subject: [PATCH 03/66] =?UTF-8?q?Cr=C3=A9=C3=A9=20article=20obtenir=20vers?= =?UTF-8?q?ion=20de=20PROJ=20avec=20Python?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ersion-de-proj-avec-gdal-pyproj-binaire.md | 209 ++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md diff --git a/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md b/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md new file mode 100644 index 0000000000..f77b45f08e --- /dev/null +++ b/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md @@ -0,0 +1,209 @@ +--- +title: Obtenir la version de PROJ installée en Python +authors: + - Julien MOURA +categories: + - article +date: 2023-07-25 10:20 +description: "Mémo technique : comment récupérer la version de PROJ installée depuis un script Python, avec GDAL, PyProj ou le binaire proj." +image: +license: beerware +robots: index, follow +tags: + - PROJ + - Python +--- + +# Python : obtenir la version de PROJ installée + +:calendar: Date de publication initiale : 25 juillet 2023 + +En butant sur un souci de reconnaissance de SRS lié aux choix éclairés de l'IGN en matière de registre spécifique, j'ai eu besoin de vérifier la version de PROJ installée de façon à pouvoir adapter le comportement du script. +Formulé comme ça, mon candide moi s'est dit : + +> allez zou, un coup de `proj --version` ou `-V` dans un subprocess et on n'en parle plus ! + +C'est alors que mon surmoi de galérien a pris le dessus ! + +Je me note donc ça ici, histoire de pas oublier et que ça puisse resservir. + +[Commenter cet article :fontawesome-solid-comments:](#__comments){: .md-button } +{: align=middle } + +## Avec pyproj + +[logo PyProj](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/pyproj.png){: .img-rdp-news-thumb } + +Si pyproj est installé : + +```sh +pip install pyproj +``` + +Alors tout est par-fait : + +```python +import pyproj + +print(pyproj.__proj_version__) +``` + +## Avec les bindings GDAL + +[logo GDAL](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/gdal.png){: .img-rdp-news-thumb } + +Si GDAL est installée, ainsi que ses bindings Python : + +```sh +pip install gdal +``` + +Alors on peut utiliser le package `osr` (dédié à l'abstraction sur les systèmes de coordonnées) : + +```python +from osgeo import osr + +print( + f"{osr.GetPROJVersionMajor()}." + f"{osr.GetPROJVersionMinor()}." + f"{osr.GetPROJVersionMicro()}" +) +``` + +## Avec le binaire proj et une regex + +[logo PROJ](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/proj.png){: .img-rdp-news-thumb } + +Mais si on ne peut compter sur aucune des couches d'asbtraction précédentes, alors ça se corse. Il faut appeler l'exécutable de proj et se débrouiller avec la sortie par défaut puisqu'il n'y a pas d'option `--version` : + +```sh +> proj +Rel. 8.2.1, January 1st, 2022 +usage: proj [-bdeEfiIlmorsStTvVwW [args]] [+opt[=arg] ...] [file ...] +``` + +Et qu'est ce qu'on fait quand on a doit chercher une structure de texte dans un texte non formaté ? eh bien on ~~se débat~~ s'exprime à la régulière. Joie. + +```python +import re +import subprocess + +proj_output = check_output(["proj"], stderr=STDOUT, text=True) +version_match = re.search(r"Rel\. ([0-9.]+)", proj_output): +if version_match: + print(version_match.group(1)) +``` + +## Avec CBAL (Ceinture Bretelles Abstraction Library) + +!!! note + L'opérateur walrus `:=` requiert Python 3.8 et le typage `str | None` Python 3.10. Pour une version Python inférieure (quoique la 3.7 est en EOL depuis ce mois-ci...), penser à adapter la syntaxe :wink:. + +```python +# -- IMPORTS -- + +# standard library +import logging +import re +from subprocess import STDOUT, CalledProcessError, check_output + +# condition imports +try: + from osgeo import gdal, osr + + PYTHON_GDAL_IS_AVAILABLE: bool = True +except ImportError: + logging.info("GDAL (ou ses bindings Python) n'est pas installé.") + gdal = osr = None + PYTHON_GDAL_IS_AVAILABLE: bool = False + +try: + import pyproj + + PYPROJ_IS_AVAILABLE: bool = True +except ImportError: + logging.info("PyProj n'est pas installé.") + pyproj = None + PYPROJ_IS_AVAILABLE: bool = False + +# -- GLOBALS -- + +# logs +logger = logging.getLogger(__name__) + +# -- FUNCTIONS -- + +def get_proj_version() -> str | None: + """Récupère la version installée de la bibliothèque PROJ. + + Credits: + Julien Moura (Geotribu) + + Returns: + str | None: La version de PROJ installée ou None si PROJ n'est pas trouvé. + """ + proj_version = None + + # from GDAL bindings + if osr is not None and PYTHON_GDAL_IS_AVAILABLE: + try: + proj_version = ( + f"{osr.GetPROJVersionMajor()}." + f"{osr.GetPROJVersionMinor()}." + f"{osr.GetPROJVersionMicro()}" + ) + logger.debug( + f"Version de PROJ obtenue depuis les bindings Python de GDAL : {proj_version}" + ) + return proj_version + except Exception: + pass + + # from PyProj + if pyproj is not None and PYPROJ_IS_AVAILABLE: + try: + proj_version = pyproj.__proj_version__ + logger.debug(f"Version de PROJ obtenue depuis PyProj : {proj_version}") + return proj_version + except Exception: + pass + + # from PROJ command-line + try: + # Exécute la commande "proj" en utilisant subprocess + result = check_output(["proj"], stderr=STDOUT, text=True) + + # Recherche de la version dans la sortie à l'aide d'une expression régulière + if version_match := re.search(r"Rel\. ([0-9.]+)", result): + proj_version = version_match.group(1) + logger.debug( + f"Version de PROJ obtenue depuis le binaire proj : {proj_version}" + ) + return proj_version + else: + logger.error( + "PROJ est bien installé mais impossible de trouver la version en regex." + ) + except FileNotFoundError as err: + logger.info(f"Proj n'est pas installé. Trace : {err}") + except CalledProcessError as err: + logger.info(f"Erreur lors de l'exécution de la commande : {err}") + + logging.warning( + "Impossible de déterminer la version de PROJ depuis les bindings GDAL, PyProj, " + "ou les binaires proj. " + ) + return proj_version + +if __name__ == "__main__": + """Standalone execution.""" + print(get_proj_version()) +``` + +---- + +## Auteur {: data-search-exclude } + +--8<-- "content/team/jmou.md" + +{% include "licenses/beerware.md" %} From b0f34c977e1a2ab7f565cb69e47f2b29d51a162d Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Wed, 19 Jul 2023 21:16:58 +0200 Subject: [PATCH 04/66] Fix images --- ...obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md b/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md index f77b45f08e..4058314346 100644 --- a/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md +++ b/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md @@ -32,7 +32,7 @@ Je me note donc ça ici, histoire de pas oublier et que ça puisse resservir. ## Avec pyproj -[logo PyProj](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/pyproj.png){: .img-rdp-news-thumb } +![logo PyProj](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/pyproj.png){: .img-rdp-news-thumb } Si pyproj est installé : @@ -40,7 +40,7 @@ Si pyproj est installé : pip install pyproj ``` -Alors tout est par-fait : +Alors tout est presque trop facile : ```python import pyproj @@ -50,7 +50,7 @@ print(pyproj.__proj_version__) ## Avec les bindings GDAL -[logo GDAL](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/gdal.png){: .img-rdp-news-thumb } +![logo GDAL](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/gdal.png){: .img-rdp-news-thumb } Si GDAL est installée, ainsi que ses bindings Python : @@ -72,7 +72,7 @@ print( ## Avec le binaire proj et une regex -[logo PROJ](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/proj.png){: .img-rdp-news-thumb } +![logo PROJ](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/proj.png){: .img-rdp-news-thumb } Mais si on ne peut compter sur aucune des couches d'asbtraction précédentes, alors ça se corse. Il faut appeler l'exécutable de proj et se débrouiller avec la sortie par défaut puisqu'il n'y a pas d'option `--version` : From 786d2b10f3f24fc2f195f8830c81da63dde29d5c Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Fri, 21 Jul 2023 13:14:43 +0200 Subject: [PATCH 05/66] =?UTF-8?q?All=C3=A8ge=20et=20publicise=20le=20trava?= =?UTF-8?q?il=20communautaire?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ersion-de-proj-avec-gdal-pyproj-binaire.md | 115 ++---------------- 1 file changed, 12 insertions(+), 103 deletions(-) diff --git a/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md b/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md index 4058314346..c2f1d00eb4 100644 --- a/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md +++ b/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md @@ -10,6 +10,7 @@ image: license: beerware robots: index, follow tags: + - expression régulière - PROJ - Python --- @@ -18,7 +19,9 @@ tags: :calendar: Date de publication initiale : 25 juillet 2023 -En butant sur un souci de reconnaissance de SRS lié aux choix éclairés de l'IGN en matière de registre spécifique, j'ai eu besoin de vérifier la version de PROJ installée de façon à pouvoir adapter le comportement du script. +![icône projection](https://cdn.geotribu.fr/img/logos-icones/divers/projection.png){: .img-rdp-news-thumb } + +En butant sur un souci de reconnaissance de SRS lié aux [choix éclairés de l'IGN en matière de registre spécifique](https://twitter.com/EvenRouault/status/1437818895604269059), j'ai eu besoin de vérifier la version de PROJ installée de façon à pouvoir adapter le comportement du script. Formulé comme ça, mon candide moi s'est dit : > allez zou, un coup de `proj --version` ou `-V` dans un subprocess et on n'en parle plus ! @@ -94,111 +97,17 @@ if version_match: print(version_match.group(1)) ``` -## Avec CBAL (Ceinture Bretelles Abstraction Library) +## Mais ça, c'était aujourd'hui -!!! note - L'opérateur walrus `:=` requiert Python 3.8 et le typage `str | None` Python 3.10. Pour une version Python inférieure (quoique la 3.7 est en EOL depuis ce mois-ci...), penser à adapter la syntaxe :wink:. +![logo open source](https://cdn.geotribu.fr/img/logos-icones/opensource.png){: .img-rdp-news-thumb } -```python -# -- IMPORTS -- +En tout cas, ça valait le coup de demander autour de moi et auprès de mes collègues puisque Loïc Bartoletti a proposé d'inétgrer l'option `--version` à proj ! C'est dans cette [Pull Request]({: .img-rdp-news-thumb }) que ça se passe et on y apprend plein de choses : -# standard library -import logging -import re -from subprocess import STDOUT, CalledProcessError, check_output - -# condition imports -try: - from osgeo import gdal, osr - - PYTHON_GDAL_IS_AVAILABLE: bool = True -except ImportError: - logging.info("GDAL (ou ses bindings Python) n'est pas installé.") - gdal = osr = None - PYTHON_GDAL_IS_AVAILABLE: bool = False - -try: - import pyproj - - PYPROJ_IS_AVAILABLE: bool = True -except ImportError: - logging.info("PyProj n'est pas installé.") - pyproj = None - PYPROJ_IS_AVAILABLE: bool = False - -# -- GLOBALS -- - -# logs -logger = logging.getLogger(__name__) - -# -- FUNCTIONS -- - -def get_proj_version() -> str | None: - """Récupère la version installée de la bibliothèque PROJ. - - Credits: - Julien Moura (Geotribu) - - Returns: - str | None: La version de PROJ installée ou None si PROJ n'est pas trouvé. - """ - proj_version = None - - # from GDAL bindings - if osr is not None and PYTHON_GDAL_IS_AVAILABLE: - try: - proj_version = ( - f"{osr.GetPROJVersionMajor()}." - f"{osr.GetPROJVersionMinor()}." - f"{osr.GetPROJVersionMicro()}" - ) - logger.debug( - f"Version de PROJ obtenue depuis les bindings Python de GDAL : {proj_version}" - ) - return proj_version - except Exception: - pass - - # from PyProj - if pyproj is not None and PYPROJ_IS_AVAILABLE: - try: - proj_version = pyproj.__proj_version__ - logger.debug(f"Version de PROJ obtenue depuis PyProj : {proj_version}") - return proj_version - except Exception: - pass - - # from PROJ command-line - try: - # Exécute la commande "proj" en utilisant subprocess - result = check_output(["proj"], stderr=STDOUT, text=True) - - # Recherche de la version dans la sortie à l'aide d'une expression régulière - if version_match := re.search(r"Rel\. ([0-9.]+)", result): - proj_version = version_match.group(1) - logger.debug( - f"Version de PROJ obtenue depuis le binaire proj : {proj_version}" - ) - return proj_version - else: - logger.error( - "PROJ est bien installé mais impossible de trouver la version en regex." - ) - except FileNotFoundError as err: - logger.info(f"Proj n'est pas installé. Trace : {err}") - except CalledProcessError as err: - logger.info(f"Erreur lors de l'exécution de la commande : {err}") - - logging.warning( - "Impossible de déterminer la version de PROJ depuis les bindings GDAL, PyProj, " - "ou les binaires proj. " - ) - return proj_version - -if __name__ == "__main__": - """Standalone execution.""" - print(get_proj_version()) -``` +- que certains des [utilitaires packagés avec proj](https://proj.org/en/9.2/apps/index.html) disposent eux d'une option `--version` : `cct --version` et `gie --version`. Il y a donc une inchérence entre les différents CLI qu'il fait bon de mettre en lumière et résoudre. +- que la [demande ne date pas d'hier](https://github.com/OSGeo/PROJ/issues/2640) (mais qu'un malheureux bot avait occulté) +- que j'aurais pu creuser davantage quand j'ai regardé [comment pyproj se débrouille pour déterminer la version de PROJ](https://github.com/pyproj4/pyproj/blob/1452ba404be58c14a6b64d4551c320022f5aafcf/setup.py#L33-L53) + +Et surtout que l'open source communautaire, c'est fichtrement vertueux ! ---- From 4e1523911298525764319be6a22fef65aba298d6 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Fri, 21 Jul 2023 13:17:43 +0200 Subject: [PATCH 06/66] Fix sad copy paste --- ...ython-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md b/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md index c2f1d00eb4..161e714bc3 100644 --- a/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md +++ b/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md @@ -101,7 +101,7 @@ if version_match: ![logo open source](https://cdn.geotribu.fr/img/logos-icones/opensource.png){: .img-rdp-news-thumb } -En tout cas, ça valait le coup de demander autour de moi et auprès de mes collègues puisque Loïc Bartoletti a proposé d'inétgrer l'option `--version` à proj ! C'est dans cette [Pull Request]({: .img-rdp-news-thumb }) que ça se passe et on y apprend plein de choses : +En tout cas, ça valait le coup de demander autour de moi et auprès de mes collègues puisque Loïc Bartoletti a proposé d'inétgrer l'option `--version` à proj ! C'est dans cette [Pull Request](https://github.com/OSGeo/PROJ/pull/3836) que ça se passe et on y apprend plein de choses : - que certains des [utilitaires packagés avec proj](https://proj.org/en/9.2/apps/index.html) disposent eux d'une option `--version` : `cct --version` et `gie --version`. Il y a donc une inchérence entre les différents CLI qu'il fait bon de mettre en lumière et résoudre. - que la [demande ne date pas d'hier](https://github.com/OSGeo/PROJ/issues/2640) (mais qu'un malheureux bot avait occulté) From e41294b81de5b5b54bea8e2e91fcf4b2972f3271 Mon Sep 17 00:00:00 2001 From: Arnaud Vandecasteele Date: Mon, 24 Jul 2023 11:24:00 +0200 Subject: [PATCH 07/66] Coquilles article proj --- ...n-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md b/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md index 161e714bc3..472ff4a543 100644 --- a/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md +++ b/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md @@ -77,7 +77,7 @@ print( ![logo PROJ](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/proj.png){: .img-rdp-news-thumb } -Mais si on ne peut compter sur aucune des couches d'asbtraction précédentes, alors ça se corse. Il faut appeler l'exécutable de proj et se débrouiller avec la sortie par défaut puisqu'il n'y a pas d'option `--version` : +Mais si on ne peut compter sur aucune des couches d'abstraction précédentes, alors ça se corse. Il faut appeler l'exécutable de proj et se débrouiller avec la sortie par défaut puisqu'il n'y a pas d'option `--version` : ```sh > proj @@ -101,9 +101,9 @@ if version_match: ![logo open source](https://cdn.geotribu.fr/img/logos-icones/opensource.png){: .img-rdp-news-thumb } -En tout cas, ça valait le coup de demander autour de moi et auprès de mes collègues puisque Loïc Bartoletti a proposé d'inétgrer l'option `--version` à proj ! C'est dans cette [Pull Request](https://github.com/OSGeo/PROJ/pull/3836) que ça se passe et on y apprend plein de choses : +En tout cas, ça valait le coup de demander autour de moi et auprès de mes collègues puisque Loïc Bartoletti a proposé d'intégrer l'option `--version` à proj ! C'est dans cette [Pull Request](https://github.com/OSGeo/PROJ/pull/3836) que ça se passe et on y apprend plein de choses : -- que certains des [utilitaires packagés avec proj](https://proj.org/en/9.2/apps/index.html) disposent eux d'une option `--version` : `cct --version` et `gie --version`. Il y a donc une inchérence entre les différents CLI qu'il fait bon de mettre en lumière et résoudre. +- que certains des [utilitaires packagés avec proj](https://proj.org/en/9.2/apps/index.html) disposent eux d'une option `--version` : `cct --version` et `gie --version`. Il y a donc une incohérence entre les différents CLI qu'il fait bon de mettre en lumière et résoudre. - que la [demande ne date pas d'hier](https://github.com/OSGeo/PROJ/issues/2640) (mais qu'un malheureux bot avait occulté) - que j'aurais pu creuser davantage quand j'ai regardé [comment pyproj se débrouille pour déterminer la version de PROJ](https://github.com/pyproj4/pyproj/blob/1452ba404be58c14a6b64d4551c320022f5aafcf/setup.py#L33-L53) From 6d7578cdee06739a143a594a0a843fc32df592ef Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Mon, 24 Jul 2023 13:51:51 +0200 Subject: [PATCH 08/66] Ajout icone et sous-titre --- ...ython-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md b/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md index 472ff4a543..2d31aa0849 100644 --- a/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md +++ b/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md @@ -1,5 +1,7 @@ --- title: Obtenir la version de PROJ installée en Python +subtitle: "EPSG:8.2.1" +icon: material/spotlight authors: - Julien MOURA categories: From 4fe6f9183cde708e34af1251bd4d5bae07f20849 Mon Sep 17 00:00:00 2001 From: Julien Date: Mon, 24 Jul 2023 15:22:48 +0200 Subject: [PATCH 09/66] Update content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Loïc Bartoletti Signed-off-by: Julien --- ...ython-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md b/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md index 2d31aa0849..09bdbc114f 100644 --- a/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md +++ b/content/articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md @@ -1,6 +1,6 @@ --- title: Obtenir la version de PROJ installée en Python -subtitle: "EPSG:8.2.1" +subtitle: "EPSG:9.2.1" icon: material/spotlight authors: - Julien MOURA From 088d3e7b1376ac8cc790572c3c3dd6b091b844c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B8?= Date: Mon, 24 Jul 2023 21:17:57 +0200 Subject: [PATCH 10/66] En bref / Notes --- content/rdp/2023/rdp_2023-07-28.md | 31 +++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index 176c971930..ad3a4c7d9c 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -32,6 +32,8 @@ tags: ![logo geotribu orange](https://cdn.geotribu.fr/img/internal/charte/geotribu_logo_rectangle_384x80.png "logo geotribu orange"){: .off-glb style="border: none; box-shadow: none;" } {: align=middle } +:world_map: Julien vous explique comment [obtenir la version de PROJ installée via Python](articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire/) + ---- ## Sorties de la semaine @@ -40,10 +42,18 @@ tags: ## Logiciel +### Géocodage via PostGIS + + + ---- ## Représentation Cartographique +### Partez en vacances à l’étranger sans quitter l’Hexagone + + + ---- ## OpenStreetMap @@ -52,6 +62,10 @@ tags: ## Google +### Open Building en licences CC BY-4.0 et ODbL v1.0. + + + ---- ## Open Data @@ -60,12 +74,27 @@ tags: ## Geo-event +### Wébinaire Géorivière + + + ---- ## Divers +### Spatial Data Science + + + ---- ## En bref -- Annonces diverses +- [GDAL 3.7.1](https://lists.osgeo.org/pipermail/gdal-dev/2023-July/057455.html) +- [GeoNetwork 4.2.5](https://geonetwork-opensource.org/news.html#geonetwork-opensource-v4-2-5-released) +- [GeoTools 29.2](http://geotoolsnews.blogspot.com/2023/07/geotools-292-released.html) +- hebdoOSM [676](https://weeklyosm.eu/fr/archives/16583), [677](https://weeklyosm.eu/fr/archives/16591) et [678](https://weeklyosm.eu/fr/archives/16605) +- OpenStreetMap - [Pourquoi les conférences SotM sont-elles si importantes pour OSM ?](https://blog.openstreetmap.org/2023/07/07/why-state-of-the-map-conferences-are-so-important-to-osm/) +- [OTB release 8.1.2](https://www.orfeo-toolbox.org/otb-release-8-1-2/) +- [PostGIS 3.4.0 beta1](https://postgis.net/2023/07/PostGIS-3.4.0beta1/) +- [SAGA 9.1.0](https://sourceforge.net/p/saga-gis/news/2023/07/saga-910-released/) From fe61751f9b493301a5fc9e12267873a53490d0f6 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 24 Jul 2023 19:18:27 +0000 Subject: [PATCH 11/66] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automatiq?= =?UTF-8?q?ues=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/rdp/2023/rdp_2023-07-28.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index ad3a4c7d9c..0056c548e1 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -62,7 +62,7 @@ tags: ## Google -### Open Building en licences CC BY-4.0 et ODbL v1.0. +### Open Building en licences CC BY-4.0 et ODbL v1.0 From cfea8964632410030f450574279995bf6dc0eb14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B8?= Date: Tue, 25 Jul 2023 21:01:17 +0200 Subject: [PATCH 12/66] =?UTF-8?q?G=C3=A9ocodage=20PG/API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/rdp/2023/rdp_2023-07-28.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index 0056c548e1..66a7e271eb 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -42,9 +42,13 @@ tags: ## Logiciel -### Géocodage via PostGIS +### Géocodage depuis PostgreSQL/PostGIS et l'API de la BAN - +![logo PostGIS](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/postgis.jpg "logo PostGIS"){: .img-rdp-news-thumb } + +Difficile de ne pas vous parler de cet article d'A. Pasquier qui suite à la lecture d'un article de [Crunchy Data (Geocoding with Web APIs in Postgres)](https://www.crunchydata.com/blog/geocoding-with-web-apis-in-postgres) a eu la bonne idée d'adapter la recette pour [réaliser du géocodage directement depuis PotgreSQL/PostGIS en s'appuyant sur l'API de la BAN](https://pasq.fr/geocodage-directement-dans-postgis). + +Désolé, faut que je vous laisse je dois profiter du calme estival pour tester ;) ---- From 1d0baeb3f6c57ebe8087f2b36c591ada529256a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B8?= Date: Tue, 25 Jul 2023 21:19:35 +0200 Subject: [PATCH 13/66] =?UTF-8?q?Vacances=20=C3=A0=20l=E2=80=99=C3=A9trang?= =?UTF-8?q?er?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/rdp/2023/rdp_2023-07-28.md | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index 66a7e271eb..4f537d890e 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -10,9 +10,12 @@ image: "Image d'illustration de la RDP qui sert ensuite dans la mise en avant : license: default robots: index, follow tags: - - tag 1 - - tag 2 - - ... + - API + - BAN + - journalisme + - PostGIS + - vacances + - voyage --- # Revue de presse du 28 juillet 2023 @@ -56,7 +59,16 @@ Désolé, faut que je vous laisse je dois profiter du calme estival pour tester ### Partez en vacances à l’étranger sans quitter l’Hexagone - +![logo Le Monde](https://cdn.geotribu.fr/img/logos-icones/divers/lemonde.jpg "logo Le Monde"){: .img-rdp-news-thumb } + +> Comme 73 % des Français, vous envisagez de passer vos vacances dans l’Hexagone ? Grâce à notre carte, partez à Montréal, Bologne, Rhodes, Rabat ou au Caire sans passer les frontières. + +C'est ainsi que commence l'article de Pierre Breteau qui vous propose après avoir épluché les noms de nos 35 0000 communes +de [voyager dans différentes villes du monde sans quitter l'Hexagone](https://www.lemonde.fr/les-decodeurs/article/2023/07/10/partez-en-vacances-a-l-etranger-sans-quitter-l-hexagone-avec-notre-carte-des-villes-homonymes_6181306_4355770.html)! La liste joue avec 200 villes de 35 pays qui sont des correspondances ou des rapprochements approximatifs (on ne spoilera pas). + +Il vous suffit de choisir un pays pour que l'appli vous propose les villes associées ainsi qu'un itinéraire optimisé pour les découvrir (dans la limite de 30). + +![Partez en vacances à l’étranger sans quitter l’Hexagone](https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/le_monde_vacances_etranger.png){: .img-center loading=lazy } ---- From 9a40f536a2882d7c4527c1accab2b413eaf99c11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B8?= Date: Tue, 25 Jul 2023 21:26:13 +0200 Subject: [PATCH 14/66] Notes --- content/rdp/2023/rdp_2023-07-28.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index 4f537d890e..42e78f02f0 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -98,6 +98,10 @@ Il vous suffit de choisir un pays pour que l'appli vous propose les villes assoc ## Divers +### Bascule vers la Géoplateforme + + + ### Spatial Data Science @@ -110,6 +114,7 @@ Il vous suffit de choisir un pays pour que l'appli vous propose les villes assoc - [GeoNetwork 4.2.5](https://geonetwork-opensource.org/news.html#geonetwork-opensource-v4-2-5-released) - [GeoTools 29.2](http://geotoolsnews.blogspot.com/2023/07/geotools-292-released.html) - hebdoOSM [676](https://weeklyosm.eu/fr/archives/16583), [677](https://weeklyosm.eu/fr/archives/16591) et [678](https://weeklyosm.eu/fr/archives/16605) +- [IGN - Rapport d'activité 2022 - La transformation publique à l'institut vue par les équipes](https://www.ign.fr/sites/default/files/2023-07/AC230034-RA-2022-BD-WEB-Planche.pdf) - OpenStreetMap - [Pourquoi les conférences SotM sont-elles si importantes pour OSM ?](https://blog.openstreetmap.org/2023/07/07/why-state-of-the-map-conferences-are-so-important-to-osm/) - [OTB release 8.1.2](https://www.orfeo-toolbox.org/otb-release-8-1-2/) - [PostGIS 3.4.0 beta1](https://postgis.net/2023/07/PostGIS-3.4.0beta1/) From b52be4ca6d2c0064417a50c5cece519f3a30f8b2 Mon Sep 17 00:00:00 2001 From: Julien Date: Wed, 26 Jul 2023 16:28:09 +0200 Subject: [PATCH 15/66] =?UTF-8?q?Ajoute=20image=20en-t=C3=AAte=20=C3=A0=20?= =?UTF-8?q?la=20RDP=20du=2021=20mars=202014?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Julien --- content/rdp/2014/rdp_2014-03-21.md | 1 + 1 file changed, 1 insertion(+) diff --git a/content/rdp/2014/rdp_2014-03-21.md b/content/rdp/2014/rdp_2014-03-21.md index 35dd7c9097..afd3f783f3 100644 --- a/content/rdp/2014/rdp_2014-03-21.md +++ b/content/rdp/2014/rdp_2014-03-21.md @@ -6,6 +6,7 @@ categories: - revue de presse date: 2014-03-21 description: "Revue de presse du 21 mars 2014" +image: https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/dessine-toulouse.png tags: - 3D - IGN From c1164ac83d8c10e38707ed42fb107901031609af Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Wed, 26 Jul 2023 19:46:39 +0200 Subject: [PATCH 16/66] Extrait le bloc de licence dans un partial --- content/theme/main.html | 26 +------------ content/theme/partials/license.html | 60 +++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+), 25 deletions(-) create mode 100644 content/theme/partials/license.html diff --git a/content/theme/main.html b/content/theme/main.html index 818d72dca6..769ed5d8ef 100644 --- a/content/theme/main.html +++ b/content/theme/main.html @@ -192,29 +192,5 @@ {% block content %} {{ super() }} -{# License #} -{% if not page.is_homepage and ("license" not in page.meta or page.meta.license == "default") %} -
-
- -

- Ce contenu est sous licence Creative Commons - BY-NC-SA 4.0 International - Pictogramme Creative Commons - Pictogramme Creative Commons BY - Pictogramme Creative Commons NC - Pictogramme Creative Commons SA - -

-
-
-{% endif %} +{% include "partials/license.html" %} {% endblock %} diff --git a/content/theme/partials/license.html b/content/theme/partials/license.html new file mode 100644 index 0000000000..614d250fdf --- /dev/null +++ b/content/theme/partials/license.html @@ -0,0 +1,60 @@ +{# License #} +{% if not page.is_homepage %} +
+{% if ("license" not in page.meta or page.meta.license == "default" or page.meta.license == "cc4_by-nc-sa") %} +
+ +

+ Ce contenu est sous licence Creative Commons + BY-NC-SA 4.0 International + Pictogramme Creative Commons + Pictogramme Creative Commons BY + Pictogramme Creative Commons NC + Pictogramme Creative Commons SA + +

+
+
+
+{% elif page.meta.license == "cc4_by-sa" %} +
+ +

+ Ce contenu est sous licence Creative Commons + BY-SA 4.0 International + Pictogramme Creative Commons + Pictogramme Creative Commons BY + Pictogramme Creative Commons SA + +

+
+
+{% elif page.meta.license == "beerware" %} +
+ +

+ Ce contenu est sous licence + Beerware + Pictogramme BeerWare + +

+
+ +{% endif %} +{% endif %} From fc3f414e652a93fd4f4eba1a3f328a3b363f758f Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Wed, 26 Jul 2023 20:00:59 +0200 Subject: [PATCH 17/66] Use CDN images --- content/theme/partials/license.html | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/content/theme/partials/license.html b/content/theme/partials/license.html index 614d250fdf..bcc50d1985 100644 --- a/content/theme/partials/license.html +++ b/content/theme/partials/license.html @@ -8,15 +8,15 @@ Ce contenu est sous licence Creative Commons BY-NC-SA 4.0 International - Pictogramme Creative Commons - Pictogramme Creative Commons BY - Pictogramme Creative Commons NC - Pictogramme Creative Commons SA @@ -31,12 +31,12 @@ Ce contenu est sous licence Creative Commons BY-SA 4.0 International - Pictogramme Creative Commons - Pictogramme Creative Commons BY - Pictogramme Creative Commons SA @@ -50,7 +50,7 @@ Ce contenu est sous licence Beerware - Pictogramme BeerWare

From b3497a8b20f4e7f2ea683e4993379e3c28d2917e Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Wed, 26 Jul 2023 20:01:19 +0200 Subject: [PATCH 18/66] Corrige le lien vers la syntaxe Markdown --- content/theme/partials/comments.html | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/content/theme/partials/comments.html b/content/theme/partials/comments.html index 4d730d59ec..83878ab4ca 100644 --- a/content/theme/partials/comments.html +++ b/content/theme/partials/comments.html @@ -6,10 +6,17 @@

{{ lang.t("meta.comments") }}


- Une version minimale de la syntaxe - markdown est - acceptée pour la mise en forme des commentaires.
Propulsé par Isso.
+ Une version minimale de la + syntaxe markdown + + est acceptée pour la mise en forme des commentaires. +
+ Propulsé par Isso. +
{% endif %} From 837db738283e6002d0ab404666c45cb103c2d6b0 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Wed, 26 Jul 2023 20:08:52 +0200 Subject: [PATCH 19/66] Format and rm duplicated hr --- content/theme/partials/license.html | 105 ++++++++++++++-------------- 1 file changed, 52 insertions(+), 53 deletions(-) diff --git a/content/theme/partials/license.html b/content/theme/partials/license.html index bcc50d1985..2a91dff9b7 100644 --- a/content/theme/partials/license.html +++ b/content/theme/partials/license.html @@ -1,60 +1,59 @@ {# License #} {% if not page.is_homepage %} -
-{% if ("license" not in page.meta or page.meta.license == "default" or page.meta.license == "cc4_by-nc-sa") %} -
+
+ {% if ("license" not in page.meta or page.meta.license == "default" or page.meta.license == "cc4_by-nc-sa") %} +
+ +

+ Ce contenu est sous licence Creative Commons + BY-NC-SA 4.0 International + Pictogramme Creative Commons + Pictogramme Creative Commons BY + Pictogramme Creative Commons NC + Pictogramme Creative Commons SA + +

+
+
+ {% elif page.meta.license == "cc4_by-sa" %} +
+ +

+ Ce contenu est sous licence Creative Commons + BY-SA 4.0 International + Pictogramme Creative Commons + Pictogramme Creative Commons BY + Pictogramme Creative Commons SA + +

+
+
+ {% elif page.meta.license == "beerware" %} +
-

- Ce contenu est sous licence Creative Commons - BY-NC-SA 4.0 International - Pictogramme Creative Commons - Pictogramme Creative Commons BY - Pictogramme Creative Commons NC - Pictogramme Creative Commons SA +

+ Ce contenu est sous licence + Beerware + Pictogramme BeerWare

-
-
-{% elif page.meta.license == "cc4_by-sa" %} -
- -

- Ce contenu est sous licence Creative Commons - BY-SA 4.0 International - Pictogramme Creative Commons - Pictogramme Creative Commons BY - Pictogramme Creative Commons SA - -

-
-
-{% elif page.meta.license == "beerware" %} -
- -

- Ce contenu est sous licence - Beerware - Pictogramme BeerWare - -

-
- -{% endif %} + + {% endif %} {% endif %} From ff08fd6fb160114ffea00103104373f619668305 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Wed, 26 Jul 2023 20:09:02 +0200 Subject: [PATCH 20/66] Consider HTML as jinja --- .vscode/settings.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 4f8f209743..f20c346603 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,7 +4,8 @@ "editor.guides.bracketPairs": "active", "files.associations": { "./requirements*.txt": "pip-requirements", - ".linkcheckrrc": "ini" + ".linkcheckrrc": "ini", + "*.html": "jinja" }, "editor.formatOnSave": true, "editor.codeActionsOnSave": { From 542842af5f8c8a5cfadd1d2feb0b96ac61e422ef Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Wed, 26 Jul 2023 20:21:08 +0200 Subject: [PATCH 21/66] Ajout notice pseudonymat --- content/team/confidentialite.md | 2 ++ content/theme/partials/comments.html | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/content/team/confidentialite.md b/content/team/confidentialite.md index 8c324259f6..910bfa7067 100644 --- a/content/team/confidentialite.md +++ b/content/team/confidentialite.md @@ -100,6 +100,8 @@ Néanmoins, les commentaires sont publics et certaines données sont enregistré - le site web (optionnel) renseigné - l'adresse IP lors de la soumission du formulaire +Afin de favoriser les échanges constructifs, merci de préférer le [pseudonymat](https://fr.wikipedia.org/wiki/Pseudonymat) à l'anonymat, en renseignant a minima une de vos adresses emails valable. + [Consulter l'article sur la migration vers Isso](/articles/2021/2021-05-14_commentaires_migration_disqus_isso/){: .md-button } {: align=middle } diff --git a/content/theme/partials/comments.html b/content/theme/partials/comments.html index 83878ab4ca..46cc592e63 100644 --- a/content/theme/partials/comments.html +++ b/content/theme/partials/comments.html @@ -6,6 +6,8 @@

{{ lang.t("meta.comments") }}


+ Afin de favoriser les échanges constructifs, merci de préférer le pseudonymat à l'anonymat. Pour rappel, l'adresse mail n'est pas exposée publiquement. Consulter la page sur la confidentialité et les données personnelles. +
Une version minimale de la {{ lang.t("meta.comments") }} Propulsé par Isso.
- + {% endif %} From 732f0cb4ed4e99f9c9cb7bda08fed2fc8ba02991 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Wed, 26 Jul 2023 21:00:49 +0200 Subject: [PATCH 22/66] Change xlmns attr --- content/theme/partials/license.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/theme/partials/license.html b/content/theme/partials/license.html index 2a91dff9b7..f56692f347 100644 --- a/content/theme/partials/license.html +++ b/content/theme/partials/license.html @@ -45,7 +45,7 @@ {% elif page.meta.license == "beerware" %}
-

+

Ce contenu est sous licence Beerware From 53d2fb075ce9e4c66629e85b4821b14e1f6f83e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B8?= Date: Wed, 26 Jul 2023 21:23:02 +0200 Subject: [PATCH 23/66] Update rdp_2023-07-28.md --- content/rdp/2023/rdp_2023-07-28.md | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index 42e78f02f0..8f31911681 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -13,7 +13,9 @@ tags: - API - BAN - journalisme + - livre - PostGIS + - R - vacances - voyage --- @@ -104,7 +106,17 @@ Il vous suffit de choisir un pays pour que l'appli vous propose les villes assoc ### Spatial Data Science - +![icône livre](https://cdn.geotribu.fr/img/logos-icones/divers/livre.png "Logo livre"){: .img-rdp-news-thumb } + +Un [livre de Edzer Pebesma et Roger Bivand vient de paraitre avec pour titre "La science des données spatiales - Des applications avec R"](https://r-spatial.org/book/). De quoi intéresser nos lectrices et lecteurs "R centré(e)s" ! + +Les données utilisées et tous les exemples de code sont disponibles gratuitement en ligne sur et les solutions aux exercices peuvent être trouvées ici : . + +> Spatial Data Science introduces fundamental aspects of spatial data that every data scientist should know before they start working with spatial data. These aspects include how geometries are represented, coordinate reference systems (projections, datums), the fact that the Earth is round and its consequences for analysis, and how attributes of geometries can relate to geometries. In the second part of the book, these concepts are illustrated with data science examples using the R language. In the third part, statistical modelling approaches are demonstrated using real world data examples. After reading this book, the reader will be well equipped to avoid a number of major spatial data analysis errors. + +> The book gives a detailed explanation of the core spatial software packages for R: sf for simple feature access, and stars for raster and vector data cubes – array data with spatial and temporal dimensions. It also shows how geometrical operations change when going from a flat space to the surface of a sphere, which is what sf and stars use when coordinates are not projected (degrees longitude/latitude). Separate chapters detail a variety of plotting approaches for spatial maps using R, and different ways of handling very large vector or raster (imagery) datasets, locally, in databases, or in the cloud. + +![Spatial Data Science - With Applications in R](https://cdn.geotribu.fr/img/articles-blog-rdp/livres/spatial_data_science.jpg){: .img-center loading=lazy } ---- From 99e2533f0144421ddddf7028e55cbd50bf861afd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B8?= Date: Wed, 26 Jul 2023 21:25:56 +0200 Subject: [PATCH 24/66] En bref / Corr --- content/rdp/2023/rdp_2023-07-28.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index 8f31911681..0dbbaecede 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -104,11 +104,11 @@ Il vous suffit de choisir un pays pour que l'appli vous propose les villes assoc -### Spatial Data Science +### Spatial Data Science - With Applications in R ![icône livre](https://cdn.geotribu.fr/img/logos-icones/divers/livre.png "Logo livre"){: .img-rdp-news-thumb } -Un [livre de Edzer Pebesma et Roger Bivand vient de paraitre avec pour titre "La science des données spatiales - Des applications avec R"](https://r-spatial.org/book/). De quoi intéresser nos lectrices et lecteurs "R centré(e)s" ! +Un [livre de Edzer Pebesma et Roger Bivand vient de paraitre avec pour titre « Spatial Data Science - With Applications in R »](https://r-spatial.org/book/). De quoi intéresser nos lectrices et lecteurs "R centré(e)s" ! Les données utilisées et tous les exemples de code sont disponibles gratuitement en ligne sur et les solutions aux exercices peuvent être trouvées ici : . @@ -122,6 +122,7 @@ Les données utilisées et tous les exemples de code sont disponibles gratuiteme ## En bref +- [Gaël Musquet : « La donnée produite par la puissance publique devait revenir au public »](https://www.urbanisme.fr/invite/gael-musquet-la-donnee-produite-par-la-puissance-publique-devait-revenir-au-public/) - [GDAL 3.7.1](https://lists.osgeo.org/pipermail/gdal-dev/2023-July/057455.html) - [GeoNetwork 4.2.5](https://geonetwork-opensource.org/news.html#geonetwork-opensource-v4-2-5-released) - [GeoTools 29.2](http://geotoolsnews.blogspot.com/2023/07/geotools-292-released.html) From c209c3b6649b771904e5b666c161a399f992666f Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Wed, 26 Jul 2023 21:36:17 +0200 Subject: [PATCH 25/66] Utilise la classe footnote pour le texte des commentaires --- content/theme/partials/comments.html | 31 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/content/theme/partials/comments.html b/content/theme/partials/comments.html index 46cc592e63..95a6e8cc68 100644 --- a/content/theme/partials/comments.html +++ b/content/theme/partials/comments.html @@ -3,22 +3,23 @@

{{ lang.t("meta.comments") }}

-
+
+ Afin de favoriser les échanges constructifs, merci de préférer le pseudonymat à l'anonymat. Pour rappel, l'adresse mail n'est pas exposée publiquement. Consulter la page sur la confidentialité et les données personnelles. +
+ Une version minimale de la + syntaxe markdown + + est acceptée pour la mise en forme des commentaires. +
+ Propulsé par Isso. +
+
- - Afin de favoriser les échanges constructifs, merci de préférer le pseudonymat à l'anonymat. Pour rappel, l'adresse mail n'est pas exposée publiquement. Consulter la page sur la confidentialité et les données personnelles. -
- Une version minimale de la - syntaxe markdown - - est acceptée pour la mise en forme des commentaires. -
- Propulsé par Isso. -
+
{% endif %} From 43a32ee19769fe7d8cb33cbd05bede6eb5dc0541 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B8?= Date: Wed, 26 Jul 2023 21:51:40 +0200 Subject: [PATCH 26/66] =?UTF-8?q?G=C3=A9oplateforme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/rdp/2023/rdp_2023-07-28.md | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index 0dbbaecede..49978bd212 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -102,7 +102,31 @@ Il vous suffit de choisir un pays pour que l'appli vous propose les villes assoc ### Bascule vers la Géoplateforme - +![icône IGN](https://cdn.geotribu.fr/img/logos-icones/entreprises_association/ign.png "IGN"){: .img-rdp-news-thumb } + +Préparez-vous ça va bouger du côté de l'IGN avec une [bascule des géoservices du Géoportail vers les géoservices de la Géoplateforme](https://geoservices.ign.fr/bascule-vers-la-geoplateforme) ! En effet, d'après l'annonce entre septembre et le 31 décembre 2023, date d’arrêt de l’infrastructure du Géoportail, il faudra suivre de près le calendrier ci-dessous et anticiper les évolutions à venir. + +![Bascule vers la Géoplateforme](https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/ign_planningbascule_v16_0.png){: .img-center loading=lazy } + +Parmi les principaux changements annoncés : + +- Changements d’URL + - Les URL d’accès aux géoservices changent + - L’usage du protocole HTTPS / TLS 1.2 est imposé pour accéder aux géoservices, sans exception possible + - Les géoservices ne sont plus accessibles via le Réseau Interministériel de l’État (RIE) + +- Changements du contrôle d’accès + - Les actuelles « clés » Géoportail (personnelles et publiques) disparaissent, elles sont remplacées par un nouveau mécanisme de contrôle des accès sur les données non libres + - Pour les données à accès restreint (par exemple pour les SCAN 25®, SCAN 100® et SCAN OACI de l’IGN), un nouveau mécanisme de diffusion sera mis en place + - Par défaut, tout devient open source et accessible librement + +- Principaux changements de certains géoservices + - Les géoservices exposant des standards OGC n'exposent plus que la dernière version : + - WMS 1.1 n’est plus supporté (seulement le 1.3) + - WFS 1.0 n’est plus supporté (seulement le 2.0) + - Le service d’auto-configuration disparaît (l’API JavaScript est adaptée en conséquence) (lien vers article ici) + - Les flux INSPIRE intègrent les flux génériques de la Géoplateforme + - Les services de téléchargement (via le site Géoservices) et de diffusion de données anciennes (via le site Remonter Le Temps) évoluent sans conservation des interfaces API actuelles ### Spatial Data Science - With Applications in R @@ -110,7 +134,7 @@ Il vous suffit de choisir un pays pour que l'appli vous propose les villes assoc Un [livre de Edzer Pebesma et Roger Bivand vient de paraitre avec pour titre « Spatial Data Science - With Applications in R »](https://r-spatial.org/book/). De quoi intéresser nos lectrices et lecteurs "R centré(e)s" ! -Les données utilisées et tous les exemples de code sont disponibles gratuitement en ligne sur et les solutions aux exercices peuvent être trouvées ici : . +Les données utilisées et tous les exemples de code sont disponibles gratuitement en ligne sur : et les solutions aux exercices peuvent être trouvées ici : . > Spatial Data Science introduces fundamental aspects of spatial data that every data scientist should know before they start working with spatial data. These aspects include how geometries are represented, coordinate reference systems (projections, datums), the fact that the Earth is round and its consequences for analysis, and how attributes of geometries can relate to geometries. In the second part of the book, these concepts are illustrated with data science examples using the R language. In the third part, statistical modelling approaches are demonstrated using real world data examples. After reading this book, the reader will be well equipped to avoid a number of major spatial data analysis errors. From 4d37f556a94e03a8030fb09e9f8d3236a48bc858 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B8?= Date: Wed, 26 Jul 2023 21:55:26 +0200 Subject: [PATCH 27/66] Corr --- content/rdp/2023/rdp_2023-07-28.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index 49978bd212..21bb5653bb 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -137,8 +137,7 @@ Un [livre de Edzer Pebesma et Roger Bivand vient de paraitre avec pour titre « Les données utilisées et tous les exemples de code sont disponibles gratuitement en ligne sur : et les solutions aux exercices peuvent être trouvées ici : . > Spatial Data Science introduces fundamental aspects of spatial data that every data scientist should know before they start working with spatial data. These aspects include how geometries are represented, coordinate reference systems (projections, datums), the fact that the Earth is round and its consequences for analysis, and how attributes of geometries can relate to geometries. In the second part of the book, these concepts are illustrated with data science examples using the R language. In the third part, statistical modelling approaches are demonstrated using real world data examples. After reading this book, the reader will be well equipped to avoid a number of major spatial data analysis errors. - -> The book gives a detailed explanation of the core spatial software packages for R: sf for simple feature access, and stars for raster and vector data cubes – array data with spatial and temporal dimensions. It also shows how geometrical operations change when going from a flat space to the surface of a sphere, which is what sf and stars use when coordinates are not projected (degrees longitude/latitude). Separate chapters detail a variety of plotting approaches for spatial maps using R, and different ways of handling very large vector or raster (imagery) datasets, locally, in databases, or in the cloud. +The book gives a detailed explanation of the core spatial software packages for R: sf for simple feature access, and stars for raster and vector data cubes – array data with spatial and temporal dimensions. It also shows how geometrical operations change when going from a flat space to the surface of a sphere, which is what sf and stars use when coordinates are not projected (degrees longitude/latitude). Separate chapters detail a variety of plotting approaches for spatial maps using R, and different ways of handling very large vector or raster (imagery) datasets, locally, in databases, or in the cloud. ![Spatial Data Science - With Applications in R](https://cdn.geotribu.fr/img/articles-blog-rdp/livres/spatial_data_science.jpg){: .img-center loading=lazy } From f07bd73849b5a1aef2354918c6f6ab8f0fcbc730 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B8?= Date: Wed, 26 Jul 2023 21:56:45 +0200 Subject: [PATCH 28/66] Corr indentation --- content/rdp/2023/rdp_2023-07-28.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index 21bb5653bb..5232c56e64 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -122,8 +122,8 @@ Parmi les principaux changements annoncés : - Principaux changements de certains géoservices - Les géoservices exposant des standards OGC n'exposent plus que la dernière version : - - WMS 1.1 n’est plus supporté (seulement le 1.3) - - WFS 1.0 n’est plus supporté (seulement le 2.0) + - WMS 1.1 n’est plus supporté (seulement le 1.3) + - WFS 1.0 n’est plus supporté (seulement le 2.0) - Le service d’auto-configuration disparaît (l’API JavaScript est adaptée en conséquence) (lien vers article ici) - Les flux INSPIRE intègrent les flux génériques de la Géoplateforme - Les services de téléchargement (via le site Géoservices) et de diffusion de données anciennes (via le site Remonter Le Temps) évoluent sans conservation des interfaces API actuelles From 319c6891b04613f4d9a852938f41a9499acd28c4 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Thu, 4 May 2023 23:02:23 +0200 Subject: [PATCH 29/66] Active les cartes de partage automatiques --- mkdocs.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index faaee8d69b..3950c40138 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -138,12 +138,17 @@ plugins: - boundlessgeo.com/* - i3.codeplex.com/* - drfhlmcehrc34.cloudfront.net/* + - social: + cards: !ENV [MKDOCS_ENABLE_PLUGIN_CARDS, true] + cards_color: + fill: "#3e93a7" + cards_font: Ubuntu # Theme theme: name: "material" custom_dir: "./content/theme/" - favicon: "https://cdn.geotribu.fr/img/internal/charte/geotribu_logo_64x64.png" + favicon: theme/assets/images/geotribu/logo_geotribu.png # Don't include MkDocs' JavaScript include_search_page: false @@ -166,7 +171,7 @@ theme: - toc.follow font: false language: fr - logo: "https://cdn.geotribu.fr/img/internal/charte/geotribu_logo_64x64.png" + logo: theme/assets/images/geotribu/logo_geotribu.png palette: # Palette toggle for automatic mode - media: "(prefers-color-scheme)" From 11b8e19913564cd347eb0f5b67c71322b0560e1c Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Thu, 20 Jul 2023 00:48:14 +0200 Subject: [PATCH 30/66] Bump theme version --- requirements-insiders.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-insiders.txt b/requirements-insiders.txt index b47a6d2f4c..bfcf356fa6 100644 --- a/requirements-insiders.txt +++ b/requirements-insiders.txt @@ -1,7 +1,7 @@ # Insiders # -------- -git+https://${GH_TOKEN_MATERIAL_INSIDERS}@github.com/squidfunk/mkdocs-material-insiders.git@9.1.16-insiders-4.36.0#egg=mkdocs-material +git+https://${GH_TOKEN_MATERIAL_INSIDERS}@github.com/squidfunk/mkdocs-material-insiders.git@9.1.18-insiders-4.37.0#egg=mkdocs-material # git+https://${GH_TOKEN_MATERIAL_INSIDERS}@github.com/squidfunk/mkdocs-material-insiders.git mkdocs-git-committers-plugin-2>=1,<2 From 85564dd2a99e848cca2d9305ffb390455693b0a3 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Thu, 20 Jul 2023 00:48:39 +0200 Subject: [PATCH 31/66] Use new social plugin config --- mkdocs.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 3950c40138..3a76114a8a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -140,9 +140,10 @@ plugins: - drfhlmcehrc34.cloudfront.net/* - social: cards: !ENV [MKDOCS_ENABLE_PLUGIN_CARDS, true] - cards_color: - fill: "#3e93a7" - cards_font: Ubuntu + cards_layout_options: + cards_color: + fill: "#3e93a7" + cards_font: Ubuntu # Theme theme: From 91a9a1265c96de3a2bd218d98cb9487c5b58e9b7 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Thu, 20 Jul 2023 00:51:34 +0200 Subject: [PATCH 32/66] Add dependencies of social plugin --- requirements.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/requirements.txt b/requirements.txt index a30205fe1b..c57f4e8763 100644 --- a/requirements.txt +++ b/requirements.txt @@ -22,3 +22,7 @@ mkdocs-macros-plugin>=0.5,<1.1 mkdocs-minify-plugin<0.7 mkdocs-redirects<1.3 mkdocs-rss-plugin>=1.4,<1.8 + +# social plugin requirements +CairoSVG>=2.5,<3 +Pillow>=9.4,<9.6 From 512124df60e78ba690ddfe0a4cd9643c9b1bc646 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Thu, 20 Jul 2023 01:04:13 +0200 Subject: [PATCH 33/66] Rm custom opengraph and twitter images cards --- content/theme/main.html | 2 -- 1 file changed, 2 deletions(-) diff --git a/content/theme/main.html b/content/theme/main.html index 769ed5d8ef..6218b79746 100644 --- a/content/theme/main.html +++ b/content/theme/main.html @@ -66,7 +66,6 @@ {# OpenGraph #} - @@ -76,7 +75,6 @@ - From 3b2ff24a4206209188514f4f2ab0b102f243e86d Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Wed, 26 Jul 2023 22:17:57 +0200 Subject: [PATCH 34/66] =?UTF-8?q?Am=C3=A9liore=20la=20configuration=20du?= =?UTF-8?q?=20plugin=20social?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mkdocs.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 3a76114a8a..dfe071a429 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -141,9 +141,10 @@ plugins: - social: cards: !ENV [MKDOCS_ENABLE_PLUGIN_CARDS, true] cards_layout_options: - cards_color: - fill: "#3e93a7" - cards_font: Ubuntu + background_color: "#00000000" + background_image: content/theme/assets/images/geotribu/background_geotribu.png + color: "#3e93a7" + font_family: Ubuntu # Theme theme: From 66f1c1305eb1ece148a33108af882fccfe3fefc9 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Wed, 26 Jul 2023 23:09:42 +0200 Subject: [PATCH 35/66] Add background image --- .gitignore | 1 + .../images/geotribu/background_geotribu.png | Bin 0 -> 175441 bytes 2 files changed, 1 insertion(+) create mode 100644 content/theme/assets/images/geotribu/background_geotribu.png diff --git a/.gitignore b/.gitignore index d31a1024d9..4dcd58c2e3 100644 --- a/.gitignore +++ b/.gitignore @@ -228,3 +228,4 @@ authors.json md_linter_report.txt config/extra_latest.yml linkchecker_report.html +!content/theme/assets/images/geotribu/background_geotribu.png diff --git a/content/theme/assets/images/geotribu/background_geotribu.png b/content/theme/assets/images/geotribu/background_geotribu.png new file mode 100644 index 0000000000000000000000000000000000000000..a7cc6cf7a077a1d4686098a6381b4eeb2e7eb156 GIT binary patch literal 175441 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

c{NY~5O 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 BK==Rv literal 0 HcmV?d00001 From 5c17255e782f72663684f205d649ba61943ba879 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Wed, 26 Jul 2023 23:10:56 +0200 Subject: [PATCH 36/66] Add hook to patch page.meta when image is not set --- hooks/mkdocs/G003_social_cards_adapter.py | 96 +++++++++++++++++++++++ mkdocs.yml | 1 + 2 files changed, 97 insertions(+) create mode 100644 hooks/mkdocs/G003_social_cards_adapter.py diff --git a/hooks/mkdocs/G003_social_cards_adapter.py b/hooks/mkdocs/G003_social_cards_adapter.py new file mode 100644 index 0000000000..c2ad0c7209 --- /dev/null +++ b/hooks/mkdocs/G003_social_cards_adapter.py @@ -0,0 +1,96 @@ +#! python3 # noqa: E265 + +"""Script joué au chargement du contenu markdown de chaque page (hook). + +Contexte : + + Le thème Material for Mkdocs intègre un plugin (social) qui permet de générer + automatiquement une image pour chaque page en croisant différents éléments + (métadonnées de la page et éléments graphiques de base). + Mais le fonctionnement est très générique (normal) et entre en conflit avec la gestion + des en-têtes du site Geotribu. + +Objectifs : + + - quand une image n'est pas définie sur une page, patcher l'en-tête pour + y insérer la configuration du plugin social de sorte qu'il génère une image + et qu'on la référence + - quand une image est définie manuellement, patcher l'en-tête pour + y insérer la configuration du plugin social de sorte qu'il utilise l'image sans rien toucher + +""" + +# ############################################################################ +# ########## Libraries ############# +# ################################## + +# standard library +import logging +from typing import Optional + +# Mkdocs +import mkdocs.plugins +from material.plugins.social.plugin import SocialPlugin +from mkdocs.config.defaults import MkDocsConfig +from mkdocs.structure.files import Files +from mkdocs.structure.pages import Page + +# ########################################################################### +# ########## Global ################ +# ################################## + +logger = logging.getLogger("mkdocs") + +# ########################################################################### +# ########## Functions ############# +# ################################## + + +@mkdocs.plugins.event_priority(50) +def on_page_markdown( + markdown: str, *, page: Page, config: MkDocsConfig, files: Files +) -> Optional[str]: + """ + The `page_markdown` event is called after the page's markdown is loaded + from file and can be used to alter the Markdown source text. The meta- + data has been stripped off and is available as `page.meta` at this point. + + Parameters: + markdown: Markdown source text of page as string + page: `mkdocs.structure.pages.Page` instance + config: global configuration object + files: global files collection + + Returns: + Markdown source text of page as string + """ + if not config.plugins.get("material/social"): + logger.warning("Le plugin social du thème Material n'est pas présent") + return + + social_plugin: SocialPlugin = config.plugins.get("material/social") + + if page.meta.get("image") is None or page.meta.get("image") == "": + social_card_url = ( + f"{config.site_url}assets/images/social{page.abs_url[:-1]}.png" + ) + logger.info( + f"{page.abs_url} n'a pas d'image. Une 'social card' sera automatiquement générée : {social_card_url}" + ) + page.meta["image"] = social_card_url + page.meta["social"] = { + "cards": True, + "cards_layout_options": { + "background_color": social_plugin.config.cards_layout_options.get( + "background_color" + ), + "background_image": social_plugin.config.cards_layout_options.get( + "background_image", + "content/theme/assets/images/geotribu/background_geotribu.png", + ), + "color": social_plugin.config.cards_layout_options.get("color"), + "font_family": social_plugin.config.cards_layout_options.get( + "font_family" + ), + }, + } diff --git a/mkdocs.yml b/mkdocs.yml index dfe071a429..84346d136c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -23,6 +23,7 @@ site_dir: !ENV [MKDOCS_OUTPUT_DIR, "./build/mkdocs/site"] hooks: - hooks/mkdocs/G001_check_hyperlinks_internal.py # - hooks/mkdocs/G002_check_images_size.py + - hooks/mkdocs/G003_social_cards_adapter.py # Plugins plugins: From 089a9367929ecfa2297555d9756152d4836941c2 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Wed, 26 Jul 2023 23:28:23 +0200 Subject: [PATCH 37/66] Improve script --- hooks/mkdocs/G003_social_cards_adapter.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/hooks/mkdocs/G003_social_cards_adapter.py b/hooks/mkdocs/G003_social_cards_adapter.py index c2ad0c7209..cf2efcfe96 100644 --- a/hooks/mkdocs/G003_social_cards_adapter.py +++ b/hooks/mkdocs/G003_social_cards_adapter.py @@ -29,9 +29,9 @@ from typing import Optional # Mkdocs -import mkdocs.plugins from material.plugins.social.plugin import SocialPlugin from mkdocs.config.defaults import MkDocsConfig +from mkdocs.plugins import event_priority from mkdocs.structure.files import Files from mkdocs.structure.pages import Page @@ -46,7 +46,7 @@ # ################################## -@mkdocs.plugins.event_priority(50) +@event_priority(50) def on_page_markdown( markdown: str, *, page: Page, config: MkDocsConfig, files: Files ) -> Optional[str]: @@ -64,6 +64,10 @@ def on_page_markdown( Returns: Markdown source text of page as string """ + # exclude homepage + if page.is_homepage: + return + if not config.plugins.get("material/social"): logger.warning("Le plugin social du thème Material n'est pas présent") return @@ -74,7 +78,7 @@ def on_page_markdown( social_card_url = ( f"{config.site_url}assets/images/social{page.abs_url[:-1]}.png" ) - logger.info( + logger.debug( f"{page.abs_url} n'a pas d'image. Une 'social card' sera automatiquement générée : {social_card_url}" ) page.meta["image"] = social_card_url @@ -94,3 +98,15 @@ def on_page_markdown( ), }, } + else: + logger.debug( + f"{page.abs_url} a une image paramétrée. Désactivation du plugin social sur la page." + ) + page.meta["social"] = { + "cards": False, + # TODO: les lignes suivantes pourront être réactivées quand le plugin social gèrera les images distantes + # "cards_layout": "default/only/image", + # "cards_layout_options": { + # "background_image": page.meta.get("image"), + # }, + } From 36b6be549d64226f47bbc7c71956e823ca722e90 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Thu, 27 Jul 2023 00:00:38 +0200 Subject: [PATCH 38/66] =?UTF-8?q?Adapte=20le=20template=20si=20la=20page?= =?UTF-8?q?=20a=20une=20ic=C3=B4ne?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hooks/mkdocs/G003_social_cards_adapter.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/hooks/mkdocs/G003_social_cards_adapter.py b/hooks/mkdocs/G003_social_cards_adapter.py index cf2efcfe96..2580c819b8 100644 --- a/hooks/mkdocs/G003_social_cards_adapter.py +++ b/hooks/mkdocs/G003_social_cards_adapter.py @@ -26,6 +26,7 @@ # standard library import logging +from pathlib import Path from typing import Optional # Mkdocs @@ -40,6 +41,7 @@ # ################################## logger = logging.getLogger("mkdocs") +hook_name = Path(__file__).stem # ########################################################################### # ########## Functions ############# @@ -81,9 +83,24 @@ def on_page_markdown( logger.debug( f"{page.abs_url} n'a pas d'image. Une 'social card' sera automatiquement générée : {social_card_url}" ) + + # si la page a une icône, on adapte le template de l'image + # ref : https://squidfunk.github.io/mkdocs-material/reference#setting-the-page-icon + if page.meta.get("icon"): + cards_layout = "default/variant" + logger.info( + f"[{hook_name}] La page {page.abs_url} a une icône définie " + f"({page.meta.get('icon')}). Dans ce cas, le modèle de social " + f"card est : {cards_layout}" + ) + else: + cards_layout = social_plugin.config.cards_layout + + # page.meta["image"] = social_card_url page.meta["social"] = { "cards": True, + "cards_layout": cards_layout, "cards_layout_options": { "background_color": social_plugin.config.cards_layout_options.get( "background_color" From 3667b0e24ddb0a069e24c3300f81f28861ffa042 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Thu, 27 Jul 2023 00:01:17 +0200 Subject: [PATCH 39/66] =?UTF-8?q?Ignore=20le=20hook=20si=20le=20plugin=20s?= =?UTF-8?q?ocial=20ou=20sa=20fonction=20cards=20est=20d=C3=A9sactiv=C3=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- hooks/mkdocs/G003_social_cards_adapter.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/hooks/mkdocs/G003_social_cards_adapter.py b/hooks/mkdocs/G003_social_cards_adapter.py index 2580c819b8..d04050c121 100644 --- a/hooks/mkdocs/G003_social_cards_adapter.py +++ b/hooks/mkdocs/G003_social_cards_adapter.py @@ -70,12 +70,23 @@ def on_page_markdown( if page.is_homepage: return + # vérifie que le plugin social est bien installé et configuré if not config.plugins.get("material/social"): - logger.warning("Le plugin social du thème Material n'est pas présent") + logger.warning( + f"[{hook_name}] Le plugin social du thème Material n'est pas présent. Ce hook est donc inutile." + ) return social_plugin: SocialPlugin = config.plugins.get("material/social") + # vérifie que le plugin est activé + if not social_plugin.config.enabled or not social_plugin.config.cards: + logger.debug( + f"[{hook_name}] Le plugin social du thème Material est présent mais désactivé. Ce hook est donc inutile." + ) + return + + # Cas de figure où une image n'est pas définie if page.meta.get("image") is None or page.meta.get("image") == "": social_card_url = ( f"{config.site_url}assets/images/social{page.abs_url[:-1]}.png" @@ -117,7 +128,7 @@ def on_page_markdown( } else: logger.debug( - f"{page.abs_url} a une image paramétrée. Désactivation du plugin social sur la page." + f"[{hook_name}] {page.abs_url} a une image paramétrée. Désactivation du plugin social sur la page." ) page.meta["social"] = { "cards": False, From 690f9b5f0fb03b13919769fca3486a47b0ef07d7 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Thu, 27 Jul 2023 00:02:10 +0200 Subject: [PATCH 40/66] Permet d'activer le plugin social et sa fonction cards via des env vars --- mkdocs.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mkdocs.yml b/mkdocs.yml index 84346d136c..612a4b79fa 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -140,7 +140,8 @@ plugins: - i3.codeplex.com/* - drfhlmcehrc34.cloudfront.net/* - social: - cards: !ENV [MKDOCS_ENABLE_PLUGIN_CARDS, true] + enabled: !ENV [MKDOCS_ENABLE_PLUGIN_SOCIAL, true] + cards: !ENV [MKDOCS_ENABLE_PLUGIN_SOCIAL_CARDS, true] cards_layout_options: background_color: "#00000000" background_image: content/theme/assets/images/geotribu/background_geotribu.png From 26d9abefefdd6f70f10f83f86706096dc5f050b3 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Thu, 27 Jul 2023 00:11:09 +0200 Subject: [PATCH 41/66] =?UTF-8?q?Renomme=20les=20scripts=20pour=20refl?= =?UTF-8?q?=C3=A9ter=20leur=20ordre=20d'ex=C3=A9cution?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/deploy.yml | 4 ++-- .github/workflows/links_checker.yml | 4 ++-- .github/workflows/pr_checker_build.yml | 4 ++-- ...kdocs_populate_latest.py => 050_mkdocs_populate_latest.py} | 0 .../{mkdocs_config_merger.py => 100_mkdocs_config_merger.py} | 0 5 files changed, 6 insertions(+), 6 deletions(-) rename scripts/{mkdocs_populate_latest.py => 050_mkdocs_populate_latest.py} (100%) rename scripts/{mkdocs_config_merger.py => 100_mkdocs_config_merger.py} (100%) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 969a9c9be5..5c766dc9ef 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -62,8 +62,8 @@ jobs: - name: Build static website run: | - python scripts/mkdocs_populate_latest.py - python scripts/mkdocs_config_merger.py -c mkdocs.yml + python scripts/050_mkdocs_populate_latest.py + python scripts/100_mkdocs_config_merger.py -c mkdocs.yml mkdocs build --clean --config-file mkdocs.yml --verbose --strict env: MKDOCS_ENABLE_PLUGIN_GIT_AUTHORS: true diff --git a/.github/workflows/links_checker.yml b/.github/workflows/links_checker.yml index f37ee02190..d48218d165 100644 --- a/.github/workflows/links_checker.yml +++ b/.github/workflows/links_checker.yml @@ -35,8 +35,8 @@ jobs: - name: Build static website run: | - python scripts/mkdocs_populate_latest.py - python scripts/mkdocs_config_merger.py -c mkdocs.yml + python scripts/050_mkdocs_populate_latest.py + python scripts/100_mkdocs_config_merger.py -c mkdocs.yml mkdocs build --clean --config-file mkdocs.yml --quiet --strict env: MKDOCS_ENABLE_PLUGIN_RSS: true diff --git a/.github/workflows/pr_checker_build.yml b/.github/workflows/pr_checker_build.yml index 2f6e465442..42c6a52db2 100644 --- a/.github/workflows/pr_checker_build.yml +++ b/.github/workflows/pr_checker_build.yml @@ -79,8 +79,8 @@ jobs: MKDOCS_SITE_URL="https://${NETLIFY_SITE_PREFIX}--${NETLIFY_SITE_NAME}.netlify.app/" # merge different configs - python scripts/mkdocs_populate_latest.py - python scripts/mkdocs_config_merger.py -c ${{ env.MKDOCS_CONFIG_FILENAME }} + python scripts/050_mkdocs_populate_latest.py + python scripts/100_mkdocs_config_merger.py -c ${{ env.MKDOCS_CONFIG_FILENAME }} # build mkdocs build --config-file ${{ env.MKDOCS_CONFIG_FILENAME }} --strict diff --git a/scripts/mkdocs_populate_latest.py b/scripts/050_mkdocs_populate_latest.py similarity index 100% rename from scripts/mkdocs_populate_latest.py rename to scripts/050_mkdocs_populate_latest.py diff --git a/scripts/mkdocs_config_merger.py b/scripts/100_mkdocs_config_merger.py similarity index 100% rename from scripts/mkdocs_config_merger.py rename to scripts/100_mkdocs_config_merger.py From c5492c3012393bb577e71e028ce5704657f5d856 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Thu, 27 Jul 2023 00:13:06 +0200 Subject: [PATCH 42/66] Exclue certaines parties du contenu --- mkdocs.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mkdocs.yml b/mkdocs.yml index 612a4b79fa..1d96ba5a33 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -142,6 +142,9 @@ plugins: - social: enabled: !ENV [MKDOCS_ENABLE_PLUGIN_SOCIAL, true] cards: !ENV [MKDOCS_ENABLE_PLUGIN_SOCIAL_CARDS, true] + cards_exclude: + - index.md + - toc_nav_ignored/*.md cards_layout_options: background_color: "#00000000" background_image: content/theme/assets/images/geotribu/background_geotribu.png From 73dd7f2533973454a50ecbcbd92e35ca36f61265 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Thu, 27 Jul 2023 00:29:28 +0200 Subject: [PATCH 43/66] Adapte le script pour avoir les derniers contenus --- scripts/050_mkdocs_populate_latest.py | 35 ++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/scripts/050_mkdocs_populate_latest.py b/scripts/050_mkdocs_populate_latest.py index 811fbef696..d5e0ae9982 100644 --- a/scripts/050_mkdocs_populate_latest.py +++ b/scripts/050_mkdocs_populate_latest.py @@ -12,6 +12,7 @@ # 3rd party import yaml from mkdocs.structure.pages import Page +from mkdocs.utils import yaml_load from mkdocs.utils.meta import get_data # ########################################################################### @@ -21,12 +22,17 @@ logger = logging.getLogger("mkdocs") + # ########################################################################### # ########## Functions ############# # ################################## -def get_latest_content(content_type: Literal["articles", "rdp"], count: int = 10): +def get_latest_content( + content_type: Literal["articles", "rdp"], + count: int = 10, + social_card_image_base: str = "https://static.geotribu.fr/assets/images/social", +): output_contents_list: list[Page] = [] if content_type == "articles": @@ -39,18 +45,35 @@ def get_latest_content(content_type: Literal["articles", "rdp"], count: int = 10 )[:count]: with content.open(encoding="utf-8-sig", errors="strict") as f: source = f.read() - # markdown, meta = get_data(source) - output_contents_list.append( - get_data(source)[1] | {"url_rel": str(content.relative_to("content/"))[:-3]} - ) + + page_meta = get_data(source)[1] + + page_rel = str(content.relative_to("content/"))[:-3] + + if page_meta.get("image") is None or page_meta.get("image") == "": + social_card_url = f"{social_card_image_base}{page_rel}.png" + output_contents_list.append( + get_data(source)[1] | {"url_rel": page_rel} | {"image": social_card_url} + ) + else: + output_contents_list.append(get_data(source)[1] | {"url_rel": page_rel}) return output_contents_list +# charge la configuration +with Path("mkdocs.yml").open(mode="r", encoding="UTF8") as in_yaml: + mkdocs_config = yaml_load(in_yaml) + output_dict = {"latest": {"articles": [], "rdp": []}} + # print(get_latest_content(content_type="articles")) + for k in output_dict.get("latest"): - output_dict["latest"][k] = get_latest_content(content_type=k) + output_dict["latest"][k] = get_latest_content( + content_type=k, + social_card_image_base=f"{mkdocs_config.get('site_url')}assets/images/social", + ) with Path("config/extra_latest.yml").open("w", encoding="UTF-8") as out_file: yaml.safe_dump( From 8d53550c1d1197e191e1b931bf255202f995c6b8 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Thu, 27 Jul 2023 00:31:04 +0200 Subject: [PATCH 44/66] Corrige l'URL du site sur la preview --- .github/workflows/pr_checker_build.yml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/.github/workflows/pr_checker_build.yml b/.github/workflows/pr_checker_build.yml index 42c6a52db2..5b132235c9 100644 --- a/.github/workflows/pr_checker_build.yml +++ b/.github/workflows/pr_checker_build.yml @@ -69,14 +69,9 @@ jobs: MKDOCS_SITE_NAME: "Geotribu PREVIEW - PR ${{ github.event.pull_request.number }}" MKDOCS_SITE_COPYRIGHT: 'Deploys by Netlify' run: | - echo $PR_NUMBER - echo $GITHUB_HEAD_REF - echo $MKDOCS_EDIT_URI - echo $MKDOCS_SITE_NAME # store custom env vars that need resolution export MKDOCS_EDIT_URI="edit/${GITHUB_HEAD_REF}/content" - echo $MKDOCS_EDIT_URI - MKDOCS_SITE_URL="https://${NETLIFY_SITE_PREFIX}--${NETLIFY_SITE_NAME}.netlify.app/" + export MKDOCS_SITE_URL="https://${NETLIFY_SITE_PREFIX}--${NETLIFY_SITE_NAME}.netlify.app/" # merge different configs python scripts/050_mkdocs_populate_latest.py From 60794e26295749bd66b0f2241b8b730a14544da9 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Thu, 27 Jul 2023 00:41:37 +0200 Subject: [PATCH 45/66] Corrige le / manquant --- scripts/050_mkdocs_populate_latest.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/050_mkdocs_populate_latest.py b/scripts/050_mkdocs_populate_latest.py index d5e0ae9982..c4ab74d622 100644 --- a/scripts/050_mkdocs_populate_latest.py +++ b/scripts/050_mkdocs_populate_latest.py @@ -31,7 +31,7 @@ def get_latest_content( content_type: Literal["articles", "rdp"], count: int = 10, - social_card_image_base: str = "https://static.geotribu.fr/assets/images/social", + social_card_image_base: str = "https://static.geotribu.fr/assets/images/social/", ): output_contents_list: list[Page] = [] @@ -72,7 +72,7 @@ def get_latest_content( for k in output_dict.get("latest"): output_dict["latest"][k] = get_latest_content( content_type=k, - social_card_image_base=f"{mkdocs_config.get('site_url')}assets/images/social", + social_card_image_base=f"{mkdocs_config.get('site_url')}assets/images/social/", ) with Path("config/extra_latest.yml").open("w", encoding="UTF-8") as out_file: From e4b3297273f58ef35cfc2f52cbe1000dfc276722 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Thu, 27 Jul 2023 00:41:50 +0200 Subject: [PATCH 46/66] =?UTF-8?q?Fix=20cr=C3=A9dits=20beerware?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/theme/partials/license.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/theme/partials/license.html b/content/theme/partials/license.html index f56692f347..7c1aadf414 100644 --- a/content/theme/partials/license.html +++ b/content/theme/partials/license.html @@ -50,7 +50,7 @@ Beerware Pictogramme BeerWare + alt="Pictogramme BeerWare" title="Beerware - Kita59, CC BY-SA 3.0, via Wikimedia Commons" />

From 1b08230a8a4615bc795325b33b3b17e244d111d0 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Thu, 27 Jul 2023 15:05:40 +0200 Subject: [PATCH 47/66] =?UTF-8?q?Ajout=20=C3=A9volutions=20r=C3=A9centes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/rdp/2023/rdp_2023-07-28.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index 5232c56e64..ed06901d25 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -37,7 +37,10 @@ tags: ![logo geotribu orange](https://cdn.geotribu.fr/img/internal/charte/geotribu_logo_rectangle_384x80.png "logo geotribu orange"){: .off-glb style="border: none; box-shadow: none;" } {: align=middle } -:world_map: Julien vous explique comment [obtenir la version de PROJ installée via Python](articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire/) +- :world_map: Julien vous explique comment [obtenir la version de PROJ installée via Python](../../articles/2023/2023-07-25_python-obtenir-la-version-de-proj-avec-gdal-pyproj-binaire.md) +- :frame_photo: génération automatique d'une image d'en-tête pour chaque contenu quand elle n'est pas spécifiée. Cela évite aux contributeur/ices de trouver ou créer une image d'illustration. Cela est possible via l'ajout et la personnalisation du plugin Social (du thème Material). +- :fontawesome-brands-creative-commons: amélioration de l'intégration des licences en bas des contenus +- :speech_balloon: amélioration de l'intégration du bloc des commentaires ---- From b6fb6f5d14d0bd52e548eebccf67cd5e40e69374 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Thu, 27 Jul 2023 15:14:49 +0200 Subject: [PATCH 48/66] Supprime le placeholder de l'image --- content/rdp/2023/rdp_2023-07-28.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index ed06901d25..3c063fd3b9 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -6,7 +6,7 @@ categories: - revue de presse date: 2023-07-28 14:20 description: "" -image: "Image d'illustration de la RDP qui sert ensuite dans la mise en avant : réseaux sociaux, flux RSS... 400x800 en PNG" +image: license: default robots: index, follow tags: From 64a1f5faa5493f5222e374e3f033064684c44386 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B8?= Date: Mon, 31 Jul 2023 19:00:23 +0200 Subject: [PATCH 49/66] =?UTF-8?q?G=C3=A9orivi=C3=A8re?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/rdp/2023/rdp_2023-07-28.md | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index 3c063fd3b9..075a702d5f 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -13,6 +13,7 @@ tags: - API - BAN - journalisme + - Géorivière - livre - PostGIS - R @@ -97,7 +98,13 @@ Il vous suffit de choisir un pays pour que l'appli vous propose les villes assoc ### Wébinaire Géorivière - +![icône Géorivière](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/georiviere.png "icône Géorivière"){: .img-rdp-news-thumb } + +Thomas Magnin-Feysot du [Parc naturel régional (PNR) du Haut-Jura](http://www.parc-haut-jura.fr) a animé le Webinaire [OpenIG](http://Openig.org) sur l'application libre pour le suivi et la gestion des milieux aquatiques : [GeoRivière](https://georiviere.fr), développé en partenariat avec [Makina Corpus](https://makina-corpus.com/georiviere). Les futures possibilités d'exploitation des données SIG en lien avec la compétence GEMAPI (Gestion des Milieux Aquatiques et Prévention des inondations) ont également été présentées. + +Le support de présentation et le compte-rendu sont disponibles dans un [article de Makina Corpus dédié à cet évènement](https://makina-corpus.com/societe/openig-webinaire-georiviere-replay). + + ---- @@ -152,7 +159,7 @@ The book gives a detailed explanation of the core spatial software packages for - [GDAL 3.7.1](https://lists.osgeo.org/pipermail/gdal-dev/2023-July/057455.html) - [GeoNetwork 4.2.5](https://geonetwork-opensource.org/news.html#geonetwork-opensource-v4-2-5-released) - [GeoTools 29.2](http://geotoolsnews.blogspot.com/2023/07/geotools-292-released.html) -- hebdoOSM [676](https://weeklyosm.eu/fr/archives/16583), [677](https://weeklyosm.eu/fr/archives/16591) et [678](https://weeklyosm.eu/fr/archives/16605) +- hebdoOSM [676](https://weeklyosm.eu/fr/archives/16583), [677](https://weeklyosm.eu/fr/archives/16591), [678](https://weeklyosm.eu/fr/archives/16605) et [679](https://weeklyosm.eu/fr/archives/16616) - [IGN - Rapport d'activité 2022 - La transformation publique à l'institut vue par les équipes](https://www.ign.fr/sites/default/files/2023-07/AC230034-RA-2022-BD-WEB-Planche.pdf) - OpenStreetMap - [Pourquoi les conférences SotM sont-elles si importantes pour OSM ?](https://blog.openstreetmap.org/2023/07/07/why-state-of-the-map-conferences-are-so-important-to-osm/) - [OTB release 8.1.2](https://www.orfeo-toolbox.org/otb-release-8-1-2/) From 67f41c94212bb0d51a3b03ac53aa9987b05de1f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B8?= Date: Mon, 31 Jul 2023 19:21:30 +0200 Subject: [PATCH 50/66] Barbie --- content/rdp/2023/rdp_2023-07-28.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index 075a702d5f..17bbfe32eb 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -12,6 +12,7 @@ robots: index, follow tags: - API - BAN + - Barbie - journalisme - Géorivière - livre @@ -76,6 +77,16 @@ Il vous suffit de choisir un pays pour que l'appli vous propose les villes assoc ![Partez en vacances à l’étranger sans quitter l’Hexagone](https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/le_monde_vacances_etranger.png){: .img-center loading=lazy } +### Barbie + +![icône barbie](https://cdn.geotribu.fr/img/logos-icones/divers/livre.png "icône barbie"){: .img-rdp-news-thumb } + +Si on m'avait dit qu'un jour je parlerai de Barbie ici, j'aurai sans doute bien ri mais si on en parle c'est bien que la carte est au coeur de l'actualité. En effet, le film qui doit sortir prochainement dans le monde entier vient d'être [interdit au Vietnam](https://www.francetvinfo.fr/culture/cinema/le-film-barbie-est-interdit-au-vietnam-en-raison-d-une-carte-geographique-litigieuse-avec-la-chine_5927771.html) à cause de la carte ci-dessous qui montre une délimitation géographique propre à la Chine, dite "la ligne en neuf pointillés", qui définit les revendications de Pékin sur ces eaux contestées par Hanoï. + +Preuve s'il en est que cette carte aussi simple soit-elle se retrouve au coeur d'enjeux politiques internationaux. + +![Barbie - Carte](https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/Barbie_vietnam.png){: .img-center loading=lazy } + ---- ## OpenStreetMap From 8466a9a6b646f7f0a8d32befd8e84346c4843838 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B8?= Date: Mon, 31 Jul 2023 19:26:19 +0200 Subject: [PATCH 51/66] En bref --- content/rdp/2023/rdp_2023-07-28.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index 17bbfe32eb..4d93d9318c 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -170,9 +170,11 @@ The book gives a detailed explanation of the core spatial software packages for - [GDAL 3.7.1](https://lists.osgeo.org/pipermail/gdal-dev/2023-July/057455.html) - [GeoNetwork 4.2.5](https://geonetwork-opensource.org/news.html#geonetwork-opensource-v4-2-5-released) - [GeoTools 29.2](http://geotoolsnews.blogspot.com/2023/07/geotools-292-released.html) +- [GRASS GIS fête ses 40 ans](https://grasswiki.osgeo.org/wiki/GRASS_GIS_Birthday) - hebdoOSM [676](https://weeklyosm.eu/fr/archives/16583), [677](https://weeklyosm.eu/fr/archives/16591), [678](https://weeklyosm.eu/fr/archives/16605) et [679](https://weeklyosm.eu/fr/archives/16616) - [IGN - Rapport d'activité 2022 - La transformation publique à l'institut vue par les équipes](https://www.ign.fr/sites/default/files/2023-07/AC230034-RA-2022-BD-WEB-Planche.pdf) - OpenStreetMap - [Pourquoi les conférences SotM sont-elles si importantes pour OSM ?](https://blog.openstreetmap.org/2023/07/07/why-state-of-the-map-conferences-are-so-important-to-osm/) - [OTB release 8.1.2](https://www.orfeo-toolbox.org/otb-release-8-1-2/) -- [PostGIS 3.4.0 beta1](https://postgis.net/2023/07/PostGIS-3.4.0beta1/) +- [pgAdmin 4 v7.5](https://www.postgresql.org/about/news/pgadmin-4-v75-released-2681/) +- [PostGIS 3.4.0 beta2](https://postgis.net/2023/07/PostGIS-3.4.0beta2/) et [PostGIS 3.3.4](https://postgis.net/2023/07/PostGIS-3.3.4-Patch-Release/) - [SAGA 9.1.0](https://sourceforge.net/p/saga-gis/news/2023/07/saga-910-released/) From 47a54556774219e9b94860eb6e935659f6d5b94d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B8?= Date: Mon, 31 Jul 2023 19:51:26 +0200 Subject: [PATCH 52/66] Overture / Mise en forme --- content/rdp/2023/rdp_2023-07-28.md | 40 ++++++++++++------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index 4d93d9318c..eff1ebb56a 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -5,8 +5,8 @@ authors: categories: - revue de presse date: 2023-07-28 14:20 -description: "" -image: +description: "Une GeoRDP à mettre dans la valise pour vos vacances ;)" +image: https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/Barbie_vietnam.png license: default robots: index, follow tags: @@ -16,6 +16,7 @@ tags: - journalisme - Géorivière - livre + - Overture - PostGIS - R - vacances @@ -24,16 +25,6 @@ tags: # Revue de presse du 28 juillet 2023 -## Intro - -![icône news générique](https://cdn.geotribu.fr/img/internal/icons-rdp-news/news.png "icône news générique"){: .img-rdp-news-thumb } - -[Commenter :fontawesome-solid-comments:](#__comments){: .md-button } -[Proposer :material-newspaper-plus:]({{ config.extra.url_contribuer }}rdp/add_news/){: .md-button } -{: align=middle } - ----- - ## Vie du site ![logo geotribu orange](https://cdn.geotribu.fr/img/internal/charte/geotribu_logo_rectangle_384x80.png "logo geotribu orange"){: .off-glb style="border: none; box-shadow: none;" } @@ -46,10 +37,6 @@ tags: ---- -## Sorties de la semaine - ----- - ## Logiciel ### Géocodage depuis PostgreSQL/PostGIS et l'API de la BAN @@ -79,7 +66,7 @@ Il vous suffit de choisir un pays pour que l'appli vous propose les villes assoc ### Barbie -![icône barbie](https://cdn.geotribu.fr/img/logos-icones/divers/livre.png "icône barbie"){: .img-rdp-news-thumb } +![icône barbie](https://cdn.geotribu.fr/img/logos-icones/divers/barbie.png "icône barbie"){: .img-rdp-news-thumb } Si on m'avait dit qu'un jour je parlerai de Barbie ici, j'aurai sans doute bien ri mais si on en parle c'est bien que la carte est au coeur de l'actualité. En effet, le film qui doit sortir prochainement dans le monde entier vient d'être [interdit au Vietnam](https://www.francetvinfo.fr/culture/cinema/le-film-barbie-est-interdit-au-vietnam-en-raison-d-une-carte-geographique-litigieuse-avec-la-chine_5927771.html) à cause de la carte ci-dessous qui montre une délimitation géographique propre à la Chine, dite "la ligne en neuf pointillés", qui définit les revendications de Pékin sur ces eaux contestées par Hanoï. @@ -89,19 +76,24 @@ Preuve s'il en est que cette carte aussi simple soit-elle se retrouve au coeur d ---- -## OpenStreetMap +## Open Data ----- +### Overture Maps Foundation publie son premier ensemble de données monde -## Google +![logo Overture Maps Foundation](https://cdn.geotribu.fr/img/logos-icones/entreprises_association/overture_maps_foundation.jpg "logo Overture Maps Foundation"){: .img-rdp-news-thumb } -### Open Building en licences CC BY-4.0 et ODbL v1.0 +La fondation a annoncé la publication d'un premier millésime de données à l'échelle de la planète (version 2023-07-26-alpha.0 ), il comprend 4 jeux de données : - + - les lieux d'intérêt (environ 60 millions de POI), + - les bâtiments, + - le réseau de transport + - les limites administratives. ----- +Ces données sont issues de différentes sources de données ouvertes qui ont été validées et certifiées par une série de contrôles qualité. Pour en savoir, on vous invite à lire l'[article dédié](https://overturemaps.org/overture-maps-foundation-releases-first-world-wide-open-map-dataset/). -## Open Data +Les données peuvent être téléchargés à l'adresse : . + +A noter également que de nouveaux membres ont rejoint le projet : Esri, Cyient, InfraMappa, Nomoko, Precisely, PTV Group, SafeGraph, Sanborn, and Sparkgeo. ---- From 04cf1cc70543c80fd6f870b78950567e3772e787 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 31 Jul 2023 17:52:19 +0000 Subject: [PATCH 53/66] =?UTF-8?q?[pre-commit.ci]=20Corrections=20automatiq?= =?UTF-8?q?ues=20appliqu=C3=A9es=20par=20les=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- content/rdp/2023/rdp_2023-07-28.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index eff1ebb56a..6089c1b909 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -84,10 +84,10 @@ Preuve s'il en est que cette carte aussi simple soit-elle se retrouve au coeur d La fondation a annoncé la publication d'un premier millésime de données à l'échelle de la planète (version 2023-07-26-alpha.0 ), il comprend 4 jeux de données : - - les lieux d'intérêt (environ 60 millions de POI), - - les bâtiments, - - le réseau de transport - - les limites administratives. +- les lieux d'intérêt (environ 60 millions de POI), +- les bâtiments, +- le réseau de transport +- les limites administratives. Ces données sont issues de différentes sources de données ouvertes qui ont été validées et certifiées par une série de contrôles qualité. Pour en savoir, on vous invite à lire l'[article dédié](https://overturemaps.org/overture-maps-foundation-releases-first-world-wide-open-map-dataset/). From b8abcdd688a5707f6cc06b9158d973c6180c3f38 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fl=C3=B8?= Date: Mon, 31 Jul 2023 22:00:17 +0200 Subject: [PATCH 54/66] Corr --- content/rdp/2023/rdp_2023-07-28.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/rdp/2023/rdp_2023-07-28.md b/content/rdp/2023/rdp_2023-07-28.md index 6089c1b909..707b8bfee5 100644 --- a/content/rdp/2023/rdp_2023-07-28.md +++ b/content/rdp/2023/rdp_2023-07-28.md @@ -103,7 +103,7 @@ A noter également que de nouveaux membres ont rejoint le projet : Esri, Cyient, ![icône Géorivière](https://cdn.geotribu.fr/img/logos-icones/logiciels_librairies/georiviere.png "icône Géorivière"){: .img-rdp-news-thumb } -Thomas Magnin-Feysot du [Parc naturel régional (PNR) du Haut-Jura](http://www.parc-haut-jura.fr) a animé le Webinaire [OpenIG](http://Openig.org) sur l'application libre pour le suivi et la gestion des milieux aquatiques : [GeoRivière](https://georiviere.fr), développé en partenariat avec [Makina Corpus](https://makina-corpus.com/georiviere). Les futures possibilités d'exploitation des données SIG en lien avec la compétence GEMAPI (Gestion des Milieux Aquatiques et Prévention des inondations) ont également été présentées. +En mars 2023, Thomas Magnin-Feysot du [Parc naturel régional (PNR) du Haut-Jura](http://www.parc-haut-jura.fr) a animé le Webinaire [OpenIG](http://Openig.org) sur l'application libre pour le suivi et la gestion des milieux aquatiques : [GeoRivière](https://georiviere.fr), développé en partenariat avec [Makina Corpus](https://makina-corpus.com/georiviere). Les futures possibilités d'exploitation des données SIG en lien avec la compétence GEMAPI (Gestion des Milieux Aquatiques et Prévention des inondations) ont également été présentées. Le support de présentation et le compte-rendu sont disponibles dans un [article de Makina Corpus dédié à cet évènement](https://makina-corpus.com/societe/openig-webinaire-georiviere-replay). From 9306b53541919e8d740686430902c7aa8dad2a90 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 1 Aug 2023 07:46:12 +0000 Subject: [PATCH 55/66] =?UTF-8?q?[pre-commit.ci]=20Mise=20=C3=A0=20jour=20?= =?UTF-8?q?des=20git=20hooks.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/asottile/pyupgrade: v3.8.0 → v3.10.1](https://github.com/asottile/pyupgrade/compare/v3.8.0...v3.10.1) - [github.com/astral-sh/ruff-pre-commit: v0.0.276 → v0.0.281](https://github.com/astral-sh/ruff-pre-commit/compare/v0.0.276...v0.0.281) - [github.com/psf/black: 23.3.0 → 23.7.0](https://github.com/psf/black/compare/23.3.0...23.7.0) - [github.com/pycqa/flake8: 6.0.0 → 6.1.0](https://github.com/pycqa/flake8/compare/6.0.0...6.1.0) --- .pre-commit-config.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 03d588bf97..f9752d4871 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,20 +19,20 @@ repos: args: [--markdown-linebreak-ext=md] - repo: https://github.com/asottile/pyupgrade - rev: v3.8.0 + rev: v3.10.1 hooks: - id: pyupgrade args: - "--py38-plus" - repo: https://github.com/astral-sh/ruff-pre-commit - rev: "v0.0.276" + rev: "v0.0.281" hooks: - id: ruff args: ["--fix-only"] - repo: https://github.com/psf/black - rev: 23.3.0 + rev: 23.7.0 hooks: - id: black @@ -43,7 +43,7 @@ repos: args: ["--profile", "black", "--filter-files"] - repo: https://github.com/pycqa/flake8 - rev: 6.0.0 + rev: 6.1.0 hooks: - id: flake8 language: python From 9227526dcd3f2424cafa47f88f3a87049315375b Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Sun, 6 Aug 2023 16:33:48 +0200 Subject: [PATCH 56/66] Switch DNS de static.geotribu.fr vers geotribu.fr --- .github/ISSUE_TEMPLATE/ARTICLE.yml | 2 +- .github/ISSUE_TEMPLATE/RDP_NEWS.yml | 2 +- README.md | 2 +- config/extra_social.yml | 2 +- config/plugins_redirections.yml | 2 +- content/CNAME | 2 +- content/articles/2014/2014-03-07_dans_le_geotipi.md | 2 +- ...23-03-24_pyqgis-icones-cheatsheet-automatisation.md | 2 +- .../2023-05-04_annonce-changement-url-site-geotribu.md | 6 +++--- content/rdp/2020/rdp_2020-09-04.md | 2 +- content/rdp/2020/rdp_2020-10-30.md | 2 +- content/rdp/2021/rdp_2021-04-09.md | 2 +- content/robots.txt | 2 +- content/rss.xml | 2 +- content/team/confidentialite.md | 2 +- hooks/mkdocs/G001_check_hyperlinks_internal.py | 4 ++-- hooks/mkdocs/G002_check_images_size.py | 2 +- mkdocs-free.yml | 2 +- mkdocs-minimal.yml | 2 +- mkdocs.yml | 6 ++++-- scripts/050_mkdocs_populate_latest.py | 2 +- scripts/redirect.html | 10 +++++----- 22 files changed, 32 insertions(+), 30 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/ARTICLE.yml b/.github/ISSUE_TEMPLATE/ARTICLE.yml index 932280b3b1..0297510cd9 100644 --- a/.github/ISSUE_TEMPLATE/ARTICLE.yml +++ b/.github/ISSUE_TEMPLATE/ARTICLE.yml @@ -84,7 +84,7 @@ body: label: Mots-clés description: | Liste de mots-clés séparés par une virgule. - De préférence, choisir parmi les [mots-clés existants](https://static.geotribu.fr/tags/). + De préférence, choisir parmi les [mots-clés existants](https://geotribu.fr/tags/). validations: required: true diff --git a/.github/ISSUE_TEMPLATE/RDP_NEWS.yml b/.github/ISSUE_TEMPLATE/RDP_NEWS.yml index e393289010..779f3f8330 100644 --- a/.github/ISSUE_TEMPLATE/RDP_NEWS.yml +++ b/.github/ISSUE_TEMPLATE/RDP_NEWS.yml @@ -109,7 +109,7 @@ body: label: Mots-clés description: | Liste de mots-clés séparés par une virgule. - De préférence, choisir parmi les [mots-clés existants](https://static.geotribu.fr/tags/), en respectant la casse. + De préférence, choisir parmi les [mots-clés existants](https://geotribu.fr/tags/), en respectant la casse. validations: required: true diff --git a/README.md b/README.md index eea826b7d7..c7c29ca01b 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ Sources et contenus du site de Geotribu, accessible via les URLs suivantes : -- +- - - diff --git a/config/extra_social.yml b/config/extra_social.yml index b2df94dea1..d55e33eb3a 100644 --- a/config/extra_social.yml +++ b/config/extra_social.yml @@ -1,6 +1,6 @@ social: - icon: "fontawesome/solid/rss" - link: "https://static.geotribu.fr/feed_rss_created.xml" + link: "https://geotribu.fr/feed_rss_created.xml" name: "S'abonner aux nouveaux contenus via RSS" - icon: "fontawesome/brands/github-alt" link: "https://github.com/geotribu/" diff --git a/config/plugins_redirections.yml b/config/plugins_redirections.yml index f8cfbe94a3..ca339fa66a 100644 --- a/config/plugins_redirections.yml +++ b/config/plugins_redirections.yml @@ -597,7 +597,7 @@ redirects: rdp/2010/rdp_2010-10-14.md: rdp/2010/rdp_2010-10-15.md rdp/2015/rdp_2015-04-07.md: rdp/2015/rdp_2015-04-10.md rdp/rdp_2020-04-30.md: rdp/2020/rdp_2020-04-30.md - # rss.md: https://static.geotribu.fr/feed_rss_created.xml + # rss.md: https://geotribu.fr/feed_rss_created.xml # migration des contenus en 2022 articles/2008/art_2008-11-03.md: articles/2008/2008-11-03_premiers-pas-dans-la-cour-des-grands.md diff --git a/content/CNAME b/content/CNAME index da95b17ded..e0978e90bd 100644 --- a/content/CNAME +++ b/content/CNAME @@ -1 +1 @@ -static.geotribu.fr +geotribu.fr diff --git a/content/articles/2014/2014-03-07_dans_le_geotipi.md b/content/articles/2014/2014-03-07_dans_le_geotipi.md index 6e7b4afd15..c6a6659bf9 100644 --- a/content/articles/2014/2014-03-07_dans_le_geotipi.md +++ b/content/articles/2014/2014-03-07_dans_le_geotipi.md @@ -24,7 +24,7 @@ Nous aurions aimé vous dire que nous sommes une [équipe](/team/contributors/) En plus de l'aspect humain, nous discutons également au préalable sur notre mailing list des thématiques qui seront abordées. Cela a d'ailleurs donné lieu à des discussions enflammées. C'est d'ailleurs de là que vient l'origine de ce billet et surtout de la super image que Jérémie nous a créée pour l'occasion ! -[![Réunion d'équipe](https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/g3022.png "Réunion d'équipe"){: .img-center loading=lazy }](https://static.geotribu.fr/team/contributors/) +[![Réunion d'équipe](https://cdn.geotribu.fr/img/articles-blog-rdp/capture-ecran/g3022.png "Réunion d'équipe"){: .img-center loading=lazy }](https://geotribu.fr/team/contributors/) Notre implication quotidienne nous forge une expérience riche d'enseignement ! Pendant ce temps, Geotribu grandit et désormais un travail de management d'équipe est nécessaire ! diff --git a/content/articles/2023/2023-03-24_pyqgis-icones-cheatsheet-automatisation.md b/content/articles/2023/2023-03-24_pyqgis-icones-cheatsheet-automatisation.md index ca98035c03..eb31a9bd01 100644 --- a/content/articles/2023/2023-03-24_pyqgis-icones-cheatsheet-automatisation.md +++ b/content/articles/2023/2023-03-24_pyqgis-icones-cheatsheet-automatisation.md @@ -38,7 +38,7 @@ Je vous présente donc PyQGIS Icons Cheatsheet : ## Un site tout totomatique -En soi, le site n'est pas bien différent de la page que j'avais publiée ici suite à mon deuxième article ([voir dans Web Archive](https://web.archive.org/web/20211024083001/https://static.geotribu.fr/toc_nav_ignored/qgis_resources_preview_table/)), sinon que les icônes sont à jour par rapport à celles présentes réellement dans QGIS. +En soi, le site n'est pas bien différent de la page que j'avais publiée ici suite à mon deuxième article ([voir dans Web Archive](https://web.archive.org/web/20211024083001/https://geotribu.fr/toc_nav_ignored/qgis_resources_preview_table/)), sinon que les icônes sont à jour par rapport à celles présentes réellement dans QGIS. C'est sous le capot que les choses ont changé : tout est automatisé via [un workflow GitHub](https://github.com/geotribu/pyqgis-icons-cheatsheet/blob/main/.github/workflows/deploy.yml), programmé pour s'exécuter tous les mois, déroulant alors le scénario suivant : diff --git a/content/articles/2023/2023-05-04_annonce-changement-url-site-geotribu.md b/content/articles/2023/2023-05-04_annonce-changement-url-site-geotribu.md index 4c402703d3..d058ef2f97 100644 --- a/content/articles/2023/2023-05-04_annonce-changement-url-site-geotribu.md +++ b/content/articles/2023/2023-05-04_annonce-changement-url-site-geotribu.md @@ -24,7 +24,7 @@ Voilà 3 ans que Geotribu est de retour après une [coupure de service de... 3 a 3 ans que ce nouveau site est en place. 3 ans à en améliorer l'ergonomie, les fonctionnalités et surtout à réintégrer et nettoyer les anciens contenus. -3 ans qu'il est accessible sur +3 ans qu'il est accessible sur Il est temps de rebasculer le site sur l'adresse principale. @@ -48,8 +48,8 @@ flowchart TB C(http://geotribu.fr) -->|https| U D(http://www.geotribu.net) -->|https| E E(https://www.geotribu.net) -->|Redirection DNS| U - F(http://static.geotribu.fr) -->|https| G - G(https://static.geotribu.fr) -->|Redirection DNS| U + F(http://geotribu.fr) -->|https| G + G(https://geotribu.fr) -->|Redirection DNS| U U{"https://geotribu.fr/
(Apex)"} ``` diff --git a/content/rdp/2020/rdp_2020-09-04.md b/content/rdp/2020/rdp_2020-09-04.md index 273bb7e687..d17e16076b 100644 --- a/content/rdp/2020/rdp_2020-09-04.md +++ b/content/rdp/2020/rdp_2020-09-04.md @@ -32,7 +32,7 @@ Pour le reste, on vous laisse avec la carte proposée sur TF1 car nous ne saurio - on a publié un article sur notre [brève histoire](/articles/2020/2020-08-31_geotribu_histoire/) - on a ajouté la possibilité [d'intégrer des schémas dans les articles via la syntaxe MermaidJS]({{ config.extra.url_contribuer }}guides/diagrams/) -- les flux RSS ont été améliorés (prise en charge des images d'illustration) et des [boutons de suivi sur Feedly](https://feedly.com/i/subscription/feed%2Fhttps%3A%2F%2Fstatic.geotribu.fr%2Ffeed_rss_created.xml) ont été ajoutés +- les flux RSS ont été améliorés (prise en charge des images d'illustration) et des [boutons de suivi sur Feedly](https://feedly.com/i/subscription/feed%2Fhttps%3A%2F%2Fgeotribu.fr%2Ffeed_rss_created.xml) ont été ajoutés ---- diff --git a/content/rdp/2020/rdp_2020-10-30.md b/content/rdp/2020/rdp_2020-10-30.md index 3372cf53d5..94010c9a2e 100644 --- a/content/rdp/2020/rdp_2020-10-30.md +++ b/content/rdp/2020/rdp_2020-10-30.md @@ -143,7 +143,7 @@ A noter que si vous devez régulièrement naviguer dans l'hétérogénéité des ![icône rdp](https://cdn.geotribu.fr/img/internal/icons-rdp-news/pointillisme.png "globe pointillisme"){: .img-rdp-news-thumb } -[MapShaper](https://mapshaper.org/) est un outil développé par Matthew Bloch, data-journaliste au New York Times. On en a parlé [à plusieurs reprises il y a quelques années](https://www.google.com/search?q=site%3Astatic.geotribu.fr+mapshaper) ici, notamment car l'application web prenait le relai de Kartograph ou d'autres applications web permettant des manipulations plus ou moins basiques de données spatiales à partir d'un simple glisser/déposer. +[MapShaper](https://mapshaper.org/) est un outil développé par Matthew Bloch, data-journaliste au New York Times. On en a parlé [à plusieurs reprises il y a quelques années](https://www.google.com/search?q=site%3Ageotribu.fr+mapshaper) ici, notamment car l'application web prenait le relai de Kartograph ou d'autres applications web permettant des manipulations plus ou moins basiques de données spatiales à partir d'un simple glisser/déposer. Récemment, j'y ai eu recours et envisageait un petit tutoriel pour l'installer, le prendre en main et aller assez loin. Mais je n'ai pas eu besoin de me donner cette peine, Éric Mauvière a pris le soin de le faire dans [un article joliment détaillé comme il faut](https://www.icem7.fr/outils/mapshaper-visualiser-et-affiner-des-fonds-de-carte-en-ligne/). diff --git a/content/rdp/2021/rdp_2021-04-09.md b/content/rdp/2021/rdp_2021-04-09.md index b306e0e986..8a6aa7a766 100644 --- a/content/rdp/2021/rdp_2021-04-09.md +++ b/content/rdp/2021/rdp_2021-04-09.md @@ -56,7 +56,7 @@ Bonne lecture. - :regional_indicator_q: Publication de [QTribu notre plugin pour QGIS](/articles/2021/2021-04-01_qtribu_plugin_qgis_geotribu/) qui permet de consulter le site directement depuis QGIS, mais surtout de donner des exemples concrets à nos tutoriels sur QGIS. - :material-comment-check: Remplacement de Disqus par [Isso](https://posativ.org/isso/) pour la gestion des commentaires. Désormais, c'est de l'auto-hébergé : plus de tracking ni de publicités, juste de quoi commenter. En prime, on a même récupéré les commentaires laissés auparavant. -- :fishing_pole_and_fish: Pour le premier avril, le site a bénéficié d'un relooking à la mode des années 80s, grâce au travail de [Lukas Ramage](https://gitlab.com/lramage/mkdocs-bootstrap386), lui-même basé sur le thème Bootstrap [BOOTSTRA.386 de Chris Mckenzie](https://kristopolous.github.io/BOOTSTRA.386/). Si vous voulez revivre cette expérience, [c'est par ici sur la Internet Wayback Machine](https://web.archive.org/web/20210401/https://static.geotribu.fr/). +- :fishing_pole_and_fish: Pour le premier avril, le site a bénéficié d'un relooking à la mode des années 80s, grâce au travail de [Lukas Ramage](https://gitlab.com/lramage/mkdocs-bootstrap386), lui-même basé sur le thème Bootstrap [BOOTSTRA.386 de Chris Mckenzie](https://kristopolous.github.io/BOOTSTRA.386/). Si vous voulez revivre cette expérience, [c'est par ici sur la Internet Wayback Machine](https://web.archive.org/web/20210401/https://geotribu.fr/). - :bus: Article sur la [représentation d'un réseau de bus](/articles/2021/2021-04-07_carte_reseau_bus/) à l'aide de PostGIS et QGIS. ![Geotribu 386](https://cdn.geotribu.fr/img/tuto/static_web/geotribu_theme_i386_poisson_avril_2021.png "Poisson d'avril 2021 - Geotribu en mode 386"){: .img-center loading=lazy } diff --git a/content/robots.txt b/content/robots.txt index 1175308882..eacf088389 100644 --- a/content/robots.txt +++ b/content/robots.txt @@ -2,4 +2,4 @@ User-Agent: * Allow: / Disallow: /toc_nav_ignored/snippets/ -Sitemap: https://static.geotribu.fr/sitemap.xml +Sitemap: https://geotribu.fr/sitemap.xml diff --git a/content/rss.xml b/content/rss.xml index e5fc8831cf..8446ec06ad 100644 --- a/content/rss.xml +++ b/content/rss.xml @@ -1,5 +1,5 @@ - https://static.geotribu.fr/feed_rss_created.xml + https://geotribu.fr/feed_rss_created.xml diff --git a/content/team/confidentialite.md b/content/team/confidentialite.md index 910bfa7067..69f4c39e80 100644 --- a/content/team/confidentialite.md +++ b/content/team/confidentialite.md @@ -106,6 +106,6 @@ Afin de favoriser les échanges constructifs, merci de préférer le [pseudonyma {: align=middle } -[flux RSS]: https://static.geotribu.fr/feed_rss_created.xml +[flux RSS]: https://geotribu.fr/feed_rss_created.xml [Isso]: https://posativ.org/isso/ [UTM]: https://fr.wikipedia.org/wiki/Param%C3%A8tres_UTM diff --git a/hooks/mkdocs/G001_check_hyperlinks_internal.py b/hooks/mkdocs/G001_check_hyperlinks_internal.py index 0c51db4ada..b2657ce317 100644 --- a/hooks/mkdocs/G001_check_hyperlinks_internal.py +++ b/hooks/mkdocs/G001_check_hyperlinks_internal.py @@ -18,7 +18,7 @@ logger = logging.getLogger("mkdocs") -base_url: str = "https://static.geotribu.fr/" +base_url: str = "https://geotribu.fr/" pattern = re.compile(r"\[([^][]+)\](\(((?:[^()]+|(\?2))+)\))") # Anything that isn't a square closing bracket @@ -42,7 +42,7 @@ def on_page_markdown(markdown, page, **kwargs): path = page.file.src_uri if path in exclude_list: return - # for m in re.finditer(r"\bhttps://static.geotribu.fr/[^) ]+", markdown): + # for m in re.finditer(r"\bhttps://geotribu.fr/[^) ]+", markdown): # for match in pattern.finditer(markdown): for match in re.findall(pattern, markdown): # print(path, match) diff --git a/hooks/mkdocs/G002_check_images_size.py b/hooks/mkdocs/G002_check_images_size.py index 5d0ee4e2f8..ed76aa7c14 100644 --- a/hooks/mkdocs/G002_check_images_size.py +++ b/hooks/mkdocs/G002_check_images_size.py @@ -23,7 +23,7 @@ logger = logging.getLogger("mkdocs") -base_url: str = "https://static.geotribu.fr/" +base_url: str = "https://geotribu.fr/" REMOTE_REQUEST_HEADERS = { "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", diff --git a/mkdocs-free.yml b/mkdocs-free.yml index 166ef9f947..ab3d68eb58 100644 --- a/mkdocs-free.yml +++ b/mkdocs-free.yml @@ -6,7 +6,7 @@ site_description: >- l'information géographique, les SIG, la cartographie, la représentation des données... site_author: !ENV [MKDOCS_SITE_AUTHOR, "Geotribu"] -site_url: !ENV [MKDOCS_SITE_URL, "https://static.geotribu.fr/"] +site_url: !ENV [MKDOCS_SITE_URL, "https://geotribu.fr/"] copyright: !ENV [MKDOCS_SITE_COPYRIGHT, '© Geotribu'] diff --git a/mkdocs-minimal.yml b/mkdocs-minimal.yml index 05b5a8dd89..fffd93c351 100644 --- a/mkdocs-minimal.yml +++ b/mkdocs-minimal.yml @@ -6,7 +6,7 @@ site_description: >- l'information géographique, les SIG, la cartographie, la représentation des données... site_author: !ENV [MKDOCS_SITE_AUTHOR, "Geotribu"] -site_url: !ENV [MKDOCS_SITE_URL, "https://static.geotribu.fr/"] +site_url: !ENV [MKDOCS_SITE_URL, "https://geotribu.fr/"] copyright: !ENV [MKDOCS_SITE_COPYRIGHT, '© Geotribu'] diff --git a/mkdocs.yml b/mkdocs.yml index 1d96ba5a33..70616814b0 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -6,7 +6,7 @@ site_description: >- l'information géographique, les SIG, la cartographie, la représentation des données... site_author: !ENV [MKDOCS_SITE_AUTHOR, "Geotribu"] -site_url: !ENV [MKDOCS_SITE_URL, "https://static.geotribu.fr/"] +site_url: !ENV [MKDOCS_SITE_URL, "https://geotribu.fr/"] copyright: !ENV [MKDOCS_SITE_COPYRIGHT, '© Geotribu'] @@ -176,7 +176,9 @@ theme: - search.share - search.suggest - toc.follow - font: false + font: + code: Ubuntu Mono + text: Ubuntu language: fr logo: theme/assets/images/geotribu/logo_geotribu.png palette: diff --git a/scripts/050_mkdocs_populate_latest.py b/scripts/050_mkdocs_populate_latest.py index c4ab74d622..a462b5e5c2 100644 --- a/scripts/050_mkdocs_populate_latest.py +++ b/scripts/050_mkdocs_populate_latest.py @@ -31,7 +31,7 @@ def get_latest_content( content_type: Literal["articles", "rdp"], count: int = 10, - social_card_image_base: str = "https://static.geotribu.fr/assets/images/social/", + social_card_image_base: str = "https://geotribu.fr/assets/images/social/", ): output_contents_list: list[Page] = [] diff --git a/scripts/redirect.html b/scripts/redirect.html index de641c8406..421e490cca 100644 --- a/scripts/redirect.html +++ b/scripts/redirect.html @@ -2,26 +2,26 @@ - + - + Redirection Geotribu -

Site de prévisualisation fermé. Merci de vous rendre sur le site +

Site de prévisualisation fermé. Merci de vous rendre sur le site principal.

From 749720bbf5acfcc7677fdb6db01e823226b4097e Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Sun, 6 Aug 2023 16:50:34 +0200 Subject: [PATCH 57/66] Bump theme version --- requirements-insiders.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-insiders.txt b/requirements-insiders.txt index bfcf356fa6..62e9172912 100644 --- a/requirements-insiders.txt +++ b/requirements-insiders.txt @@ -1,7 +1,7 @@ # Insiders # -------- -git+https://${GH_TOKEN_MATERIAL_INSIDERS}@github.com/squidfunk/mkdocs-material-insiders.git@9.1.18-insiders-4.37.0#egg=mkdocs-material +git+https://${GH_TOKEN_MATERIAL_INSIDERS}@github.com/squidfunk/mkdocs-material-insiders.git@9.1.21-insiders-4.39.0#egg=mkdocs-material # git+https://${GH_TOKEN_MATERIAL_INSIDERS}@github.com/squidfunk/mkdocs-material-insiders.git mkdocs-git-committers-plugin-2>=1,<2 From c0f08e73338a62612308e8f9443163d64b023944 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Sun, 6 Aug 2023 16:50:46 +0200 Subject: [PATCH 58/66] Add tags pages sort --- mkdocs.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/mkdocs.yml b/mkdocs.yml index 70616814b0..6bde5a14b3 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -103,6 +103,7 @@ plugins: enabled: !ENV [MKDOCS_ENABLE_PLUGIN_TAGS, true] tags_file: tags.md tags_compare: !!python/name:material.plugins.tags.plugin.casefold + tags_pages_compare: !!python/name:material.plugins.tags.page_url - privacy: enabled: !ENV [MKDOCS_ENABLE_PLUGIN_PRIVACY, true] assets_fetch_dir: @@ -157,10 +158,6 @@ theme: custom_dir: "./content/theme/" favicon: theme/assets/images/geotribu/logo_geotribu.png - # Don't include MkDocs' JavaScript - include_search_page: false - search_index_only: true - features: - content.action.edit - content.code.annotate From e310bf342a69c9bcab870bcf5877a8ebca92ef9e Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Sun, 6 Aug 2023 16:51:00 +0200 Subject: [PATCH 59/66] Add some YAML custom tags --- .vscode/settings.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index f20c346603..bbda4f4ea2 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -32,6 +32,8 @@ "!ENV sequence", "tag:yaml.org,2002:python/name:materialx.emoji.to_svg", "tag:yaml.org,2002:python/name:materialx.emoji.twemoji", - "tag:yaml.org,2002:python/name:pymdownx.superfences.fence_code_format" + "tag:yaml.org,2002:python/name:pymdownx.superfences.fence_code_format", + "tag:yaml.org,2002:python/name:material.plugins.tags.plugin.casefold", + "tag:yaml.org,2002:python/name:material.plugins.tags.page_url" ], } From 93d3fc37afc280329ba7a26877f0def280cb4192 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Sun, 6 Aug 2023 17:35:17 +0200 Subject: [PATCH 60/66] Add upper pin to theme --- requirements-free.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements-free.txt b/requirements-free.txt index 3765820683..7a0dfdc647 100644 --- a/requirements-free.txt +++ b/requirements-free.txt @@ -1,6 +1,6 @@ # No Material Insiders # -------------------- -mkdocs-material>=9,<10 +mkdocs-material>=9,<9.2 -r requirements.txt From aaf815191d21b6ca53025d9986934503a99b15a2 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Sun, 6 Aug 2023 17:36:02 +0200 Subject: [PATCH 61/66] Add mini CLI to handle custom config file --- .github/workflows/pr_checker_build.yml | 2 +- scripts/050_mkdocs_populate_latest.py | 43 ++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/.github/workflows/pr_checker_build.yml b/.github/workflows/pr_checker_build.yml index 5b132235c9..89741cdf79 100644 --- a/.github/workflows/pr_checker_build.yml +++ b/.github/workflows/pr_checker_build.yml @@ -74,7 +74,7 @@ jobs: export MKDOCS_SITE_URL="https://${NETLIFY_SITE_PREFIX}--${NETLIFY_SITE_NAME}.netlify.app/" # merge different configs - python scripts/050_mkdocs_populate_latest.py + python scripts/050_mkdocs_populate_latest.py -c ${{ env.MKDOCS_CONFIG_FILENAME }} python scripts/100_mkdocs_config_merger.py -c ${{ env.MKDOCS_CONFIG_FILENAME }} # build diff --git a/scripts/050_mkdocs_populate_latest.py b/scripts/050_mkdocs_populate_latest.py index a462b5e5c2..bf5003c26b 100644 --- a/scripts/050_mkdocs_populate_latest.py +++ b/scripts/050_mkdocs_populate_latest.py @@ -4,7 +4,8 @@ # ########## Libraries ############# # ################################## -# standard library +# standard lib +import argparse import logging from pathlib import Path from typing import Literal @@ -23,6 +24,40 @@ logger = logging.getLogger("mkdocs") +# -- CLI -- +parser = argparse.ArgumentParser( + prog="MkDocsConfigMerger", description="Merge configuration files.", add_help=True +) +parser.add_argument( + "-c", + "--config-file", + dest="output_config_file", + type=Path, + help="Path to the configuration file to complete. Must exist.", + default="mkdocs.yml", +) +parser.add_argument( + "-i", + "--input-folder", + dest="input_config_folder", + type=Path, + help="Path to the folder where to load configurations files to merge. Must exist.", + default="./config", +) + +args = parser.parse_args() + +output_config_file = args.output_config_file +input_config_folder = args.input_config_folder + +# -- CHECKS -- + +if not output_config_file.is_file(): + raise FileNotFoundError(output_config_file) +if not input_config_folder.is_dir(): + raise FileNotFoundError(input_config_folder) + + # ########################################################################### # ########## Functions ############# # ################################## @@ -62,7 +97,7 @@ def get_latest_content( # charge la configuration -with Path("mkdocs.yml").open(mode="r", encoding="UTF8") as in_yaml: +with output_config_file.open(mode="r", encoding="UTF8") as in_yaml: mkdocs_config = yaml_load(in_yaml) output_dict = {"latest": {"articles": [], "rdp": []}} @@ -75,7 +110,9 @@ def get_latest_content( social_card_image_base=f"{mkdocs_config.get('site_url')}assets/images/social/", ) -with Path("config/extra_latest.yml").open("w", encoding="UTF-8") as out_file: +with input_config_folder.joinpath("extra_latest.yml").open( + "w", encoding="UTF-8" +) as out_file: yaml.safe_dump( output_dict, out_file, From 4796cfd44ac780078b62129a9a185a87bb54219e Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Sun, 6 Aug 2023 17:36:22 +0200 Subject: [PATCH 62/66] Pass config file --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 5c766dc9ef..19d3e1c012 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -62,7 +62,7 @@ jobs: - name: Build static website run: | - python scripts/050_mkdocs_populate_latest.py + python scripts/050_mkdocs_populate_latest.py -c mkdocs.yml python scripts/100_mkdocs_config_merger.py -c mkdocs.yml mkdocs build --clean --config-file mkdocs.yml --verbose --strict env: From 490b45d0489eba0346670a3e34d939f4936aa5e2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 6 Aug 2023 15:43:59 +0000 Subject: [PATCH 63/66] Bump actions/upload-pages-artifact from 1 to 2 Bumps [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact) from 1 to 2. - [Release notes](https://github.com/actions/upload-pages-artifact/releases) - [Commits](https://github.com/actions/upload-pages-artifact/compare/v1...v2) --- updated-dependencies: - dependency-name: actions/upload-pages-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] --- .github/workflows/deploy.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 19d3e1c012..b93da08577 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -77,7 +77,7 @@ jobs: uses: actions/configure-pages@v3 - name: Upload artifact - uses: actions/upload-pages-artifact@v1 + uses: actions/upload-pages-artifact@v2 with: # Upload entire repository path: "build/mkdocs/site" From e2cbf56695cd34a8130674e3278699a73aa5d962 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 6 Aug 2023 16:39:59 +0000 Subject: [PATCH 64/66] Update pillow requirement from <9.6,>=9.4 to >=9.4,<10.1 Updates the requirements on [pillow](https://github.com/python-pillow/Pillow) to permit the latest version. - [Release notes](https://github.com/python-pillow/Pillow/releases) - [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst) - [Commits](https://github.com/python-pillow/Pillow/compare/9.4.0...10.0.0) --- updated-dependencies: - dependency-name: pillow dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index c57f4e8763..4d5fbb8f35 100644 --- a/requirements.txt +++ b/requirements.txt @@ -25,4 +25,4 @@ mkdocs-rss-plugin>=1.4,<1.8 # social plugin requirements CairoSVG>=2.5,<3 -Pillow>=9.4,<9.6 +Pillow>=9.4,<10.1 From d2e0ed9eebb3d095d0b34606a700da55c83df2b4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 6 Aug 2023 20:35:34 +0000 Subject: [PATCH 65/66] Update mkdocs-rss-plugin requirement from <1.8,>=1.4 to >=1.4,<1.9 Updates the requirements on [mkdocs-rss-plugin](https://github.com/Guts/mkdocs-rss-plugin) to permit the latest version. - [Release notes](https://github.com/Guts/mkdocs-rss-plugin/releases) - [Changelog](https://github.com/Guts/mkdocs-rss-plugin/blob/main/CHANGELOG.md) - [Commits](https://github.com/Guts/mkdocs-rss-plugin/compare/1.4.0...1.8.0) --- updated-dependencies: - dependency-name: mkdocs-rss-plugin dependency-type: direct:production ... Signed-off-by: dependabot[bot] --- requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.txt b/requirements.txt index 4d5fbb8f35..2f2fb5660d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -21,7 +21,7 @@ mkdocs-glightbox>=0.3,<0.4 mkdocs-macros-plugin>=0.5,<1.1 mkdocs-minify-plugin<0.7 mkdocs-redirects<1.3 -mkdocs-rss-plugin>=1.4,<1.8 +mkdocs-rss-plugin>=1.4,<1.9 # social plugin requirements CairoSVG>=2.5,<3 From 32c16166fe86a03ac2f7f9f5ddda148910f08851 Mon Sep 17 00:00:00 2001 From: GeoJulien Date: Tue, 8 Aug 2023 22:19:12 +0200 Subject: [PATCH 66/66] Make social plugin cache_dir settable with env var --- mkdocs.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/mkdocs.yml b/mkdocs.yml index 6bde5a14b3..8dee38fb08 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -142,6 +142,7 @@ plugins: - drfhlmcehrc34.cloudfront.net/* - social: enabled: !ENV [MKDOCS_ENABLE_PLUGIN_SOCIAL, true] + cache_dir: !ENV [MKDOCS_PLUGIN_SOCIAL_CACHE_DIR, .cache/plugins/social] cards: !ENV [MKDOCS_ENABLE_PLUGIN_SOCIAL_CARDS, true] cards_exclude: - index.md