Skip to content

Commit b4dd5e2

Browse files
committed
Merge branch 'main' into mapshaper
2 parents 8813985 + 7a358b2 commit b4dd5e2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+4193
-2652
lines changed

.github/workflows/check.yml

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: Test Python package
33
on: [push]
44

55
jobs:
6-
build-linux:
6+
testing:
77
runs-on: ubuntu-latest
88
strategy:
99
max-parallel: 5
@@ -14,16 +14,20 @@ jobs:
1414
uses: actions/setup-python@v3
1515
with:
1616
python-version: "3.10"
17+
- name: Add libmagic for python-magic on linux
18+
run: sudo apt-get install libmagic1
19+
- name: Install Poetry
20+
uses: snok/install-poetry@v1
1721
- name: Install dependencies
1822
run: |
19-
pip install -r requirements.txt
20-
pip install .
23+
poetry install --without dev
24+
poetry add pytest
2125
- name: Test import
2226
run: |
2327
export AWS_ACCESS_KEY_ID=${{ secrets.S3_ACCESS_KEY }}
2428
export AWS_SECRET_ACCESS_KEY=${{ secrets.S3_SECRET_KEY }}
25-
python example/download.py
26-
# - name: Test with pytest
27-
# run: |
28-
# conda install pytest
29-
# pytest
29+
# python example/download.py
30+
- name: Test with pytest
31+
run: |
32+
poetry run pytest
33+

.github/workflows/lint.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ name: Lint Python package
33
on: [push]
44

55
jobs:
6-
build-linux:
6+
lint-checking:
77
runs-on: ubuntu-latest
88
strategy:
99
max-parallel: 5
@@ -14,10 +14,13 @@ jobs:
1414
uses: actions/setup-python@v3
1515
with:
1616
python-version: "3.10"
17+
- name: Add libmagic for python-magic on linux
18+
run: sudo apt-get install libmagic1
19+
- name: Install Poetry
20+
uses: snok/install-poetry@v1
1721
- name: Install dependencies
1822
run: |
19-
pip install -r requirements.txt
20-
pip install .
23+
poetry install --without dev
2124
- name: Lint with flake8
2225
run: |
2326
cd cartiflette

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,6 @@ dmypy.json
131131
# Setuptools vs. poetry
132132
*.lock
133133
.toml
134+
135+
*.sqlite
136+
*.sqlite*

CONTRIBUTING.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Guide pour aider les développeurs du package <img height="18" width="18" src="https://cdn.simpleicons.org/python/00ccff99" /> `cartiflette`
22

33
Le _package_ <img height="18" width="18" src="https://cdn.simpleicons.org/python/00ccff99" /> `cartiflette`
4-
est une boite à outil qui répond principalement à deux objectifs:
4+
est une boite à outil qui répond principalement à deux objectifs :
55

66
- récupérer et restructurer les données diffusées par l'IGN pour produire des fonds de carte prêts à l'emploi
77
- interagir en écriture (mainteneurs du package) et en lecture (tous les utilisateurs) avec l'espace de stockage des fonds de carte proposés par `cartiflette`
@@ -11,7 +11,7 @@ est une boite à outil qui répond principalement à deux objectifs:
1111
Le package `cartiflette` est organisé en sous-packages thématiques:
1212

1313
- `cartiflette.utils`: une série de fonctions utilisées dans les autres sous-packages ou de fichiers de configuration utiles (comme le `sources.yaml`). Bien que certaines puissent être utiles à des utilisateurs du _package_, elles ont plutôt vocation à être des _internals_.
14-
- `cartiflette.download`: package pour communiquer avec le site de l'IGN. Les emplacements où aller chercher les fichiers sont dans le package `utils` et ce package se charge de télécharger, écrire dans un dossier temporaire dézipper en local la source.
14+
- `cartiflette.download`: package pour communiquer avec le site de l'IGN. Les emplacements où aller chercher les fichiers sont dans le package `utils` et ce package se charge de télécharger, écrire dans un dossier temporaire et dézipper en local la source.
1515
Un système de _cache_ existe pour éviter de télécharger plusieurs fois le même fichier.
1616
- `cartiflette.s3`: le package qui gère l'interaction avec le système de stockage. Les fonctions sont à deux niveaux dans ce package
1717
+ celles qui servent à écrire sur l'espace de stockage sont utilisées exclusivement par le _pipeline_ de production des fonds de carte `cartiflette`
@@ -23,12 +23,12 @@ Un système de _cache_ existe pour éviter de télécharger plusieurs fois le m
2323

