umap-project 2.8.0a0__tar.gz → 2.8.0a1__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.0a1}/PKG-INFO +1 -1
- umap_project-2.8.0a1/umap/__init__.py +1 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/management/commands/migrate_to_S3.py +3 -3
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/settings/base.py +2 -2
- umap_project-2.8.0a1/umap/storage/__init__.py +3 -0
- umap_project-2.8.0a1/umap/storage/fs.py +101 -0
- umap_project-2.8.0a1/umap/storage/s3.py +61 -0
- umap_project-2.8.0a1/umap/storage/staticfiles.py +64 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/test_datalayer_s3.py +1 -1
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/test_statics.py +1 -1
- 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.0a1}/.gitignore +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/LICENSE +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/README.md +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/pyproject.toml +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/admin.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/apps.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/asgi.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/autocomplete.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/bin/__init__.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/context_processors.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/decorators.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/fields.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/forms.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/am_ET/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/am_ET/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/ar/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/ar/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/ast/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/ast/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/bg/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/bg/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/br/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/br/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/ca/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/ca/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/cs_CZ/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/cs_CZ/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/da/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/da/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/de/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/de/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/el/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/el/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/en/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/en/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/es/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/es/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/et/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/et/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/eu/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/eu/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/fa_IR/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/fa_IR/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/fi/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/fi/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/fr/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/fr/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/gl/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/gl/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/he/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/he/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/hr/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/hr/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/hu/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/hu/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/id/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/id/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/is/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/is/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/it/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/it/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/ja/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/ja/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/ko/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/ko/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/lt/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/lt/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/ms/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/ms/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/nl/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/nl/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/no/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/no/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/pl/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/pl/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/pt/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/pt/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/pt_BR/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/pt_BR/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/pt_PT/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/pt_PT/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/ro/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/ro/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/ru/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/ru/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/si/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/si/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/sk_SK/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/sk_SK/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/sl/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/sl/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/sr/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/sr/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/sv/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/sv/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/th_TH/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/th_TH/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/tr/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/tr/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/uk_UA/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/uk_UA/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/vi/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/vi/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/zh/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/zh/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/zh_TW/LC_MESSAGES/django.mo +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/locale/zh_TW/LC_MESSAGES/django.po +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/management/__init__.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/management/commands/__init__.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/management/commands/anonymous_edit_url.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/management/commands/clean_tilelayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/management/commands/empty_trash.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/management/commands/generate_js_locale.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/management/commands/import_pictograms.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/management/commands/run_websocket_server.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/managers.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/middleware.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0001_initial.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0002_tilelayer_tms.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0003_add_tilelayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0004_add_licence.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0005_remove_map_tilelayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0006_auto_20190407_0719.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0007_auto_20190416_1757.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0008_alter_map_settings.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0009_star.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0010_alter_map_edit_status_alter_map_share_status.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0011_alter_map_edit_status_alter_map_share_status.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0012_datalayer_settings.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0013_datalayer_edit_status.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0014_map_created_at.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0015_alter_pictogram_pictogram.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0016_pictogram_category.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0017_migrate_to_openstreetmap_oauth2.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0018_datalayer_uuid.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0019_migrate_internal_remote_datalayers.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0020_alter_tilelayer_url_template.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0021_remove_map_description.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0022_add_team.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0023_alter_datalayer_uuid.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0024_alter_map_share_status.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/0025_alter_datalayer_geojson.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/migrations/__init__.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/models.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/settings/__init__.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/settings/dev.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/settings/local.py.sample +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/.gitignore +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/base.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/bitbucket.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/content.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/css/bar.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/css/contextmenu.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/css/dialog.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/css/form.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/css/icon.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/css/importers.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/css/panel.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/css/popup.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/css/slideshow.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/css/tableeditor.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/css/tooltip.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/css/window.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/favicons/apple-touch-icon.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/favicons/favicon.ico +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/favicons/icon-192.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/favicons/icon-512.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/favicons/icon.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/font/FiraSans-Light.woff +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/font/FiraSans-Light.woff2 +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/font/FiraSans-LightItalic.woff +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/font/FiraSans-LightItalic.woff2 +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/font/FiraSans-SemiBold.woff +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/font/FiraSans-SemiBold.woff2 +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/font.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/github.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/16-white.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/16.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/24-white.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/24.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/alert-icon-error.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/alert-icon-info.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/alert-icon-success.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/edit.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/icon-bg.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/icon-delete.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/icon-download.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/icon-duplicate.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/icon-edit.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/icon-external-link.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/icon-share.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/icon-view.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/importers/cadastrefr.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/importers/communesfr.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/importers/datasets.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/importers/geodatamine.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/importers/overpass.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/importers/random.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/importers/random1.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/importers/random2.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/logo.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/logo_filigree.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/logo_small.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/marker.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/marker.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/opensource.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/osm.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/search.gif +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/source/16-white.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/source/16.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/source/24-white.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/img/source/24.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/components/alerts/alert.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/components/alerts/alert.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/components/base.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/components/fragment.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/autocomplete.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/browser.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/caption.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/data/features.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/data/layer.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/dompurify.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/facets.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/formatter.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/global.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/help.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/i18n.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/importer.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/importers/cadastrefr.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/importers/communesfr.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/importers/datasets.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/importers/geodatamine.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/importers/overpass.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/leaflet-configure.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/orderable.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/permissions.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/rendering/icon.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/rendering/layers/base.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/rendering/layers/classified.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/rendering/layers/cluster.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/rendering/layers/heat.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/rendering/map.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/rendering/popup.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/rendering/template.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/rendering/ui.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/request.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/rules.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/saving.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/schema.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/share.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/slideshow.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/sync/engine.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/sync/hlc.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/sync/updaters.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/sync/websocket.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/tableeditor.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/ui/bar.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/ui/base.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/ui/contextmenu.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/ui/dialog.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/ui/panel.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/ui/tooltip.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/umap.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/urls.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/modules/utils.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/umap.controls.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/umap.core.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/js/umap.forms.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/keycloak.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/am_ET.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/am_ET.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/ar.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/ar.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/ast.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/ast.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/bg.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/bg.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/br.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/br.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/ca.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/ca.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/cs_CZ.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/cs_CZ.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/da.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/da.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/de.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/de.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/el.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/el.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/en.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/en.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/en_US.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/es.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/es.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/et.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/et.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/eu.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/eu.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/fa_IR.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/fa_IR.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/fi.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/fi.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/fr.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/fr.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/gl.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/gl.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/he.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/he.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/hr.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/hr.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/hu.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/hu.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/id.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/id.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/is.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/is.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/it.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/it.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/ja.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/ja.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/ko.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/ko.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/lt.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/lt.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/ms.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/ms.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/nl.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/nl.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/no.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/no.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/pl.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/pl.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/pl_PL.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/pt.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/pt.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/pt_BR.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/pt_BR.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/pt_PT.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/pt_PT.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/ro.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/ro.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/ru.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/ru.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/si.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/si.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/sk_SK.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/sk_SK.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/sl.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/sl.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/sr.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/sr.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/sv.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/sv.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/th_TH.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/th_TH.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/tr.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/tr.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/uk_UA.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/uk_UA.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/vi.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/vi.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/vi_VN.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/zh.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/zh.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/zh_CN.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/zh_TW.Big5.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/zh_TW.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/locale/zh_TW.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/map.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/nav.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/openstreetmap.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/test/.eslintrc +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/test/DataLayer.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/test/Feature.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/test/Map.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/test/Marker.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/test/Polygon.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/test/Polyline.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/test/Util.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/test/_pre.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/test/index.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/theme.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/twitter.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/unittests/URLs.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/unittests/hlc.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/unittests/sync.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/unittests/utils.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vars.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/colorbrewer/colorbrewer.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/csv2geojson/csv2geojson.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/dompurify/purify.es.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/dompurify/purify.es.mjs.map +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/editable/Leaflet.Editable.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/editable/Path.Drag.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/editinosm/Leaflet.EditInOSM.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/editinosm/Leaflet.EditInOSM.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/editinosm/edit-in-osm.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/formbuilder/Leaflet.FormBuilder.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/fullscreen/Leaflet.fullscreen.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/fullscreen/Leaflet.fullscreen.min.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/fullscreen/fullscreen.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/fullscreen/fullscreen@2x.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/fullscreen/leaflet.fullscreen.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/geojson-to-gpx/index.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/georsstogeojson/GeoRSSToGeoJSON.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/hash/leaflet-hash.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/heat/leaflet-heat.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/i18n/Leaflet.i18n.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/iconlayers/check.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/iconlayers/iconLayers.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/iconlayers/iconLayers.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/iconlayers/transparent-pixel.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/leaflet/images/layers-2x.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/leaflet/images/layers.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/leaflet/images/marker-icon-2x.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/leaflet/images/marker-icon.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/leaflet/images/marker-shadow.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/leaflet/leaflet-src.esm.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/leaflet/leaflet-src.esm.js.map +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/leaflet/leaflet.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/loading/Control.Loading.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/loading/Control.Loading.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/locatecontrol/L.Control.Locate.min.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/locatecontrol/L.Control.Locate.min.css.map +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/locatecontrol/L.Control.Locate.min.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/locatecontrol/L.Control.Locate.min.js.map +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/markercluster/MarkerCluster.Default.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/markercluster/MarkerCluster.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/markercluster/leaflet.markercluster.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/markercluster/leaflet.markercluster.js.map +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/measurable/Leaflet.Measurable.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/measurable/Leaflet.Measurable.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/minimap/Control.MiniMap.min.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/minimap/Control.MiniMap.min.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/minimap/images/toggle.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/minimap/images/toggle.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/osmtogeojson/osmtogeojson.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/photon/leaflet.photon.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/simple-statistics/simple-statistics.min.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/simple-statistics/simple-statistics.min.js.map +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/togeojson/togeojson.es.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/togeojson/togeojson.es.mjs.map +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/tokml/tokml.es.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/tokml/tokml.es.mjs.map +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/toolbar/leaflet.toolbar.css +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/static/umap/vendors/toolbar/leaflet.toolbar.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/404.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/500.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/auth/user_detail.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/auth/user_form.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/auth/user_stars.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/base.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/registration/login.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/about.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/about_summary.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/branding.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/components/alerts/alert.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/content.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/content_footer.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/css.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/dashboard_menu.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/footer.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/header.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/home.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/js.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/locale.js +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/login_popup_end.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/map_detail.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/map_fragment.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/map_init.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/map_list.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/map_table.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/messages.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/navigation.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/password_change.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/password_change_done.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/search.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/search_bar.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/success.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/team_confirm_delete.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/team_detail.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/team_form.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/user_dashboard.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templates/umap/user_teams.html +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templatetags/__init__.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/templatetags/umap_tags.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/__init__.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/base.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/conftest.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/categorized_highway.geojson +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/choropleth_region_chomage.geojson +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/circle.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/display_on_load.umap +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/empty_tile.png +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/star.svg +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/test_circles_layer.geojson +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/test_import_osm_relation.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/test_upload_data.csv +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/test_upload_data.gpx +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/test_upload_data.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/test_upload_data.kml +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/test_upload_data.umap +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/test_upload_data_osm.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/test_upload_empty_coordinates.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/test_upload_georss.xml +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/test_upload_missing_name.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/fixtures/test_upload_non_linear_ring.json +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/__init__.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/conftest.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/helpers.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_anonymous_owned_map.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_basics.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_browser.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_caption.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_categorized_layer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_choropleth.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_circles_layer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_cluster.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_conditional_rules.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_dashboard.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_datalayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_draw_polygon.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_draw_polyline.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_edit_datalayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_edit_map.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_edit_marker.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_edit_polygon.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_export_map.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_facets_browser.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_features_id_generation.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_import.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_map.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_map_list.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_map_preview.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_optimistic_merge.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_owned_map.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_picto.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_popup.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_querystring.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_save.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_share.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_slideshow.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_star.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_tableeditor.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_team.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_tilelayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_view_marker.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_view_polygon.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_view_polyline.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/integration/test_websocket_sync.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/settings.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/test_clean_tilelayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/test_datalayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/test_datalayer_views.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/test_empty_trash.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/test_licence.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/test_map.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/test_map_views.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/test_merge_features.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/test_team_views.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/test_tilelayer.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/test_utils.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/test_views.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/tests/test_websocket_server.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/urls.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/utils.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/views.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/websocket_server.py +0 -0
- {umap_project-2.8.0a0 → umap_project-2.8.0a1}/umap/wsgi.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
VERSION = "2.8.0a1"
|
|
@@ -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
|
|
@@ -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
|
+
)
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
from django.conf import settings
|
|
4
|
+
from django.contrib.staticfiles.storage import ManifestStaticFilesStorage
|
|
5
|
+
from rcssmin import cssmin
|
|
6
|
+
from rjsmin import jsmin
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class UmapManifestStaticFilesStorage(ManifestStaticFilesStorage):
|
|
10
|
+
support_js_module_import_aggregation = True
|
|
11
|
+
max_post_process_passes = 15
|
|
12
|
+
|
|
13
|
+
# We remove `;` at the end of all regexps to match our biome config.
|
|
14
|
+
_js_module_import_aggregation_patterns = (
|
|
15
|
+
"*.js",
|
|
16
|
+
(
|
|
17
|
+
(
|
|
18
|
+
(
|
|
19
|
+
r"""(?P<matched>import(?s:(?P<import>[\s\{].*?))"""
|
|
20
|
+
r"""\s*from\s*['"](?P<url>[\.\/].*?)["']\s*)"""
|
|
21
|
+
),
|
|
22
|
+
'import%(import)s from "%(url)s"\n',
|
|
23
|
+
),
|
|
24
|
+
(
|
|
25
|
+
(
|
|
26
|
+
r"""(?P<matched>export(?s:(?P<exports>[\s\{].*?))"""
|
|
27
|
+
r"""\s*from\s*["'](?P<url>[\.\/].*?)["']\s*)"""
|
|
28
|
+
),
|
|
29
|
+
'export%(exports)s from "%(url)s"\n',
|
|
30
|
+
),
|
|
31
|
+
(
|
|
32
|
+
r"""(?P<matched>import\s*['"](?P<url>[\.\/].*?)["']\s*)""",
|
|
33
|
+
'import"%(url)s"\n',
|
|
34
|
+
),
|
|
35
|
+
(
|
|
36
|
+
r"""(?P<matched>import\(["'](?P<url>.*?)["']\)\.then)""",
|
|
37
|
+
"""import("%(url)s").then""",
|
|
38
|
+
),
|
|
39
|
+
(
|
|
40
|
+
r"""(?P<matched>await import\(["'](?P<url>.*?)["']\))""",
|
|
41
|
+
"""await import("%(url)s")""",
|
|
42
|
+
),
|
|
43
|
+
),
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
def post_process(self, paths, **options):
|
|
47
|
+
collected = super().post_process(paths, **options)
|
|
48
|
+
for original_path, processed_path, processed in collected:
|
|
49
|
+
if isinstance(processed, Exception):
|
|
50
|
+
print("Error with file", original_path)
|
|
51
|
+
raise processed
|
|
52
|
+
if processed_path.endswith(".js"):
|
|
53
|
+
path = Path(settings.STATIC_ROOT) / processed_path
|
|
54
|
+
initial = path.read_text()
|
|
55
|
+
if "sourceMappingURL" not in initial: # Already minified.
|
|
56
|
+
minified = jsmin(initial)
|
|
57
|
+
path.write_text(minified)
|
|
58
|
+
if processed_path.endswith(".css"):
|
|
59
|
+
path = Path(settings.STATIC_ROOT) / processed_path
|
|
60
|
+
initial = path.read_text()
|
|
61
|
+
if "sourceMappingURL" not in initial: # Already minified.
|
|
62
|
+
minified = cssmin(initial)
|
|
63
|
+
path.write_text(minified)
|
|
64
|
+
yield original_path, processed_path, True
|
|
@@ -15,7 +15,7 @@ def staticfiles(settings):
|
|
|
15
15
|
# Make sure settings are properly reset after the test
|
|
16
16
|
settings.STORAGES = deepcopy(settings.STORAGES)
|
|
17
17
|
settings.STORAGES["staticfiles"]["BACKEND"] = (
|
|
18
|
-
"umap.storage.UmapManifestStaticFilesStorage"
|
|
18
|
+
"umap.storage.staticfiles.UmapManifestStaticFilesStorage"
|
|
19
19
|
)
|
|
20
20
|
try:
|
|
21
21
|
call_command("collectstatic", "--noinput")
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
VERSION = "2.8.0a0"
|
|
@@ -1,216 +0,0 @@
|
|
|
1
|
-
import operator
|
|
2
|
-
import os
|
|
3
|
-
import shutil
|
|
4
|
-
import time
|
|
5
|
-
from gzip import GzipFile
|
|
6
|
-
from pathlib import Path
|
|
7
|
-
|
|
8
|
-
from botocore.exceptions import ClientError
|
|
9
|
-
from django.conf import settings
|
|
10
|
-
from django.contrib.staticfiles.storage import ManifestStaticFilesStorage
|
|
11
|
-
from django.core.files.storage import FileSystemStorage
|
|
12
|
-
from rcssmin import cssmin
|
|
13
|
-
from rjsmin import jsmin
|
|
14
|
-
from storages.backends.s3 import S3Storage
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
class UmapManifestStaticFilesStorage(ManifestStaticFilesStorage):
|
|
18
|
-
support_js_module_import_aggregation = True
|
|
19
|
-
max_post_process_passes = 15
|
|
20
|
-
|
|
21
|
-
# We remove `;` at the end of all regexps to match our biome config.
|
|
22
|
-
_js_module_import_aggregation_patterns = (
|
|
23
|
-
"*.js",
|
|
24
|
-
(
|
|
25
|
-
(
|
|
26
|
-
(
|
|
27
|
-
r"""(?P<matched>import(?s:(?P<import>[\s\{].*?))"""
|
|
28
|
-
r"""\s*from\s*['"](?P<url>[\.\/].*?)["']\s*)"""
|
|
29
|
-
),
|
|
30
|
-
'import%(import)s from "%(url)s"\n',
|
|
31
|
-
),
|
|
32
|
-
(
|
|
33
|
-
(
|
|
34
|
-
r"""(?P<matched>export(?s:(?P<exports>[\s\{].*?))"""
|
|
35
|
-
r"""\s*from\s*["'](?P<url>[\.\/].*?)["']\s*)"""
|
|
36
|
-
),
|
|
37
|
-
'export%(exports)s from "%(url)s"\n',
|
|
38
|
-
),
|
|
39
|
-
(
|
|
40
|
-
r"""(?P<matched>import\s*['"](?P<url>[\.\/].*?)["']\s*)""",
|
|
41
|
-
'import"%(url)s"\n',
|
|
42
|
-
),
|
|
43
|
-
(
|
|
44
|
-
r"""(?P<matched>import\(["'](?P<url>.*?)["']\)\.then)""",
|
|
45
|
-
"""import("%(url)s").then""",
|
|
46
|
-
),
|
|
47
|
-
(
|
|
48
|
-
r"""(?P<matched>await import\(["'](?P<url>.*?)["']\))""",
|
|
49
|
-
"""await import("%(url)s")""",
|
|
50
|
-
),
|
|
51
|
-
),
|
|
52
|
-
)
|
|
53
|
-
|
|
54
|
-
def post_process(self, paths, **options):
|
|
55
|
-
collected = super().post_process(paths, **options)
|
|
56
|
-
for original_path, processed_path, processed in collected:
|
|
57
|
-
if isinstance(processed, Exception):
|
|
58
|
-
print("Error with file", original_path)
|
|
59
|
-
raise processed
|
|
60
|
-
if processed_path.endswith(".js"):
|
|
61
|
-
path = Path(settings.STATIC_ROOT) / processed_path
|
|
62
|
-
initial = path.read_text()
|
|
63
|
-
if "sourceMappingURL" not in initial: # Already minified.
|
|
64
|
-
minified = jsmin(initial)
|
|
65
|
-
path.write_text(minified)
|
|
66
|
-
if processed_path.endswith(".css"):
|
|
67
|
-
path = Path(settings.STATIC_ROOT) / processed_path
|
|
68
|
-
initial = path.read_text()
|
|
69
|
-
if "sourceMappingURL" not in initial: # Already minified.
|
|
70
|
-
minified = cssmin(initial)
|
|
71
|
-
path.write_text(minified)
|
|
72
|
-
yield original_path, processed_path, True
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
class UmapS3(S3Storage):
|
|
76
|
-
gzip = True
|
|
77
|
-
|
|
78
|
-
def get_reference_version(self, instance):
|
|
79
|
-
metadata = self.connection.meta.client.head_object(
|
|
80
|
-
Bucket=self.bucket_name, Key=instance.geojson.name
|
|
81
|
-
)
|
|
82
|
-
# Do not fail if bucket does not handle versioning
|
|
83
|
-
return metadata.get("VersionId", metadata["ETag"])
|
|
84
|
-
|
|
85
|
-
def make_filename(self, instance):
|
|
86
|
-
return f"{str(instance.pk)}.geojson"
|
|
87
|
-
|
|
88
|
-
def list_versions(self, instance):
|
|
89
|
-
response = self.connection.meta.client.list_object_versions(
|
|
90
|
-
Bucket=self.bucket_name, Prefix=instance.geojson.name
|
|
91
|
-
)
|
|
92
|
-
return [
|
|
93
|
-
{
|
|
94
|
-
"ref": version["VersionId"],
|
|
95
|
-
"at": version["LastModified"].timestamp() * 1000,
|
|
96
|
-
"size": version["Size"],
|
|
97
|
-
}
|
|
98
|
-
for version in response["Versions"]
|
|
99
|
-
]
|
|
100
|
-
|
|
101
|
-
def get_version(self, ref, instance):
|
|
102
|
-
try:
|
|
103
|
-
data = self.connection.meta.client.get_object(
|
|
104
|
-
Bucket=self.bucket_name,
|
|
105
|
-
Key=instance.geojson.name,
|
|
106
|
-
VersionId=ref,
|
|
107
|
-
)
|
|
108
|
-
except ClientError:
|
|
109
|
-
raise ValueError(f"Invalid version reference: {ref}")
|
|
110
|
-
return GzipFile(mode="r", fileobj=data["Body"]).read()
|
|
111
|
-
|
|
112
|
-
def get_version_path(self, ref, instance):
|
|
113
|
-
return self.url(instance.geojson.name, parameters={"VersionId": ref})
|
|
114
|
-
|
|
115
|
-
def onDatalayerSave(self, instance):
|
|
116
|
-
pass
|
|
117
|
-
|
|
118
|
-
def onDatalayerDelete(self, instance):
|
|
119
|
-
return self.connection.meta.client.delete_object(
|
|
120
|
-
Bucket=self.bucket_name,
|
|
121
|
-
Key=instance.geojson.name,
|
|
122
|
-
)
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
class UmapFileSystem(FileSystemStorage):
|
|
126
|
-
def get_reference_version(self, instance):
|
|
127
|
-
return self._extract_version_ref(instance.geojson.name)
|
|
128
|
-
|
|
129
|
-
def make_filename(self, instance):
|
|
130
|
-
root = self._base_path(instance)
|
|
131
|
-
name = "%s_%s.geojson" % (instance.pk, int(time.time() * 1000))
|
|
132
|
-
return root / name
|
|
133
|
-
|
|
134
|
-
def list_versions(self, instance):
|
|
135
|
-
root = self._base_path(instance)
|
|
136
|
-
names = self.listdir(root)[1]
|
|
137
|
-
names = [name for name in names if self._is_valid_version(name, instance)]
|
|
138
|
-
versions = [self._version_metadata(name, instance) for name in names]
|
|
139
|
-
versions.sort(reverse=True, key=operator.itemgetter("at"))
|
|
140
|
-
return versions
|
|
141
|
-
|
|
142
|
-
def get_version(self, ref, instance):
|
|
143
|
-
with self.open(self.get_version_path(ref, instance), "r") as f:
|
|
144
|
-
return f.read()
|
|
145
|
-
|
|
146
|
-
def get_version_path(self, ref, instance):
|
|
147
|
-
base_path = Path(settings.MEDIA_ROOT) / self._base_path(instance)
|
|
148
|
-
fullpath = base_path / f"{instance.pk}_{ref}.geojson"
|
|
149
|
-
if instance.old_id and not fullpath.exists():
|
|
150
|
-
fullpath = base_path / f"{instance.old_id}_{ref}.geojson"
|
|
151
|
-
if not fullpath.exists():
|
|
152
|
-
raise ValueError(f"Invalid version reference: {ref}")
|
|
153
|
-
return fullpath
|
|
154
|
-
|
|
155
|
-
def onDatalayerSave(self, instance):
|
|
156
|
-
self._purge_gzip(instance)
|
|
157
|
-
self._purge_old_versions(instance, keep=settings.UMAP_KEEP_VERSIONS)
|
|
158
|
-
|
|
159
|
-
def onDatalayerDelete(self, instance):
|
|
160
|
-
self._purge_gzip(instance)
|
|
161
|
-
self._purge_old_versions(instance, keep=None)
|
|
162
|
-
|
|
163
|
-
def _extract_version_ref(self, path):
|
|
164
|
-
version = path.split(".")[0]
|
|
165
|
-
if "_" in version:
|
|
166
|
-
return version.split("_")[-1]
|
|
167
|
-
return version
|
|
168
|
-
|
|
169
|
-
def _base_path(self, instance):
|
|
170
|
-
path = ["datalayer", str(instance.map.pk)[-1]]
|
|
171
|
-
if len(str(instance.map.pk)) > 1:
|
|
172
|
-
path.append(str(instance.map.pk)[-2])
|
|
173
|
-
path.append(str(instance.map.pk))
|
|
174
|
-
return Path(os.path.join(*path))
|
|
175
|
-
|
|
176
|
-
def _is_valid_version(self, name, instance):
|
|
177
|
-
valid_prefixes = [name.startswith("%s_" % instance.pk)]
|
|
178
|
-
if instance.old_id:
|
|
179
|
-
valid_prefixes.append(name.startswith("%s_" % instance.old_id))
|
|
180
|
-
return any(valid_prefixes) and name.endswith(".geojson")
|
|
181
|
-
|
|
182
|
-
def _version_metadata(self, name, instance):
|
|
183
|
-
ref = self._extract_version_ref(name)
|
|
184
|
-
return {
|
|
185
|
-
"name": name,
|
|
186
|
-
"ref": ref,
|
|
187
|
-
"at": ref,
|
|
188
|
-
"size": self.size(self._base_path(instance) / name),
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
def _purge_old_versions(self, instance, keep=None):
|
|
192
|
-
root = self._base_path(instance)
|
|
193
|
-
versions = self.list_versions(instance)
|
|
194
|
-
if keep is not None:
|
|
195
|
-
versions = versions[keep:]
|
|
196
|
-
for version in versions:
|
|
197
|
-
name = version["name"]
|
|
198
|
-
# Should not be in the list, but ensure to not delete the file
|
|
199
|
-
# currently used in database
|
|
200
|
-
if keep is not None and instance.geojson.name.endswith(name):
|
|
201
|
-
continue
|
|
202
|
-
try:
|
|
203
|
-
self.delete(root / name)
|
|
204
|
-
except FileNotFoundError:
|
|
205
|
-
pass
|
|
206
|
-
|
|
207
|
-
def _purge_gzip(self, instance):
|
|
208
|
-
root = self._base_path(instance)
|
|
209
|
-
names = self.listdir(root)[1]
|
|
210
|
-
prefixes = [f"{instance.pk}_"]
|
|
211
|
-
if instance.old_id:
|
|
212
|
-
prefixes.append(f"{instance.old_id}_")
|
|
213
|
-
prefixes = tuple(prefixes)
|
|
214
|
-
for name in names:
|
|
215
|
-
if name.startswith(prefixes) and name.endswith(".gz"):
|
|
216
|
-
self.delete(root / name)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|