Skip to content

Commit 7c531a7

Browse files
committed
Update maptunik to be able to save style
1 parent 0849226 commit 7c531a7

30 files changed

+65
-1707
lines changed

.gitmodules

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
[submodule "maputnik"]
22
path = maputnik
3-
url = git@github.com:kartoza/maputnik.git
3+
url = https://github.com/kartoza/maputnik.git
44
branch = cloud-native-gis

MANIFEST.in

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
include README
2+
recursive-include django_project/cloud_native_gis/templates/*

Makefile

+2-8
Original file line numberDiff line numberDiff line change
@@ -71,18 +71,12 @@ serve-maputnik:
7171
@echo "------------------------------------------------------------------"
7272
@cd maputnik; npm install --verbose; npm run start;
7373

74-
run-build-maputnik:
75-
@echo
76-
@echo "------------------------------------------------------------------"
77-
@echo "Build maptunik"
78-
@echo "------------------------------------------------------------------"
79-
@cd maputnik; npm install --verbose; npm run build-django;
80-
81-
build-maputnik: run-build-maputnik
74+
build-maputnik:
8275
@echo
8376
@echo "------------------------------------------------------------------"
8477
@echo "Change html to django"
8578
@echo "------------------------------------------------------------------"
79+
@cd maputnik; npm install --verbose; npm run build-django;
8680
@cd ../../;
8781
@python3 maputnik_html_to_django.py
8882

django_project/cloud_native_gis/admin/layer.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
from cloud_native_gis.models.layer import Layer, LayerAttributes
99
from cloud_native_gis.models.layer_upload import LayerUpload
1010
from cloud_native_gis.tasks import import_data
11-
from cloud_native_gis.utils.layer import layer_api_url, MAPUTNIK_URL
11+
from cloud_native_gis.utils.layer import layer_api_url, maputnik_url
1212

1313

1414
class LayerAttributeInline(admin.TabularInline):
@@ -61,7 +61,7 @@ def field_names(self, obj: Layer):
6161
def editor(self, obj: Layer):
6262
"""Return fields."""
6363
return mark_safe(
64-
f"<a target='__blank__' href='{MAPUTNIK_URL}?"
64+
f"<a target='__blank__' href='{maputnik_url()}?"
6565
f"api-url={layer_api_url(obj, self.request)}"
6666
f"'>Editor</a>"
6767
)

django_project/cloud_native_gis/api/layer.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from cloud_native_gis.models.style import Style
1515
from cloud_native_gis.serializer.layer import LayerSerializer
1616
from cloud_native_gis.serializer.style import LayerStyleSerializer
17-
from cloud_native_gis.utils.layer import layer_style_url, MAPUTNIK_URL
17+
from cloud_native_gis.utils.layer import layer_style_url, maputnik_url
1818

1919

2020
class LayerViewSet(BaseApi):
@@ -129,6 +129,6 @@ def update(self, request, *args, **kwargs):
129129
layer.styles.add(style)
130130

131131
return Response(
132-
f'{MAPUTNIK_URL}?styleUrl='
132+
f'{maputnik_url()}?styleUrl='
133133
f'{layer_style_url(layer, style, self.request)}'
134134
)

django_project/cloud_native_gis/maputnik/assets/index-B7ypWbQA.js

-827
This file was deleted.

django_project/cloud_native_gis/maputnik/assets/index-B7ypWbQA.js.map

-1
This file was deleted.

django_project/cloud_native_gis/maputnik/assets/index-BFQdBSqC.css

-1
This file was deleted.

django_project/cloud_native_gis/maputnik/assets/index-Cm8ZtJ1I.js

-827
This file was deleted.

django_project/cloud_native_gis/maputnik/assets/index-Cm8ZtJ1I.js.map

-1
This file was deleted.

django_project/cloud_native_gis/maputnik/assets/index-v8ZkhupJ.css

-1
This file was deleted.

django_project/cloud_native_gis/migrations/0001_initial.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Generated by Django 4.2.7 on 2024-06-05 10:37
1+
# Generated by Django 4.2.7 on 2024-06-06 10:12
22

33
import cloud_native_gis.models.layer_upload
44
from django.conf import settings
@@ -30,7 +30,7 @@ class Migration(migrations.Migration):
3030
('abstract', models.TextField(blank=True, null=True)),
3131
('attribution', models.CharField(blank=True, max_length=512, null=True)),
3232
('metadata', models.JSONField(blank=True, null=True)),
33-
('created_by', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
33+
('created_by', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_related', related_query_name='%(app_label)s_%(class)ss', to=settings.AUTH_USER_MODEL)),
3434
],
3535
options={
3636
'abstract': False,
@@ -70,7 +70,7 @@ class Migration(migrations.Migration):
7070
('status', models.CharField(choices=[('Start', 'Start'), ('Running', 'Running'), ('Failed', 'Failed'), ('Success', 'Success')], default='Start', max_length=100)),
7171
('note', models.TextField(blank=True, null=True)),
7272
('folder', models.TextField(default=cloud_native_gis.models.layer_upload.generate_folder)),
73-
('created_by', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
73+
('created_by', models.ForeignKey(editable=False, on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_related', related_query_name='%(app_label)s_%(class)ss', to=settings.AUTH_USER_MODEL)),
7474
('layer', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='cloud_native_gis.layer')),
7575
],
7676
options={

django_project/cloud_native_gis/models/general.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@ class AbstractResource(models.Model):
3030

3131
created_by = models.ForeignKey(
3232
User, on_delete=models.CASCADE,
33-
editable=False
33+
editable=False,
34+
related_name="%(app_label)s_%(class)s_related",
35+
related_query_name="%(app_label)s_%(class)ss",
3436
)
3537
created_at = models.DateTimeField(
3638
default=timezone.now,

django_project/cloud_native_gis/models/layer.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def tile_url(self):
116116
return None
117117

118118
return reverse(
119-
'cloud-native-gis-tile-api',
119+
'cloud-native-gis-vector-tile',
120120
kwargs={
121121
'identifier': self.unique_id,
122122
'x': '0',

django_project/cloud_native_gis/maputnik/index.html renamed to django_project/cloud_native_gis/templates/cloud_native_gis/index.html

+8-5
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
<meta charset="utf-8">
66
<title>Maputnik</title>
77
<meta name="viewport" content="width=device-width, initial-scale=1">
8-
<link rel="manifest" href="{% static "/assets/manifest-BrZzkYP9.json" %}">
9-
<link rel="icon" href="{% static "/assets/favicon-DBn6BKLx.ico" %}" type="image/x-icon" />
8+
<link rel="manifest" href="{% static "/cloud_native_gis/manifest-BrZzkYP9.json" %}">
9+
<link rel="icon" href="{% static "/cloud_native_gis/favicon-DBn6BKLx.ico" %}" type="image/x-icon" />
1010
<style>
1111
html {
1212
background-color: rgb(28, 31, 36);
@@ -38,9 +38,12 @@
3838
}
3939

4040
</style>
41-
<script type="module" crossorigin src="{% static "/assets/index-DvofjCiq.js" %}"></script>
42-
<link rel="stylesheet" crossorigin href="{% static "/assets/index-v8ZkhupJ.css" %}">
43-
</head>
41+
<script type="module" crossorigin src="{% static "/cloud_native_gis/index-DRZ64yjZ.js" %}"></script>
42+
<link rel="stylesheet" crossorigin href="{% static "/cloud_native_gis/index-DW0d2Ij5.css" %}">
43+
44+
<script>
45+
window.csrfmiddlewaretoken = '{{ csrf_token }}';
46+
</script>
4447
<body>
4548
<!-- From <https://github.com/hail2u/color-blindness-emulation> -->
4649
<svg

django_project/cloud_native_gis/maputnik/assets/index-DvofjCiq.js renamed to django_project/cloud_native_gis/templates/cloud_native_gis/static/cloud_native_gis/index-DRZ64yjZ.js

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

django_project/cloud_native_gis/maputnik/assets/index-DvofjCiq.js.map renamed to django_project/cloud_native_gis/templates/cloud_native_gis/static/cloud_native_gis/index-DRZ64yjZ.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

django_project/cloud_native_gis/templates/cloud_native_gis/static/cloud_native_gis/index-DW0d2Ij5.css

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

django_project/cloud_native_gis/tests/api/layer.py

+9-9
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ def setUp(self):
3434

3535
def test_list_api(self):
3636
"""Test List API."""
37-
url = reverse('cloud-native-gis-view-set-list')
37+
url = reverse('cloud-native-gis-layer-view-set-list')
3838
response = self.assertRequestGetView(url, 200, user=self.user)
3939
self.assertEqual(len(response.json()['results']), 2)
4040

@@ -45,13 +45,13 @@ def test_list_api_by_filter(self):
4545
'name__contains': 'Layer 2'
4646
}
4747
)
48-
url = reverse('cloud-native-gis-view-set-list') + '?' + params
48+
url = reverse('cloud-native-gis-layer-view-set-list') + '?' + params
4949
response = self.assertRequestGetView(url, 200, user=self.user)
5050
self.assertEqual(len(response.json()['results']), 1)
5151

5252
def test_create_api(self):
5353
"""Test POST API."""
54-
url = reverse('cloud-native-gis-view-set-list')
54+
url = reverse('cloud-native-gis-layer-view-set-list')
5555
response = self.assertRequestPostView(
5656
url, 201,
5757
user=self.user,
@@ -69,11 +69,11 @@ def test_create_api(self):
6969

7070
def test_detail_api(self):
7171
"""Test GET detail api."""
72-
url = reverse('cloud-native-gis-view-set-list', args=[0])
72+
url = reverse('cloud-native-gis-layer-view-set-list', args=[0])
7373
self.assertRequestGetView(url, 404)
7474

7575
url = reverse(
76-
'cloud-native-gis-view-set-detail',
76+
'cloud-native-gis-layer-view-set-detail',
7777
kwargs={'id': self.layer_1.id}
7878
)
7979
response = self.assertRequestGetView(url, 200, user=self.user).json()
@@ -86,11 +86,11 @@ def test_detail_api(self):
8686

8787
def test_update_api(self):
8888
"""Test PUT API."""
89-
url = reverse('cloud-native-gis-view-set-list', args=[0])
89+
url = reverse('cloud-native-gis-layer-view-set-list', args=[0])
9090
self.assertRequestPutView(url, 404, data={})
9191

9292
url = reverse(
93-
'cloud-native-gis-view-set-detail',
93+
'cloud-native-gis-layer-view-set-detail',
9494
kwargs={'id': self.layer_1.id}
9595
)
9696
self.assertRequestPutView(url, 403, data={})
@@ -118,10 +118,10 @@ def test_update_api(self):
118118
def test_delete_api(self):
119119
"""Test DELETE API."""
120120
_id = self.layer_1.id
121-
url = reverse('cloud-native-gis-view-set-detail', args=[0])
121+
url = reverse('cloud-native-gis-layer-view-set-detail', args=[0])
122122
self.assertRequestDeleteView(url, 404)
123123
url = reverse(
124-
'cloud-native-gis-view-set-detail', kwargs={'id': _id}
124+
'cloud-native-gis-layer-view-set-detail', kwargs={'id': _id}
125125
)
126126
self.assertRequestDeleteView(url, 403)
127127
self.assertRequestDeleteView(url, 403, user=self.user_1)

django_project/cloud_native_gis/urls.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
router = DefaultRouter()
1515
router.register(
16-
r'layer', LayerViewSet, basename='cloud-native-gis-view-set'
16+
r'layer', LayerViewSet, basename='cloud-native-gis-layer-view-set'
1717
)
1818
layer_router = NestedSimpleRouter(
1919
router, r'layer', lookup='layer'
@@ -27,12 +27,13 @@
2727
path(
2828
'<str:identifier>/tile/<int:z>/<int:x>/<int:y>/',
2929
VectorTileLayer.as_view(),
30-
name='cloud-native-gis-tile-api'
30+
name='cloud-native-gis-vector-tile'
3131
),
3232
path('api/', include(router.urls)),
3333
path('api/', include(layer_router.urls)),
3434
path(
3535
'maputnik/',
36-
TemplateView.as_view(template_name='maputnik/index.html')
36+
TemplateView.as_view(template_name='cloud_native_gis/index.html'),
37+
name='cloud-native-gis-maputnik'
3738
)
3839
]

django_project/cloud_native_gis/utils/layer.py

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
# coding=utf-8
22
"""Cloud Native GIS."""
33

4-
from django.conf import settings
4+
import os
5+
56
from django.urls import reverse
67

78
from cloud_native_gis.models.layer import Layer
89
from cloud_native_gis.models.style import Style
910

10-
try:
11-
MAPUTNIK_URL = settings.MAPUTNIK_URL
12-
except AttributeError:
13-
MAPUTNIK_URL = '/maputnik'
11+
12+
def maputnik_url() -> str:
13+
"""Return url for mapnik layer."""
14+
try:
15+
return os.environ['MAPUTNIK_URL']
16+
except KeyError:
17+
return reverse('cloud-native-gis-maputnik')
1418

1519

1620
def layer_style_url(layer: Layer, style: Style, request) -> str:
@@ -29,7 +33,7 @@ def layer_style_url(layer: Layer, style: Style, request) -> str:
2933
def layer_api_url(layer: Layer, request) -> str:
3034
"""Return layer api url."""
3135
return request.build_absolute_uri('/')[:-1] + reverse(
32-
'cloud-native-gis-view-set-detail',
36+
'cloud-native-gis-layer-view-set-detail',
3337
kwargs={
3438
'id': layer.id
3539
}

django_project/core/settings/base.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
# Don't forget to use absolute paths, not relative paths.
5555
absolute_path('core', 'static'),
5656
absolute_path('frontend', 'bundles'),
57-
absolute_path('cloud_native_gis', 'maputnik'),
57+
absolute_path('cloud_native_gis', 'templates', 'cloud_native_gis'),
5858
)
5959

6060
# Every cache key will get prefixed with this value - here we set it to

django_project/core/settings/project.py

-2
Original file line numberDiff line numberDiff line change
@@ -36,5 +36,3 @@
3636
TEMPLATES[0]['DIRS'] += [
3737
absolute_path('frontend', 'templates'),
3838
]
39-
40-
MAPUTNIK_URL = os.environ.get('MAPUTNIK_URL', '/maputnik')

maputnik_html_to_django.py

+9-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
def maputnik_html_to_django():
1010
"""Change hmtl file to django file."""
11-
path = 'django_project/cloud_native_gis/maputnik/index.html'
11+
path = 'django_project/cloud_native_gis/templates/cloud_native_gis/index.html'
1212

1313
with open(path, 'r') as file:
1414
filedata = file.read()
@@ -25,6 +25,14 @@ def maputnik_html_to_django():
2525
filedata
2626
)
2727
filedata = filedata.replace('/maputnik', '')
28+
filedata = filedata.replace('/static', '')
29+
filedata = filedata.replace(
30+
'</head>',
31+
'''
32+
<script>
33+
window.csrfmiddlewaretoken = '{{ csrf_token }}';
34+
</script>'''
35+
)
2836

2937
with open(path, 'w') as file:
3038
file.write(filedata)

setup.py

+3
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
where='django_project',
2121
include=['cloud_native_gis*'],
2222
),
23+
package_data={
24+
'cloud_native_gis': ['templates/*']
25+
},
2326
package_dir={'': 'django_project'},
2427
scripts=[],
2528
url='https://github.com/kartoza/CloudNativeGIS',

0 commit comments

Comments
 (0)