2424
Les principales fonctions sont les suivantes:
2525

26-
- `create_url_adminexpress` (_internal_): en fonction de paramètres de l'utilisateur (source, année...), récupération dans le fichier de config
26+
- `create_url_adminexpress` (_internal_) : en fonction de paramètres de l'utilisateur (source, année...), récupération dans le fichier de config
2727
de l'URL où aller chercher les données `IGN`
28-
- `store_vectorfile_ign`: téléchargement des données IGN en fonction de paramètres de l'utilisateur (source, année...). Compter environ 500Mo pour les données Admin-Express et écriture dans un chemin standardisé
29-
- `get_vectorfile_ign`: après `store_vectorfile_ign`, lecture sous forme de `DataFrame` `GeoPandas`
30-
- `get_administrative_level_available_ign`: après `store_vectorfile_ign`, liste les niveaux administratifs disponibles
31-
- `get_vectorfile_communes_arrondissement`: fait un `get_vectorfile_ign` sur deux niveaux administratifs, les arrondissements et les communes. Pour les trois villes à arrondissement, retire la commune et remplace par les arrondissements.
28+
- `store_vectorfile_ign` : téléchargement des données IGN en fonction de paramètres de l'utilisateur (source, année...). Compter environ 500Mo pour les données Admin-Express et écriture dans un chemin standardisé
29+
- `get_vectorfile_ign` : après `store_vectorfile_ign`, lecture sous forme de `DataFrame` `GeoPandas`
30+
- `get_administrative_level_available_ign` : après `store_vectorfile_ign`, liste les niveaux administratifs disponibles
31+
- `get_vectorfile_communes_arrondissement` : fait un `get_vectorfile_ign` sur deux niveaux administratifs, les arrondissements et les communes. Pour les trois villes à arrondissement, retire la commune et remplace par les arrondissements.
3232

3333
Exemple :
3434

