eodag 4.0.0a1__py3-none-any.whl → 4.0.0a2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. eodag/__init__.py +6 -1
  2. eodag/api/collection.py +353 -0
  3. eodag/api/core.py +308 -296
  4. eodag/api/product/_product.py +15 -29
  5. eodag/api/product/drivers/__init__.py +2 -42
  6. eodag/api/product/drivers/base.py +0 -11
  7. eodag/api/product/metadata_mapping.py +34 -5
  8. eodag/api/search_result.py +144 -9
  9. eodag/cli.py +18 -15
  10. eodag/config.py +37 -3
  11. eodag/plugins/apis/ecmwf.py +16 -4
  12. eodag/plugins/apis/usgs.py +18 -7
  13. eodag/plugins/crunch/filter_latest_intersect.py +1 -0
  14. eodag/plugins/crunch/filter_overlap.py +3 -7
  15. eodag/plugins/search/__init__.py +3 -0
  16. eodag/plugins/search/base.py +6 -6
  17. eodag/plugins/search/build_search_result.py +157 -56
  18. eodag/plugins/search/cop_marine.py +48 -8
  19. eodag/plugins/search/csw.py +18 -8
  20. eodag/plugins/search/qssearch.py +331 -88
  21. eodag/plugins/search/static_stac_search.py +11 -12
  22. eodag/resources/collections.yml +610 -348
  23. eodag/resources/ext_collections.json +1 -1
  24. eodag/resources/ext_product_types.json +1 -1
  25. eodag/resources/providers.yml +330 -58
  26. eodag/resources/stac_provider.yml +4 -2
  27. eodag/resources/user_conf_template.yml +9 -0
  28. eodag/types/__init__.py +2 -0
  29. eodag/types/queryables.py +16 -0
  30. eodag/utils/__init__.py +47 -2
  31. eodag/utils/repr.py +2 -0
  32. {eodag-4.0.0a1.dist-info → eodag-4.0.0a2.dist-info}/METADATA +4 -2
  33. {eodag-4.0.0a1.dist-info → eodag-4.0.0a2.dist-info}/RECORD +37 -36
  34. {eodag-4.0.0a1.dist-info → eodag-4.0.0a2.dist-info}/WHEEL +0 -0
  35. {eodag-4.0.0a1.dist-info → eodag-4.0.0a2.dist-info}/entry_points.txt +0 -0
  36. {eodag-4.0.0a1.dist-info → eodag-4.0.0a2.dist-info}/licenses/LICENSE +0 -0
  37. {eodag-4.0.0a1.dist-info → eodag-4.0.0a2.dist-info}/top_level.txt +0 -0
@@ -91,7 +91,7 @@
91
91
  results_entry: 'results'
92
92
  ssl_verify: true
93
93
  pagination:
94
- next_page_query_obj: '{{"limit":{items_per_page},"page":{page}}}'
94
+ next_page_query_obj: '{{"limit":{items_per_page},"page":{next_page_token}}}'
95
95
  total_items_nb_key_path: '$.meta.found'
96
96
  # 2021/04/28: aws_eos doesn't specify a limit in its docs. It says that the default
97
97
  # value is 500 (https://doc.eos.com/search.api/#single-dataset-search).
@@ -521,8 +521,10 @@
521
521
  need_auth: false
522
522
  ssl_verify: true
523
523
  pagination:
524
- next_page_url_tpl: '{url}?{search}&maxRecords={items_per_page}&page={page}'
525
524
  total_items_nb_key_path: '$.properties.totalResults'
525
+ next_page_url_tpl: '{url}?{search}&maxRecords={items_per_page}&page={next_page_token}'
526
+ next_page_token_key: page
527
+
526
528
  # 2021/03/19: 500 is the max, no error if greater
527
529
  max_items_per_page: 500
528
530
  discover_metadata:
@@ -682,6 +684,9 @@
682
684
  - '%'
683
685
  pagination:
684
686
  next_page_url_tpl: '{url}?{search}&$top={items_per_page}&$skip={skip}&$expand=Attributes&$expand=Assets'
687
+ next_page_url_key_path: '$.["@odata.nextLink"]'
688
+ next_page_token_key: skip
689
+ parse_url_key: $skip
685
690
  count_tpl: '&$count=True'
686
691
  total_items_nb_key_path: '$."@odata.count"'
687
692
  max_items_per_page: 1_000
@@ -1330,18 +1335,8 @@
1330
1335
  # but in practive if an Internal Server Error is returned for more than
1331
1336
  # about 500 products.
1332
1337
  max_items_per_page: 500
1333
- sort:
1334
- sort_by_default:
1335
- - !!python/tuple [start_datetime, ASC]
1336
- sort_param_mapping:
1337
- id: id
1338
- start_datetime: properties.datetime
1339
- created: properties.created
1340
- updated: properties.updated
1341
- platform: properties.platform
1342
- view:sun_elevation: properties.view:sun_elevation
1343
- view:sun_azimuth: properties.view:sun_azimuth
1344
- eo:cloud_cover: properties.eo:cloud_cover
1338
+ next_page_token_key: next
1339
+ # Note: Sorting is intentionally disabled for this provider, as enabling it causes pagination to malfunction.
1345
1340
  metadata_mapping:
1346
1341
  assets: '{$.assets#from_alternate(s3)}'
1347
1342
  products:
@@ -1406,6 +1401,8 @@
1406
1401
  # next page retrieval mechanism, `next_page_url_tpl` will be used instead (inherited from StacSearch)
1407
1402
  # Remove that entry if Earth Search updates that and returns a valid link.
1408
1403
  next_page_url_key_path: null
1404
+ next_page_query_obj_key_path: null
1405
+ next_page_token_key: page
1409
1406
  # 2021/04/28: Earth-Search relies on Sat-API whose docs (http://sat-utils.github.io/sat-api/#search-stac-items-by-simple-filtering-)
1410
1407
  # say the max is 10_000. In practice a too high number (e.g. 5_000) returns a 502 error ({"message": "Internal server error"}).
1411
1408
  # Let's set it to a more robust number: 500
@@ -1471,7 +1468,6 @@
1471
1468
  type: AwsAuth
1472
1469
  matching_url: s3://
1473
1470
  requester_pays: True
1474
-
1475
1471
  ---
1476
1472
  !provider # MARK: earth_search_gcs
1477
1473
  name: earth_search_gcs
@@ -1496,6 +1492,8 @@
1496
1492
  # next page retrieval mechanism, `next_page_url_tpl` will be used instead (inherited from StacSearch)
1497
1493
  # Remove that entry if Earth Search updates that and returns a valid link.
1498
1494
  next_page_url_key_path: null
1495
+ next_page_query_obj_key_path: null
1496
+ next_page_token_key: page
1499
1497
  # 2021/04/28: Earth-Search relies on Sat-API whose docs (http://sat-utils.github.io/sat-api/#search-stac-items-by-simple-filtering-)
1500
1498
  # say the max is 10_000. In practice a too high number (e.g. 5_000) returns a 502 error ({"message": "Internal server error"}).
1501
1499
  # Let's set it to a more robust number: 500
@@ -1635,7 +1633,6 @@
1635
1633
  ssl_verify: true
1636
1634
  timeout: 30
1637
1635
  end_date_excluded: false
1638
- dates_required: true
1639
1636
  remove_from_query:
1640
1637
  - dataset
1641
1638
  discover_queryables:
@@ -1807,7 +1804,6 @@
1807
1804
  ssl_verify: true
1808
1805
  timeout: 30
1809
1806
  end_date_excluded: false
1810
- dates_required: true
1811
1807
  remove_from_query:
1812
1808
  - dataset
1813
1809
  - date
@@ -1861,7 +1857,7 @@
1861
1857
  UERRA_EUROPE_SL:
1862
1858
  dataset: reanalysis-uerra-europe-single-levels
1863
1859
  metadata_mapping:
1864
- <<: *day_month_year
1860
+ <<: *time_day_month_year
1865
1861
  GLACIERS_DIST_RANDOLPH:
1866
1862
  dataset: insitu-glaciers-extent
1867
1863
  GRIDDED_GLACIERS_MASS_CHANGE:
@@ -1950,8 +1946,9 @@
1950
1946
  need_auth: false
1951
1947
  ssl_verify: true
1952
1948
  pagination:
1953
- next_page_url_tpl: '{url}?{search}&maxRecords={items_per_page}&page={page}'
1949
+ next_page_url_tpl: '{url}?{search}&maxRecords={items_per_page}&page={next_page_token}'
1954
1950
  total_items_nb_key_path: '$.properties.totalResults'
1951
+ next_page_token_key: page
1955
1952
  # 2021/03/19: 500 is the max, no error if greater
1956
1953
  max_items_per_page: 500
1957
1954
  sort:
@@ -2333,6 +2330,9 @@
2333
2330
  - '%'
2334
2331
  pagination:
2335
2332
  next_page_url_tpl: '{url}?{search}&$top={items_per_page}&$skip={skip}&$expand=Attributes&$expand=Assets'
2333
+ next_page_url_key_path: '$.["@odata.nextLink"]'
2334
+ next_page_token_key: skip
2335
+ parse_url_key: $skip
2336
2336
  count_tpl: '&$count=True'
2337
2337
  total_items_nb_key_path: '$."@odata.count"'
2338
2338
  max_items_per_page: 1_000
@@ -2962,6 +2962,7 @@
2962
2962
  ssl_verify: true
2963
2963
  pagination:
2964
2964
  max_items_per_page: 1000
2965
+ next_page_token_key: token
2965
2966
  sort:
2966
2967
  sort_param_mapping:
2967
2968
  id: id
@@ -3022,6 +3023,9 @@
3022
3023
  collection_fetch_url: null
3023
3024
  pagination:
3024
3025
  max_items_per_page: 10_000
