Skip to content

Commit fbee678

Browse files
authored
[Fixes 12766] New fixes regarding the Timeseries API (#12853)
* [fixes 12766] in Timeseries API * modifying the default of precision step * black reformat * Setting time dimension through the /copy endpoint
1 parent 306a958 commit fbee678

File tree

3 files changed

+45
-8
lines changed

3 files changed

+45
-8
lines changed

geonode/layers/api/serializers.py

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -232,8 +232,8 @@ def __init__(self, *args, **kwargs):
232232
choices = [(None, "-----")]
233233

234234
has_time = serializers.BooleanField(default=False)
235-
attribute = serializers.ChoiceField(choices=[], required=False)
236-
end_attribute = serializers.ChoiceField(choices=[], required=False)
235+
attribute = serializers.ChoiceField(choices=[], required=False, allow_null=True, default=None)
236+
end_attribute = serializers.ChoiceField(choices=[], required=False, allow_null=True, default=None)
237237
presentation = serializers.ChoiceField(
238238
required=False,
239239
choices=[
@@ -244,9 +244,11 @@ def __init__(self, *args, **kwargs):
244244
"Continuous Intervals for data that is frequently updated, resolution describes the frequency of updates",
245245
),
246246
],
247+
default="LIST",
247248
)
248-
precision_value = serializers.IntegerField(required=False)
249+
precision_value = serializers.IntegerField(required=False, allow_null=True)
249250
precision_step = serializers.ChoiceField(
250251
required=False,
251252
choices=[("years",) * 2, ("months",) * 2, ("days",) * 2, ("hours",) * 2, ("minutes",) * 2, ("seconds",) * 2],
253+
default="seconds",
252254
)

geonode/layers/api/views.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,12 @@ def timeseries_info(self, request, pk, *args, **kwards):
259259
else None
260260
)
261261

262+
if start_attr is None and end_attr is None:
263+
return JsonResponse(
264+
{"message": "Please select at least one option between the attribute and end_attribute"},
265+
status=200,
266+
)
267+
262268
# Save the has_time value to the database
263269
layer.has_time = True
264270
layer.save()
@@ -288,8 +294,4 @@ def timeseries_info(self, request, pk, *args, **kwards):
288294
layer.has_time = False
289295
layer.save()
290296

291-
return JsonResponse(
292-
{
293-
"message": "The time information was not updated since the time dimension is disabled for this layer"
294-
}
295-
)
297+
return JsonResponse({"message": "The time dimension information for this layer was disabled"})

geonode/upload/handlers/common/vector.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
from django.db.models import Q
5555
import pyproj
5656
from geonode.geoserver.security import delete_dataset_cache, set_geowebcache_invalidate_cache
57+
from geonode.geoserver.helpers import get_time_info
5758
from geonode.upload.utils import ImporterRequestAction as ira
5859

5960
logger = logging.getLogger("importer")
@@ -774,8 +775,40 @@ def copy_geonode_resource(
774775
execution_id=str(_exec.exec_id),
775776
asset=get_default_asset(resource),
776777
)
778+
777779
copy_assets_and_links(resource, target=new_resource)
780+
781+
if resource.dataset.has_time is True:
782+
783+
new_resource.has_time = True
784+
new_resource.save()
785+
786+
time_info = None
787+
try:
788+
time_info = get_time_info(resource.dataset)
789+
except ValueError as e:
790+
logger.info(f"Failed to retrieve time information: {e}")
791+
792+
time_info["attribute"] = (
793+
resource.dataset.attributes.get(pk=time_info.get("attribute")).attribute
794+
if time_info.get("attribute")
795+
else None
796+
)
797+
time_info["end_attribute"] = (
798+
resource.dataset.attributes.get(pk=time_info.get("end_attribute")).attribute
799+
if time_info.get("end_attribute")
800+
else None
801+
)
802+
803+
resource_manager.exec(
804+
"set_time_info",
805+
None,
806+
instance=new_resource,
807+
time_info=time_info,
808+
)
809+
778810
new_resource.refresh_from_db()
811+
779812
return new_resource
780813

781814
def get_ogr2ogr_task_group(

0 commit comments

Comments
 (0)