umap-project 1.11.0__py3-none-any.whl → 1.11.1__py3-none-any.whl
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/__init__.py +1 -1
- umap/admin.py +7 -3
- umap/autocomplete.py +3 -5
- umap/bin/__init__.py +2 -5
- umap/decorators.py +4 -5
- umap/forms.py +5 -5
- umap/locale/en/LC_MESSAGES/django.po +14 -14
- umap/management/commands/generate_js_locale.py +9 -11
- umap/management/commands/import_pictograms.py +1 -1
- umap/managers.py +5 -3
- umap/middleware.py +2 -3
- umap/migrations/0001_initial.py +204 -56
- umap/migrations/0002_tilelayer_tms.py +3 -4
- umap/migrations/0003_add_tilelayer.py +13 -9
- umap/migrations/0004_add_licence.py +3 -6
- umap/migrations/0005_remove_map_tilelayer.py +3 -4
- umap/migrations/0006_auto_20190407_0719.py +6 -5
- umap/migrations/0007_auto_20190416_1757.py +13 -5
- umap/migrations/0008_alter_map_settings.py +0 -1
- umap/migrations/0009_star.py +27 -8
- umap/migrations/0010_alter_map_edit_status_alter_map_share_status.py +20 -8
- umap/migrations/0011_alter_map_edit_status_alter_map_share_status.py +21 -8
- umap/migrations/0014_map_created_at.py +1 -1
- umap/models.py +6 -6
- umap/settings/base.py +1 -4
- umap/static/umap/base.css +2 -0
- umap/static/umap/js/umap.core.js +2 -0
- umap/static/umap/js/umap.features.js +2 -2
- umap/static/umap/js/umap.js +9 -5
- umap/static/umap/js/umap.layer.js +3 -2
- umap/static/umap/map.css +21 -12
- umap/static/umap/vendors/formbuilder/Leaflet.FormBuilder.js +13 -1
- umap/templates/auth/user_form.html +2 -2
- umap/templates/base.html +9 -3
- umap/templates/umap/map_table.html +3 -3
- umap/templatetags/umap_tags.py +32 -34
- umap/tests/base.py +2 -1
- umap/tests/conftest.py +0 -1
- umap/tests/integration/test_picto.py +1 -1
- umap/tests/integration/test_slideshow.py +70 -0
- umap/tests/settings.py +7 -5
- umap/tests/test_datalayer.py +7 -6
- umap/tests/test_map.py +6 -5
- umap/tests/test_map_views.py +4 -10
- umap/tests/test_tilelayer.py +17 -11
- umap/tests/test_views.py +7 -6
- umap/urls.py +3 -3
- umap/utils.py +1 -2
- umap/views.py +11 -23
- umap/wsgi.py +2 -2
- {umap_project-1.11.0.dist-info → umap_project-1.11.1.dist-info}/METADATA +11 -9
- {umap_project-1.11.0.dist-info → umap_project-1.11.1.dist-info}/RECORD +55 -54
- {umap_project-1.11.0.dist-info → umap_project-1.11.1.dist-info}/WHEEL +0 -0
- {umap_project-1.11.0.dist-info → umap_project-1.11.1.dist-info}/entry_points.txt +0 -0
- {umap_project-1.11.0.dist-info → umap_project-1.11.1.dist-info}/licenses/LICENSE +0 -0
umap/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
VERSION = "1.11.
|
|
1
|
+
VERSION = "1.11.1"
|
umap/admin.py
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
from django.contrib.gis import admin
|
|
2
|
-
|
|
2
|
+
|
|
3
|
+
from .models import DataLayer, Licence, Map, Pictogram, TileLayer
|
|
3
4
|
|
|
4
5
|
|
|
5
6
|
class TileLayerAdmin(admin.ModelAdmin):
|
|
6
|
-
list_display = (
|
|
7
|
-
|
|
7
|
+
list_display = (
|
|
8
|
+
"name",
|
|
9
|
+
"rank",
|
|
10
|
+
)
|
|
11
|
+
list_editable = ("rank",)
|
|
8
12
|
|
|
9
13
|
|
|
10
14
|
class MapAdmin(admin.GISModelAdmin):
|
umap/autocomplete.py
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
+
from agnocomplete.core import AgnocompleteModel
|
|
2
|
+
from agnocomplete.register import register
|
|
1
3
|
from django.conf import settings
|
|
2
4
|
from django.contrib.auth import get_user_model
|
|
3
5
|
|
|
4
6
|
|
|
5
|
-
from agnocomplete.register import register
|
|
6
|
-
from agnocomplete.core import AgnocompleteModel
|
|
7
|
-
|
|
8
|
-
|
|
9
7
|
@register
|
|
10
8
|
class AutocompleteUser(AgnocompleteModel):
|
|
11
9
|
model = get_user_model()
|
|
@@ -13,5 +11,5 @@ class AutocompleteUser(AgnocompleteModel):
|
|
|
13
11
|
|
|
14
12
|
def item(self, current_item):
|
|
15
13
|
data = super().item(current_item)
|
|
16
|
-
data[
|
|
14
|
+
data["url"] = current_item.get_url()
|
|
17
15
|
return data
|
umap/bin/__init__.py
CHANGED
|
@@ -5,12 +5,9 @@ from django.core import management
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
def main():
|
|
8
|
-
os.environ.setdefault(
|
|
9
|
-
"DJANGO_SETTINGS_MODULE",
|
|
10
|
-
"umap.settings"
|
|
11
|
-
)
|
|
8
|
+
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "umap.settings")
|
|
12
9
|
management.execute_from_command_line()
|
|
13
10
|
|
|
14
11
|
|
|
15
|
-
if __name__ ==
|
|
12
|
+
if __name__ == "__main__":
|
|
16
13
|
main()
|
umap/decorators.py
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
from functools import wraps
|
|
2
2
|
|
|
3
|
-
from django.urls import reverse_lazy
|
|
4
|
-
from django.shortcuts import get_object_or_404
|
|
5
|
-
from django.http import HttpResponseForbidden
|
|
6
3
|
from django.conf import settings
|
|
4
|
+
from django.http import HttpResponseForbidden
|
|
5
|
+
from django.shortcuts import get_object_or_404
|
|
6
|
+
from django.urls import reverse_lazy
|
|
7
7
|
|
|
8
|
-
from .views import simple_json_response
|
|
9
8
|
from .models import Map
|
|
10
|
-
|
|
9
|
+
from .views import simple_json_response
|
|
11
10
|
|
|
12
11
|
LOGIN_URL = getattr(settings, "LOGIN_URL", "login")
|
|
13
12
|
LOGIN_URL = reverse_lazy(LOGIN_URL) if not LOGIN_URL.startswith("/") else LOGIN_URL
|
umap/forms.py
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
from django import forms
|
|
2
|
-
from django.contrib.gis.geos import Point
|
|
3
|
-
from django.contrib.auth import get_user_model
|
|
4
|
-
from django.utils.translation import gettext_lazy as _
|
|
5
|
-
from django.template.defaultfilters import slugify
|
|
6
2
|
from django.conf import settings
|
|
3
|
+
from django.contrib.auth import get_user_model
|
|
4
|
+
from django.contrib.gis.geos import Point
|
|
7
5
|
from django.forms.utils import ErrorList
|
|
6
|
+
from django.template.defaultfilters import slugify
|
|
7
|
+
from django.utils.translation import gettext_lazy as _
|
|
8
8
|
|
|
9
|
-
from .models import
|
|
9
|
+
from .models import DataLayer, Map
|
|
10
10
|
|
|
11
11
|
DEFAULT_LATITUDE = (
|
|
12
12
|
settings.LEAFLET_LATITUDE if hasattr(settings, "LEAFLET_LATITUDE") else 51
|
|
@@ -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: 2023-11-
|
|
11
|
+
"POT-Creation-Date: 2023-11-27 08:30+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"
|
|
@@ -29,7 +29,7 @@ msgstr ""
|
|
|
29
29
|
msgid "Inherit"
|
|
30
30
|
msgstr ""
|
|
31
31
|
|
|
32
|
-
#: middleware.py:
|
|
32
|
+
#: middleware.py:13
|
|
33
33
|
msgid "Site is readonly for maintenance"
|
|
34
34
|
msgstr ""
|
|
35
35
|
|
|
@@ -290,7 +290,7 @@ msgstr ""
|
|
|
290
290
|
msgid "You are logged in. Continuing..."
|
|
291
291
|
msgstr ""
|
|
292
292
|
|
|
293
|
-
#: templates/umap/map_list.html:9 views.py:
|
|
293
|
+
#: templates/umap/map_list.html:9 views.py:290
|
|
294
294
|
msgid "by"
|
|
295
295
|
msgstr ""
|
|
296
296
|
|
|
@@ -431,52 +431,52 @@ msgstr ""
|
|
|
431
431
|
msgid "You have no map yet."
|
|
432
432
|
msgstr ""
|
|
433
433
|
|
|
434
|
-
#: views.py:
|
|
434
|
+
#: views.py:295
|
|
435
435
|
msgid "View the map"
|
|
436
436
|
msgstr ""
|
|
437
437
|
|
|
438
|
-
#: views.py:
|
|
438
|
+
#: views.py:670
|
|
439
439
|
msgid "Map has been updated!"
|
|
440
440
|
msgstr ""
|
|
441
441
|
|
|
442
|
-
#: views.py:
|
|
442
|
+
#: views.py:695
|
|
443
443
|
msgid "Map editors updated with success!"
|
|
444
444
|
msgstr ""
|
|
445
445
|
|
|
446
|
-
#: views.py:
|
|
446
|
+
#: views.py:733
|
|
447
447
|
#, python-format
|
|
448
448
|
msgid "The uMap edit link for your map: %(map_name)s"
|
|
449
449
|
msgstr ""
|
|
450
450
|
|
|
451
|
-
#: views.py:
|
|
451
|
+
#: views.py:736
|
|
452
452
|
#, python-format
|
|
453
453
|
msgid "Here is your secret edit link: %(link)s"
|
|
454
454
|
msgstr ""
|
|
455
455
|
|
|
456
|
-
#: views.py:
|
|
456
|
+
#: views.py:742
|
|
457
457
|
#, python-format
|
|
458
458
|
msgid "Email sent to %(email)s"
|
|
459
459
|
msgstr ""
|
|
460
460
|
|
|
461
|
-
#: views.py:
|
|
461
|
+
#: views.py:753
|
|
462
462
|
msgid "Only its owner can delete the map."
|
|
463
463
|
msgstr ""
|
|
464
464
|
|
|
465
|
-
#: views.py:
|
|
465
|
+
#: views.py:776
|
|
466
466
|
#, python-format
|
|
467
467
|
msgid ""
|
|
468
468
|
"Your map has been cloned! If you want to edit this map from another "
|
|
469
469
|
"computer, please use this link: %(anonymous_url)s"
|
|
470
470
|
msgstr ""
|
|
471
471
|
|
|
472
|
-
#: views.py:
|
|
472
|
+
#: views.py:781
|
|
473
473
|
msgid "Congratulations, your map has been cloned!"
|
|
474
474
|
msgstr ""
|
|
475
475
|
|
|
476
|
-
#: views.py:
|
|
476
|
+
#: views.py:970
|
|
477
477
|
msgid "Layer successfully deleted."
|
|
478
478
|
msgstr ""
|
|
479
479
|
|
|
480
|
-
#: views.py:
|
|
480
|
+
#: views.py:992
|
|
481
481
|
msgid "Permissions updated with success!"
|
|
482
482
|
msgstr ""
|
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
|
|
3
|
-
from django.core.management.base import BaseCommand
|
|
4
3
|
from django.conf import settings
|
|
4
|
+
from django.core.management.base import BaseCommand
|
|
5
5
|
from django.template.loader import render_to_string
|
|
6
6
|
from django.utils.translation import to_locale
|
|
7
7
|
|
|
8
|
-
ROOT = Path(settings.PROJECT_DIR) /
|
|
8
|
+
ROOT = Path(settings.PROJECT_DIR) / "static/umap/locale/"
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
class Command(BaseCommand):
|
|
12
|
-
|
|
13
12
|
def handle(self, *args, **options):
|
|
14
|
-
self.verbosity = options[
|
|
13
|
+
self.verbosity = options["verbosity"]
|
|
15
14
|
for code, name in settings.LANGUAGES:
|
|
16
15
|
code = to_locale(code)
|
|
17
16
|
if self.verbosity > 0:
|
|
18
17
|
print("Processing", name)
|
|
19
|
-
path = ROOT /
|
|
18
|
+
path = ROOT / "{code}.json".format(code=code)
|
|
20
19
|
if not path.exists():
|
|
21
|
-
print(path,
|
|
20
|
+
print(path, "does not exist.", "Skipping")
|
|
22
21
|
else:
|
|
23
22
|
with path.open(encoding="utf-8") as f:
|
|
24
23
|
if self.verbosity > 1:
|
|
@@ -26,12 +25,11 @@ class Command(BaseCommand):
|
|
|
26
25
|
self.render(code, f.read())
|
|
27
26
|
|
|
28
27
|
def render(self, code, json):
|
|
29
|
-
path = ROOT /
|
|
28
|
+
path = ROOT / "{code}.js".format(code=code)
|
|
30
29
|
with path.open("w", encoding="utf-8") as f:
|
|
31
|
-
content = render_to_string(
|
|
32
|
-
"locale": json,
|
|
33
|
-
|
|
34
|
-
})
|
|
30
|
+
content = render_to_string(
|
|
31
|
+
"umap/locale.js", {"locale": json, "locale_code": code}
|
|
32
|
+
)
|
|
35
33
|
if self.verbosity > 1:
|
|
36
34
|
print("Exporting to", path)
|
|
37
35
|
f.write(content)
|
|
@@ -59,7 +59,7 @@ class Command(BaseCommand):
|
|
|
59
59
|
else:
|
|
60
60
|
picto = Pictogram()
|
|
61
61
|
picto.name = name
|
|
62
|
-
if
|
|
62
|
+
if path.name != self.path.name: # Subfolders only
|
|
63
63
|
picto.category = path.name
|
|
64
64
|
picto.attribution = self.attribution
|
|
65
65
|
with (path / filename).open("rb") as f:
|
umap/managers.py
CHANGED
|
@@ -2,7 +2,9 @@ from django.db.models import Manager
|
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
class PublicManager(Manager):
|
|
5
|
-
|
|
6
5
|
def get_queryset(self):
|
|
7
|
-
return
|
|
8
|
-
|
|
6
|
+
return (
|
|
7
|
+
super(PublicManager, self)
|
|
8
|
+
.get_queryset()
|
|
9
|
+
.filter(share_status=self.model.PUBLIC)
|
|
10
|
+
)
|
umap/middleware.py
CHANGED
|
@@ -5,13 +5,12 @@ from django.utils.translation import gettext as _
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
def readonly_middleware(get_response):
|
|
8
|
-
|
|
9
8
|
if not settings.UMAP_READONLY:
|
|
10
9
|
raise MiddlewareNotUsed
|
|
11
10
|
|
|
12
11
|
def middleware(request):
|
|
13
|
-
if request.method not in [
|
|
14
|
-
return HttpResponseForbidden(_(
|
|
12
|
+
if request.method not in ["GET", "OPTIONS"]:
|
|
13
|
+
return HttpResponseForbidden(_("Site is readonly for maintenance"))
|
|
15
14
|
|
|
16
15
|
return get_response(request)
|
|
17
16
|
|
umap/migrations/0001_initial.py
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
# Generated by Django 2.0.5 on 2018-05-19 09:27
|
|
2
2
|
|
|
3
|
-
from django.conf import settings
|
|
4
3
|
import django.contrib.gis.db.models.fields
|
|
5
|
-
from django.db import migrations, models
|
|
6
4
|
import django.db.models.deletion
|
|
5
|
+
from django.conf import settings
|
|
6
|
+
from django.db import migrations, models
|
|
7
|
+
|
|
7
8
|
import umap.fields
|
|
8
9
|
import umap.models
|
|
9
10
|
|
|
10
11
|
|
|
11
12
|
class Migration(migrations.Migration):
|
|
12
|
-
|
|
13
13
|
initial = True
|
|
14
14
|
|
|
15
15
|
dependencies = [
|
|
@@ -18,90 +18,238 @@ class Migration(migrations.Migration):
|
|
|
18
18
|
|
|
19
19
|
operations = [
|
|
20
20
|
migrations.CreateModel(
|
|
21
|
-
name=
|
|
21
|
+
name="DataLayer",
|
|
22
22
|
fields=[
|
|
23
|
-
(
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
23
|
+
(
|
|
24
|
+
"id",
|
|
25
|
+
models.AutoField(
|
|
26
|
+
auto_created=True,
|
|
27
|
+
primary_key=True,
|
|
28
|
+
serialize=False,
|
|
29
|
+
verbose_name="ID",
|
|
30
|
+
),
|
|
31
|
+
),
|
|
32
|
+
("name", models.CharField(max_length=200, verbose_name="name")),
|
|
33
|
+
(
|
|
34
|
+
"description",
|
|
35
|
+
models.TextField(blank=True, null=True, verbose_name="description"),
|
|
36
|
+
),
|
|
37
|
+
(
|
|
38
|
+
"geojson",
|
|
39
|
+
models.FileField(
|
|
40
|
+
blank=True, null=True, upload_to=umap.models.upload_to
|
|
41
|
+
),
|
|
42
|
+
),
|
|
43
|
+
(
|
|
44
|
+
"display_on_load",
|
|
45
|
+
models.BooleanField(
|
|
46
|
+
default=False,
|
|
47
|
+
help_text="Display this layer on load.",
|
|
48
|
+
verbose_name="display on load",
|
|
49
|
+
),
|
|
50
|
+
),
|
|
51
|
+
("rank", models.SmallIntegerField(default=0)),
|
|
29
52
|
],
|
|
30
53
|
options={
|
|
31
|
-
|
|
54
|
+
"ordering": ("rank",),
|
|
32
55
|
},
|
|
33
56
|
),
|
|
34
57
|
migrations.CreateModel(
|
|
35
|
-
name=
|
|
58
|
+
name="Licence",
|
|
36
59
|
fields=[
|
|
37
|
-
(
|
|
38
|
-
|
|
39
|
-
|
|
60
|
+
(
|
|
61
|
+
"id",
|
|
62
|
+
models.AutoField(
|
|
63
|
+
auto_created=True,
|
|
64
|
+
primary_key=True,
|
|
65
|
+
serialize=False,
|
|
66
|
+
verbose_name="ID",
|
|
67
|
+
),
|
|
68
|
+
),
|
|
69
|
+
("name", models.CharField(max_length=200, verbose_name="name")),
|
|
70
|
+
(
|
|
71
|
+
"details",
|
|
72
|
+
models.URLField(
|
|
73
|
+
help_text="Link to a page where the licence is detailed.",
|
|
74
|
+
verbose_name="details",
|
|
75
|
+
),
|
|
76
|
+
),
|
|
40
77
|
],
|
|
41
78
|
options={
|
|
42
|
-
|
|
43
|
-
|
|
79
|
+
"ordering": ("name",),
|
|
80
|
+
"abstract": False,
|
|
44
81
|
},
|
|
45
82
|
),
|
|
46
83
|
migrations.CreateModel(
|
|
47
|
-
name=
|
|
84
|
+
name="Map",
|
|
48
85
|
fields=[
|
|
49
|
-
(
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
(
|
|
59
|
-
(
|
|
60
|
-
(
|
|
61
|
-
|
|
62
|
-
|
|
86
|
+
(
|
|
87
|
+
"id",
|
|
88
|
+
models.AutoField(
|
|
89
|
+
auto_created=True,
|
|
90
|
+
primary_key=True,
|
|
91
|
+
serialize=False,
|
|
92
|
+
verbose_name="ID",
|
|
93
|
+
),
|
|
94
|
+
),
|
|
95
|
+
("name", models.CharField(max_length=200, verbose_name="name")),
|
|
96
|
+
("slug", models.SlugField()),
|
|
97
|
+
(
|
|
98
|
+
"description",
|
|
99
|
+
models.TextField(blank=True, null=True, verbose_name="description"),
|
|
100
|
+
),
|
|
101
|
+
(
|
|
102
|
+
"center",
|
|
103
|
+
django.contrib.gis.db.models.fields.PointField(
|
|
104
|
+
geography=True, srid=4326, verbose_name="center"
|
|
105
|
+
),
|
|
106
|
+
),
|
|
107
|
+
("zoom", models.IntegerField(default=7, verbose_name="zoom")),
|
|
108
|
+
(
|
|
109
|
+
"locate",
|
|
110
|
+
models.BooleanField(
|
|
111
|
+
default=False,
|
|
112
|
+
help_text="Locate user on load?",
|
|
113
|
+
verbose_name="locate",
|
|
114
|
+
),
|
|
115
|
+
),
|
|
116
|
+
("modified_at", models.DateTimeField(auto_now=True)),
|
|
117
|
+
(
|
|
118
|
+
"edit_status",
|
|
119
|
+
models.SmallIntegerField(
|
|
120
|
+
choices=[
|
|
121
|
+
(1, "Everyone can edit"),
|
|
122
|
+
(2, "Only editors can edit"),
|
|
123
|
+
(3, "Only owner can edit"),
|
|
124
|
+
],
|
|
125
|
+
default=3,
|
|
126
|
+
verbose_name="edit status",
|
|
127
|
+
),
|
|
128
|
+
),
|
|
129
|
+
(
|
|
130
|
+
"share_status",
|
|
131
|
+
models.SmallIntegerField(
|
|
132
|
+
choices=[
|
|
133
|
+
(1, "everyone (public)"),
|
|
134
|
+
(2, "anyone with link"),
|
|
135
|
+
(3, "editors only"),
|
|
136
|
+
],
|
|
137
|
+
default=1,
|
|
138
|
+
verbose_name="share status",
|
|
139
|
+
),
|
|
140
|
+
),
|
|
141
|
+
(
|
|
142
|
+
"settings",
|
|
143
|
+
umap.fields.DictField(
|
|
144
|
+
blank=True, null=True, verbose_name="settings"
|
|
145
|
+
),
|
|
146
|
+
),
|
|
147
|
+
(
|
|
148
|
+
"editors",
|
|
149
|
+
models.ManyToManyField(
|
|
150
|
+
blank=True, to=settings.AUTH_USER_MODEL, verbose_name="editors"
|
|
151
|
+
),
|
|
152
|
+
),
|
|
153
|
+
(
|
|
154
|
+
"licence",
|
|
155
|
+
models.ForeignKey(
|
|
156
|
+
default=umap.models.get_default_licence,
|
|
157
|
+
help_text="Choose the map licence.",
|
|
158
|
+
on_delete=django.db.models.deletion.SET_DEFAULT,
|
|
159
|
+
to="umap.Licence",
|
|
160
|
+
verbose_name="licence",
|
|
161
|
+
),
|
|
162
|
+
),
|
|
163
|
+
(
|
|
164
|
+
"owner",
|
|
165
|
+
models.ForeignKey(
|
|
166
|
+
blank=True,
|
|
167
|
+
null=True,
|
|
168
|
+
on_delete=django.db.models.deletion.PROTECT,
|
|
169
|
+
related_name="owned_maps",
|
|
170
|
+
to=settings.AUTH_USER_MODEL,
|
|
171
|
+
verbose_name="owner",
|
|
172
|
+
),
|
|
173
|
+
),
|
|
63
174
|
],
|
|
64
175
|
options={
|
|
65
|
-
|
|
66
|
-
|
|
176
|
+
"ordering": ("name",),
|
|
177
|
+
"abstract": False,
|
|
67
178
|
},
|
|
68
179
|
),
|
|
69
180
|
migrations.CreateModel(
|
|
70
|
-
name=
|
|
181
|
+
name="Pictogram",
|
|
71
182
|
fields=[
|
|
72
|
-
(
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
183
|
+
(
|
|
184
|
+
"id",
|
|
185
|
+
models.AutoField(
|
|
186
|
+
auto_created=True,
|
|
187
|
+
primary_key=True,
|
|
188
|
+
serialize=False,
|
|
189
|
+
verbose_name="ID",
|
|
190
|
+
),
|
|
191
|
+
),
|
|
192
|
+
("name", models.CharField(max_length=200, verbose_name="name")),
|
|
193
|
+
("attribution", models.CharField(max_length=300)),
|
|
194
|
+
("pictogram", models.ImageField(upload_to="pictogram")),
|
|
76
195
|
],
|
|
77
196
|
options={
|
|
78
|
-
|
|
79
|
-
|
|
197
|
+
"ordering": ("name",),
|
|
198
|
+
"abstract": False,
|
|
80
199
|
},
|
|
81
200
|
),
|
|
82
201
|
migrations.CreateModel(
|
|
83
|
-
name=
|
|
202
|
+
name="TileLayer",
|
|
84
203
|
fields=[
|
|
85
|
-
(
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
204
|
+
(
|
|
205
|
+
"id",
|
|
206
|
+
models.AutoField(
|
|
207
|
+
auto_created=True,
|
|
208
|
+
primary_key=True,
|
|
209
|
+
serialize=False,
|
|
210
|
+
verbose_name="ID",
|
|
211
|
+
),
|
|
212
|
+
),
|
|
213
|
+
("name", models.CharField(max_length=200, verbose_name="name")),
|
|
214
|
+
(
|
|
215
|
+
"url_template",
|
|
216
|
+
models.CharField(
|
|
217
|
+
help_text="URL template using OSM tile format", max_length=200
|
|
218
|
+
),
|
|
219
|
+
),
|
|
220
|
+
("minZoom", models.IntegerField(default=0)),
|
|
221
|
+
("maxZoom", models.IntegerField(default=18)),
|
|
222
|
+
("attribution", models.CharField(max_length=300)),
|
|
223
|
+
(
|
|
224
|
+
"rank",
|
|
225
|
+
models.SmallIntegerField(
|
|
226
|
+
blank=True,
|
|
227
|
+
help_text="Order of the tilelayers in the edit box",
|
|
228
|
+
null=True,
|
|
229
|
+
),
|
|
230
|
+
),
|
|
92
231
|
],
|
|
93
232
|
options={
|
|
94
|
-
|
|
233
|
+
"ordering": ("rank", "name"),
|
|
95
234
|
},
|
|
96
235
|
),
|
|
97
236
|
migrations.AddField(
|
|
98
|
-
model_name=
|
|
99
|
-
name=
|
|
100
|
-
field=models.ForeignKey(
|
|
237
|
+
model_name="map",
|
|
238
|
+
name="tilelayer",
|
|
239
|
+
field=models.ForeignKey(
|
|
240
|
+
blank=True,
|
|
241
|
+
null=True,
|
|
242
|
+
on_delete=django.db.models.deletion.PROTECT,
|
|
243
|
+
related_name="maps",
|
|
244
|
+
to="umap.TileLayer",
|
|
245
|
+
verbose_name="background",
|
|
246
|
+
),
|
|
101
247
|
),
|
|
102
248
|
migrations.AddField(
|
|
103
|
-
model_name=
|
|
104
|
-
name=
|
|
105
|
-
field=models.ForeignKey(
|
|
249
|
+
model_name="datalayer",
|
|
250
|
+
name="map",
|
|
251
|
+
field=models.ForeignKey(
|
|
252
|
+
on_delete=django.db.models.deletion.CASCADE, to="umap.Map"
|
|
253
|
+
),
|
|
106
254
|
),
|
|
107
255
|
]
|
|
@@ -4,15 +4,14 @@ from django.db import migrations, models
|
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
class Migration(migrations.Migration):
|
|
7
|
-
|
|
8
7
|
dependencies = [
|
|
9
|
-
(
|
|
8
|
+
("umap", "0001_initial"),
|
|
10
9
|
]
|
|
11
10
|
|
|
12
11
|
operations = [
|
|
13
12
|
migrations.AddField(
|
|
14
|
-
model_name=
|
|
15
|
-
name=
|
|
13
|
+
model_name="tilelayer",
|
|
14
|
+
name="tms",
|
|
16
15
|
field=models.BooleanField(default=False),
|
|
17
16
|
),
|
|
18
17
|
]
|
|
@@ -5,22 +5,26 @@ from django.db import migrations
|
|
|
5
5
|
|
|
6
6
|
|
|
7
7
|
def add_tilelayer(apps, *args):
|
|
8
|
-
TileLayer = apps.get_model(
|
|
8
|
+
TileLayer = apps.get_model("umap", "TileLayer")
|
|
9
9
|
if TileLayer.objects.count():
|
|
10
10
|
return
|
|
11
11
|
TileLayer(
|
|
12
|
-
name=
|
|
13
|
-
url_template=(
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
12
|
+
name="Positron",
|
|
13
|
+
url_template=(
|
|
14
|
+
"https://cartodb-basemaps-{s}.global.ssl.fastly.net/"
|
|
15
|
+
"light_all/{z}/{x}/{y}.png"
|
|
16
|
+
),
|
|
17
|
+
attribution=(
|
|
18
|
+
"© [[http://www.openstreetmap.org/copyright|"
|
|
19
|
+
"OpenStreetMap]] contributors, © "
|
|
20
|
+
"[[https://carto.com/attributions|CARTO]]"
|
|
21
|
+
),
|
|
22
|
+
).save()
|
|
18
23
|
|
|
19
24
|
|
|
20
25
|
class Migration(migrations.Migration):
|
|
21
|
-
|
|
22
26
|
dependencies = [
|
|
23
|
-
(
|
|
27
|
+
("umap", "0002_tilelayer_tms"),
|
|
24
28
|
]
|
|
25
29
|
|
|
26
30
|
operations = [
|