3026
+ next_page_url_key_path: null
3027
+ next_page_query_obj_key_path: null
3028
+ next_page_token_key: page
3025
3029
  sort:
3026
3030
  sort_by_default:
3027
3031
  - !!python/tuple [start_datetime, ASC]
@@ -3107,8 +3111,9 @@
3107
3111
  results_entry: 'features'
3108
3112
  pagination:
3109
3113
  total_items_nb_key_path: '$.properties.totalResults'
3110
- next_page_query_obj: '{{"itemsPerPage":{items_per_page},"startIndex":{skip}}}'
3114
+ next_page_query_obj: '{{"itemsPerPage":{items_per_page},"startIndex":{next_page_token}}}'
3111
3115
  max_items_per_page: 200
3116
+ next_page_token_key: skip
3112
3117
  discover_collections:
3113
3118
  fetch_url: null
3114
3119
  discover_queryables:
@@ -3327,25 +3332,6 @@
3327
3332
  _collection: EO:ESA:DAT:SENTINEL-5P
3328
3333
  processing:level: L2
3329
3334
  metadata_mapping_from_product: S5P_L1B_IR_ALL
3330
- EEA_DAILY_VI:
3331
- _collection: EO:EEA:DAT:CLMS_HRVPP_VI
3332
- metadata_mapping:
3333
- id:
3334
- - '{{"uid": "{id}"}}'
3335
- - '$.id'
3336
- sat:relative_orbit:
3337
- - '{{"relativeOrbitNumber": "{sat:relative_orbit}"}}'
3338
- - '$.null'
3339
- version:
3340
- - '{{"productVersion": "{version}"}}'
3341
- - '$.null'
3342
- platform:
3343
- - '{{"platformSerialIdentifier": "{platform}"}}'
3344
- - '$.id.`sub(/^[^_]+_[^_]+_([^_]+)_.*/, \\1)`'
3345
- grid:code:
3346
- - '{{"tileId": "{grid:code}"}}'
3347
- - '$.null'
3348
- eodag:order_link: 'https://gateway.prod.wekeo2.eu/hda-broker/api/v1/dataaccess/download?{{"location": "{eodag:download_link}","product_id":"{id}", "dataset_id": "EO:EEA:DAT:CLMS_HRVPP_VI"}}'
3349
3335
  EEA_HRL_TCF:
3350
3336
  product:type: EO:EEA:DAT:HRL:TCF
3351
3337
  metadata_mapping:
@@ -3435,6 +3421,34 @@
3435
3421
  metadata_mapping_from_product: CLMS_GLO_FCOVER_333M
3436
3422
  metadata_mapping:
3437
3423
  eodag:order_link: 'https://gateway.prod.wekeo2.eu/hda-broker/api/v1/dataaccess/download?{{"location": "{eodag:download_link}","product_id":"{id}", "dataset_id": "EO:CLMS:DAT:CLMS_GLOBAL_LAI_300M_V1_10DAILY_NETCDF"}}'
3424
+ CLMS_HRVPP_ST:
3425
+ _collection: EO:EEA:DAT:CLMS_HRVPP_ST
3426
+ metadata_mapping:
3427
+ id:
3428
+ - '{{"uid": "{id}"}}'
3429
+ - '$.id'
3430
+ eodag:order_link: 'https://gateway.prod.wekeo2.eu/hda-broker/api/v1/dataaccess/download?{{"location": "{eodag:download_link}","product_id":"{id}", "dataset_id": "EO:EEA:DAT:CLMS_HRVPP_ST"}}'
3431
+ CLMS_HRVPP_ST_LAEA:
3432
+ _collection: EO:EEA:DAT:CLMS_HRVPP_ST-LAEA
3433
+ metadata_mapping:
3434
+ id:
3435
+ - '{{"uid": "{id}"}}'
3436
+ - '$.id'
3437
+ eodag:order_link: 'https://gateway.prod.wekeo2.eu/hda-broker/api/v1/dataaccess/download?{{"location": "{eodag:download_link}","product_id":"{id}", "dataset_id": "EO:EEA:DAT:CLMS_HRVPP_ST-LAEA"}}'
3438
+ CLMS_HRVPP_VPP:
3439
+ _collection: EO:EEA:DAT:CLMS_HRVPP_VPP
3440
+ metadata_mapping:
3441
+ id:
3442
+ - '{{"uid": "{id}"}}'
3443
+ - '$.id'
3444
+ eodag:order_link: 'https://gateway.prod.wekeo2.eu/hda-broker/api/v1/dataaccess/download?{{"location": "{eodag:download_link}","product_id":"{id}", "dataset_id": "EO:EEA:DAT:CLMS_HRVPP_VPP"}}'
3445
+ CLMS_HRVPP_VPP_LAEA:
3446
+ _collection: EO:EEA:DAT:CLMS_HRVPP_VPP-LAEA
3447
+ metadata_mapping:
3448
+ id:
3449
+ - '{{"uid": "{id}"}}'
3450
+ - '$.id'
3451
+ eodag:order_link: 'https://gateway.prod.wekeo2.eu/hda-broker/api/v1/dataaccess/download?{{"location": "{eodag:download_link}","product_id":"{id}", "dataset_id": "EO:EEA:DAT:CLMS_HRVPP_VPP-LAEA"}}'
3438
3452
  auth: !plugin
