From a197aafdce43c4f0ee305bbd3e1ba100feb06e1a Mon Sep 17 00:00:00 2001 From: Danang Date: Tue, 10 Sep 2024 23:48:44 +0700 Subject: [PATCH] fix attributes from tomorrow.io API (#149) * fix attributes from tomorrow.io API * rename typo on function --- .../gap/fixtures/8.dataset_attribute.json | 171 ++++++++++++++++-- django_project/gap/models/crop_insight.py | 4 +- django_project/gap/providers/tio.py | 36 +--- .../gap/tests/providers/test_tio.py | 10 + .../gap_api/tests/test_crop_plan_api.py | 4 +- 5 files changed, 173 insertions(+), 52 deletions(-) diff --git a/django_project/gap/fixtures/8.dataset_attribute.json b/django_project/gap/fixtures/8.dataset_attribute.json index d743fed..898a20d 100755 --- a/django_project/gap/fixtures/8.dataset_attribute.json +++ b/django_project/gap/fixtures/8.dataset_attribute.json @@ -417,9 +417,152 @@ "ensembles": true } }, - { +{ "model": "gap.datasetattribute", "pk": 39, + "fields": { + "dataset": 5, + "attribute": 15, + "source": "rainAccumulationSum", + "source_unit": 1, + "ensembles": false + } +}, +{ + "model": "gap.datasetattribute", + "pk": 40, + "fields": { + "dataset": 6, + "attribute": 15, + "source": "rainAccumulationSum", + "source_unit": 1, + "ensembles": false + } +}, +{ + "model": "gap.datasetattribute", + "pk": 41, + "fields": { + "dataset": 7, + "attribute": 15, + "source": "rainAccumulationSum", + "source_unit": 1, + "ensembles": false + } +}, +{ + "model": "gap.datasetattribute", + "pk": 42, + "fields": { + "dataset": 5, + "attribute": 8, + "source": "evapotranspirationSum", + "source_unit": 1, + "ensembles": false + } +}, +{ + "model": "gap.datasetattribute", + "pk": 43, + "fields": { + "dataset": 6, + "attribute": 8, + "source": "evapotranspirationSum", + "source_unit": 1, + "ensembles": false + } +}, +{ + "model": "gap.datasetattribute", + "pk": 44, + "fields": { + "dataset": 7, + "attribute": 8, + "source": "evapotranspirationSum", + "source_unit": 1, + "ensembles": false + } +}, +{ + "model": "gap.datasetattribute", + "pk": 45, + "fields": { + "dataset": 5, + "attribute": 9, + "source": "temperatureMax", + "source_unit": 5, + "ensembles": false + } +}, +{ + "model": "gap.datasetattribute", + "pk": 46, + "fields": { + "dataset": 6, + "attribute": 9, + "source": "temperatureMax", + "source_unit": 5, + "ensembles": false + } +}, +{ + "model": "gap.datasetattribute", + "pk": 47, + "fields": { + "dataset": 7, + "attribute": 9, + "source": "temperatureMax", + "source_unit": 5, + "ensembles": false + } +}, +{ + "model": "gap.datasetattribute", + "pk": 48, + "fields": { + "dataset": 5, + "attribute": 17, + "source": "temperatureMin", + "source_unit": 5, + "ensembles": false + } +}, +{ + "model": "gap.datasetattribute", + "pk": 49, + "fields": { + "dataset": 6, + "attribute": 17, + "source": "temperatureMin", + "source_unit": 5, + "ensembles": false + } +}, +{ + "model": "gap.datasetattribute", + "pk": 50, + "fields": { + "dataset": 7, + "attribute": 17, + "source": "temperatureMin", + "source_unit": 5, + "ensembles": false + } +}, +{ + "model": "gap.datasetattribute", + "pk": 51, + "fields": { + "dataset": 6, + "attribute": 36, + "source": "precipitationProbability", + "source_unit": 6, + "ensembles": false + } +}, + { + "model": "gap.datasetattribute", + "pk": 52, "fields": { "dataset": 8, "attribute": 8, @@ -430,7 +573,7 @@ }, { "model": "gap.datasetattribute", - "pk": 40, + "pk": 53, "fields": { "dataset": 8, "attribute": 5, @@ -441,7 +584,7 @@ }, { "model": "gap.datasetattribute", - "pk": 41, + "pk": 54, "fields": { "dataset": 8, "attribute": 14, @@ -452,7 +595,7 @@ }, { "model": "gap.datasetattribute", - "pk": 42, + "pk": 55, "fields": { "dataset": 8, "attribute": 37, @@ -463,7 +606,7 @@ }, { "model": "gap.datasetattribute", - "pk": 43, + "pk": 56, "fields": { "dataset": 8, "attribute": 38, @@ -474,7 +617,7 @@ }, { "model": "gap.datasetattribute", - "pk": 44, + "pk": 57, "fields": { "dataset": 8, "attribute": 4, @@ -485,7 +628,7 @@ }, { "model": "gap.datasetattribute", - "pk": 45, + "pk": 58, "fields": { "dataset": 8, "attribute": 16, @@ -496,7 +639,7 @@ }, { "model": "gap.datasetattribute", - "pk": 46, + "pk": 59, "fields": { "dataset": 8, "attribute": 39, @@ -507,7 +650,7 @@ }, { "model": "gap.datasetattribute", - "pk": 47, + "pk": 60, "fields": { "dataset": 8, "attribute": 7, @@ -518,7 +661,7 @@ }, { "model": "gap.datasetattribute", - "pk": 48, + "pk": 61, "fields": { "dataset": 8, "attribute": 40, @@ -529,7 +672,7 @@ }, { "model": "gap.datasetattribute", - "pk": 49, + "pk": 62, "fields": { "dataset": 8, "attribute": 43, @@ -540,7 +683,7 @@ }, { "model": "gap.datasetattribute", - "pk": 50, + "pk": 63, "fields": { "dataset": 8, "attribute": 33, @@ -551,7 +694,7 @@ }, { "model": "gap.datasetattribute", - "pk": 51, + "pk": 64, "fields": { "dataset": 8, "attribute": 42, @@ -562,7 +705,7 @@ }, { "model": "gap.datasetattribute", - "pk": 52, + "pk": 65, "fields": { "dataset": 8, "attribute": 41, diff --git a/django_project/gap/models/crop_insight.py b/django_project/gap/models/crop_insight.py index 65c494e..57a6f95 100644 --- a/django_project/gap/models/crop_insight.py +++ b/django_project/gap/models/crop_insight.py @@ -265,9 +265,9 @@ class CropPlanData: @staticmethod def default_fields(): """Return shortterm default fields.""" - from gap.providers.tio import tomorrowio_shortterm_forcast_dataset + from gap.providers.tio import tomorrowio_shortterm_forecast_dataset - dataset = tomorrowio_shortterm_forcast_dataset() + dataset = tomorrowio_shortterm_forecast_dataset() forecast_fields = list( DatasetAttribute.objects.filter( dataset=dataset diff --git a/django_project/gap/providers/tio.py b/django_project/gap/providers/tio.py index 61161a6..daed5c7 100644 --- a/django_project/gap/providers/tio.py +++ b/django_project/gap/providers/tio.py @@ -66,7 +66,7 @@ } -def tomorrowio_shortterm_forcast_dataset() -> Dataset: +def tomorrowio_shortterm_forecast_dataset() -> Dataset: """Return dataset object for tomorrow.io Dataset for sort term forecast.""" provider, _ = Provider.objects.get_or_create(name='Tomorrow.io') dt_shorttermforecast, _ = DatasetType.objects.get_or_create( @@ -125,7 +125,7 @@ def init_provider(cls): 'is_internal_use': True } ) - ds_forecast = tomorrowio_shortterm_forcast_dataset() + tomorrowio_shortterm_forecast_dataset() dt_ltn, _ = DatasetType.objects.get_or_create( name=cls.LONG_TERM_NORMALS_TYPE, defaults={ @@ -143,38 +143,6 @@ def init_provider(cls): } ) - for key, val in TIO_VARIABLES.items(): - attr = val.get_gap_attribute() - # add to dataset attribute - DatasetAttribute.objects.get_or_create( - dataset=ds_historical, - attribute=attr, - source=key, - source_unit=attr.unit - ) - DatasetAttribute.objects.get_or_create( - dataset=ds_forecast, - attribute=attr, - source=key, - source_unit=attr.unit - ) - DatasetAttribute.objects.get_or_create( - dataset=ds_ltn, - attribute=attr, - source=key, - source_unit=attr.unit - ) - - # For shorterm forecast - for key, val in TIO_SHORT_TERM_FORCAST_VARIABLES.items(): - attr = val.get_gap_attribute() - DatasetAttribute.objects.get_or_create( - dataset=ds_forecast, - attribute=attr, - source=key, - source_unit=attr.unit - ) - def _is_ltn_request(self): """Check if the request is for Long Term Normal (LTN) request.""" return ( diff --git a/django_project/gap/tests/providers/test_tio.py b/django_project/gap/tests/providers/test_tio.py index 1f07dac..8031de9 100644 --- a/django_project/gap/tests/providers/test_tio.py +++ b/django_project/gap/tests/providers/test_tio.py @@ -27,6 +27,16 @@ class TestTomorrowIODatasetReader(TestCase): """Test class for Tomorrow io dataset reader.""" + fixtures = [ + '2.provider.json', + '3.observation_type.json', + '4.dataset_type.json', + '5.dataset.json', + '6.unit.json', + '7.attribute.json', + '8.dataset_attribute.json' + ] + def setUp(self): """Set test class.""" TomorrowIODatasetReader.init_provider() diff --git a/django_project/gap_api/tests/test_crop_plan_api.py b/django_project/gap_api/tests/test_crop_plan_api.py index a77064c..3bf66b9 100644 --- a/django_project/gap_api/tests/test_crop_plan_api.py +++ b/django_project/gap_api/tests/test_crop_plan_api.py @@ -14,7 +14,7 @@ from gap.models import ( DatasetAttribute, FarmShortTermForecast, FarmShortTermForecastData ) -from gap.providers.tio import tomorrowio_shortterm_forcast_dataset +from gap.providers.tio import tomorrowio_shortterm_forecast_dataset from gap_api.api_views.crop_insight import CropPlanAPI @@ -34,7 +34,7 @@ def setUp(self): """Init test class.""" super().setUp() - ds_forecast = tomorrowio_shortterm_forcast_dataset() + ds_forecast = tomorrowio_shortterm_forecast_dataset() attr = AttributeFactory() self.farm = FarmFactory.create( unique_id='farm-1',