Skip to content

Commit 0d21297

Browse files
authored
Revert "[Fixes #12880] Asset download doesn't work with 3D Tiles (#12454)" (#12882)
This reverts commit e5bb6b7.
1 parent e5bb6b7 commit 0d21297

File tree

3 files changed

+29
-32
lines changed

3 files changed

+29
-32
lines changed

geonode/base/api/serializers.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from django.forms.models import model_to_dict
2929
from django.contrib.auth import get_user_model
3030
from django.db.models.query import QuerySet
31+
from geonode.assets.utils import get_default_asset
3132
from geonode.people import Roles
3233
from django.http import QueryDict
3334
from deprecated import deprecated
@@ -63,6 +64,7 @@
6364
from geonode.groups.models import GroupCategory, GroupProfile
6465
from geonode.base.api.fields import ComplexDynamicRelationField
6566
from geonode.layers.utils import get_download_handlers, get_default_dataset_download_handler
67+
from geonode.assets.handlers import asset_handler_registry
6668
from geonode.utils import build_absolute_uri
6769
from geonode.security.utils import get_resources_with_perms, get_geoapp_subtypes
6870
from geonode.resource.models import ExecutionRequest
@@ -299,6 +301,10 @@ def get_attribute(self, instance):
299301
logger.exception(e)
300302
raise e
301303

304+
asset = get_default_asset(_instance)
305+
if asset is not None:
306+
asset_url = asset_handler_registry.get_handler(asset).create_download_url(asset)
307+
302308
if _instance.resource_type in ["map"] + get_geoapp_subtypes():
303309
return []
304310
elif _instance.resource_type in ["document"]:
@@ -308,21 +314,26 @@ def get_attribute(self, instance):
308314
"ajax_safe": _instance.download_is_ajax_safe,
309315
},
310316
]
317+
if asset:
318+
payload.append({"url": asset_url, "ajax_safe": False, "default": False})
311319
return payload
312320

313321
elif _instance.resource_type in ["dataset"]:
314322
download_urls = []
315323
# lets get only the default one first to set it
316324
default_handler = get_default_dataset_download_handler()
317-
obj = default_handler(self.context.get("request"), _instance.alternate, resource_pk=_instance.pk)
325+
obj = default_handler(self.context.get("request"), _instance.alternate)
318326
if obj.download_url:
319327
download_urls.append({"url": obj.download_url, "ajax_safe": obj.is_ajax_safe, "default": True})
320328
# then let's prepare the payload with everything
321329
for handler in get_download_handlers():
322-
obj = handler(self.context.get("request"), _instance.alternate, resource_pk=_instance.pk)
330+
obj = handler(self.context.get("request"), _instance.alternate)
323331
if obj.download_url:
324332
download_urls.append({"url": obj.download_url, "ajax_safe": obj.is_ajax_safe, "default": False})
325333

334+
if asset:
335+
download_urls.append({"url": asset_url, "ajax_safe": True, "default": False if download_urls else True})
336+
326337
return download_urls
327338
else:
328339
return []

geonode/base/api/tests.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,8 @@
5858
from geonode.assets.utils import create_asset_and_link
5959
from geonode.maps.models import Map, MapLayer
6060
from geonode.tests.base import GeoNodeBaseTestSupport
61+
from geonode.assets.utils import get_default_asset
62+
from geonode.assets.handlers import asset_handler_registry
6163

6264
from geonode.base import enumerations
6365
from geonode.base.api.serializers import ResourceBaseSerializer
@@ -2507,7 +2509,12 @@ def test_base_resources_return_download_links_for_documents(self):
25072509
Ensure we can access the Resource Base list.
25082510
"""
25092511
doc = Document.objects.first()
2510-
expected_payload = [{"url": build_absolute_uri(doc.download_url), "ajax_safe": doc.download_is_ajax_safe}]
2512+
asset = get_default_asset(doc)
2513+
handler = asset_handler_registry.get_handler(asset)
2514+
expected_payload = [
2515+
{"url": build_absolute_uri(doc.download_url), "ajax_safe": doc.download_is_ajax_safe},
2516+
{"ajax_safe": False, "default": False, "url": handler.create_download_url(asset)},
2517+
]
25112518
# From resource base API
25122519
json = self._get_for_object(doc, "base-resources-detail")
25132520
download_url = json.get("resource").get("download_urls")

geonode/layers/download_handler.py

Lines changed: 8 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,7 @@
2525
from django.urls import reverse
2626
from django.utils.translation import gettext_lazy as _
2727
from django.conf import settings
28-
from geonode.assets.utils import get_default_asset
29-
from geonode.assets.handlers import asset_handler_registry
3028
from geonode.base.auth import get_or_create_token
31-
from geonode.base.views import _resolve_resourcebase
3229
from geonode.geoserver.helpers import wps_format_is_supported
3330
from geonode.layers.views import _resolve_dataset
3431
from geonode.proxy.views import fetch_response_headers
@@ -44,10 +41,9 @@ def __str__(self):
4441
def __repr__(self):
4542
return self.__str__()
4643

47-
def __init__(self, request, resource_name, resource_pk=None) -> None:
44+
def __init__(self, request, resource_name) -> None:
4845
self.request = request
4946
self.resource_name = resource_name
50-
self.resource_pk = resource_pk
5147
self._resource = None
5248

5349
def get_download_response(self):
@@ -79,19 +75,13 @@ def download_url(self):
7975
resource = self.get_resource()
8076
if not resource:
8177
return None
82-
83-
if resource.subtype not in ["vector", "raster", "vector_time", "3dtiles"]:
78+
if resource.subtype not in ["vector", "raster", "vector_time"]:
8479
logger.info("Download URL is available only for datasets that have been harvested and copied locally")
8580
return None
8681

8782
if self.is_link_resource:
8883
return resource.link_set.filter(resource=resource.get_self_resource(), link_type="original").first().url
8984

90-
if resource.subtype == "3dtiles":
91-
asset = get_default_asset(resource)
92-
if asset is not None:
93-
return asset_handler_registry.get_handler(asset).create_download_url(asset)
94-
9585
return reverse("dataset_download", args=[resource.alternate])
9686

9787
def get_resource(self):
@@ -100,23 +90,12 @@ def get_resource(self):
10090
"""
10191
if not self._resource:
10292
try:
103-
104-
if self.resource_pk:
105-
self._resource = _resolve_resourcebase(
106-
self.request,
107-
self.resource_pk,
108-
"base.download_resourcebase",
109-
_("You do not have download permissions for this dataset."),
110-
)
111-
elif self.resource_name:
112-
self._resource = _resolve_dataset(
113-
self.request,
114-
self.resource_name,
115-
"base.download_resourcebase",
116-
_("You do not have download permissions for this dataset."),
117-
)
118-
else:
119-
raise Exception("Layer not found")
93+
self._resource = _resolve_dataset(
94+
self.request,
95+
self.resource_name,
96+
"base.download_resourcebase",
97+
_("You do not have download permissions for this dataset."),
98+
)
12099
except Exception as e:
121100
logger.debug(e)
122101

0 commit comments

Comments
 (0)