3439
3453
  type: TokenAuth
3440
3454
  matching_url: https://[-\w\.]+.wekeo2.eu
@@ -3520,15 +3534,49 @@
3520
3534
  timeout: 60
3521
3535
  need_auth: true
3522
3536
  auth_error_code: 401
3523
- dates_required: true
3524
3537
  results_entry: 'features'
3525
3538
  pagination:
3526
3539
  total_items_nb_key_path: '$.properties.totalResults'
3527
- next_page_query_obj: '{{"itemsPerPage":{items_per_page},"startIndex":{skip}}}'
3540
+ next_page_query_obj: '{{"itemsPerPage":{items_per_page},"startIndex":{next_page_token}}}'
3541
+ next_page_token_key: skip
3528
3542
  max_items_per_page: 200
3529
3543
  discover_collections:
3530
3544
  fetch_url: null
3531
- available_values_url: 'https://gateway.prod.wekeo2.eu/hda-broker/api/v1/dataaccess/queryable/{dataset}'
3545
+ dynamic_discover_queryables:
3546
+ - collection_selector: # cop_ads
3547
+ - field: dataset
3548
+ prefix: EO:ECMWF:DAT:CAMS
3549
+ discover_queryables:
3550
+ fetch_url: null
3551
+ product_type_fetch_url: null
3552
+ constraints_url: https://ads.atmosphere.copernicus.eu/api/catalogue/v1/collections/{dataset#wekeo_to_cop_collection(EO:ECMWF:DAT:)}/constraints.json
3553
+ form_url: https://ads.atmosphere.copernicus.eu/api/catalogue/v1/collections/{dataset#wekeo_to_cop_collection(EO:ECMWF:DAT:)}/form.json
3554
+ - collection_selector: # cop_cds
3555
+ - field: dataset
3556
+ prefix: EO:ECMWF:DAT:SATELLITE
3557
+ - field: dataset
3558
+ prefix: EO:ECMWF:DAT:SEASONAL
3559
+ - field: dataset
3560
+ prefix: EO:ECMWF:DAT:INSITU
3561
+ - field: dataset
3562
+ prefix: EO:ECMWF:DAT:DERIVED
3563
+ - field: dataset
3564
+ prefix: EO:ECMWF:DAT:REANALYSIS
3565
+ - field: dataset
3566
+ prefix: EO:ECMWF:DAT:SIS
3567
+ discover_queryables:
3568
+ fetch_url: null
3569
+ collection_fetch_url: null
3570
+ constraints_url: https://cds.climate.copernicus.eu/api/catalogue/v1/collections/{dataset#wekeo_to_cop_collection(EO:ECMWF:DAT:)}/constraints.json
3571
+ form_url: https://cds.climate.copernicus.eu/api/catalogue/v1/collections/{dataset#wekeo_to_cop_collection(EO:ECMWF:DAT:)}/form.json
3572
+ - collection_selector: # cop_ewds
3573
+ - field: dataset
3574
+ prefix: EO:ECMWF:DAT:CEMS
3575
+ discover_queryables:
3576
+ fetch_url: null
3577
+ product_type_fetch_url: null
3578
+ constraints_url: https://ewds.climate.copernicus.eu/api/catalogue/v1/collections/{dataset#wekeo_to_cop_collection(EO:ECMWF:DAT:)}/constraints.json
3579
+ form_url: https://ewds.climate.copernicus.eu/api/catalogue/v1/collections/{dataset#wekeo_to_cop_collection(EO:ECMWF:DAT:)}/form.json
3532
3580
  metadata_mapping:
3533
3581
  geometry:
3534
3582
  - '{{"bbox": {geometry#to_bounds}}}'
@@ -3773,7 +3821,8 @@
3773
3821
  results_entry: 'features'
3774
3822
  pagination:
3775
3823
  total_items_nb_key_path: '$.properties.totalResults'
3776
- next_page_query_obj: '{{"itemsPerPage":{items_per_page},"startIndex":{skip}}}'
3824
+ next_page_query_obj: '{{"itemsPerPage":{items_per_page},"startIndex":{next_page_token}}}'
3825
+ next_page_token_key: skip
3777
3826
  discover_collections:
3778
3827
  fetch_url: https://gateway.prod.wekeo2.eu/hda-broker/api/v1/datasets?itemsPerPage=1400&q=EO:MO
3779
3828
  single_collection_fetch_qs: q={_collection}
@@ -3793,7 +3842,7 @@
3793
3842
  title: '$.metadata._source.datasetTitle'
3794
3843
  _mission_start_date: '$.metadata._source.tempextent_begin'
3795
3844
  _mission_end_date: '$.metadata._source.tempextent_end'
