diff --git a/udata/core/dataset/api_fields.py b/udata/core/dataset/api_fields.py index 330487ea58..378c41b811 100644 --- a/udata/core/dataset/api_fields.py +++ b/udata/core/dataset/api_fields.py @@ -138,10 +138,8 @@ resources_order = api.as_list(fields.String(description='Resource ID')) temporal_coverage_fields = api.model('TemporalCoverage', { - 'start': fields.ISODateTime(description='The temporal coverage start date', - required=True), - 'end': fields.ISODateTime(description='The temporal coverage end date', - required=True), + 'start': fields.ISODateTime(description='The temporal coverage start date', required=True), + 'end': fields.ISODateTime(description='The temporal coverage end date'), }) dataset_ref_fields = api.inherit('DatasetReference', base_reference, { diff --git a/udata/forms/fields.py b/udata/forms/fields.py index 600c908a64..fc3665230f 100644 --- a/udata/forms/fields.py +++ b/udata/forms/fields.py @@ -695,14 +695,22 @@ def process_formdata(self, valuelist): value = valuelist[0] if isinstance(value, str): start, end = value.split(' - ') + if end is not None: + end = parse(end, yearfirst=True).date() + self.data = db.DateRange( start=parse(start, yearfirst=True).date(), - end=parse(end, yearfirst=True).date(), + end=end, ) - elif 'start' in value and 'end' in value: + elif 'start' in value: + if value.get('end', None): + end = parse(value['end'], yearfirst=True).date() + else: + end = None + self.data = db.DateRange( start=parse(value['start'], yearfirst=True).date(), - end=parse(value['end'], yearfirst=True).date(), + end=end, ) else: raise validators.ValidationError( diff --git a/udata/tests/api/test_datasets_api.py b/udata/tests/api/test_datasets_api.py index d31821ca81..c03e294039 100644 --- a/udata/tests/api/test_datasets_api.py +++ b/udata/tests/api/test_datasets_api.py @@ -613,6 +613,32 @@ def test_dataset_api_update_deleted(self): self.assertEqual(Dataset.objects.first().description, dataset.description) + + def test_update_temporal_coverage(self): + user = self.login() + dataset = DatasetFactory(owner=user) + data = dataset.to_dict() + data['temporal_coverage'] = { + 'start': '2024-01-01', + 'end': '2024-01-31', + } + response = self.put(url_for('api.dataset', dataset=dataset), data) + self.assert200(response) + + dataset.reload() + self.assertEqual('2024-01-01', str(dataset.temporal_coverage.start)) + self.assertEqual('2024-01-31', str(dataset.temporal_coverage.end)) + + data = dataset.to_dict() + data['temporal_coverage'] = { 'start': '2024-01-01', 'end': None } + response = self.put(url_for('api.dataset', dataset=dataset), data) + self.assert200(response) + + dataset.reload() + self.assertEqual('2024-01-01', str(dataset.temporal_coverage.start)) + self.assertIsNone(dataset.temporal_coverage.end) + + def test_dataset_api_update_contact_point(self): '''It should update a dataset from the API''' self.login()