2525from django .urls import reverse
2626from django .utils .translation import gettext_lazy as _
2727from django .conf import settings
28+ from geonode .assets .utils import get_default_asset
29+ from geonode .assets .handlers import asset_handler_registry
2830from geonode .base .auth import get_or_create_token
31+ from geonode .base .views import _resolve_resourcebase
2932from geonode .geoserver .helpers import wps_format_is_supported
3033from geonode .layers .views import _resolve_dataset
3134from geonode .proxy .views import fetch_response_headers
@@ -41,9 +44,10 @@ def __str__(self):
4144 def __repr__ (self ):
4245 return self .__str__ ()
4346
44- def __init__ (self , request , resource_name ) -> None :
47+ def __init__ (self , request , resource_name , resource_pk = None ) -> None :
4548 self .request = request
4649 self .resource_name = resource_name
50+ self .resource_pk = resource_pk
4751 self ._resource = None
4852
4953 def get_download_response (self ):
@@ -75,13 +79,19 @@ def download_url(self):
7579 resource = self .get_resource ()
7680 if not resource :
7781 return None
78- if resource .subtype not in ["vector" , "raster" , "vector_time" ]:
82+
83+ if resource .subtype not in ["vector" , "raster" , "vector_time" , "3dtiles" ]:
7984 logger .info ("Download URL is available only for datasets that have been harvested and copied locally" )
8085 return None
8186
8287 if self .is_link_resource :
8388 return resource .link_set .filter (resource = resource .get_self_resource (), link_type = "original" ).first ().url
8489
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+
8595 return reverse ("dataset_download" , args = [resource .alternate ])
8696
8797 def get_resource (self ):
@@ -90,12 +100,23 @@ def get_resource(self):
90100 """
91101 if not self ._resource :
92102 try :
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- )
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" )
99120 except Exception as e :
100121 logger .debug (e )
101122
0 commit comments