3796
- extent: '{{"temporal": {{"interval": [[{_mission_start_date}, {_mission_end_date}]]}}}}'
3845
+ extent: '{{"spatial": {{"bbox": [[[[-180.0, -90.0, 180.0, 90.0]]]]}}, "temporal": {{"interval": [[{_mission_start_date}, {_mission_end_date}]]}}}}'
3797
3846
  processing:level: '$.null'
3798
3847
  keywords: '$.metadata._source.keywords'
3799
3848
  discover_queryables:
@@ -3888,6 +3937,9 @@
3888
3937
  next_page_url_tpl: '{url}?{search}&$top={items_per_page}&$skip={skip}&$expand=Attributes&$expand=Assets'
3889
3938
  count_tpl: '&$count=True'
3890
3939
  total_items_nb_key_path: '$."@odata.count"'
3940
+ next_page_url_key_path: '$.["@odata.nextLink"]'
3941
+ next_page_token_key: skip
3942
+ parse_url_key: $skip
3891
3943
  max_items_per_page: 1_000
3892
3944
  sort:
3893
3945
  sort_by_default:
@@ -4521,7 +4573,7 @@
4521
4573
  discover_queryables:
4522
4574
  fetch_url: null
4523
4575
  collection_fetch_url: null
4524
- constraints_url: "https://s3.central.data.destination-earth.eu/swift/v1/dedt-lumi-constraints/{dataset}.json"
4576
+ constraints_url: "https://s3.central.data.destination-earth.eu/swift/v1/constraints/dedt_lumi/{dataset}_{activity}_{experiment}_{model}.json"
4525
4577
  metadata_mapping:
4526
4578
  geometry:
4527
4579
  - '{{"feature": {geometry#to_geojson_polytope}}}'
@@ -4536,10 +4588,131 @@
4536
4588
  qs: $.qs
4537
4589
  eodag:order_link: 'https://polytope.lumi.apps.dte.destination-earth.eu/api/v1/requests/destination-earth?{{"verb": "retrieve", "request": {qs#to_geojson} }}'
4538
4590
  products:
4591
+ DT_CLIMATE_ADAPTATION:
4592
+ discover_queryables:
4593
+ constraints_url: "https://s3.central.data.destination-earth.eu/swift/v1/dedt-lumi-constraints/{dataset}.json"
4594
+ dataset: climate-dt
4539
4595
  DT_EXTREMES:
4596
+ discover_queryables:
4597
+ constraints_url: "https://s3.central.data.destination-earth.eu/swift/v1/dedt-lumi-constraints/{dataset}.json"
4540
4598
  dataset: extremes-dt
4541
- DT_CLIMATE_ADAPTATION:
4599
+ class: d1
4600
+ expver: "0001"
4601
+ type: fc
4602
+ time: "0000"
4603
+ DT_CLIMATE_G1_CMIP6_HIST_ICON_R1:
4604
+ dataset: climate-dt
4605
+ class: d1
4606
+ generation: "1"
4607
+ expver: "0001"
4608
+ stream: clte
4609
+ type: fc
4610
+ activity: CMIP6
4611
+ realization: "1"
4612
+ model: ICON
4613
+ resolution: high
4614
+ experiment: hist
4615
+ DT_CLIMATE_G1_CMIP6_HIST_IFS_NEMO_R1:
4616
+ dataset: climate-dt
4617
+ class: d1
4618
+ generation: "1"
4619
+ expver: "0001"
4620
+ stream: clte
4621
+ type: fc
4622
+ activity: CMIP6
4623
+ experiment: hist
4624
+ realization: "1"
4625
+ model: IFS-NEMO
4626
+ DT_CLIMATE_G1_HIGHRESMIP_CONT_IFS_NEMO_R1:
4627
+ dataset: climate-dt
4628
+ class: d1
4629
+ generation: "1"
4630
+ expver: "0001"
4631
+ stream: clte
4632
+ type: fc
4633
+ activity: HighResMIP
4634
+ experiment: cont
4635
+ realization: "1"
4636
+ model: IFS-NEMO
4637
+ resolution: high
4638
+ DT_CLIMATE_G1_SCENARIOMIP_SSP3_7_0_ICON_R1:
4639
+ dataset: climate-dt
4640
+ class: d1
4641
+ generation: "1"
4642
+ expver: "0001"
4643
+ stream: clte
4644
+ type: fc
4645
+ activity: ScenarioMIP
4646
+ experiment: SSP3-7.0
4647
+ realization: "1"
4648
+ model: ICON
4649
+ resolution: high
4650
+ DT_CLIMATE_G1_SCENARIOMIP_SSP3_7_0_IFS_NEMO_R1:
4651
+ dataset: climate-dt
4652
+ class: d1
4653
+ generation: "1"
4654
+ expver: "0001"
4655
+ stream: clte
4656
+ type: fc
4657
+ activity: ScenarioMIP
4658
+ experiment: SSP3-7.0
4659
+ realization: "1"
4660
+ model: IFS-NEMO
4661
+ DT_CLIMATE_G1_STORY_NUDGING_CONT_IFS_FESOM_R1:
4662
+ dataset: climate-dt
4663
+ class: d1
4664
+ generation: "1"
4665
+ expver: "0001"
4666
+ stream: clte
4667
+ type: fc
4668
+ activity: story-nudging
4669
+ experiment: cont
4670
+ realization: "1"
4671
+ model: IFS-FESOM
4672
+ DT_CLIMATE_G1_STORY_NUDGING_HIST_IFS_FESOM_R1:
4542
4673
  dataset: climate-dt
