umap-project 2.8.0a0__tar.gz → 2.8.0a2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of umap-project might be problematic. Click here for more details.
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/PKG-INFO +1 -1
- umap_project-2.8.0a2/umap/__init__.py +1 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/en/LC_MESSAGES/django.po +13 -13
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/management/commands/empty_trash.py +5 -2
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/management/commands/migrate_to_S3.py +3 -3
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/settings/base.py +2 -2
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/data/layer.js +39 -18
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/importer.js +58 -18
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/umap.js +5 -3
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/en.js +3 -1
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/en.json +3 -1
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/fr.js +3 -1
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/fr.json +3 -1
- umap_project-2.8.0a2/umap/storage/__init__.py +3 -0
- umap_project-2.8.0a2/umap/storage/fs.py +101 -0
- umap_project-2.8.0a2/umap/storage/s3.py +61 -0
- umap_project-2.8.0a2/umap/storage/staticfiles.py +64 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/test_datalayer_s3.py +1 -1
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/test_statics.py +1 -1
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/views.py +15 -14
- umap_project-2.8.0a0/umap/__init__.py +0 -1
- umap_project-2.8.0a0/umap/storage.py +0 -216
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/.gitignore +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/LICENSE +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/README.md +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/pyproject.toml +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/admin.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/apps.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/asgi.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/autocomplete.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/bin/__init__.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/context_processors.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/decorators.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/fields.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/forms.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/am_ET/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/am_ET/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/ar/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/ar/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/ast/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/ast/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/bg/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/bg/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/br/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/br/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/ca/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/ca/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/cs_CZ/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/da/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/da/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/de/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/de/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/el/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/el/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/en/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/es/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/es/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/et/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/et/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/eu/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/eu/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/fa_IR/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/fa_IR/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/fi/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/fi/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/fr/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/fr/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/gl/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/gl/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/he/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/he/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/hr/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/hr/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/hu/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/hu/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/id/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/id/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/is/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/is/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/it/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/it/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/ja/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/ja/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/ko/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/ko/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/lt/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/lt/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/ms/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/ms/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/nl/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/nl/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/no/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/no/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/pl/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/pl/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/pt/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/pt/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/pt_BR/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/pt_PT/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/ro/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/ro/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/ru/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/ru/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/si/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/si/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/sk_SK/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/sl/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/sl/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/sr/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/sr/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/sv/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/sv/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/th_TH/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/th_TH/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/tr/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/tr/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/uk_UA/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/uk_UA/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/vi/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/vi/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/zh/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/zh/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/zh_TW/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/locale/zh_TW/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/management/__init__.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/management/commands/__init__.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/management/commands/anonymous_edit_url.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/management/commands/clean_tilelayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/management/commands/generate_js_locale.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/management/commands/import_pictograms.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/management/commands/run_websocket_server.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/managers.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/middleware.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0001_initial.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0002_tilelayer_tms.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0003_add_tilelayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0004_add_licence.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0005_remove_map_tilelayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0006_auto_20190407_0719.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0007_auto_20190416_1757.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0008_alter_map_settings.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0009_star.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0010_alter_map_edit_status_alter_map_share_status.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0011_alter_map_edit_status_alter_map_share_status.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0012_datalayer_settings.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0013_datalayer_edit_status.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0014_map_created_at.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0015_alter_pictogram_pictogram.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0016_pictogram_category.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0017_migrate_to_openstreetmap_oauth2.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0018_datalayer_uuid.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0019_migrate_internal_remote_datalayers.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0020_alter_tilelayer_url_template.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0021_remove_map_description.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0022_add_team.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0023_alter_datalayer_uuid.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0024_alter_map_share_status.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/0025_alter_datalayer_geojson.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/migrations/__init__.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/models.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/settings/__init__.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/settings/dev.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/settings/local.py.sample +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/.gitignore +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/base.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/bitbucket.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/content.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/css/bar.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/css/contextmenu.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/css/dialog.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/css/form.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/css/icon.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/css/importers.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/css/panel.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/css/popup.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/css/slideshow.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/css/tableeditor.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/css/tooltip.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/css/window.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/favicons/apple-touch-icon.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/favicons/favicon.ico +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/favicons/icon-192.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/favicons/icon-512.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/favicons/icon.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/font/FiraSans-Light.woff +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/font/FiraSans-Light.woff2 +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/font/FiraSans-LightItalic.woff +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/font/FiraSans-LightItalic.woff2 +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/font/FiraSans-SemiBold.woff +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/font/FiraSans-SemiBold.woff2 +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/font.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/github.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/16-white.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/16.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/24-white.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/24.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/alert-icon-error.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/alert-icon-info.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/alert-icon-success.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/edit.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/icon-bg.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/icon-delete.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/icon-download.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/icon-duplicate.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/icon-edit.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/icon-external-link.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/icon-share.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/icon-view.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/importers/cadastrefr.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/importers/communesfr.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/importers/datasets.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/importers/geodatamine.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/importers/overpass.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/importers/random.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/importers/random1.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/importers/random2.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/logo.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/logo_filigree.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/logo_small.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/marker.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/marker.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/opensource.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/osm.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/search.gif +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/source/16-white.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/source/16.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/source/24-white.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/img/source/24.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/components/alerts/alert.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/components/alerts/alert.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/components/base.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/components/fragment.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/autocomplete.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/browser.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/caption.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/data/features.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/dompurify.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/facets.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/formatter.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/global.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/help.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/i18n.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/importers/cadastrefr.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/importers/communesfr.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/importers/datasets.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/importers/geodatamine.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/importers/overpass.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/leaflet-configure.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/orderable.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/permissions.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/rendering/icon.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/rendering/layers/base.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/rendering/layers/classified.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/rendering/layers/cluster.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/rendering/layers/heat.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/rendering/map.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/rendering/popup.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/rendering/template.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/rendering/ui.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/request.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/rules.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/saving.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/schema.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/share.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/slideshow.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/sync/engine.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/sync/hlc.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/sync/updaters.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/sync/websocket.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/tableeditor.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/ui/bar.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/ui/base.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/ui/contextmenu.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/ui/dialog.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/ui/panel.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/ui/tooltip.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/urls.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/modules/utils.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/umap.controls.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/umap.core.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/js/umap.forms.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/keycloak.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/am_ET.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/am_ET.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/ar.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/ar.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/ast.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/ast.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/bg.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/bg.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/br.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/br.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/ca.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/ca.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/cs_CZ.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/cs_CZ.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/da.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/da.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/de.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/de.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/el.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/el.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/en_US.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/es.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/es.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/et.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/et.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/eu.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/eu.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/fa_IR.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/fa_IR.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/fi.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/fi.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/gl.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/gl.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/he.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/he.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/hr.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/hr.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/hu.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/hu.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/id.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/id.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/is.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/is.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/it.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/it.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/ja.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/ja.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/ko.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/ko.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/lt.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/lt.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/ms.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/ms.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/nl.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/nl.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/no.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/no.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/pl.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/pl.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/pl_PL.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/pt.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/pt.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/pt_BR.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/pt_BR.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/pt_PT.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/pt_PT.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/ro.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/ro.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/ru.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/ru.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/si.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/si.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/sk_SK.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/sk_SK.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/sl.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/sl.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/sr.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/sr.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/sv.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/sv.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/th_TH.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/th_TH.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/tr.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/tr.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/uk_UA.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/uk_UA.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/vi.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/vi.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/vi_VN.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/zh.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/zh.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/zh_CN.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/zh_TW.Big5.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/zh_TW.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/locale/zh_TW.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/map.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/nav.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/openstreetmap.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/test/.eslintrc +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/test/DataLayer.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/test/Feature.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/test/Map.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/test/Marker.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/test/Polygon.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/test/Polyline.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/test/Util.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/test/_pre.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/test/index.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/theme.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/twitter.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/unittests/URLs.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/unittests/hlc.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/unittests/sync.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/unittests/utils.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vars.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/colorbrewer/colorbrewer.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/csv2geojson/csv2geojson.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/dompurify/purify.es.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/dompurify/purify.es.mjs.map +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/editable/Leaflet.Editable.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/editable/Path.Drag.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/editinosm/Leaflet.EditInOSM.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/editinosm/Leaflet.EditInOSM.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/editinosm/edit-in-osm.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/formbuilder/Leaflet.FormBuilder.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/fullscreen/Leaflet.fullscreen.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/fullscreen/Leaflet.fullscreen.min.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/fullscreen/fullscreen.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/fullscreen/fullscreen@2x.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/fullscreen/leaflet.fullscreen.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/geojson-to-gpx/index.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/georsstogeojson/GeoRSSToGeoJSON.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/hash/leaflet-hash.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/heat/leaflet-heat.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/i18n/Leaflet.i18n.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/iconlayers/check.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/iconlayers/iconLayers.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/iconlayers/iconLayers.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/iconlayers/transparent-pixel.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/leaflet/images/layers-2x.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/leaflet/images/layers.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/leaflet/images/marker-icon-2x.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/leaflet/images/marker-icon.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/leaflet/images/marker-shadow.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/leaflet/leaflet-src.esm.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/leaflet/leaflet-src.esm.js.map +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/leaflet/leaflet.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/loading/Control.Loading.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/loading/Control.Loading.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/locatecontrol/L.Control.Locate.min.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/locatecontrol/L.Control.Locate.min.css.map +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/locatecontrol/L.Control.Locate.min.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/locatecontrol/L.Control.Locate.min.js.map +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/markercluster/MarkerCluster.Default.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/markercluster/MarkerCluster.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/markercluster/leaflet.markercluster.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/markercluster/leaflet.markercluster.js.map +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/measurable/Leaflet.Measurable.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/measurable/Leaflet.Measurable.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/minimap/Control.MiniMap.min.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/minimap/Control.MiniMap.min.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/minimap/images/toggle.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/minimap/images/toggle.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/osmtogeojson/osmtogeojson.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/photon/leaflet.photon.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/simple-statistics/simple-statistics.min.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/simple-statistics/simple-statistics.min.js.map +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/togeojson/togeojson.es.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/togeojson/togeojson.es.mjs.map +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/tokml/tokml.es.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/tokml/tokml.es.mjs.map +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/toolbar/leaflet.toolbar.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/static/umap/vendors/toolbar/leaflet.toolbar.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/404.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/500.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/auth/user_detail.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/auth/user_form.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/auth/user_stars.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/base.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/registration/login.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/about.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/about_summary.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/branding.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/components/alerts/alert.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/content.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/content_footer.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/css.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/dashboard_menu.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/footer.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/header.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/home.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/js.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/locale.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/login_popup_end.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/map_detail.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/map_fragment.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/map_init.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/map_list.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/map_table.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/messages.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/navigation.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/password_change.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/password_change_done.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/search.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/search_bar.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/success.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/team_confirm_delete.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/team_detail.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/team_form.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/user_dashboard.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templates/umap/user_teams.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templatetags/__init__.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/templatetags/umap_tags.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/__init__.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/base.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/conftest.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/categorized_highway.geojson +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/choropleth_region_chomage.geojson +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/circle.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/display_on_load.umap +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/empty_tile.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/star.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/test_circles_layer.geojson +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/test_import_osm_relation.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/test_upload_data.csv +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/test_upload_data.gpx +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/test_upload_data.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/test_upload_data.kml +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/test_upload_data.umap +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/test_upload_data_osm.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/test_upload_empty_coordinates.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/test_upload_georss.xml +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/test_upload_missing_name.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/fixtures/test_upload_non_linear_ring.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/__init__.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/conftest.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/helpers.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_anonymous_owned_map.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_basics.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_browser.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_caption.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_categorized_layer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_choropleth.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_circles_layer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_cluster.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_conditional_rules.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_dashboard.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_datalayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_draw_polygon.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_draw_polyline.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_edit_datalayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_edit_map.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_edit_marker.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_edit_polygon.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_export_map.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_facets_browser.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_features_id_generation.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_import.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_map.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_map_list.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_map_preview.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_optimistic_merge.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_owned_map.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_picto.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_popup.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_querystring.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_save.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_share.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_slideshow.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_star.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_tableeditor.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_team.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_tilelayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_view_marker.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_view_polygon.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_view_polyline.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/integration/test_websocket_sync.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/settings.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/test_clean_tilelayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/test_datalayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/test_datalayer_views.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/test_empty_trash.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/test_licence.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/test_map.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/test_map_views.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/test_merge_features.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/test_team_views.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/test_tilelayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/test_utils.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/test_views.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/tests/test_websocket_server.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/urls.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/utils.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/websocket_server.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a2}/umap/wsgi.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
VERSION = "2.8.0a2"
|
|
@@ -8,7 +8,7 @@ msgid ""
|
|
|
8
8
|
msgstr ""
|
|
9
9
|
"Project-Id-Version: PACKAGE VERSION\n"
|
|
10
10
|
"Report-Msgid-Bugs-To: \n"
|
|
11
|
-
"POT-Creation-Date: 2024-12-
|
|
11
|
+
"POT-Creation-Date: 2024-12-13 08:26+0000\n"
|
|
12
12
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
|
13
13
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
|
14
14
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
|
@@ -617,57 +617,57 @@ msgstr ""
|
|
|
617
617
|
msgid "View the map"
|
|
618
618
|
msgstr ""
|
|
619
619
|
|
|
620
|
-
#: views.py:
|
|
620
|
+
#: views.py:821
|
|
621
621
|
msgid "See full screen"
|
|
622
622
|
msgstr ""
|
|
623
623
|
|
|
624
|
-
#: views.py:
|
|
624
|
+
#: views.py:964
|
|
625
625
|
msgid "Map editors updated with success!"
|
|
626
626
|
msgstr ""
|
|
627
627
|
|
|
628
|
-
#: views.py:
|
|
628
|
+
#: views.py:1000
|
|
629
629
|
#, python-format
|
|
630
630
|
msgid "The uMap edit link for your map: %(map_name)s"
|
|
631
631
|
msgstr ""
|
|
632
632
|
|
|
633
|
-
#: views.py:
|
|
633
|
+
#: views.py:1003
|
|
634
634
|
#, python-format
|
|
635
635
|
msgid "Here is your secret edit link: %(link)s"
|
|
636
636
|
msgstr ""
|
|
637
637
|
|
|
638
|
-
#: views.py:
|
|
638
|
+
#: views.py:1010
|
|
639
639
|
#, python-format
|
|
640
640
|
msgid "Can't send email to %(email)s"
|
|
641
641
|
msgstr ""
|
|
642
642
|
|
|
643
|
-
#: views.py:
|
|
643
|
+
#: views.py:1013
|
|
644
644
|
#, python-format
|
|
645
645
|
msgid "Email sent to %(email)s"
|
|
646
646
|
msgstr ""
|
|
647
647
|
|
|
648
|
-
#: views.py:
|
|
648
|
+
#: views.py:1024
|
|
649
649
|
msgid "Only its owner can delete the map."
|
|
650
650
|
msgstr ""
|
|
651
651
|
|
|
652
|
-
#: views.py:
|
|
652
|
+
#: views.py:1027
|
|
653
653
|
msgid "Map successfully deleted."
|
|
654
654
|
msgstr ""
|
|
655
655
|
|
|
656
|
-
#: views.py:
|
|
656
|
+
#: views.py:1053
|
|
657
657
|
#, python-format
|
|
658
658
|
msgid ""
|
|
659
659
|
"Your map has been cloned! If you want to edit this map from another "
|
|
660
660
|
"computer, please use this link: %(anonymous_url)s"
|
|
661
661
|
msgstr ""
|
|
662
662
|
|
|
663
|
-
#: views.py:
|
|
663
|
+
#: views.py:1058
|
|
664
664
|
msgid "Congratulations, your map has been cloned!"
|
|
665
665
|
msgstr ""
|
|
666
666
|
|
|
667
|
-
#: views.py:
|
|
667
|
+
#: views.py:1309
|
|
668
668
|
msgid "Layer successfully deleted."
|
|
669
669
|
msgstr ""
|
|
670
670
|
|
|
671
|
-
#: views.py:
|
|
671
|
+
#: views.py:1331
|
|
672
672
|
msgid "Permissions updated with success!"
|
|
673
673
|
msgstr ""
|
|
@@ -23,10 +23,13 @@ class Command(BaseCommand):
|
|
|
23
23
|
|
|
24
24
|
def handle(self, *args, **options):
|
|
25
25
|
days = options["days"]
|
|
26
|
-
since = datetime.utcnow() - timedelta(days=days)
|
|
26
|
+
since = (datetime.utcnow() - timedelta(days=days)).date()
|
|
27
27
|
print(f"Deleting map in trash since {since}")
|
|
28
28
|
maps = Map.objects.filter(share_status=Map.DELETED, modified_at__lt=since)
|
|
29
29
|
for map in maps:
|
|
30
|
+
map_id = map.id
|
|
31
|
+
map_name = map.name
|
|
32
|
+
trashed_at = map.modified_at.date()
|
|
30
33
|
if not options["dry_run"]:
|
|
31
34
|
map.delete()
|
|
32
|
-
print(f"Deleted map {
|
|
35
|
+
print(f"Deleted map {map_name} ({map_id}), trashed at {trashed_at}")
|
|
@@ -2,7 +2,7 @@ from django.conf import settings
|
|
|
2
2
|
from django.core.management.base import BaseCommand
|
|
3
3
|
|
|
4
4
|
from umap.models import DataLayer
|
|
5
|
-
from umap.storage import
|
|
5
|
+
from umap.storage.fs import FSDataStorage
|
|
6
6
|
|
|
7
7
|
|
|
8
8
|
class Command(BaseCommand):
|
|
@@ -11,9 +11,9 @@ class Command(BaseCommand):
|
|
|
11
11
|
def handle(self, *args, **options):
|
|
12
12
|
assert settings.UMAP_READONLY, "You must run that script with a read-only uMap."
|
|
13
13
|
assert (
|
|
14
|
-
settings.STORAGES["data"]["BACKEND"] == "umap.storage.
|
|
14
|
+
settings.STORAGES["data"]["BACKEND"] == "umap.storage.s3.S3DataStorage"
|
|
15
15
|
), "You must configure your storages to point to S3"
|
|
16
|
-
fs_storage =
|
|
16
|
+
fs_storage = FSDataStorage()
|
|
17
17
|
for datalayer in DataLayer.objects.all():
|
|
18
18
|
geojson_fs_path = str(datalayer.geojson)
|
|
19
19
|
try:
|
|
@@ -176,10 +176,10 @@ STORAGES = {
|
|
|
176
176
|
"BACKEND": "django.core.files.storage.FileSystemStorage",
|
|
177
177
|
},
|
|
178
178
|
"data": {
|
|
179
|
-
"BACKEND": "umap.storage.
|
|
179
|
+
"BACKEND": "umap.storage.fs.FSDataStorage",
|
|
180
180
|
},
|
|
181
181
|
"staticfiles": {
|
|
182
|
-
"BACKEND": "umap.storage.UmapManifestStaticFilesStorage",
|
|
182
|
+
"BACKEND": "umap.storage.staticfiles.UmapManifestStaticFilesStorage",
|
|
183
183
|
},
|
|
184
184
|
}
|
|
185
185
|
# Add application/json and application/geo+json to default django-storages setting
|
|
@@ -252,10 +252,11 @@ export class DataLayer extends ServerStored {
|
|
|
252
252
|
}
|
|
253
253
|
|
|
254
254
|
fromGeoJSON(geojson, sync = true) {
|
|
255
|
-
this.addData(geojson, sync)
|
|
255
|
+
const features = this.addData(geojson, sync)
|
|
256
256
|
this._geojson = geojson
|
|
257
257
|
this.onDataLoaded()
|
|
258
258
|
this.dataChanged()
|
|
259
|
+
return features
|
|
259
260
|
}
|
|
260
261
|
|
|
261
262
|
onDataLoaded() {
|
|
@@ -315,7 +316,7 @@ export class DataLayer extends ServerStored {
|
|
|
315
316
|
const response = await this._umap.request.get(url)
|
|
316
317
|
if (response?.ok) {
|
|
317
318
|
this.clear()
|
|
318
|
-
this._umap.formatter
|
|
319
|
+
return this._umap.formatter
|
|
319
320
|
.parse(await response.text(), this.options.remoteData.format)
|
|
320
321
|
.then((geojson) => this.fromGeoJSON(geojson))
|
|
321
322
|
}
|
|
@@ -443,10 +444,11 @@ export class DataLayer extends ServerStored {
|
|
|
443
444
|
try {
|
|
444
445
|
// Do not fail if remote data is somehow invalid,
|
|
445
446
|
// otherwise the layer becomes uneditable.
|
|
446
|
-
this.makeFeatures(geojson, sync)
|
|
447
|
+
return this.makeFeatures(geojson, sync)
|
|
447
448
|
} catch (err) {
|
|
448
449
|
console.log('Error with DataLayer', this.id)
|
|
449
450
|
console.error(err)
|
|
451
|
+
return []
|
|
450
452
|
}
|
|
451
453
|
}
|
|
452
454
|
|
|
@@ -463,10 +465,13 @@ export class DataLayer extends ServerStored {
|
|
|
463
465
|
? geojson
|
|
464
466
|
: geojson.features || geojson.geometries
|
|
465
467
|
if (!collection) return
|
|
468
|
+
const features = []
|
|
466
469
|
this.sortFeatures(collection)
|
|
467
|
-
for (const
|
|
468
|
-
this.makeFeature(
|
|
470
|
+
for (const featureJson of collection) {
|
|
471
|
+
const feature = this.makeFeature(featureJson, sync)
|
|
472
|
+
if (feature) features.push(feature)
|
|
469
473
|
}
|
|
474
|
+
return features
|
|
470
475
|
}
|
|
471
476
|
|
|
472
477
|
makeFeature(geojson = {}, sync = true, id = null) {
|
|
@@ -503,31 +508,47 @@ export class DataLayer extends ServerStored {
|
|
|
503
508
|
}
|
|
504
509
|
|
|
505
510
|
async importRaw(raw, format) {
|
|
506
|
-
this._umap.formatter
|
|
511
|
+
return this._umap.formatter
|
|
507
512
|
.parse(raw, format)
|
|
508
513
|
.then((geojson) => this.addData(geojson))
|
|
509
|
-
.then(() =>
|
|
510
|
-
|
|
514
|
+
.then((data) => {
|
|
515
|
+
if (data?.length) this.isDirty = true
|
|
516
|
+
return data
|
|
517
|
+
})
|
|
511
518
|
}
|
|
512
519
|
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
520
|
+
readFile(f) {
|
|
521
|
+
return new Promise((resolve) => {
|
|
522
|
+
const reader = new FileReader()
|
|
523
|
+
reader.onloadend = () => resolve(reader.result)
|
|
524
|
+
reader.readAsText(f)
|
|
525
|
+
})
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
async importFromFiles(files, type) {
|
|
529
|
+
let all = []
|
|
530
|
+
for (const file of files) {
|
|
531
|
+
const features = await this.importFromFile(file, type)
|
|
532
|
+
if (features) {
|
|
533
|
+
all = all.concat(features)
|
|
534
|
+
}
|
|
516
535
|
}
|
|
536
|
+
return new Promise((resolve) => {
|
|
537
|
+
resolve(all)
|
|
538
|
+
})
|
|
517
539
|
}
|
|
518
540
|
|
|
519
|
-
importFromFile(
|
|
520
|
-
const reader = new FileReader()
|
|
541
|
+
async importFromFile(file, type) {
|
|
521
542
|
type = type || Utils.detectFileType(f)
|
|
522
|
-
|
|
523
|
-
|
|
543
|
+
const raw = await this.readFile(file)
|
|
544
|
+
return this.importRaw(raw, type)
|
|
524
545
|
}
|
|
525
546
|
|
|
526
547
|
async importFromUrl(uri, type) {
|
|
527
548
|
uri = this._umap.renderUrl(uri)
|
|
528
549
|
const response = await this._umap.request.get(uri)
|
|
529
550
|
if (response?.ok) {
|
|
530
|
-
this.importRaw(await response.text(), type)
|
|
551
|
+
return this.importRaw(await response.text(), type)
|
|
531
552
|
}
|
|
532
553
|
}
|
|
533
554
|
|
|
@@ -930,9 +951,9 @@ export class DataLayer extends ServerStored {
|
|
|
930
951
|
else this.hide()
|
|
931
952
|
}
|
|
932
953
|
|
|
933
|
-
zoomTo() {
|
|
954
|
+
zoomTo(bounds) {
|
|
934
955
|
if (!this.isVisible()) return
|
|
935
|
-
|
|
956
|
+
bounds = bounds || this.layer.getBounds()
|
|
936
957
|
if (bounds.isValid()) {
|
|
937
958
|
const options = { maxZoom: this.getOption('zoomTo') }
|
|
938
959
|
this._leafletMap.fitBounds(bounds, options)
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
DomEvent,
|
|
3
|
+
DomUtil,
|
|
4
|
+
LatLngBounds,
|
|
5
|
+
} from '../../vendors/leaflet/leaflet-src.esm.js'
|
|
2
6
|
import { uMapAlert as Alert } from '../components/alerts/alert.js'
|
|
3
7
|
import { translate } from './i18n.js'
|
|
4
8
|
import { SCHEMA } from './schema.js'
|
|
@@ -270,16 +274,12 @@ export default class Importer extends Utils.WithTemplate {
|
|
|
270
274
|
}
|
|
271
275
|
|
|
272
276
|
submit() {
|
|
273
|
-
let hasErrors
|
|
274
277
|
if (this.format === 'umap') {
|
|
275
|
-
|
|
278
|
+
this.full()
|
|
276
279
|
} else if (!this.url) {
|
|
277
|
-
|
|
280
|
+
this.copy()
|
|
278
281
|
} else if (this.action) {
|
|
279
|
-
|
|
280
|
-
}
|
|
281
|
-
if (hasErrors === false) {
|
|
282
|
-
Alert.info(translate('Data successfully imported!'))
|
|
282
|
+
this[this.action]()
|
|
283
283
|
}
|
|
284
284
|
}
|
|
285
285
|
|
|
@@ -294,8 +294,9 @@ export default class Importer extends Utils.WithTemplate {
|
|
|
294
294
|
} else if (this.url) {
|
|
295
295
|
this._umap.importFromUrl(this.url, this.format)
|
|
296
296
|
}
|
|
297
|
+
this.onSuccess()
|
|
297
298
|
} catch (e) {
|
|
298
|
-
|
|
299
|
+
this.onError(translate('Invalid umap data'))
|
|
299
300
|
console.error(e)
|
|
300
301
|
return false
|
|
301
302
|
}
|
|
@@ -306,7 +307,7 @@ export default class Importer extends Utils.WithTemplate {
|
|
|
306
307
|
return false
|
|
307
308
|
}
|
|
308
309
|
if (!this.format) {
|
|
309
|
-
|
|
310
|
+
this.onError(translate('Please choose a format'))
|
|
310
311
|
return false
|
|
311
312
|
}
|
|
312
313
|
const layer = this.layer
|
|
@@ -318,26 +319,65 @@ export default class Importer extends Utils.WithTemplate {
|
|
|
318
319
|
layer.options.remoteData.proxy = true
|
|
319
320
|
layer.options.remoteData.ttl = SCHEMA.ttl.default
|
|
320
321
|
}
|
|
321
|
-
layer.fetchRemoteData(true)
|
|
322
|
+
layer.fetchRemoteData(true).then((features) => {
|
|
323
|
+
if (features?.length) {
|
|
324
|
+
layer.zoomTo()
|
|
325
|
+
this.onSuccess()
|
|
326
|
+
} else {
|
|
327
|
+
this.onError()
|
|
328
|
+
}
|
|
329
|
+
})
|
|
322
330
|
}
|
|
323
331
|
|
|
324
|
-
copy() {
|
|
332
|
+
async copy() {
|
|
325
333
|
// Format may be guessed from file later.
|
|
326
334
|
// Usefull in case of multiple files with different formats.
|
|
327
335
|
if (!this.format && !this.files.length) {
|
|
328
|
-
|
|
336
|
+
this.onError(translate('Please choose a format'))
|
|
329
337
|
return false
|
|
330
338
|
}
|
|
339
|
+
let promise
|
|
331
340
|
const layer = this.layer
|
|
332
341
|
if (this.clear) layer.empty()
|
|
333
342
|
if (this.files.length) {
|
|
334
|
-
|
|
335
|
-
this._umap.processFileToImport(file, layer, this.format)
|
|
336
|
-
}
|
|
343
|
+
promise = layer.importFromFiles(this.files, this.format)
|
|
337
344
|
} else if (this.raw) {
|
|
338
|
-
layer.importRaw(this.raw, this.format)
|
|
345
|
+
promise = layer.importRaw(this.raw, this.format)
|
|
339
346
|
} else if (this.url) {
|
|
340
|
-
layer.importFromUrl(this.url, this.format)
|
|
347
|
+
promise = layer.importFromUrl(this.url, this.format)
|
|
348
|
+
}
|
|
349
|
+
if (promise) promise.then((data) => this.onCopyFinished(layer, data))
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
onError(message = translate('No data has been found for import')) {
|
|
353
|
+
Alert.error(message)
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
onSuccess(count) {
|
|
357
|
+
if (count) {
|
|
358
|
+
Alert.success(translate('Successfully imported {count} feature(s)'), {
|
|
359
|
+
count: count,
|
|
360
|
+
})
|
|
361
|
+
} else {
|
|
362
|
+
Alert.success(translate('Data successfully imported!'))
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
onCopyFinished(layer, features) {
|
|
367
|
+
// undefined features means error, let original error message pop
|
|
368
|
+
if (!features) return
|
|
369
|
+
if (!features.length) {
|
|
370
|
+
this.onError()
|
|
371
|
+
} else {
|
|
372
|
+
const bounds = new LatLngBounds()
|
|
373
|
+
for (const feature of features) {
|
|
374
|
+
const featureBounds = feature.ui.getBounds
|
|
375
|
+
? feature.ui.getBounds()
|
|
376
|
+
: feature.ui.getCenter()
|
|
377
|
+
bounds.extend(featureBounds)
|
|
378
|
+
}
|
|
379
|
+
this.onSuccess(features.length)
|
|
380
|
+
layer.zoomTo(bounds)
|
|
341
381
|
}
|
|
342
382
|
}
|
|
343
383
|
}
|
|
@@ -316,12 +316,14 @@ export default class Umap extends ServerStored {
|
|
|
316
316
|
dataUrl = this.renderUrl(dataUrl)
|
|
317
317
|
dataUrl = this.proxyUrl(dataUrl)
|
|
318
318
|
const datalayer = this.createDataLayer()
|
|
319
|
-
await datalayer
|
|
319
|
+
await datalayer
|
|
320
|
+
.importFromUrl(dataUrl, dataFormat)
|
|
321
|
+
.then(() => datalayer.zoomTo())
|
|
320
322
|
}
|
|
321
323
|
} else if (data) {
|
|
322
324
|
data = decodeURIComponent(data)
|
|
323
325
|
const datalayer = this.createDataLayer()
|
|
324
|
-
await datalayer.importRaw(data, dataFormat)
|
|
326
|
+
await datalayer.importRaw(data, dataFormat).then(() => datalayer.zoomTo())
|
|
325
327
|
}
|
|
326
328
|
}
|
|
327
329
|
|
|
@@ -1514,7 +1516,7 @@ export default class Umap extends ServerStored {
|
|
|
1514
1516
|
processFileToImport(file, layer, type) {
|
|
1515
1517
|
type = type || Utils.detectFileType(file)
|
|
1516
1518
|
if (!type) {
|
|
1517
|
-
|
|
1519
|
+
Alert.error(
|
|
1518
1520
|
translate('Unable to detect format of file {filename}', {
|
|
1519
1521
|
filename: file.name,
|
|
1520
1522
|
})
|
|
@@ -520,7 +520,9 @@ const locale = {
|
|
|
520
520
|
"Import helpers": "Import helpers",
|
|
521
521
|
"Import helpers will fill the URL field for you.": "Import helpers will fill the URL field for you.",
|
|
522
522
|
"Wikipedia": "Wikipedia",
|
|
523
|
-
"Save draft": "Save draft"
|
|
523
|
+
"Save draft": "Save draft",
|
|
524
|
+
"No data has been found for import": "No data has been found for import",
|
|
525
|
+
"Successfully imported {count} feature(s)": "Successfully imported {count} feature(s)"
|
|
524
526
|
}
|
|
525
527
|
L.registerLocale("en", locale)
|
|
526
528
|
L.setLocale("en")
|
|
@@ -520,5 +520,7 @@
|
|
|
520
520
|
"Import helpers": "Import helpers",
|
|
521
521
|
"Import helpers will fill the URL field for you.": "Import helpers will fill the URL field for you.",
|
|
522
522
|
"Wikipedia": "Wikipedia",
|
|
523
|
-
"Save draft": "Save draft"
|
|
523
|
+
"Save draft": "Save draft",
|
|
524
|
+
"No data has been found for import": "No data has been found for import",
|
|
525
|
+
"Successfully imported {count} feature(s)": "Successfully imported {count} feature(s)"
|
|
524
526
|
}
|
|
@@ -520,7 +520,9 @@ const locale = {
|
|
|
520
520
|
"Import helpers": "Assistants d'import",
|
|
521
521
|
"Import helpers will fill the URL field for you.": "Les assistants d'import vont renseigner le champ URL pour vous.",
|
|
522
522
|
"Wikipedia": "Wikipedia",
|
|
523
|
-
"Save draft": "Enregistrer le brouillon"
|
|
523
|
+
"Save draft": "Enregistrer le brouillon",
|
|
524
|
+
"No data has been found for import": "Aucunes données à importer",
|
|
525
|
+
"Successfully imported {count} feature(s)": "{count} élément(s) ajouté(s) à la carte"
|
|
524
526
|
}
|
|
525
527
|
L.registerLocale("fr", locale)
|
|
526
528
|
L.setLocale("fr")
|
|
@@ -520,5 +520,7 @@
|
|
|
520
520
|
"Import helpers": "Assistants d'import",
|
|
521
521
|
"Import helpers will fill the URL field for you.": "Les assistants d'import vont renseigner le champ URL pour vous.",
|
|
522
522
|
"Wikipedia": "Wikipedia",
|
|
523
|
-
"Save draft": "Enregistrer le brouillon"
|
|
523
|
+
"Save draft": "Enregistrer le brouillon",
|
|
524
|
+
"No data has been found for import": "Aucunes données à importer",
|
|
525
|
+
"Successfully imported {count} feature(s)": "{count} élément(s) ajouté(s) à la carte"
|
|
524
526
|
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import operator
|
|
2
|
+
import os
|
|
3
|
+
import time
|
|
4
|
+
from pathlib import Path
|
|
5
|
+
|
|
6
|
+
from django.conf import settings
|
|
7
|
+
from django.core.files.storage import FileSystemStorage
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class FSDataStorage(FileSystemStorage):
|
|
11
|
+
def get_reference_version(self, instance):
|
|
12
|
+
return self._extract_version_ref(instance.geojson.name)
|
|
13
|
+
|
|
14
|
+
def make_filename(self, instance):
|
|
15
|
+
root = self._base_path(instance)
|
|
16
|
+
name = "%s_%s.geojson" % (instance.pk, int(time.time() * 1000))
|
|
17
|
+
return root / name
|
|
18
|
+
|
|
19
|
+
def list_versions(self, instance):
|
|
20
|
+
root = self._base_path(instance)
|
|
21
|
+
names = self.listdir(root)[1]
|
|
22
|
+
names = [name for name in names if self._is_valid_version(name, instance)]
|
|
23
|
+
versions = [self._version_metadata(name, instance) for name in names]
|
|
24
|
+
versions.sort(reverse=True, key=operator.itemgetter("at"))
|
|
25
|
+
return versions
|
|
26
|
+
|
|
27
|
+
def get_version(self, ref, instance):
|
|
28
|
+
with self.open(self.get_version_path(ref, instance), "r") as f:
|
|
29
|
+
return f.read()
|
|
30
|
+
|
|
31
|
+
def get_version_path(self, ref, instance):
|
|
32
|
+
base_path = Path(settings.MEDIA_ROOT) / self._base_path(instance)
|
|
33
|
+
fullpath = base_path / f"{instance.pk}_{ref}.geojson"
|
|
34
|
+
if instance.old_id and not fullpath.exists():
|
|
35
|
+
fullpath = base_path / f"{instance.old_id}_{ref}.geojson"
|
|
36
|
+
if not fullpath.exists():
|
|
37
|
+
raise ValueError(f"Invalid version reference: {ref}")
|
|
38
|
+
return fullpath
|
|
39
|
+
|
|
40
|
+
def onDatalayerSave(self, instance):
|
|
41
|
+
self._purge_gzip(instance)
|
|
42
|
+
self._purge_old_versions(instance, keep=settings.UMAP_KEEP_VERSIONS)
|
|
43
|
+
|
|
44
|
+
def onDatalayerDelete(self, instance):
|
|
45
|
+
self._purge_gzip(instance)
|
|
46
|
+
self._purge_old_versions(instance, keep=None)
|
|
47
|
+
|
|
48
|
+
def _extract_version_ref(self, path):
|
|
49
|
+
version = path.split(".")[0]
|
|
50
|
+
if "_" in version:
|
|
51
|
+
return version.split("_")[-1]
|
|
52
|
+
return version
|
|
53
|
+
|
|
54
|
+
def _base_path(self, instance):
|
|
55
|
+
path = ["datalayer", str(instance.map.pk)[-1]]
|
|
56
|
+
if len(str(instance.map.pk)) > 1:
|
|
57
|
+
path.append(str(instance.map.pk)[-2])
|
|
58
|
+
path.append(str(instance.map.pk))
|
|
59
|
+
return Path(os.path.join(*path))
|
|
60
|
+
|
|
61
|
+
def _is_valid_version(self, name, instance):
|
|
62
|
+
valid_prefixes = [name.startswith("%s_" % instance.pk)]
|
|
63
|
+
if instance.old_id:
|
|
64
|
+
valid_prefixes.append(name.startswith("%s_" % instance.old_id))
|
|
65
|
+
return any(valid_prefixes) and name.endswith(".geojson")
|
|
66
|
+
|
|
67
|
+
def _version_metadata(self, name, instance):
|
|
68
|
+
ref = self._extract_version_ref(name)
|
|
69
|
+
return {
|
|
70
|
+
"name": name,
|
|
71
|
+
"ref": ref,
|
|
72
|
+
"at": ref,
|
|
73
|
+
"size": self.size(self._base_path(instance) / name),
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
def _purge_old_versions(self, instance, keep=None):
|
|
77
|
+
root = self._base_path(instance)
|
|
78
|
+
versions = self.list_versions(instance)
|
|
79
|
+
if keep is not None:
|
|
80
|
+
versions = versions[keep:]
|
|
81
|
+
for version in versions:
|
|
82
|
+
name = version["name"]
|
|
83
|
+
# Should not be in the list, but ensure to not delete the file
|
|
84
|
+
# currently used in database
|
|
85
|
+
if keep is not None and instance.geojson.name.endswith(name):
|
|
86
|
+
continue
|
|
87
|
+
try:
|
|
88
|
+
self.delete(root / name)
|
|
89
|
+
except FileNotFoundError:
|
|
90
|
+
pass
|
|
91
|
+
|
|
92
|
+
def _purge_gzip(self, instance):
|
|
93
|
+
root = self._base_path(instance)
|
|
94
|
+
names = self.listdir(root)[1]
|
|
95
|
+
prefixes = [f"{instance.pk}_"]
|
|
96
|
+
if instance.old_id:
|
|
97
|
+
prefixes.append(f"{instance.old_id}_")
|
|
98
|
+
prefixes = tuple(prefixes)
|
|
99
|
+
for name in names:
|
|
100
|
+
if name.startswith(prefixes) and name.endswith(".gz"):
|
|
101
|
+
self.delete(root / name)
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
from gzip import GzipFile
|
|
2
|
+
|
|
3
|
+
from django.core.exceptions import ImproperlyConfigured
|
|
4
|
+
|
|
5
|
+
try:
|
|
6
|
+
from botocore.exceptions import ClientError
|
|
7
|
+
from storages.backends.s3 import S3Storage
|
|
8
|
+
except ImportError:
|
|
9
|
+
raise ImproperlyConfigured(
|
|
10
|
+
"You need to install s3 dependencies: pip install umap-project[s3]"
|
|
11
|
+
)
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class S3DataStorage(S3Storage):
|
|
15
|
+
gzip = True
|
|
16
|
+
|
|
17
|
+
def get_reference_version(self, instance):
|
|
18
|
+
metadata = self.connection.meta.client.head_object(
|
|
19
|
+
Bucket=self.bucket_name, Key=instance.geojson.name
|
|
20
|
+
)
|
|
21
|
+
# Do not fail if bucket does not handle versioning
|
|
22
|
+
return metadata.get("VersionId", metadata["ETag"])
|
|
23
|
+
|
|
24
|
+
def make_filename(self, instance):
|
|
25
|
+
return f"{str(instance.pk)}.geojson"
|
|
26
|
+
|
|
27
|
+
def list_versions(self, instance):
|
|
28
|
+
response = self.connection.meta.client.list_object_versions(
|
|
29
|
+
Bucket=self.bucket_name, Prefix=instance.geojson.name
|
|
30
|
+
)
|
|
31
|
+
return [
|
|
32
|
+
{
|
|
33
|
+
"ref": version["VersionId"],
|
|
34
|
+
"at": version["LastModified"].timestamp() * 1000,
|
|
35
|
+
"size": version["Size"],
|
|
36
|
+
}
|
|
37
|
+
for version in response["Versions"]
|
|
38
|
+
]
|
|
39
|
+
|
|
40
|
+
def get_version(self, ref, instance):
|
|
41
|
+
try:
|
|
42
|
+
data = self.connection.meta.client.get_object(
|
|
43
|
+
Bucket=self.bucket_name,
|
|
44
|
+
Key=instance.geojson.name,
|
|
45
|
+
VersionId=ref,
|
|
46
|
+
)
|
|
47
|
+
except ClientError:
|
|
48
|
+
raise ValueError(f"Invalid version reference: {ref}")
|
|
49
|
+
return GzipFile(mode="r", fileobj=data["Body"]).read()
|
|
50
|
+
|
|
51
|
+
def get_version_path(self, ref, instance):
|
|
52
|
+
return self.url(instance.geojson.name, parameters={"VersionId": ref})
|
|
53
|
+
|
|
54
|
+
def onDatalayerSave(self, instance):
|
|
55
|
+
pass
|
|
56
|
+
|
|
57
|
+
def onDatalayerDelete(self, instance):
|
|
58
|
+
return self.connection.meta.client.delete_object(
|
|
59
|
+
Bucket=self.bucket_name,
|
|
60
|
+
Key=instance.geojson.name,
|
|
61
|
+
)
|