@@ -45,18 +45,18 @@ get_vectorfile_ign(
4545

4646
Bien que les fonctions de ce _package_
4747
puissent être mises à disposition des utilisateurs finaux de `cartiflette`, elles
48-
ont plutôt vocation à être utilisées lors de la production des fichiers de `cartiflette`
48+
ont plutôt vocation à être utilisées lors de la production des fichiers de `cartiflette`.
4949

5050
## `cartiflette.s3`
5151

52-
Les fonctions d'écriture sur l'espace de stockage ayant vocation à être dans le _pipeline_:
52+
Les fonctions d'écriture sur l'espace de stockage ayant vocation à être dans le _pipeline_ :
5353

5454
- `write_vectorfile_s3_all`
5555
- `write_vectorfile_s3_custom_arrondissement`
5656
- `production_cartiflette`
5757

5858
Les fonctions de récupération des fonds de carte ayant vocation à être mises à disposition
59-
des utilisateurs finaux:
59+
des utilisateurs finaux :
6060

6161
- `download_vectorfile_s3_all`
6262
- `download_vectorfile_url_all`

README.md

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,16 @@ A l’heure actuelle, `cartiflette` est structuré sous la forme d’un
2121
`package` :package: `Python` :snake:. Ceci est amené à évoluer pour
2222
faciliter encore plus la récupération de contours grâce à des API.
2323

24-
Tout ceci est donc amené à bien évoluer, n’hésitez pas à revenir
25-
fréqumment sur cette page.
24+
De nombres évolutions étant encore à venir, n’hésitez donc pas à repasser
25+
fréquemment sur cette page.
2626

2727
``` python
2828
pip install requests py7zr geopandas openpyxl tqdm s3fs PyYAML xlrd
2929
pip install git+https://github.com/inseefrlab/cartogether
3030
```
3131

3232
Pour tester le package, vous pouvez tenter de récupérer le contour des
33-
communes de la région Normandie:
33+
communes de la région Normandie :
3434

3535
``` python
3636
import cartiflette.s3
@@ -94,6 +94,6 @@ ax.set_axis_off()
9494

9595
## Plus de détails
9696

97-
- Pitch du projet ici: https://10pourcent.etalab.studio/projets/insee/
98-
- Ateliers ici:
97+
- Pitch du projet ici : https://10pourcent.etalab.studio/projets/insee/
98+
- Ateliers ici :
9999
https://github.com/etalab-ia/programme10pourcent/wiki/Ateliers-Faciliter-l%E2%80%99association-de-sources-de-donn%C3%A9es-g%C3%A9ographiques-issues-de-divers-producteurs-(INSEE,-IGN,-collectivit%C3%A9s-locales%E2%80%A6)#atelier2

README.qmd

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,16 +23,16 @@ la forme d'un `package` :package: `Python` :snake:.
2323
Ceci est amené à évoluer pour faciliter encore plus
2424
la récupération de contours grâce à des API.
2525

26-
Tout ceci est donc amené à bien évoluer, n'hésitez pas à
27-
revenir fréqumment sur cette page.
26+
De nombres évolutions étant encore à venir, nhésitez donc pas à repasser
27+
fréquemment sur cette page.
2828

2929
```python
3030
pip install requests py7zr geopandas openpyxl tqdm s3fs PyYAML xlrd
3131
pip install git+https://github.com/inseefrlab/cartogether
3232
```
3333

3434
Pour tester le package, vous pouvez tenter de récupérer
35-
le contour des communes de la région Normandie:
35+
le contour des communes de la région Normandie :
3636

3737
```{python}
3838
import cartiflette.s3
@@ -49,7 +49,7 @@ ax = normandie.plot()
4949
ax.set_axis_off()
5050
```
5151

52-
ou des régions Ile de France, Normandie et Bourgogne
52+
ou des régions Ile de France, Normandie et Bourgogne :
5353

5454

5555
```{python}
@@ -81,5 +81,5 @@ ax.set_axis_off()
8181

8282
## Plus de détails
8383

84-
- Pitch du projet ici: https://10pourcent.etalab.studio/projets/insee/
85-
- Ateliers ici: https://github.com/etalab-ia/programme10pourcent/wiki/Ateliers-Faciliter-l%E2%80%99association-de-sources-de-donn%C3%A9es-g%C3%A9ographiques-issues-de-divers-producteurs-(INSEE,-IGN,-collectivit%C3%A9s-locales%E2%80%A6)#atelier2
84+
- Pitch du projet ici : https://10pourcent.etalab.studio/projets/insee/
85+
- Ateliers ici : https://github.com/etalab-ia/programme10pourcent/wiki/Ateliers-Faciliter-l%E2%80%99association-de-sources-de-donn%C3%A9es-g%C3%A9ographiques-issues-de-divers-producteurs-(INSEE,-IGN,-collectivit%C3%A9s-locales%E2%80%A6)#atelier2

cartiflette/__init__.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,12 @@
1-
from .utils import *
2-
from .download import *
3-
from .s3 import *
1+
from cartiflette.config import (
2+
BUCKET,
3+
PATH_WITHIN_BUCKET,
4+
ENDPOINT_URL,
5+
FS,
6+
THREADS_DOWNLOAD,
7+
LEAVE_TQDM,
8+
)
9+
from cartiflette.constants import REFERENCES, DOWNLOAD_PIPELINE_ARGS
10+
from cartiflette.utils import *
11+
from cartiflette.download import *
12+
from cartiflette.s3 import *

cartiflette/config.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# -*- coding: utf-8 -*-
2+
from dotenv import load_dotenv
3+
import os
4+
import s3fs
5+
6+
load_dotenv()
7+
8+
BUCKET = "projet-cartiflette"
9+
PATH_WITHIN_BUCKET = "diffusion/shapefiles-test4"
10+
ENDPOINT_URL = "https://minio.lab.sspcloud.fr"
11+
12+
kwargs = {}
13+
for key in ["token", "secret", "key"]:
14+
try:
15+
kwargs[key] = os.environ[key]
16+
except KeyError:
17+
continue
18+
FS = s3fs.S3FileSystem(client_kwargs={"endpoint_url": ENDPOINT_URL}, **kwargs)
19+
20+
THREADS_DOWNLOAD = 5
21+
# Nota : each thread may also span the same number of children threads;
22+
# set to 1 for debugging purposes (will deactivate multithreading)
23+
24+
LEAVE_TQDM = False

cartiflette/constants.py

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
# -*- coding: utf-8 -*-
2+
3+
import geopandas as gpd
4+
import logging
5+
from shapely.geometry import box
6+
7+
8+
logger = logging.getLogger(__name__)
9+
10+
REFERENCES = [
11+
# use : https://boundingbox.klokantech.com/
12+
{"location": "metropole", "geometry": box(-5.45, 41.26, 9.83, 51.31)},
13+
{"location": "guyane", "geometry": box(-54.6, 2.11, -51.5, 5.98)},
14+
{
15+
"location": "martinique",
16+
"geometry": box(-61.4355, 14.2217, -60.6023, 15.0795),
17+
},
18+
{
19+
"location": "guadeloupe",
20+
"geometry": box(-62.018, 15.6444, -60.792, 16.714),
21+
},
22+
{
23+
"location": "reunion",
24+
"geometry": box(55.0033, -21.5904, 56.0508, -20.6728),
25+
},
26+
{
27+
"location": "mayotte",
28+
"geometry": box(44.7437, -13.2733, 45.507, -12.379),
29+
},
30+
{
31+
"location": "saint_pierre_et_miquelon",
32+
"geometry": box(-56.6975, 46.5488, -55.9066, 47.3416),
33+
},
34+
]
35+
36+
REFERENCES = gpd.GeoDataFrame(REFERENCES, crs=4326)
37+
38+
DOWNLOAD_PIPELINE_ARGS = {
39+
"ADMIN-EXPRESS": [
40+
"IGN",
41+
"ADMINEXPRESS",
42+
"EXPRESS-COG-TERRITOIRE",
43+
[
44+
"guadeloupe",
45+
"martinique",
46+
"guyane",
47+
"reunion",
48+
"mayotte",
49+
"metropole",
50+
],
51+
],
52+
"BDTOPO": ["IGN", "BDTOPO", "ROOT", "france_entiere"],
53+
"IRIS": ["IGN", "CONTOUR-IRIS", "ROOT", None],
54+
"COG": [
55+
"Insee",
56+
"COG",
57+
[
58+
"COMMUNE",
59+
"CANTON",
60+
"ARRONDISSEMENT",
61+
"DEPARTEMENT",
62+
"REGION",
63+
"COLLECTIVITE",
64+
"PAYS",
65+
],
66+
"france_entiere",
67+
],
68+
"BV 2022": ["Insee", "BV", "FondsDeCarte_BV_2022", "france_entiere"],
69+
"BV 2012": ["Insee", "BV", "FondsDeCarte_BV_2012", "france_entiere"],
70+
}
71+
72+
# EXPRESS-COG ?
73+
# EXPRESS-COG-CARTO-TERRITOIRE ?
74+
# EXPRESS-COG-CARTO ?

cartiflette/download/__init__.py

Lines changed: 9 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,14 @@
1-
from .dev import (
2-
# create_url_adminexpress,
3-
get_vectorfile_ign,
4-
# get_administrative_level_available_ign,
5-
store_vectorfile_ign,
6-
get_vectorfile_communes_arrondissement,
7-
# get_BV,
8-
get_cog_year,
9-
)
1+
# from cartiflette.download.dev import (
2+
# get_vectorfile_communes_arrondissement,
3+
# # get_BV,
4+
# )
5+
106

11-
from .download import (
12-
Dataset,
13-
BaseScraper,
14-
HttpScraper,
15-
FtpScraper,
16-
MasterScraper,
17-
download_sources,
7+
from cartiflette.download.pipeline import (
8+
download_all,
189
)
1910

11+
2012
__all__ = [
21-
# "create_url_adminexpress",
22-
"get_vectorfile_ign",
23-
# "get_administrative_level_available_ign",
24-
"store_vectorfile_ign",
25-
"get_vectorfile_communes_arrondissement",
26-
# "get_BV",
27-
"get_cog_year",
28-
"Dataset",
29-
"BaseScraper",
30-
"HttpScraper",
31-
"FtpScraper",
32-
"MasterScraper",
33-
"download_sources",
13+
"download_all",
3414
]

0 commit comments

Comments
 (0)