4674
+ class: d1
4675
+ generation: "1"
4676
+ expver: "0001"
4677
+ stream: clte
4678
+ type: fc
4679
+ activity: story-nudging
4680
+ experiment: hist
4681
+ realization: "1"
4682
+ model: IFS-FESOM
4683
+ DT_CLIMATE_G1_STORY_NUDGING_TPLUS2_0K_IFS_FESOM_R1:
4684
+ dataset: climate-dt
4685
+ class: d1
4686
+ generation: "1"
4687
+ expver: "0001"
4688
+ stream: clte
4689
+ type: fc
4690
+ activity: story-nudging
4691
+ experiment: Tplus2.0K
4692
+ realization: "1"
4693
+ model: IFS-FESOM
4694
+ DT_CLIMATE_G1_CMIP6_HIST_IFS_FESOM_R1:
4695
+ dataset: climate-dt
4696
+ class: ng
4697
+ generation: "1"
4698
+ expver: "0001"
4699
+ stream: clte
4700
+ type: fc
4701
+ activity: CMIP6
4702
+ experiment: hist
4703
+ realization: "1"
4704
+ model: IFS-FESOM
4705
+ DT_CLIMATE_G1_SCENARIOMIP_SSP3_7_0_IFS_FESOM_R2:
4706
+ dataset: climate-dt
4707
+ class: d1
4708
+ generation: "1"
4709
+ expver: "0001"
4710
+ stream: clte
4711
+ type: fc
4712
+ activity: ScenarioMIP
4713
+ experiment: SSP3-7.0
4714
+ realization: "2"
4715
+ model: IFS-FESOM
4543
4716
  download: !plugin
4544
4717
  type: HTTPDownload
4545
4718
  ssl_verify: true
@@ -4569,9 +4742,6 @@
4569
4742
  metadata_mapping:
4570
4743
  eodag:download_link: $.headers.Location
4571
4744
  no_auth_download: True
4572
- products:
4573
- DT_EXTREMES:
4574
- DT_CLIMATE_ADAPTATION:
4575
4745
  auth: !plugin
4576
4746
  type: OIDCAuthorizationCodeFlowAuth
4577
4747
  oidc_config_url: https://auth.destine.eu/realms/desp/.well-known/openid-configuration
@@ -4583,7 +4753,98 @@
4583
4753
  login_form_xpath: //form[@id='kc-form-login']
4584
4754
  authentication_uri_source: login-form
4585
4755
  ---
