diff --git a/tests/fixtures/stationmeta/stationmeta_global.json b/tests/fixtures/stationmeta/stationmeta_global.json index 6e6be3938a28025b0990b22fc5a7b33fcce8988e..b084fe19531a9d332e92f18609f388fbc03fda13 100644 --- a/tests/fixtures/stationmeta/stationmeta_global.json +++ b/tests/fixtures/stationmeta/stationmeta_global.json @@ -5,7 +5,7 @@ "min_topography_srtm_relative_alt_5km_year1994":-999.0, "stddev_topography_srtm_relative_alt_5km_year1994":-999.0, "climatic_zone_year2016": 6, - "htap_region_tier1_year2010":10, + "htap_region_tier1_year2010":11, "dominant_landcover_year2012":10, "landcover_description_25km_year2012":"11:30.7 %,12:25.0 %,210:16.9 %,130:8.6 %,190:5.8 %,100:3.5 %,40:2.6 %,10:2.0 %,30:1.9 %", "dominant_ecoregion_year2017":-1, @@ -31,7 +31,7 @@ "min_topography_srtm_relative_alt_5km_year1994":-999.0, "stddev_topography_srtm_relative_alt_5km_year1994":-999.0, "climatic_zone_year2016": 6, - "htap_region_tier1_year2010":10, + "htap_region_tier1_year2010":11, "dominant_landcover_year2012":10, "landcover_description_25km_year2012":"", "dominant_ecoregion_year2017":-1, diff --git a/tests/test_data.py b/tests/test_data.py index 7dd6f5a31177e78cefc6e36c955f42808c605b71..fe796170d025fccc490e2a4aa4629f188289e080 100644 --- a/tests/test_data.py +++ b/tests/test_data.py @@ -539,6 +539,21 @@ class TestApps: {'datetime': '2012-12-17T04:00:00+00:00', 'value': 19.62, 'flags': 'OK validated verified', 'timeseries_id': 2, 'version': '1.0'}]} assert response.json() == expected_response + def test_create_data_record(self, client, db): + response = client.post("/data/timeseries/record/?series_id=2&datetime=2021-08-23%2015:00:00&value=67.3&flag=OK&version=000001.000001.00000000000000") + expected_status_code = 200 + assert response.status_code == expected_status_code + expected_response = 'Data successfully inserted.' + assert response.json() == expected_response + patched_response = client.get("/timeseries/2") + assert patched_response.status_code == expected_status_code + patched_response_changelog = patched_response.json()["changelog"][-1] + patched_response_changelog["datetime"] = "" + expected_changelog = {'datetime': '', 'description': 'data record created', 'old_value': '', 'new_value': '', + 'timeseries_id': 2, 'author_id': 1, 'type_of_change': 'created', 'period_start': '2021-08-23T15:00:00+00:00', + 'period_end': '2021-08-23T15:00:00+00:00', 'version': '000001.000001.00000000000000'} + assert patched_response_changelog == expected_changelog + def test_patch_data(self, client, db): response = client.patch("/data/timeseries/?description=test patch&version=000002.000000.00000000000000", files={"file": open("tests/fixtures/data/toluene_SDZ54421_2012_2012_v2-0.dat", "rb")}) @@ -557,6 +572,17 @@ class TestApps: def test_patch_bulk_data(self, client, db): + # show version of the original time series + version_response = client.get("/data/timeseries/next_version/1") + expected_status_code = 200 + assert version_response.status_code == expected_status_code + expected_response = '000001.000001.00000000000000' + assert version_response.json() == expected_response + version_response = client.get("/data/timeseries/next_version/1?major=True") + expected_status_code = 200 + assert version_response.status_code == expected_status_code + expected_response = '000002.000000.00000000000000' + assert version_response.json() == expected_response response = client.patch("/data/timeseries/bulk/?description=test patch bulk data&version=000002.000000.00000000000000", data='''[{"datetime": "2012-12-17T00:00:00+00:00", "value": 7.848, "flags": 0, "timeseries_id": 1, "version": "000002.000000.00000000000000"}, {"datetime": "2012-12-17T01:00:00+00:00", "value": 15.696, "flags": 0, "timeseries_id": 1, "version": "000002.000000.00000000000000"}, @@ -662,6 +688,17 @@ class TestApps: dindex = patched_response['metadata']['citation'].index(" on 2") patched_response['metadata']['citation'] = patched_response['metadata']['citation'][:dindex] assert patched_response == expected_response + # also show that next_version has changed by this patch + version_response = client.get("/data/timeseries/next_version/1") + expected_status_code = 200 + assert version_response.status_code == expected_status_code + expected_response = '000002.000001.00000000000000' + assert version_response.json() == expected_response + version_response = client.get("/data/timeseries/next_version/1?major=True") + expected_status_code = 200 + assert version_response.status_code == expected_status_code + expected_response = '000003.000000.00000000000000' + assert version_response.json() == expected_response def test_patch_bulk_data2(self, client, db): diff --git a/tests/test_search.py b/tests/test_search.py index b1e6ae4e82c99e4da6cb51fb972e93fc61b4effc..fe1b96b780d93079d0792215664c2dfdcb9b5cab 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -176,51 +176,60 @@ class TestApps: response = client.get("/search/") expected_status_code = 200 assert response.status_code == expected_status_code - expected_resp = [{'id': 1, 'label': 'CMA', 'order': 1, - 'sampling_frequency': 'hourly', 'aggregation': 'mean', 'data_origin_type': 'measurement', - 'data_start_date': '2003-09-07T15:30:00+00:00', 'data_end_date': '2016-12-31T14:30:00+00:00', 'coverage': -1.0, - 'data_origin': 'instrument', 'sampling_height': 7.0, - 'provider_version': 'N/A', 'doi': '', 'additional_metadata': {}, - 'roles': [{'id': 2, 'role': 'resource provider', 'status': 'active', - 'contact': {'id': 4, 'organisation': {'id': 1, 'name': 'UBA', 'longname': 'Umweltbundesamt', - 'kind': 'government', 'city': 'Dessau-Roßlau', 'postcode': '06844', 'street_address': 'Wörlitzer Platz 1', - 'country': 'Germany', 'homepage': 'https://www.umweltbundesamt.de', 'contact_url': 'mailto:immission@uba.de'}}}], - 'variable': {'name': 'toluene', 'longname': 'toluene', 'displayname': 'Toluene', - 'cf_standardname': 'mole_fraction_of_toluene_in_air', 'units': 'nmol mol-1', - 'chemical_formula': 'C7H8', 'id': 7}, - 'station': {'id': 2, 'codes': ['SDZ54421'], 'name': 'Shangdianzi', + expected_resp = [{'id': 1, + 'label': 'CMA', + 'order': 1, + 'sampling_frequency': 'hourly', + 'aggregation': 'mean', + 'data_start_date': '2003-09-07T15:30:00+00:00', + 'data_end_date': '2016-12-31T14:30:00+00:00', + 'data_origin': 'instrument', + 'data_origin_type': 'measurement', + 'provider_version': 'N/A', + 'sampling_height': 7.0, + 'additional_metadata': {}, + 'doi': '', + 'coverage': -1.0, + 'station': {'id': 2, + 'codes': ['SDZ54421'], + 'name': 'Shangdianzi', 'coordinates': {'lat': 40.65, 'lng': 117.106, 'alt': 293.9}, 'coordinate_validation_status': 'not checked', - 'country': 'China', 'state': 'Beijing Shi', - 'type': 'unknown', 'type_of_area': 'unknown', + 'country': 'China', + 'state': 'Beijing Shi', + 'type': 'unknown', + 'type_of_area': 'unknown', 'timezone': 'Asia/Shanghai', 'additional_metadata': {'dummy_info': 'Here is some more information about the station'}, - 'roles': [], 'annotations': [], - 'aux_images': [], 'aux_docs': [], 'aux_urls': [], - 'globalmeta': {'climatic_zone_year2016': '6 (warm temperate dry)', - 'distance_to_major_road_year2020': -999.0, - 'dominant_ecoregion_year2017': '-1 (undefined)', + 'roles': [], + 'annotations': [], + 'aux_images': [], + 'aux_docs': [], + 'aux_urls': [], + 'globalmeta': {'mean_topography_srtm_alt_90m_year1994': -999.0, + 'mean_topography_srtm_alt_1km_year1994': -999.0, + 'max_topography_srtm_relative_alt_5km_year1994': -999.0, + 'min_topography_srtm_relative_alt_5km_year1994': -999.0, + 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, + 'climatic_zone_year2016': '6 (warm temperate dry)', + 'htap_region_tier1_year2010': '11 (MDE Middle East: S. Arabia, Oman, etc, Iran, Iraq)', 'dominant_landcover_year2012': '10 (Cropland, rainfed)', - 'ecoregion_description_25km_year2017': '', - 'htap_region_tier1_year2010': '10 (SAF Sub Saharan/sub Sahel Africa)', 'landcover_description_25km_year2012': '', - 'max_stable_nightlights_25km_year1992': -999.0, - 'max_stable_nightlights_25km_year2013': -999.0, - 'max_population_density_25km_year1990': -1.0, - 'max_population_density_25km_year2015': -1.0, - 'max_topography_srtm_relative_alt_5km_year1994': -999.0, + 'dominant_ecoregion_year2017': '-1 (undefined)', + 'ecoregion_description_25km_year2017': '', + 'distance_to_major_road_year2020': -999.0, 'mean_stable_nightlights_1km_year2013': -999.0, 'mean_stable_nightlights_5km_year2013': -999.0, - 'mean_nox_emissions_10km_year2000': -999.0, - 'mean_nox_emissions_10km_year2015': -999.0, - 'mean_population_density_250m_year1990': -1.0, + 'max_stable_nightlights_25km_year2013': -999.0, + 'max_stable_nightlights_25km_year1992': -999.0, 'mean_population_density_250m_year2015': -1.0, - 'mean_population_density_5km_year1990': -1.0, 'mean_population_density_5km_year2015': -1.0, - 'mean_topography_srtm_alt_1km_year1994': -999.0, - 'mean_topography_srtm_alt_90m_year1994': -999.0, - 'min_topography_srtm_relative_alt_5km_year1994': -999.0, - 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, + 'max_population_density_25km_year2015': -1.0, + 'mean_population_density_250m_year1990': -1.0, + 'mean_population_density_5km_year1990': -1.0, + 'max_population_density_25km_year1990': -1.0, + 'mean_nox_emissions_10km_year2015': -999.0, + 'mean_nox_emissions_10km_year2000': -999.0, 'toar1_category': 'unclassified'}, 'changelog': [{'datetime': '2023-07-15T19:27:09.463245+00:00', 'description': 'station created', @@ -228,62 +237,95 @@ class TestApps: 'new_value': '', 'station_id': 2, 'author_id': 1, - 'type_of_change': 'created' - }]}, - 'programme': {'id': 0, 'name': '', 'longname': '', 'homepage': '', 'description': ''}}, - {'id': 2, 'label': 'CMA', 'order': 1, - 'sampling_frequency': 'hourly', 'aggregation': 'mean', 'data_origin_type': 'measurement', - 'data_start_date': '2003-09-07T15:30:00+00:00', 'data_end_date': '2016-12-31T14:30:00+00:00', 'coverage': -1.0, - 'data_origin': 'instrument', 'sampling_height': 7.0, + 'type_of_change': 'created'}]}, + 'variable': {'name': 'toluene', + 'longname': 'toluene', + 'displayname': 'Toluene', + 'cf_standardname': 'mole_fraction_of_toluene_in_air', + 'units': 'nmol mol-1', + 'chemical_formula': 'C7H8', + 'id': 7}, + 'programme': {'id': 0, + 'name': '', + 'longname': '', + 'homepage': '', + 'description': ''}, + 'roles': [{'id': 2, + 'role': 'resource provider', + 'status': 'active', + 'contact': {'id': 4, + 'organisation': {'id': 1, + 'name': 'UBA', + 'longname': 'Umweltbundesamt', + 'kind': 'government', + 'city': 'Dessau-Roßlau', + 'postcode': '06844', + 'street_address': 'Wörlitzer Platz 1', + 'country': 'Germany', + 'homepage': 'https://www.umweltbundesamt.de', + 'contact_url': 'mailto:immission@uba.de'}}}]}, + {'id': 2, + 'label': 'CMA', + 'order': 1, + 'sampling_frequency': 'hourly', + 'aggregation': 'mean', + 'data_start_date': '2003-09-07T15:30:00+00:00', + 'data_end_date': '2016-12-31T14:30:00+00:00', + 'data_origin': 'instrument', + 'data_origin_type': 'measurement', 'provider_version': 'N/A', - 'doi': '', - 'additional_metadata': {'absorption_cross_section': 'Hearn 1961', + 'sampling_height': 7.0, + 'additional_metadata': {'original_units': {'since_19740101000000': 'nmol/mol'}, 'measurement_method': 'uv_abs', - 'original_units': {'since_19740101000000': 'nmol/mol'}, - 'ebas_metadata_19740101000000_29y': {'Submitter': 'Unknown, Lady, lady.unknown@unknown.com, some long division name, SHORT, , 111 Streetname, , zipcode, Boulder, CO, USA', - 'Data level': '2', - 'Frameworks': 'GAW-WDCRG NOAA-ESRL', - 'Station code': 'XXX', - 'Station name': 'Secret' } }, - 'roles': [{'id': 1, 'role': 'resource provider', 'status': 'active', - 'contact': {'id': 5, 'organisation': {'id': 2, 'name': 'FZJ', 'longname': 'Forschungszentrum Jülich', - 'kind': 'research', 'city': 'Jülich', 'postcode': '52425', 'street_address': 'Wilhelm-Johnen-Straße', - 'country': 'Germany', 'homepage': 'https://www.fz-juelich.de', 'contact_url': 'mailto:toar-data@fz-juelich.de'}}}], - 'variable': {'name': 'o3', 'longname': 'ozone', 'displayname': 'Ozone', - 'cf_standardname': 'mole_fraction_of_ozone_in_air', 'units': 'nmol mol-1', - 'chemical_formula': 'O3', 'id': 5}, - 'station': {'id': 3, 'codes': ['China_test8'], 'name': 'Test_China', - 'coordinates': {'alt': 1534.0, 'lat': 36.256, 'lng': 117.106}, + 'absorption_cross_section': 'Hearn 1961', + 'ebas_metadata_19740101000000_29y': + {'Submitter': 'Unknown, Lady, lady.unknown@unknown.com, some long division name, SHORT, , 111 Streetname, , zipcode, Boulder, CO, USA', + 'Data level': '2', + 'Frameworks': 'GAW-WDCRG NOAA-ESRL', + 'Station code': 'XXX', + 'Station name': 'Secret'}}, + 'doi': '', + 'coverage': -1.0, + 'station': {'id': 3, + 'codes': ['China_test8'], + 'name': 'Test_China', + 'coordinates': {'lat': 36.256, 'lng': 117.106, 'alt': 1534.0}, 'coordinate_validation_status': 'not checked', - 'country': 'China', 'state': 'Shandong Sheng', - 'type': 'unknown', 'type_of_area': 'unknown', - 'timezone': 'Asia/Shanghai', 'additional_metadata': {}, - 'roles': [], 'annotations': [], - 'aux_images': [], 'aux_docs': [], 'aux_urls': [], - 'globalmeta': {'climatic_zone_year2016': '6 (warm temperate dry)', - 'distance_to_major_road_year2020': -999.0, - 'dominant_ecoregion_year2017': '-1 (undefined)', - 'dominant_landcover_year2012': '10 (Cropland, rainfed)', - 'ecoregion_description_25km_year2017': '', + 'country': 'China', + 'state': 'Shandong Sheng', + 'type': 'unknown', + 'type_of_area': 'unknown', + 'timezone': 'Asia/Shanghai', + 'additional_metadata': {}, + 'roles': [], + 'annotations': [], + 'aux_images': [], + 'aux_docs': [], + 'aux_urls': [], + 'globalmeta': {'mean_topography_srtm_alt_90m_year1994': -999.0, + 'mean_topography_srtm_alt_1km_year1994': -999.0, + 'max_topography_srtm_relative_alt_5km_year1994': -999.0, + 'min_topography_srtm_relative_alt_5km_year1994': -999.0, + 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, + 'climatic_zone_year2016': '6 (warm temperate dry)', 'htap_region_tier1_year2010': '10 (SAF Sub Saharan/sub Sahel Africa)', + 'dominant_landcover_year2012': '10 (Cropland, rainfed)', 'landcover_description_25km_year2012': '', - 'max_stable_nightlights_25km_year1992': -999.0, - 'max_stable_nightlights_25km_year2013': -999.0, - 'max_population_density_25km_year1990': -1.0, - 'max_population_density_25km_year2015': -1.0, - 'max_topography_srtm_relative_alt_5km_year1994': -999.0, + 'dominant_ecoregion_year2017': '-1 (undefined)', + 'ecoregion_description_25km_year2017': '', + 'distance_to_major_road_year2020': -999.0, 'mean_stable_nightlights_1km_year2013': -999.0, 'mean_stable_nightlights_5km_year2013': -999.0, - 'mean_nox_emissions_10km_year2000': -999.0, - 'mean_nox_emissions_10km_year2015': -999.0, - 'mean_population_density_250m_year1990': -1.0, + 'max_stable_nightlights_25km_year2013': -999.0, + 'max_stable_nightlights_25km_year1992': -999.0, 'mean_population_density_250m_year2015': -1.0, - 'mean_population_density_5km_year1990': -1.0, 'mean_population_density_5km_year2015': -1.0, - 'mean_topography_srtm_alt_1km_year1994': -999.0, - 'mean_topography_srtm_alt_90m_year1994': -999.0, - 'min_topography_srtm_relative_alt_5km_year1994': -999.0, - 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, + 'max_population_density_25km_year2015': -1.0, + 'mean_population_density_250m_year1990': -1.0, + 'mean_population_density_5km_year1990': -1.0, + 'max_population_density_25km_year1990': -1.0, + 'mean_nox_emissions_10km_year2015': -999.0, + 'mean_nox_emissions_10km_year2000': -999.0, 'toar1_category': 'unclassified'}, 'changelog': [{'datetime': '2023-08-15T21:16:20.596545+00:00', 'description': 'station created', @@ -291,9 +333,34 @@ class TestApps: 'new_value': '', 'station_id': 3, 'author_id': 1, - 'type_of_change': 'created' - }]}, - 'programme': {'id': 0, 'name': '', 'longname': '', 'homepage': '', 'description': ''}}] + 'type_of_change': 'created'}]}, + 'variable': {'name': 'o3', + 'longname': 'ozone', + 'displayname': 'Ozone', + 'cf_standardname': 'mole_fraction_of_ozone_in_air', + 'units': 'nmol mol-1', + 'chemical_formula': 'O3', + 'id': 5}, + 'programme': {'id': 0, + 'name': '', + 'longname': '', + 'homepage': '', + 'description': ''}, + 'roles': [{'id': 1, + 'role': 'resource provider', + 'status': 'active', + 'contact': {'id': 5, + 'organisation': + {'id': 2, + 'name': 'FZJ', + 'longname': 'Forschungszentrum Jülich', + 'kind': 'research', + 'city': 'Jülich', + 'postcode': '52425', + 'street_address': 'Wilhelm-Johnen-Straße', + 'country': 'Germany', + 'homepage': 'https://www.fz-juelich.de', + 'contact_url': 'mailto:toar-data@fz-juelich.de'}}}]}] assert response.json() == expected_resp @@ -564,3 +631,73 @@ class TestApps: }]}, 'programme': {'id': 0, 'name': '', 'longname': '', 'homepage': '', 'description': ''}}] assert response.json() == expected_resp + + + def test_search_with_global_attributes(self, client, db): + response = client.get("/search/?climatic_zone_year2016=WarmTemperateDry&htap_region_tier1_year2010=HTAPTier1SAF") + expected_status_code = 200 + assert response.status_code == expected_status_code + expected_resp = [{'id': 2, 'label': 'CMA', 'order': 1, + 'sampling_frequency': 'hourly', 'aggregation': 'mean', 'data_origin_type': 'measurement', + 'data_start_date': '2003-09-07T15:30:00+00:00', 'data_end_date': '2016-12-31T14:30:00+00:00', 'coverage': -1.0, + 'data_origin': 'instrument', 'sampling_height': 7.0, + 'provider_version': 'N/A', + 'doi': '', + 'additional_metadata': {'absorption_cross_section': 'Hearn 1961', + 'measurement_method': 'uv_abs', + 'original_units': {'since_19740101000000': 'nmol/mol'}, + 'ebas_metadata_19740101000000_29y': {'Submitter': 'Unknown, Lady, lady.unknown@unknown.com, some long division name, SHORT, , 111 Streetname, , zipcode, Boulder, CO, USA', + 'Data level': '2', + 'Frameworks': 'GAW-WDCRG NOAA-ESRL', + 'Station code': 'XXX', + 'Station name': 'Secret' } }, + 'roles': [{'id': 1, 'role': 'resource provider', 'status': 'active', + 'contact': {'id': 5, 'organisation': {'id': 2, 'name': 'FZJ', 'longname': 'Forschungszentrum Jülich', + 'kind': 'research', 'city': 'Jülich', 'postcode': '52425', 'street_address': 'Wilhelm-Johnen-Straße', + 'country': 'Germany', 'homepage': 'https://www.fz-juelich.de', 'contact_url': 'mailto:toar-data@fz-juelich.de'}}}], + 'variable': {'name': 'o3', 'longname': 'ozone', 'displayname': 'Ozone', + 'cf_standardname': 'mole_fraction_of_ozone_in_air', 'units': 'nmol mol-1', + 'chemical_formula': 'O3', 'id': 5}, + 'station': {'id': 3, 'codes': ['China_test8'], 'name': 'Test_China', + 'coordinates': {'alt': 1534.0, 'lat': 36.256, 'lng': 117.106}, + 'coordinate_validation_status': 'not checked', + 'country': 'China', 'state': 'Shandong Sheng', + 'type': 'unknown', 'type_of_area': 'unknown', + 'timezone': 'Asia/Shanghai', 'additional_metadata': {}, + 'roles': [], 'annotations': [], + 'aux_images': [], 'aux_docs': [], 'aux_urls': [], + 'globalmeta': {'climatic_zone_year2016': '6 (warm temperate dry)', + 'distance_to_major_road_year2020': -999.0, + 'dominant_ecoregion_year2017': '-1 (undefined)', + 'dominant_landcover_year2012': '10 (Cropland, rainfed)', + 'ecoregion_description_25km_year2017': '', + 'htap_region_tier1_year2010': '10 (SAF Sub Saharan/sub Sahel Africa)', + 'landcover_description_25km_year2012': '', + 'max_stable_nightlights_25km_year1992': -999.0, + 'max_stable_nightlights_25km_year2013': -999.0, + 'max_population_density_25km_year1990': -1.0, + 'max_population_density_25km_year2015': -1.0, + 'max_topography_srtm_relative_alt_5km_year1994': -999.0, + 'mean_stable_nightlights_1km_year2013': -999.0, + 'mean_stable_nightlights_5km_year2013': -999.0, + 'mean_nox_emissions_10km_year2000': -999.0, + 'mean_nox_emissions_10km_year2015': -999.0, + 'mean_population_density_250m_year1990': -1.0, + 'mean_population_density_250m_year2015': -1.0, + 'mean_population_density_5km_year1990': -1.0, + 'mean_population_density_5km_year2015': -1.0, + 'mean_topography_srtm_alt_1km_year1994': -999.0, + 'mean_topography_srtm_alt_90m_year1994': -999.0, + 'min_topography_srtm_relative_alt_5km_year1994': -999.0, + 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, + 'toar1_category': 'unclassified'}, + 'changelog': [{'datetime': '2023-08-15T21:16:20.596545+00:00', + 'description': 'station created', + 'old_value': '', + 'new_value': '', + 'station_id': 3, + 'author_id': 1, + 'type_of_change': 'created' + }]}, + 'programme': {'id': 0, 'name': '', 'longname': '', 'homepage': '', 'description': ''}}] + assert response.json() == expected_resp diff --git a/tests/test_stationmeta.py b/tests/test_stationmeta.py index 834d03973d5ce0b99cee09a93b367b7f80702b83..a3f6f59ce9af11ed1872a77b0598ce6c526c6118 100644 --- a/tests/test_stationmeta.py +++ b/tests/test_stationmeta.py @@ -187,75 +187,83 @@ class TestApps: response = client.get("/stationmeta/") expected_status_code = 200 assert response.status_code == expected_status_code - expected_resp = [{'id': 1, 'codes': ['China11'], 'name': 'Mount Tai', + expected_resp = [{'id': 1, + 'codes': ['China11'], + 'name': 'Mount Tai', 'coordinates': {'lat': 36.256, 'lng': 117.106, 'alt': 1534.0}, 'coordinate_validation_status': 'not checked', - 'country': 'China', 'state': 'Shandong Sheng', - 'type': 'unknown', 'type_of_area': 'unknown', - 'timezone': 'Asia/Shanghai', 'additional_metadata': {}, - 'roles': [{ 'contact': { - 'city': 'Dessau-Roßlau', - 'contact_url': 'mailto:immission@uba.de', - 'country': 'Germany', - 'homepage': 'https://www.umweltbundesamt.de', - 'id': 1, - 'kind': 'government', - 'longname': 'Umweltbundesamt', - 'name': 'UBA', - 'postcode': '06844', - 'street_address': 'Wörlitzer Platz 1', - }, - 'id': 2, - 'role': 'resource provider', - 'status': 'active' }], - 'annotations': [], 'aux_images': [], 'aux_docs': [], 'aux_urls': [], - 'globalmeta': {'climatic_zone_year2016': '6 (warm temperate dry)', - 'distance_to_major_road_year2020': -999.0, - 'dominant_ecoregion_year2017': '-1 (undefined)', + 'country': 'China', + 'state': 'Shandong Sheng', + 'type': 'unknown', + 'type_of_area': 'unknown', + 'timezone': 'Asia/Shanghai', + 'additional_metadata': {}, + 'roles': [{'id': 2, + 'role': 'resource provider', + 'status': 'active', + 'contact': {'id': 1, + 'name': 'UBA', + 'longname': 'Umweltbundesamt', + 'kind': 'government', + 'city': 'Dessau-Roßlau', + 'postcode': '06844', + 'street_address': 'Wörlitzer Platz 1', + 'country': 'Germany', + 'homepage': 'https://www.umweltbundesamt.de', + 'contact_url': 'mailto:immission@uba.de'}}], + 'annotations': [], + 'aux_images': [], + 'aux_docs': [], + 'aux_urls': [], + 'globalmeta': {'mean_topography_srtm_alt_90m_year1994': -999.0, + 'mean_topography_srtm_alt_1km_year1994': -999.0, + 'max_topography_srtm_relative_alt_5km_year1994': -999.0, + 'min_topography_srtm_relative_alt_5km_year1994': -999.0, + 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, + 'climatic_zone_year2016': '6 (warm temperate dry)', + 'htap_region_tier1_year2010': '11 (MDE Middle East: S. ' + 'Arabia, Oman, etc, Iran, Iraq)', 'dominant_landcover_year2012': '10 (Cropland, rainfed)', + 'landcover_description_25km_year2012': '11 (Cropland, ' + 'rainfed, herbaceous ' + 'cover): 30.7 %, 12 ' + '(Cropland, rainfed, ' + 'tree or shrub cover): ' + '25.0 %, 210 (Water ' + 'bodies): 16.9 %, 130 ' + '(Grassland): 8.6 %, ' + '190 (Urban areas): ' + '5.8 %, 100 (Mosaic ' + 'tree and shrub (>50%) ' + '/ herbaceous cover ' + '(<50%)): 3.5 %, 40 ' + '(Mosaic natural ' + 'vegetation (tree, ' + 'shrub, herbaceous ' + 'cover) (>50%) / ' + 'cropland (<50%)): 2.6 ' + '%, 10 (Cropland, ' + 'rainfed): 2.0 %, 30 ' + '(Mosaic cropland ' + '(>50%) / natural ' + 'vegetation (tree, ' + 'shrub, herbaceous ' + 'cover) (<50%)): 1.9 %', + 'dominant_ecoregion_year2017': '-1 (undefined)', 'ecoregion_description_25km_year2017': '', - 'landcover_description_25km_year2012': '11 (Cropland, rainfed, ' - +'herbaceous cover): ' - +'30.7 %, 12 (Cropland, ' - +'rainfed, tree or shrub ' - +'cover): 25.0 %, 210 ' - +'(Water bodies): 16.9 ' - +'%, 130 (Grassland): ' - +'8.6 %, 190 (Urban ' - +'areas): 5.8 %, 100 ' - +'(Mosaic tree and shrub ' - +'(>50%) / herbaceous ' - +'cover (<50%)): 3.5 %, ' - +'40 (Mosaic natural ' - +'vegetation (tree, ' - +'shrub, herbaceous ' - +'cover) (>50%) / ' - +'cropland (<50%)): 2.6 ' - +'%, 10 (Cropland, ' - +'rainfed): 2.0 %, 30 ' - +'(Mosaic cropland ' - +'(>50%) / natural ' - +'vegetation (tree, ' - +'shrub, herbaceous ' - +'cover) (<50%)): 1.9 %', - 'htap_region_tier1_year2010': '10 (SAF Sub Saharan/sub Sahel Africa)', - 'max_stable_nightlights_25km_year1992': -999.0, - 'max_stable_nightlights_25km_year2013': -999.0, - 'max_population_density_25km_year1990': -1.0, - 'max_population_density_25km_year2015': -1.0, - 'max_topography_srtm_relative_alt_5km_year1994': -999.0, + 'distance_to_major_road_year2020': -999.0, 'mean_stable_nightlights_1km_year2013': -999.0, 'mean_stable_nightlights_5km_year2013': -999.0, - 'mean_nox_emissions_10km_year2000': -999.0, - 'mean_nox_emissions_10km_year2015': -999.0, - 'mean_population_density_250m_year1990': -1.0, + 'max_stable_nightlights_25km_year2013': -999.0, + 'max_stable_nightlights_25km_year1992': -999.0, 'mean_population_density_250m_year2015': -1.0, - 'mean_population_density_5km_year1990': -1.0, 'mean_population_density_5km_year2015': -1.0, - 'mean_topography_srtm_alt_1km_year1994': -999.0, - 'mean_topography_srtm_alt_90m_year1994': -999.0, - 'min_topography_srtm_relative_alt_5km_year1994': -999.0, - 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, + 'max_population_density_25km_year2015': -1.0, + 'mean_population_density_250m_year1990': -1.0, + 'mean_population_density_5km_year1990': -1.0, + 'max_population_density_25km_year1990': -1.0, + 'mean_nox_emissions_10km_year2015': -999.0, + 'mean_nox_emissions_10km_year2000': -999.0, 'toar1_category': 'unclassified'}, 'changelog': [{'datetime': '2023-07-05T08:23:04.551645+00:00', 'description': 'station created', @@ -263,55 +271,61 @@ class TestApps: 'new_value': '', 'station_id': 1, 'author_id': 1, - 'type_of_change': 'created' - }]}, - {'id': 2, 'codes': ['SDZ54421'], 'name': 'Shangdianzi', + 'type_of_change': 'created'}]}, + {'id': 2, + 'codes': ['SDZ54421'], + 'name': 'Shangdianzi', 'coordinates': {'lat': 40.65, 'lng': 117.106, 'alt': 293.9}, 'coordinate_validation_status': 'not checked', - 'country': 'China', 'state': 'Beijing Shi', - 'type': 'unknown', 'type_of_area': 'unknown', - 'timezone': 'Asia/Shanghai', - 'additional_metadata': {'dummy_info': 'Here is some more information about the station' }, - 'roles': [{ 'contact': { 'city': 'Jülich', - 'contact_url': 'mailto:toar-data@fz-juelich.de', - 'country': 'Germany', - 'homepage': 'https://www.fz-juelich.de', - 'id': 2, - 'kind': 'research', - 'longname': 'Forschungszentrum Jülich', - 'name': 'FZJ', - 'postcode': '52425', - 'street_address': 'Wilhelm-Johnen-Straße', - }, - 'id': 1, + 'country': 'China', + 'state': 'Beijing Shi', + 'type': 'unknown', + 'type_of_area': 'unknown', + 'timezone': 'Asia/Shanghai', + 'additional_metadata': {'dummy_info': 'Here is some more information about ' + 'the station'}, + 'roles': [{'id': 1, 'role': 'resource provider', - 'status': 'active' }], - - 'annotations': [], 'aux_images': [], 'aux_docs': [], 'aux_urls': [], - 'globalmeta': {'climatic_zone_year2016': '6 (warm temperate dry)', - 'distance_to_major_road_year2020': -999.0, - 'dominant_ecoregion_year2017': '-1 (undefined)', + 'status': 'active', + 'contact': {'id': 2, + 'name': 'FZJ', + 'longname': 'Forschungszentrum Jülich', + 'kind': 'research', + 'city': 'Jülich', + 'postcode': '52425', + 'street_address': 'Wilhelm-Johnen-Straße', + 'country': 'Germany', + 'homepage': 'https://www.fz-juelich.de', + 'contact_url': 'mailto:toar-data@fz-juelich.de'}}], + 'annotations': [], + 'aux_images': [], + 'aux_docs': [], + 'aux_urls': [], + 'globalmeta': {'mean_topography_srtm_alt_90m_year1994': -999.0, + 'mean_topography_srtm_alt_1km_year1994': -999.0, + 'max_topography_srtm_relative_alt_5km_year1994': -999.0, + 'min_topography_srtm_relative_alt_5km_year1994': -999.0, + 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, + 'climatic_zone_year2016': '6 (warm temperate dry)', + 'htap_region_tier1_year2010': '11 (MDE Middle East: S. ' + 'Arabia, Oman, etc, Iran, Iraq)', 'dominant_landcover_year2012': '10 (Cropland, rainfed)', 'landcover_description_25km_year2012': '', + 'dominant_ecoregion_year2017': '-1 (undefined)', 'ecoregion_description_25km_year2017': '', - 'htap_region_tier1_year2010': '10 (SAF Sub Saharan/sub Sahel Africa)', - 'max_stable_nightlights_25km_year1992': -999.0, - 'max_stable_nightlights_25km_year2013': -999.0, - 'max_population_density_25km_year1990': -1.0, - 'max_population_density_25km_year2015': -1.0, - 'max_topography_srtm_relative_alt_5km_year1994': -999.0, + 'distance_to_major_road_year2020': -999.0, 'mean_stable_nightlights_1km_year2013': -999.0, 'mean_stable_nightlights_5km_year2013': -999.0, - 'mean_nox_emissions_10km_year2000': -999.0, - 'mean_nox_emissions_10km_year2015': -999.0, - 'mean_population_density_250m_year1990': -1.0, + 'max_stable_nightlights_25km_year2013': -999.0, + 'max_stable_nightlights_25km_year1992': -999.0, 'mean_population_density_250m_year2015': -1.0, - 'mean_population_density_5km_year1990': -1.0, 'mean_population_density_5km_year2015': -1.0, - 'mean_topography_srtm_alt_1km_year1994': -999.0, - 'mean_topography_srtm_alt_90m_year1994': -999.0, - 'min_topography_srtm_relative_alt_5km_year1994': -999.0, - 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, + 'max_population_density_25km_year2015': -1.0, + 'mean_population_density_250m_year1990': -1.0, + 'mean_population_density_5km_year1990': -1.0, + 'max_population_density_25km_year1990': -1.0, + 'mean_nox_emissions_10km_year2015': -999.0, + 'mean_nox_emissions_10km_year2000': -999.0, 'toar1_category': 'unclassified'}, 'changelog': [{'datetime': '2023-07-15T19:27:09.463245+00:00', 'description': 'station created', @@ -319,39 +333,48 @@ class TestApps: 'new_value': '', 'station_id': 2, 'author_id': 1, - 'type_of_change': 'created' - }]}, - {'id': 3, 'codes': ['China_test8'], 'name': 'Test_China', + 'type_of_change': 'created'}]}, + {'id': 3, + 'codes': ['China_test8'], + 'name': 'Test_China', 'coordinates': {'lat': 36.256, 'lng': 117.106, 'alt': 1534.0}, 'coordinate_validation_status': 'not checked', - 'country': 'China', 'state': 'Shandong Sheng', - 'type': 'unknown', 'type_of_area': 'unknown', - 'timezone': 'Asia/Shanghai', 'additional_metadata': {}, - 'roles': [], 'annotations': [], 'aux_images': [], 'aux_docs': [], 'aux_urls': [], - 'globalmeta': {'climatic_zone_year2016': '6 (warm temperate dry)', - 'distance_to_major_road_year2020': -999.0, - 'dominant_ecoregion_year2017': '-1 (undefined)', + 'country': 'China', + 'state': 'Shandong Sheng', + 'type': 'unknown', + 'type_of_area': 'unknown', + 'timezone': 'Asia/Shanghai', + 'additional_metadata': {}, + 'roles': [], + 'annotations': [], + 'aux_images': [], + 'aux_docs': [], + 'aux_urls': [], + 'globalmeta': {'mean_topography_srtm_alt_90m_year1994': -999.0, + 'mean_topography_srtm_alt_1km_year1994': -999.0, + 'max_topography_srtm_relative_alt_5km_year1994': -999.0, + 'min_topography_srtm_relative_alt_5km_year1994': -999.0, + 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, + 'climatic_zone_year2016': '6 (warm temperate dry)', + 'htap_region_tier1_year2010': '10 (SAF Sub Saharan/sub Sahel ' + 'Africa)', 'dominant_landcover_year2012': '10 (Cropland, rainfed)', - 'ecoregion_description_25km_year2017': '', 'landcover_description_25km_year2012': '', - 'htap_region_tier1_year2010': '10 (SAF Sub Saharan/sub Sahel Africa)', - 'max_stable_nightlights_25km_year1992': -999.0, - 'max_stable_nightlights_25km_year2013': -999.0, - 'max_population_density_25km_year1990': -1.0, - 'max_population_density_25km_year2015': -1.0, - 'max_topography_srtm_relative_alt_5km_year1994': -999.0, + 'dominant_ecoregion_year2017': '-1 (undefined)', + 'ecoregion_description_25km_year2017': '', + 'distance_to_major_road_year2020': -999.0, 'mean_stable_nightlights_1km_year2013': -999.0, 'mean_stable_nightlights_5km_year2013': -999.0, - 'mean_nox_emissions_10km_year2000': -999.0, - 'mean_nox_emissions_10km_year2015': -999.0, - 'mean_population_density_250m_year1990': -1.0, + 'max_stable_nightlights_25km_year2013': -999.0, + 'max_stable_nightlights_25km_year1992': -999.0, 'mean_population_density_250m_year2015': -1.0, - 'mean_population_density_5km_year1990': -1.0, 'mean_population_density_5km_year2015': -1.0, - 'mean_topography_srtm_alt_1km_year1994': -999.0, - 'mean_topography_srtm_alt_90m_year1994': -999.0, - 'min_topography_srtm_relative_alt_5km_year1994': -999.0, - 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, + 'max_population_density_25km_year2015': -1.0, + 'mean_population_density_250m_year1990': -1.0, + 'mean_population_density_5km_year1990': -1.0, + 'max_population_density_25km_year1990': -1.0, + 'mean_nox_emissions_10km_year2015': -999.0, + 'mean_nox_emissions_10km_year2000': -999.0, 'toar1_category': 'unclassified'}, 'changelog': [{'datetime': '2023-08-15T21:16:20.596545+00:00', 'description': 'station created', @@ -359,8 +382,7 @@ class TestApps: 'new_value': '', 'station_id': 3, 'author_id': 1, - 'type_of_change': 'created' - }]}] + 'type_of_change': 'created'}]}] assert response.json() == expected_resp @@ -424,7 +446,7 @@ class TestApps: 'min_topography_srtm_relative_alt_5km_year1994': -999.0, 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, 'climatic_zone_year2016': '6 (warm temperate dry)', - 'htap_region_tier1_year2010': '10 (SAF Sub Saharan/sub Sahel Africa)', + 'htap_region_tier1_year2010': '11 (MDE Middle East: S. Arabia, Oman, etc, Iran, Iraq)', 'dominant_landcover_year2012': '10 (Cropland, rainfed)', 'landcover_description_25km_year2012': '11 (Cropland, rainfed, herbaceous cover): 30.7 %, 12 (Cropland, rainfed, tree or shrub cover): 25.0 %, 210 (Water bodies): 16.9 %, 130 (Grassland): 8.6 %, 190 (Urban areas): 5.8 %, 100 (Mosaic tree and shrub (>50%) / herbaceous cover (<50%)): 3.5 %, 40 (Mosaic natural vegetation (tree, shrub, herbaceous cover) (>50%) / cropland (<50%)): 2.6 %, 10 (Cropland, rainfed): 2.0 %, 30 (Mosaic cropland (>50%) / natural vegetation (tree, shrub, herbaceous cover) (<50%)): 1.9 %', 'dominant_ecoregion_year2017': '-1 (undefined)', @@ -474,7 +496,7 @@ class TestApps: 'min_topography_srtm_relative_alt_5km_year1994': -999.0, 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, 'climatic_zone_year2016': '6 (warm temperate dry)', - 'htap_region_tier1_year2010': '10 (SAF Sub Saharan/sub Sahel Africa)', + 'htap_region_tier1_year2010': '11 (MDE Middle East: S. Arabia, Oman, etc, Iran, Iraq)', 'dominant_landcover_year2012': '10 (Cropland, rainfed)', 'landcover_description_25km_year2012': '11 (Cropland, rainfed, herbaceous cover): 30.7 %, 12 (Cropland, rainfed, tree or shrub cover): 25.0 %, 210 (Water bodies): 16.9 %, 130 (Grassland): 8.6 %, 190 (Urban areas): 5.8 %, 100 (Mosaic tree and shrub (>50%) / herbaceous cover (<50%)): 3.5 %, 40 (Mosaic natural vegetation (tree, shrub, herbaceous cover) (>50%) / cropland (<50%)): 2.6 %, 10 (Cropland, rainfed): 2.0 %, 30 (Mosaic cropland (>50%) / natural vegetation (tree, shrub, herbaceous cover) (<50%)): 1.9 %', 'dominant_ecoregion_year2017': '-1 (undefined)', @@ -502,7 +524,7 @@ class TestApps: 'min_topography_srtm_relative_alt_5km_year1994': -999.0, 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, 'climatic_zone_year2016': '6 (warm temperate dry)', - 'htap_region_tier1_year2010': '10 (SAF Sub Saharan/sub Sahel Africa)', + 'htap_region_tier1_year2010': '11 (MDE Middle East: S. Arabia, Oman, etc, Iran, Iraq)', 'dominant_landcover_year2012': '10 (Cropland, rainfed)', 'landcover_description_25km_year2012': '', 'dominant_ecoregion_year2017': '-1 (undefined)', @@ -633,7 +655,7 @@ class TestApps: +'vegetation (tree, ' +'shrub, herbaceous ' +'cover) (<50%)): 1.9 %', - 'htap_region_tier1_year2010': '10 (SAF Sub Saharan/sub Sahel Africa)', + 'htap_region_tier1_year2010': '11 (MDE Middle East: S. Arabia, Oman, etc, Iran, Iraq)', 'max_stable_nightlights_25km_year1992': -999.0, 'max_stable_nightlights_25km_year2013': -999.0, 'max_population_density_25km_year1990': -1.0, @@ -862,7 +884,7 @@ class TestApps: assert response_json['name'] == 'Shangdianzi' assert response_json['changelog'][1]['old_value'] == ( "{'climatic_zone_year2016': 'WarmTemperateDry', " - "'htap_region_tier1_year2010': 'HTAPTier1SAF', " + "'htap_region_tier1_year2010': 'HTAPTier1MDE', " "'dominant_landcover_year2012': 'CroplandRainfed', " "'landcover_description_25km_year2012': '', " "'dominant_ecoregion_year2017': 'Undefined', " diff --git a/tests/test_timeseries.py b/tests/test_timeseries.py index 21f737799cbc1c4a8120f4e0bb78f280b3d1e3ea..10745b79981e4d61ff5de1773e943d1a38acd44c 100644 --- a/tests/test_timeseries.py +++ b/tests/test_timeseries.py @@ -187,140 +187,203 @@ class TestApps: response = client.get("/timeseries/") expected_status_code = 200 assert response.status_code == expected_status_code - expected_resp = [{'id': 1, 'label': 'CMA', 'order': 1, - 'sampling_frequency': 'hourly', 'aggregation': 'mean', 'data_origin_type': 'measurement', - 'data_start_date': '2003-09-07T15:30:00+00:00', 'data_end_date': '2016-12-31T14:30:00+00:00', 'coverage': -1.0, - 'data_origin': 'instrument', 'sampling_height': 7.0, - 'provider_version': 'N/A', 'additional_metadata': {}, + expected_resp = [{'id': 1, + 'label': 'CMA', + 'order': 1, + 'sampling_frequency': 'hourly', + 'aggregation': 'mean', + 'data_start_date': '2003-09-07T15:30:00+00:00', + 'data_end_date': '2016-12-31T14:30:00+00:00', + 'data_origin': 'instrument', + 'data_origin_type': 'measurement', + 'provider_version': 'N/A', + 'sampling_height': 7.0, + 'additional_metadata': {}, 'doi': '', - 'roles': [{'id': 2, 'role': 'resource provider', 'status': 'active', - 'contact': {'id': 4, 'organisation': {'id': 1, 'name': 'UBA', 'longname': 'Umweltbundesamt', - 'kind': 'government', 'city': 'Dessau-Roßlau', 'postcode': '06844', 'street_address': 'Wörlitzer Platz 1', - 'country': 'Germany', 'homepage': 'https://www.umweltbundesamt.de', 'contact_url': 'mailto:immission@uba.de'}}}], - 'variable': {'name': 'toluene', 'longname': 'toluene', 'displayname': 'Toluene', - 'cf_standardname': 'mole_fraction_of_toluene_in_air', 'units': 'nmol mol-1', - 'chemical_formula': 'C7H8', 'id': 7}, - 'station': {'id': 2, 'codes': ['SDZ54421'], 'name': 'Shangdianzi', + 'coverage': -1.0, + 'station': {'id': 2, + 'codes': ['SDZ54421'], + 'name': 'Shangdianzi', 'coordinates': {'lat': 40.65, 'lng': 117.106, 'alt': 293.9}, 'coordinate_validation_status': 'not checked', - 'country': 'China', 'state': 'Beijing Shi', - 'type': 'unknown', 'type_of_area': 'unknown', + 'country': 'China', + 'state': 'Beijing Shi', + 'type': 'unknown', + 'type_of_area': 'unknown', 'timezone': 'Asia/Shanghai', - 'additional_metadata': {'dummy_info': 'Here is some more information about the station'}, - 'roles': [], 'annotations': [], - 'aux_images': [], 'aux_docs': [], 'aux_urls': [], - 'globalmeta': {'climatic_zone_year2016': '6 (warm temperate dry)', - 'distance_to_major_road_year2020': -999.0, + 'additional_metadata': {'dummy_info': 'Here is some more ' + 'information about the ' + 'station'}, + 'roles': [], + 'annotations': [], + 'aux_images': [], + 'aux_docs': [], + 'aux_urls': [], + 'globalmeta': {'mean_topography_srtm_alt_90m_year1994': -999.0, + 'mean_topography_srtm_alt_1km_year1994': -999.0, + 'max_topography_srtm_relative_alt_5km_year1994': -999.0, + 'min_topography_srtm_relative_alt_5km_year1994': -999.0, + 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, + 'climatic_zone_year2016': '6 (warm temperate dry)', + 'htap_region_tier1_year2010': '11 (MDE Middle ' + 'East: S. Arabia, ' + 'Oman, etc, Iran, ' + 'Iraq)', + 'dominant_landcover_year2012': '10 (Cropland, ' + 'rainfed)', + 'landcover_description_25km_year2012': '', 'dominant_ecoregion_year2017': '-1 (undefined)', - 'dominant_landcover_year2012': '10 (Cropland, rainfed)', 'ecoregion_description_25km_year2017': '', - 'htap_region_tier1_year2010': '10 (SAF Sub Saharan/sub Sahel Africa)', - 'landcover_description_25km_year2012': '', - 'max_stable_nightlights_25km_year1992': -999.0, - 'max_stable_nightlights_25km_year2013': -999.0, - 'max_population_density_25km_year1990': -1.0, - 'max_population_density_25km_year2015': -1.0, - 'max_topography_srtm_relative_alt_5km_year1994': -999.0, + 'distance_to_major_road_year2020': -999.0, 'mean_stable_nightlights_1km_year2013': -999.0, 'mean_stable_nightlights_5km_year2013': -999.0, - 'mean_nox_emissions_10km_year2000': -999.0, - 'mean_nox_emissions_10km_year2015': -999.0, - 'mean_population_density_250m_year1990': -1.0, + 'max_stable_nightlights_25km_year2013': -999.0, + 'max_stable_nightlights_25km_year1992': -999.0, 'mean_population_density_250m_year2015': -1.0, - 'mean_population_density_5km_year1990': -1.0, 'mean_population_density_5km_year2015': -1.0, - 'mean_topography_srtm_alt_1km_year1994': -999.0, - 'mean_topography_srtm_alt_90m_year1994': -999.0, - 'min_topography_srtm_relative_alt_5km_year1994': -999.0, - 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, + 'max_population_density_25km_year2015': -1.0, + 'mean_population_density_250m_year1990': -1.0, + 'mean_population_density_5km_year1990': -1.0, + 'max_population_density_25km_year1990': -1.0, + 'mean_nox_emissions_10km_year2015': -999.0, + 'mean_nox_emissions_10km_year2000': -999.0, 'toar1_category': 'unclassified'}, 'changelog': []}, - 'programme': {'id': 0, 'name': '', 'longname': '', 'homepage': '', 'description': ''}}, + 'variable': {'name': 'toluene', + 'longname': 'toluene', + 'displayname': 'Toluene', + 'cf_standardname': 'mole_fraction_of_toluene_in_air', + 'units': 'nmol mol-1', + 'chemical_formula': 'C7H8', + 'id': 7}, + 'programme': {'id': 0, + 'name': '', + 'longname': '', + 'homepage': '', + 'description': ''}, + 'roles': [{'id': 2, + 'role': 'resource provider', + 'status': 'active', + 'contact': {'id': 4, + 'organisation': {'id': 1, + 'name': 'UBA', + 'longname': 'Umweltbundesamt', + 'kind': 'government', + 'city': 'Dessau-Roßlau', + 'postcode': '06844', + 'street_address': 'Wörlitzer Platz 1', + 'country': 'Germany', + 'homepage': 'https://www.umweltbundesamt.de', + 'contact_url': 'mailto:immission@uba.de'}}}]}, {'id': 2, 'label': 'CMA', 'order': 1, - 'additional_metadata': {'absorption_cross_section': 'Hearn 1961', - 'measurement_method': 'uv_abs', - 'original_units': {'since_19740101000000': 'nmol/mol'}, - 'ebas_metadata_19740101000000_29y': {'Submitter': 'Unknown, Lady, lady.unknown@unknown.com, some long division name, SHORT, , 111 Streetname, , zipcode, Boulder, CO, USA', - 'Data level': '2', - 'Frameworks': 'GAW-WDCRG NOAA-ESRL', - 'Station code': 'XXX', - 'Station name': 'Secret' } }, + 'sampling_frequency': 'hourly', 'aggregation': 'mean', + 'data_start_date': '2003-09-07T15:30:00+00:00', 'data_end_date': '2016-12-31T14:30:00+00:00', 'data_origin': 'instrument', 'data_origin_type': 'measurement', - 'data_start_date': '2003-09-07T15:30:00+00:00', - 'coverage': -1.0, - 'programme': {'description': '', - 'homepage': '', - 'id': 0, - 'longname': '', - 'name': ''}, 'provider_version': 'N/A', - 'doi': '', - 'roles': [{'id': 1, 'role': 'resource provider', 'status': 'active', - 'contact': {'id': 5, 'organisation': {'id': 2, 'name': 'FZJ', 'longname': 'Forschungszentrum Jülich', - 'kind': 'research', 'city': 'Jülich', 'postcode': '52425', 'street_address': 'Wilhelm-Johnen-Straße', - 'country': 'Germany', 'homepage': 'https://www.fz-juelich.de', 'contact_url': 'mailto:toar-data@fz-juelich.de'}}}], - 'sampling_frequency': 'hourly', 'sampling_height': 7.0, - 'station': {'additional_metadata': {}, - 'annotations': [], - 'aux_docs': [], - 'aux_images': [], - 'aux_urls': [], - 'changelog': [], + 'additional_metadata': {'original_units': {'since_19740101000000': 'nmol/mol'}, + 'measurement_method': 'uv_abs', + 'absorption_cross_section': 'Hearn 1961', + 'ebas_metadata_19740101000000_29y': {'Submitter': 'Unknown, ' + 'Lady, ' + 'lady.unknown@unknown.com, ' + 'some ' + 'long ' + 'division ' + 'name, ' + 'SHORT, ' + ', ' + '111 ' + 'Streetname, ' + ', ' + 'zipcode, ' + 'Boulder, ' + 'CO, ' + 'USA', + 'Data level': '2', + 'Frameworks': 'GAW-WDCRG ' + 'NOAA-ESRL', + 'Station code': 'XXX', + 'Station name': 'Secret'}}, + 'doi': '', + 'coverage': -1.0, + 'station': {'id': 3, 'codes': ['China_test8'], + 'name': 'Test_China', + 'coordinates': {'lat': 36.256, 'lng': 117.106, 'alt': 1534.0}, 'coordinate_validation_status': 'not checked', - 'coordinates': {'alt': 1534.0, - 'lat': 36.256, - 'lng': 117.106}, 'country': 'China', - 'globalmeta': {'climatic_zone_year2016': '6 (warm temperate dry)', - 'distance_to_major_road_year2020': -999.0, - 'dominant_ecoregion_year2017': '-1 (undefined)', - 'dominant_landcover_year2012': '10 (Cropland, ' - 'rainfed)', - 'ecoregion_description_25km_year2017': '', + 'state': 'Shandong Sheng', + 'type': 'unknown', + 'type_of_area': 'unknown', + 'timezone': 'Asia/Shanghai', + 'additional_metadata': {}, + 'roles': [], + 'annotations': [], + 'aux_images': [], + 'aux_docs': [], + 'aux_urls': [], + 'globalmeta': {'mean_topography_srtm_alt_90m_year1994': -999.0, + 'mean_topography_srtm_alt_1km_year1994': -999.0, + 'max_topography_srtm_relative_alt_5km_year1994': -999.0, + 'min_topography_srtm_relative_alt_5km_year1994': -999.0, + 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, + 'climatic_zone_year2016': '6 (warm temperate dry)', 'htap_region_tier1_year2010': '10 (SAF Sub ' 'Saharan/sub Sahel ' 'Africa)', + 'dominant_landcover_year2012': '10 (Cropland, ' + 'rainfed)', 'landcover_description_25km_year2012': '', - 'max_population_density_25km_year1990': -1.0, - 'max_population_density_25km_year2015': -1.0, - 'max_stable_nightlights_25km_year1992': -999.0, + 'dominant_ecoregion_year2017': '-1 (undefined)', + 'ecoregion_description_25km_year2017': '', + 'distance_to_major_road_year2020': -999.0, + 'mean_stable_nightlights_1km_year2013': -999.0, + 'mean_stable_nightlights_5km_year2013': -999.0, 'max_stable_nightlights_25km_year2013': -999.0, - 'max_topography_srtm_relative_alt_5km_year1994': -999.0, - 'mean_nox_emissions_10km_year2000': -999.0, - 'mean_nox_emissions_10km_year2015': -999.0, - 'mean_population_density_250m_year1990': -1.0, + 'max_stable_nightlights_25km_year1992': -999.0, 'mean_population_density_250m_year2015': -1.0, - 'mean_population_density_5km_year1990': -1.0, 'mean_population_density_5km_year2015': -1.0, - 'mean_stable_nightlights_1km_year2013': -999.0, - 'mean_stable_nightlights_5km_year2013': -999.0, - 'mean_topography_srtm_alt_1km_year1994': -999.0, - 'mean_topography_srtm_alt_90m_year1994': -999.0, - 'min_topography_srtm_relative_alt_5km_year1994': -999.0, - 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, + 'max_population_density_25km_year2015': -1.0, + 'mean_population_density_250m_year1990': -1.0, + 'mean_population_density_5km_year1990': -1.0, + 'max_population_density_25km_year1990': -1.0, + 'mean_nox_emissions_10km_year2015': -999.0, + 'mean_nox_emissions_10km_year2000': -999.0, 'toar1_category': 'unclassified'}, - 'id': 3, - 'name': 'Test_China', - 'roles': [], - 'state': 'Shandong Sheng', - 'timezone': 'Asia/Shanghai', - 'type': 'unknown', - 'type_of_area': 'unknown'}, - 'variable': {'cf_standardname': 'mole_fraction_of_ozone_in_air', - 'chemical_formula': 'O3', - 'displayname': 'Ozone', - 'id': 5, + 'changelog': []}, + 'variable': {'name': 'o3', 'longname': 'ozone', - 'name': 'o3', - 'units': 'nmol mol-1'}, - }] + 'displayname': 'Ozone', + 'cf_standardname': 'mole_fraction_of_ozone_in_air', + 'units': 'nmol mol-1', + 'chemical_formula': 'O3', + 'id': 5}, + 'programme': {'id': 0, + 'name': '', + 'longname': '', + 'homepage': '', + 'description': ''}, + 'roles': [{'id': 1, + 'role': 'resource provider', + 'status': 'active', + 'contact': {'id': 5, + 'organisation': {'id': 2, + 'name': 'FZJ', + 'longname': 'Forschungszentrum ' + 'Jülich', + 'kind': 'research', + 'city': 'Jülich', + 'postcode': '52425', + 'street_address': 'Wilhelm-Johnen-Straße', + 'country': 'Germany', + 'homepage': 'https://www.fz-juelich.de', + 'contact_url': 'mailto:toar-data@fz-juelich.de'}}}]}] assert response.json() == expected_resp @@ -354,7 +417,7 @@ class TestApps: 'dominant_ecoregion_year2017': '-1 (undefined)', 'dominant_landcover_year2012': '10 (Cropland, rainfed)', 'ecoregion_description_25km_year2017': '', - 'htap_region_tier1_year2010': '10 (SAF Sub Saharan/sub Sahel Africa)', + 'htap_region_tier1_year2010': '11 (MDE Middle East: S. Arabia, Oman, etc, Iran, Iraq)', 'landcover_description_25km_year2012': '', 'max_stable_nightlights_25km_year1992': -999.0, 'max_stable_nightlights_25km_year2013': -999.0, @@ -546,7 +609,7 @@ class TestApps: 'dominant_ecoregion_year2017': '-1 (undefined)', 'dominant_landcover_year2012': '10 (Cropland, rainfed)', 'ecoregion_description_25km_year2017': '', - 'htap_region_tier1_year2010': '10 (SAF Sub Saharan/sub Sahel Africa)', + 'htap_region_tier1_year2010': '11 (MDE Middle East: S. Arabia, Oman, etc, Iran, Iraq)', 'landcover_description_25km_year2012': '', 'max_stable_nightlights_25km_year1992': -999.0, 'max_stable_nightlights_25km_year2013': -999.0, @@ -647,7 +710,7 @@ class TestApps: 'min_topography_srtm_relative_alt_5km_year1994': -999.0, 'stddev_topography_srtm_relative_alt_5km_year1994': -999.0, 'climatic_zone_year2016': '6 (warm temperate dry)', - 'htap_region_tier1_year2010': '10 (SAF Sub Saharan/sub Sahel Africa)', + 'htap_region_tier1_year2010': '11 (MDE Middle East: S. Arabia, Oman, etc, Iran, Iraq)', 'dominant_landcover_year2012': '10 (Cropland, rainfed)', 'landcover_description_25km_year2012': '', 'dominant_ecoregion_year2017': '-1 (undefined)', @@ -979,7 +1042,6 @@ class TestApps: assert response_json == expected_resp response = client.get(f"/timeseries/id/{response_json['detail']['timeseries_id']}") response_json = response.json() - print(response_json) # just check special changes assert response_json['sampling_frequency'] == "daily" assert response_json['changelog'][0]['old_value'] == "{'sampling_frequency': 'Hourly'}" @@ -1006,7 +1068,6 @@ class TestApps: assert response_json == expected_resp response = client.get(f"/timeseries/id/{response_json['detail']['timeseries_id']}") response_json = response.json() - print(response_json) # just check special changes assert response_json['sampling_frequency'] == "daily" assert response_json['changelog'][0]['old_value'] == "{'sampling_frequency': 'Hourly', 'aggregation': 'Mean', 'data_origin': 'Instrument', 'data_origin_type': 'Measurement'}"