4586
-
4756
+ !provider # MARK: dedt_mn5
4757
+ name: dedt_mn5
4758
+ priority: 0
4759
+ roles:
4760
+ - host
4761
+ description: Destination Earth Digital Twin Outputs from marenostrum through Polytope API
4762
+ url: https://polytope.mn5.apps.dte.destination-earth.eu/openapi
4763
+ search: !plugin
4764
+ type: ECMWFSearch
4765
+ need_auth: true
4766
+ ssl_verify: true
4767
+ dates_required: True
4768
+ discover_queryables:
4769
+ fetch_url: null
4770
+ collection_fetch_url: null
4771
+ constraints_url: "https://s3.central.data.destination-earth.eu/swift/v1/constraints/dedt_mn5/{dataset}_{activity}_{experiment}_{model}.json"
4772
+ metadata_mapping:
4773
+ geometry:
4774
+ - '{{"feature": {geometry#to_geojson_polytope}}}'
4775
+ - "$.geometry"
4776
+ start_datetime: '{$.start_datetime#to_iso_utc_datetime}'
4777
+ end_datetime:
4778
+ - '{{"date": "{start_datetime#to_non_separated_date}/to/{end_datetime#to_non_separated_date}"}}'
4779
+ - '{$.end_datetime#to_iso_utc_datetime}'
4780
+ product:type:
4781
+ - dataset
4782
+ - $.dataset
4783
+ qs: $.qs
4784
+ eodag:order_link: 'https://polytope.mn5.apps.dte.destination-earth.eu/api/v1/requests/destination-earth?{{"verb": "retrieve", "request": {qs#to_geojson} }}'
4785
+ products:
4786
+ DT_CLIMATE_G1_HIGHRESMIP_CONT_IFS_FESOM_R1:
4787
+ dataset: climate-dt
4788
+ class: d1
4789
+ generation: "1"
4790
+ expver: "0001"
4791
+ stream: clte
4792
+ type: fc
4793
+ activity: HighResMIP
4794
+ experiment: cont
4795
+ realization: "1"
4796
+ model: IFS-FESOM
4797
+ DT_CLIMATE_G1_SCENARIOMIP_SSP3_7_0_IFS_FESOM_R1:
4798
+ class: d1
4799
+ dataset: climate-dt
4800
+ generation: "1"
4801
+ expver: "0001"
4802
+ stream: clte
4803
+ type: fc
4804
+ activity: ScenarioMIP
4805
+ experiment: SSP3-7.0
4806
+ realization: "1"
4807
+ model: IFS-FESOM
4808
+ download: !plugin
4809
+ type: HTTPDownload
4810
+ ssl_verify: true
4811
+ auth_error_code: 401
4812
+ order_enabled: True
4813
+ order_method: POST
4814
+ order_on_response:
4815
+ metadata_mapping:
4816
+ eodag:order_id: '{$.headers.Location#slice_str(-36,,1)}'
4817
+ _previous_order_id: '{$.json.eodag:order_id#replace_str("Not Available","")}'
4818
+ eodag:combined_order_id: '{eodag:order_id#replace_str("Not Available","")}{_previous_order_id}'
4819
+ eodag:status_link: "https://polytope.mn5.apps.dte.destination-earth.eu/api/v1/requests/{eodag:combined_order_id#replace_str(r'^$','Not Available')}"
4820
+ order_status:
4821
+ request:
4822
+ method: GET
4823
+ headers:
4824
+ metadata_mapping:
4825
+ eodag:order_status: $.json.status
4826
+ eodag:order_message: $.json.message
4827
+ error_message: $.null
4828
+ success:
4829
+ http_code: 303
4830
+ error:
4831
+ eodag:order_status: failed
4832
+ on_success:
4833
+ result_type: json
4834
+ metadata_mapping:
4835
+ eodag:download_link: $.headers.Location
4836
+ no_auth_download: True
4837
+ auth: !plugin
4838
+ type: OIDCAuthorizationCodeFlowAuth
4839
+ oidc_config_url: https://auth.destine.eu/realms/desp/.well-known/openid-configuration
4840
+ redirect_uri: https://polytope.lumi.apps.dte.destination-earth.eu/
4841
+ client_id: polytope-api-public
4842
+ user_consent_needed: false
4843
+ token_exchange_post_data_method: data
4844
+ token_provision: header
4845
+ login_form_xpath: //form[@id='kc-form-login']
4846
+ authentication_uri_source: login-form
4847
+ ---
4587
4848
  !provider # MARK: dedl
4588
4849
  name: dedl
4589
4850
  priority: 0
@@ -4622,8 +4883,8 @@
4622
4883
  title: '$.title'
4623
4884
  extent: '$.extent'
4624
4885
  pagination:
4625
- next_page_url_key_path: null
4626
4886
  max_items_per_page: 100
4887
+ next_page_token_key: page
4627
4888
  sort:
4628
4889
  sort_param_mapping:
4629
4890
  id: id
@@ -4999,8 +5260,6 @@
4999
5260
  _collection: EO.CLMS.DAT.GLO.NDVI_1KM_V2
5000
5261
  CLMS_GLO_NDVI_333M:
5001
5262
  _collection: EO.CLMS.DAT.GLO.NDVI300_V1
5002
- EEA_DAILY_VI:
5003
- _collection: EO.CLMS.DAT.SENTINEL-2.HRVPP.VI
5004
5263
  # Landsat data
5005
5264
  LANDSAT_C2L1:
5006
5265
  _collection: EO.NASA.DAT.LANDSAT.C2_L1
@@ -5158,7 +5417,7 @@
5158
5417
  - '&'
5159
5418
  asset_key_from_href: false
5160
5419
  pagination:
5161
- next_page_url_tpl: '{url}?{search}&c={items_per_page}&pw={page}'
5420
+ next_page_url_tpl: '{url}?{search}&c={items_per_page}&pw={next_page_token}'
5162
5421
  start_page: 0
5163
5422
  total_items_nb_key_path: '$.totalResults'
5164
5423
  # 2024/02/01: 500 is the max, no error if greater
@@ -5536,7 +5795,7 @@
5536
5795
  MSG_CTH_IODC:
5537
5796
  _collection: EO:EUM:DAT:MSG:CTH-IODC
5538
5797
  HIRS_FDR_1_MULTI:
5539
- _collection: EO:EUM:DAT:0647
5798
+ _collection: EO:EUM:DAT:0961
5540
5799
  MSG_OCA_CDR:
5541
5800
  _collection: EO:EUM:DAT:0617
5542
5801
  S6_RADIO_OCCULTATION:
@@ -5784,6 +6043,9 @@
5784
6043
  limit: 10000
5785
6044
  pagination:
5786
6045
  total_items_nb_key_path: '$.context.matched'
6046
+ next_page_url_key_path: null
6047
+ next_page_query_obj_key_path: null
6048
+ next_page_token_key: page
5787
6049
  # 1000 is ok and 2000 fails
5788
6050
  max_items_per_page: 1000
5789
6051
  sort:
@@ -5911,6 +6173,9 @@
5911
6173
  limit: 10000
5912
6174
  pagination:
5913
6175
  total_items_nb_key_path: '$.context.matched'
6176
+ next_page_url_key_path: null
6177
+ next_page_query_obj_key_path: null
6178
+ next_page_token_key: page
5914
6179
  # 1000 is ok and 2000 fails
5915
6180
  max_items_per_page: 1000
5916
6181
  sort:
@@ -6116,7 +6381,6 @@
6116
6381
  need_auth: true
6117
6382
  ssl_verify: true
6118
6383
  end_date_excluded: false
6119
- dates_required: True
6120
6384
  remove_from_query:
6121
6385
  - dataset
6122
6386
  - date
@@ -6201,6 +6465,14 @@
6201
6465
  api_endpoint: 'https://fedeo.ceos.org/search'
6202
6466
  ssl_verify: true
6203
6467
  timeout: 60
6468
+ pagination:
6469
+ next_page_url_tpl: '{url}?startRecord={next_page_token}'
6470
+ next_page_query_obj: '{{"limit":{items_per_page}}}'
6471
+ next_page_token_key: skip
6472
+ # startRecord is equivalent to skip + 1, so make skip start at page 2
6473
+ start_page: 2
6474
+ next_page_query_obj_key_path: null
6475
+ next_page_url_key_path: null
6204
6476
  discover_queryables:
6205
6477
  fetch_url: null
6206
6478
  collection_fetch_url: null
@@ -6214,8 +6486,8 @@
6214
6486
  title: '$.title'
6215
6487
  single_collection_fetch_url: 'https://fedeo.ceos.org/series/eo:organisationName/CEDA/{_collection}'
6216
6488
  single_collection_parsable_metadata:
6217
- ID: '{$.assets.enclosure.href#ceda_collection_name}'
6218
- description: '$.description'
6489
+ id: '{$.assets.enclosure.href#ceda_collection_name}'
6490
+ description: '{$.description#literalize_unicode}'
6219
6491
  instruments: '$.summaries.instruments'
6220
6492
  keywords: '$.keywords'
6221
6493
  license: '$.license'
@@ -19,11 +19,13 @@ search:
19
19
  type: StacSearch
20
20
  results_entry: features
21
21
  pagination:
22
- next_page_query_obj: '{{"limit":{items_per_page},"page":{page}}}'
22
+ next_page_query_obj: '{{"limit":{items_per_page},"{next_page_token_key}":"{next_page_token}"}}'
23
23
  total_items_nb_key_path: '$.numberMatched'
24
24
  next_page_url_key_path: '$.links[?(@.rel="next")].href'
25
25
  next_page_query_obj_key_path: '$.links[?(@.rel="next")].body'
26
26
  next_page_merge_key_path: '$.links[?(@.rel="next")].merge'
27
+ # do not use 'page' as default key, guess from provider response
28
+ next_page_token_key: null
27
29
  sort:
28
30
  sort_by_tpl: '{{"sortby": [ {{"field": "{sort_param}", "direction": "{sort_order}" }} ] }}'
29
31
  sort_order_mapping:
@@ -50,7 +52,7 @@ search:
50
52
  constellation: '{$.summaries.constellation#csv_list}'
51
53
  platform: '{$.summaries.platform#csv_list}'
52
54
  processing:level: '{$.summaries."processing:level"#csv_list}'
53
- keywords: '{$.keywords#csv_list}'
55
+ keywords: '$.keywords'
54
56
  license: '$.license'
55
57
  title: '$.title'
56
58
  extent: '$.extent'
@@ -107,6 +107,15 @@ dedt_lumi:
107
107
  credentials:
108
108
  username:
109
109
  password:
110
+ dedt_mn5:
111
+ priority: # Lower value means lower priority (Default: 0)
112
+ search:
113
+ download:
114
+ output_dir:
115
+ auth:
116
+ credentials:
117
+ username:
118
+ password:
110
119
  earth_search:
111
120
  priority: # Lower value means lower priority (Default: 0)
112
121
  search: # Search parameters configuration
eodag/types/__init__.py CHANGED
@@ -153,6 +153,7 @@ def json_field_definition_to_python(
153
153
  json_field_definition: dict[str, Any],
154
154
  default_value: Optional[Any] = None,
155
155
  required: Optional[bool] = False,
156
+ alias: Optional[str] = None,
156
157
  ) -> Annotated[Any, FieldInfo]:
157
158
  """Get python field definition from json object
158
159
 
@@ -180,6 +181,7 @@ def json_field_definition_to_python(
180
181
  pattern=json_field_definition.get("pattern", PydanticUndefined),
181
182
  le=json_field_definition.get("maximum", PydanticUndefined),
182
183
  ge=json_field_definition.get("minimum", PydanticUndefined),
184
+ alias=alias or PydanticUndefined,
183
185
  )
184
186
 
185
187
  enum = json_field_definition.get("enum")