Repository: CS-SI/eodag
Pull request #1318 (2024-09-11 12:30:48)

fix(server): queryable issues and parameters prefixes
- adds the *provider* and `oseo` prefix to the `queryables` to match the parameters in the search result
- fix for the use of filter params with provider prefixes
- adds a per product type metadata mapping for the provider `eumetsat_ds` because the metadata mapping is used to create the queryables and they are different for different product types


github-actions[bot]: ## Test Results
    4 files  ±0      4 suites  ±0   6m 20s :stopwatch: -2s
  561 tests ±0    558 :white_check_mark: ±0    3 :zzz: ±0  0 :x: ±0 
2 244 runs  ±0  2 142 :white_check_mark: ±0  102 :zzz: ±0  0 :x: ±0 

Results for commit 0a67f073. ± Comparison against base commit 4b35e1d8.

[test-results]:data:application/gzip;base64,H4sIAJCO4WYC/02Myw6DIBQFf8Ww7gLwgtifMUgvCalKw2Nl+u+FVqnLmZMzO7FuwUjuHdw6ErNLDR456OT8VrBXtIgypToKyU6aYjamKqH+6ule9dOE1W4poiUmDMGHw4S81SbnAAedTc6AN/VrMtrMJfrla9P4dXWpAKFaDpYOvVFqnhVSgRaUZmYUzABKPYAeceZI3h+SQqquCQEAAA==

github-actions[bot]: ![badge](https://raw.githubusercontent.com/CS-SI/eodag/_xml_coverage_reports_win/data/fix-queryable-issues/./badge.svg)


## Code Coverage (Windows)

<details>


```
Filename                                     Stmts    Miss  Cover    Missing
-----------------------------------------  -------  ------  -------  --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
__init__.py                                      8       0  100.00%
cli.py                                         312      59  81.09%   655-714, 816-867, 871
config.py                                      367      28  92.37%   82-84, 93, 101, 105-107, 175, 186, 452-454, 514-517, 560-561, 570-571, 676, 707, 739-744, 746
crunch.py                                        5       5  0.00%    20-24
api/__init__.py                                  0       0  100.00%
api/core.py                                    772      74  90.41%   635, 679-682, 720, 764, 798, 851-856, 882, 973, 1041, 1179, 1262-1274, 1310, 1312, 1340, 1344-1355, 1368-1374, 1457-1460, 1493-1513, 1565, 1582-1586, 1598-1601, 1623-1630, 1944, 1975-1981, 2232, 2236-2239, 2250-2252, 2284
api/search_result.py                            51       4  92.16%   73, 82, 89, 103
api/product/__init__.py                          6       0  100.00%
api/product/_assets.py                          48       5  89.58%   75, 147, 155, 158-162
api/product/_product.py                        187      20  89.30%   70-72, 237-238, 313, 342, 399, 413-416, 429, 453-456, 499-505
api/product/metadata_mapping.py                675      81  88.00%   129-131, 226, 258-259, 305-306, 316-328, 330, 341, 347-359, 404-405, 442, 463-466, 489, 497-498, 574-575, 599-600, 606-609, 624-625, 774, 820, 991-996, 1123, 1137-1157, 1177, 1182, 1289, 1311, 1325, 1338-1357, 1396, 1448, 1480-1484, 1499
api/product/drivers/__init__.py                  6       0  100.00%
api/product/drivers/base.py                      6       1  83.33%   38
plugins/__init__.py                              0       0  100.00%
plugins/base.py                                 21       3  85.71%   48, 55, 68
plugins/manager.py                             130      12  90.77%   104-109, 159, 197, 219, 223, 247, 281-282
plugins/apis/__init__.py                         0       0  100.00%
plugins/apis/base.py                             4       0  100.00%
plugins/apis/ecmwf.py                           91       8  91.21%   149-151, 198-199, 225-227
plugins/apis/usgs.py                           180      31  82.78%   132, 234, 268, 303-305, 310, 336-337, 342, 372-379, 390-395, 417-423, 425-431, 454
plugins/authentication/__init__.py               6       1  83.33%   31
plugins/authentication/aws_auth.py              19       0  100.00%
plugins/authentication/base.py                  17       2  88.24%   34, 47
plugins/authentication/generic.py               14       2  85.71%   40, 50
plugins/authentication/header.py                19       0  100.00%
plugins/authentication/keycloak.py              48       4  91.67%   134, 160-165
plugins/authentication/oauth.py                 13       7  46.15%   32-34, 38-41
plugins/authentication/openid_connect.py       187      17  90.91%   119, 133-158, 166, 320-323, 349
plugins/authentication/qsauth.py                34       1  97.06%   83
plugins/authentication/sas_auth.py              47       1  97.87%   76
plugins/authentication/token.py                 89      16  82.02%   79, 107, 109, 132-145, 201-205
plugins/authentication/token_exchange.py        36      20  44.44%   74-80, 92-122
plugins/crunch/__init__.py                       0       0  100.00%
plugins/crunch/base.py                          10       1  90.00%   40
plugins/crunch/filter_date.py                   59      14  76.27%   49-54, 66, 75, 84, 87, 99-101, 110-112, 119
plugins/crunch/filter_latest_intersect.py       47      33  29.79%   48-53, 66-111
plugins/crunch/filter_latest_tpl_name.py        31       1  96.77%   83
plugins/crunch/filter_overlap.py                66      18  72.73%   28-30, 68-71, 78-81, 87, 95, 106-122
plugins/crunch/filter_property.py               30       7  76.67%   54-59, 62-63, 79-83
plugins/download/__init__.py                     0       0  100.00%
plugins/download/aws.py                        489     163  66.67%   265, 278, 345-348, 362-366, 408-410, 414, 446-447, 453-457, 486, 518, 522, 529, 559-567, 571, 603-611, 618-620, 654-728, 746-807, 818-823, 835-848, 873, 888-890, 893, 903-911, 919-932, 942-973, 980-992, 1030, 1056, 1101-1103, 1323
plugins/download/base.py                       253      53  79.05%   136, 164, 231-233, 296-297, 314-320, 351-355, 361-362, 404, 407-421, 433, 437, 501-505, 535-536, 544-561, 568-576, 578-582, 625, 647, 669, 677
plugins/download/creodias_s3.py                 17       9  47.06%   44-58
plugins/download/http.py                       534     130  75.66%   195-207, 209-210, 242-245, 306-309, 311-312, 319-324, 342-357, 374-376, 388, 436, 443-449, 467, 481, 495, 503-505, 521-526, 537, 555, 597-601, 623, 663, 708, 722-728, 757-821, 839, 872-881, 903-904, 931-936, 942, 945, 961, 978-979, 992, 1009-1010, 1017, 1078-1084, 1139-1140, 1146, 1156, 1192, 1228, 1246-1262, 1288-1290
plugins/download/s3rest.py                     116      24  79.31%   113, 149, 156, 191, 221-228, 231-233, 237, 248-254, 262-263, 266-270, 293, 314-317
plugins/search/__init__.py                      22       0  100.00%
plugins/search/base.py                         128      14  89.06%   102, 106, 117, 255, 275, 331-332, 352, 355-363, 365
plugins/search/build_search_result.py          181      30  83.43%   95, 136-137, 143, 154, 288-291, 320, 373-390, 450, 453, 463, 480, 500-515
plugins/search/cop_marine.py                   197      47  76.14%   55, 63-65, 71-72, 88, 90, 93, 128-130, 142-143, 183-192, 196, 199, 203, 221, 249, 253, 268, 272, 276, 280, 284-288, 294-297, 300-314, 331, 354, 357, 363
plugins/search/creodias_s3.py                   55       3  94.55%   53, 71, 105
plugins/search/csw.py                          105      81  22.86%   58-59, 63-64, 72-120, 126-139, 147-179, 197-238
plugins/search/data_request_search.py          200      67  66.50%   90-93, 109, 120, 124-125, 136, 141, 146, 153, 166-169, 223-224, 228, 238-244, 249, 275-278, 286-297, 314, 316, 323-324, 326-327, 345-349, 382, 392, 403, 416, 422-437, 442
plugins/search/qssearch.py                     682     122  82.11%   388, 392-398, 406-407, 513-525, 569, 572, 585, 595, 614-629, 666-669, 740-741, 789, 808, 815, 827, 884, 905, 908-909, 918-919, 928-929, 938-939, 966, 1037-1042, 1046-1055, 1089, 1111, 1171, 1220, 1294-1298, 1358, 1361, 1367-1368, 1389, 1416-1428, 1435, 1467-1469, 1479-1485, 1515, 1538, 1553, 1575, 1641-1741
plugins/search/static_stac_search.py            72      10  86.11%   98-125, 141, 154
rest/__init__.py                                 4       2  50.00%   21-22
rest/cache.py                                   33      22  33.33%   35-37, 44-70
rest/config.py                                  26       1  96.15%   36
rest/constants.py                                7       0  100.00%
rest/core.py                                   241     136  43.57%   163, 165, 167, 172-173, 194-203, 214-220, 261-315, 328-366, 397-431, 446-462, 480-491, 505-536, 553, 595-644, 683, 690-738
rest/server.py                                 283     283  0.00%    18-874
rest/stac.py                                   473     177  62.58%   252, 318, 340, 392-395, 422-449, 480-482, 505, 537-538, 620-660, 682-698, 725, 772-785, 792, 846-847, 853, 906, 908, 964, 973-975, 991-993, 1000-1002, 1014-1016, 1028-1045, 1053-1074, 1082-1104, 1111-1128, 1147-1170, 1179, 1187-1199, 1210-1232, 1243-1288, 1332-1365, 1441-1467
rest/types/__init__.py                           0       0  100.00%
rest/types/collections_search.py                13      13  0.00%    18-44
rest/types/eodag_search.py                     181      16  91.16%   232-236, 269-271, 289, 292, 298, 302, 360, 377-387
rest/types/queryables.py                        56      13  76.79%   51-52, 59-60, 67-68, 94-99, 108-109, 164
rest/types/stac_search.py                      126      11  91.27%   127-129, 175, 190-192, 200, 204, 252, 255
rest/utils/__init__.py                          93      30  67.74%   79-85, 105, 108-109, 128-130, 143, 150, 175-183, 190-211
rest/utils/cql_evaluate.py                      48       5  89.58%   69, 76, 90, 97, 105
rest/utils/rfc3339.py                           23       5  78.26%   43-44, 48, 60, 62
types/__init__.py                              114      39  65.79%   53, 66-70, 81-93, 120-122, 129-132, 172, 199, 209-225, 230, 232, 253, 258, 266, 276
types/bbox.py                                   43      19  55.81%   46-61, 72-74, 85-87, 99-101, 113-115, 123
types/download_args.py                           9       0  100.00%
types/queryables.py                             81       0  100.00%
types/search_args.py                            70      18  74.29%   60-64, 71-88, 103
types/whoosh.py                                 15       0  100.00%
utils/__init__.py                              500      37  92.60%   85, 90, 194-195, 204-231, 234, 248, 328-332, 406-410, 429-431, 510, 525, 561-562, 926-929, 937-938, 976-977, 1148
utils/constraints.py                           119      37  68.91%   89-98, 139, 144, 148, 159, 182-184, 194, 208-224, 233-244
utils/exceptions.py                             35       1  97.14%   93
utils/import_system.py                          28      19  32.14%   64-78, 89-99
utils/logging.py                                28       1  96.43%   41
utils/notebook.py                               44      23  47.73%   25-29, 36-41, 58-62, 72-78, 83-87
utils/repr.py                                   30       8  73.33%   36, 38, 42, 76, 94-101
utils/requests.py                               55      11  80.00%   64, 88, 90, 92, 94, 96, 112, 120-122, 130
utils/rest.py                                   36       1  97.22%   55
utils/stac_reader.py                           111      45  59.46%   56-57, 63-85, 95-97, 101, 137, 153-156, 203-212, 222-252
TOTAL                                         9617    2202  77.10%
```

</details>


### Diff against develop

```
Filename                      Stmts    Miss  Cover
--------------------------  -------  ------  -------
rest/core.py                     +7      +7  -1.30%
rest/types/eodag_search.py       +2      +2  -1.02%
TOTAL                            +9      +9  -0.08%
```


Results for commit: 0a67f073c88bb8e05ef48a1c951c4e6a74a9eb2e


_Minimum allowed coverage is `70%`_


:recycle: This comment has been updated with latest results


<!-- Sticky Pull Request Commentartifacts/unit-test-results-python3.12-windows-latest/coverage.xml -->

Patch:
diff --git a/eodag/resources/providers.yml b/eodag/resources/providers.yml
index 0730e000..187d1de0 100644
--- a/eodag/resources/providers.yml
+++ b/eodag/resources/providers.yml
@@ -6909,6 +6909,29 @@
   roles:
     - host
   url: https://data.eumetsat.int
+  anchor_sentinel: &sentinel_params
+    orbitDirection:
+      - orbitdir
+      - '$.properties.acquisitionInformation[0].acquisitionParameters.orbitDirection'
+    relativeOrbitNumber:
+      - relorbit
+      - '$.properties.acquisitionInformation[0].acquisitionParameters.relativeOrbitNumber'
+    timeliness:
+      - timeliness
+      - '$.properties.productInformation.timeliness'
+    cycleNumber:
+      - cycle
+      - '$.properties.acquisitionInformation[0].acquisitionParameters.cycleNumber'
+  anchor_orbit_zone_tile: &orbit_zone_tile
+    orbitNumber:
+      - orbit
+      - '$.properties.acquisitionInformation[0].acquisitionParameters.orbitNumber'
+    utmZone:
+      - zone
+      - '$.null'
+    tileIdentifier:
+      - t6
+      - '$.null'
   search: !plugin
     type: QueryStringSearch
     api_endpoint: 'https://api.eumetsat.int/data/search-products/1.0.0/os'
@@ -6970,7 +6993,6 @@
         - sat
         - '$.properties.acquisitionInformation[0].platform.platformShortName'
       instrument: '$.properties.acquisitionInformation[0].instrument.instrumentShortName'
-
       # INSPIRE obligated OpenSearch Parameters for Collection Search (Table 4)
       title:
         - title
@@ -6978,19 +7000,11 @@
       publicationDate:
         - publication
         - '$.null'
-
       # OpenSearch Parameters for Product Search (Table 5)
       parentIdentifier:
         - pi
         - '$.properties.parentIdentifier'
-      orbitNumber:
-        - orbit
-        - '$.properties.acquisitionInformation[0].acquisitionParameters.orbitNumber'
-      orbitDirection:
-        - orbitdir
-        - '$.properties.acquisitionInformation[0].acquisitionParameters.orbitDirection'
       modificationDate: '$.properties.updated'
-
       # OpenSearch Parameters for Acquistion Parameters Search (Table 6)
       startTimeFromAscendingNode:
         - dtstart
@@ -7002,12 +7016,6 @@
       id:
         - id
         - $.properties.identifier
-      utmZone:
-        - zone
-        - '$.null'
-      tileIdentifier:
-        - t6
-        - '$.null'
       # The geographic extent of the product
       geometry:
         - 'geo={geometry#to_rounded_wkt}'
@@ -7021,25 +7029,11 @@
       # storageStatus set to ONLINE for consistency between providers
       storageStatus: '{$.null#replace_str("Not Available","ONLINE")}'
       assets: '{$.properties.links.sip-entries#assets_list_to_dict}'
-
       # Additional metadata provided by the providers but that don't appear in the reference spec
-      timeliness:
-        - timeliness
-        - '$.properties.productInformation.timeliness'
-      relativeOrbitNumber:
-        - relorbit
-        - '$.properties.acquisitionInformation[0].acquisitionParameters.relativeOrbitNumber'
-      cycleNumber:
-        - cycle
-        - '$.properties.acquisitionInformation[0].acquisitionParameters.cycleNumber'
-      fire:
-        - fire
-        - '$.properties.extraInformation.fireDetected'
       size:
         - size
         - '$.properties.productInformation.size'
       type: '$.null'
-
       # set duplicate metadata due to metadata discovery to null
       acquisitionInformation: '$.null'
       productInformation: '$.null'
@@ -7049,113 +7043,223 @@
     S3_SRA:
       productType: SR_1_SRA___
       parentIdentifier: EO:EUM:DAT:0406
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_SRA_A:
       productType: SR_1_SRA_A_
       parentIdentifier: EO:EUM:DAT:0413
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_SRA_1A_BC004:
       productType: SR_1_SRA_A_
       parentIdentifier: EO:EUM:DAT:0583
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_SRA_1A_BC005:
       productType: SR_1_SRA_A_
       parentIdentifier: EO:EUM:DAT:0836
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_SRA_1B_BC004:
       productType: SR_1_SRA___
       parentIdentifier: EO:EUM:DAT:0584
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_SRA_1B_BC005:
       productType: SR_1_SRA___
       parentIdentifier: EO:EUM:DAT:0833
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_SRA_BS:
       productType: SR_1_SRA_BS
       parentIdentifier: EO:EUM:DAT:0414
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_SRA_BS_BC004:
       productType: SR_1_SRA_BS
       parentIdentifier: EO:EUM:DAT:0585
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_SRA_BS_BC005:
       productType: SR_1_SRA_BS
       parentIdentifier: EO:EUM:DAT:0835
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_WAT:
       productType: SR_2_WAT___
       parentIdentifier: EO:EUM:DAT:0415
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_WAT_BC004:
       productType: SR_2_WAT___
       parentIdentifier: EO:EUM:DAT:0586
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_WAT_BC005:
       productType: SR_2_WAT___
       parentIdentifier: EO:EUM:DAT:0834
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     # S3 OLCI
     S3_EFR:
       productType: OL_1_EFR___
       parentIdentifier: EO:EUM:DAT:0409
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_EFR_BC002:
       productType: OL_1_EFR___
       parentIdentifier: EO:EUM:DAT:0577
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_ERR:
       productType: OL_1_ERR___
       parentIdentifier: EO:EUM:DAT:0410
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_ERR_BC002:
       productType: OL_1_ERR___
       parentIdentifier: EO:EUM:DAT:0578
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_OLCI_L2WRR:
       productType: OL_2_WRR___
       parentIdentifier: EO:EUM:DAT:0408
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_OLCI_L2WRR_BC003:
       productType: OL_2_WRR___
       parentIdentifier: EO:EUM:DAT:0557
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_OLCI_L2WFR:
       productType: OL_2_WFR___
       parentIdentifier: EO:EUM:DAT:0407
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_OLCI_L2WFR_BC003:
       productType: OL_2_WFR___
       parentIdentifier: EO:EUM:DAT:0556
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     # S3 SLSTR
     S3_SLSTR_L1RBT:
       productType: SL_1_RBT___
       parentIdentifier: EO:EUM:DAT:0411
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_SLSTR_L1RBT_BC003:
       productType: SL_1_RBT___
       parentIdentifier: EO:EUM:DAT:0581
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_SLSTR_L1RBT_BC004:
       productType: SL_1_RBT___
       parentIdentifier: EO:EUM:DAT:0615
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_SLSTR_L2WST:
       productType: SL_2_WST___
       parentIdentifier: EO:EUM:DAT:0412
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_SLSTR_L2WST_BC003:
       productType: SL_2_WST___
       parentIdentifier: EO:EUM:DAT:0582
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_SLSTR_L2AOD:
       productType: SL_2_AOD___
       parentIdentifier: EO:EUM:DAT:0416
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
     S3_SLSTR_L2FRP:
       productType: SL_2_FRP___
       parentIdentifier: EO:EUM:DAT:0417
+      metadata_mapping:
+        <<: *orbit_zone_tile
+        <<: *sentinel_params
+        fire:
+          - fire
+          - '$.properties.extraInformation.fireDetected'
     # METOP
     METOP_AMSU_L1:
       parentIdentifier: EO:EUM:DAT:METOP:AMSUL1
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_OSI_104:
       parentIdentifier: EO:EUM:DAT:METOP:OSI-104
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_OSI_150A:
       parentIdentifier: EO:EUM:DAT:METOP:OSI-150-A
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_OSI_150B:
       parentIdentifier: EO:EUM:DAT:METOP:OSI-150-B
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_ASCSZF1B:
       parentIdentifier: EO:EUM:DAT:METOP:ASCSZF1B
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_ASCSZR1B:
       parentIdentifier: EO:EUM:DAT:METOP:ASCSZR1B
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_ASCSZO1B:
       parentIdentifier: EO:EUM:DAT:METOP:ASCSZO1B
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_ASCSZFR02:
       parentIdentifier: EO:EUM:CM:METOP:ASCSZFR02
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_ASCSZOR02:
       parentIdentifier: EO:EUM:CM:METOP:ASCSZOR02
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_ASCSZRR02:
       parentIdentifier: EO:EUM:CM:METOP:ASCSZRR02
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_AVHRRL1:
       parentIdentifier: EO:EUM:DAT:METOP:AVHRRL1
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_SOMO12:
       parentIdentifier: EO:EUM:DAT:METOP:SOMO12
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_SOMO25:
       parentIdentifier: EO:EUM:DAT:METOP:SOMO25
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_AVHRRGACR02:
       parentIdentifier: EO:EUM:DAT:0558
     METOP_LSA_002:
@@ -7164,18 +7268,32 @@
       parentIdentifier: EO:EUM:DAT:METOP:GLB-SST-NC
     METOP_GOMEL1:
       parentIdentifier: EO:EUM:DAT:METOP:GOMEL1
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_GOMEL1R03:
       parentIdentifier: EO:EUM:DAT:0533
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_IASTHR011:
       parentIdentifier: EO:EUM:DAT:0576
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_IASSND02:
       parentIdentifier: EO:EUM:DAT:METOP:IASSND02
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_IASIL1C_ALL:
       parentIdentifier: EO:EUM:DAT:METOP:IASIL1C-ALL
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_MHSL1:
       parentIdentifier: EO:EUM:DAT:METOP:MHSL1
+      metadata_mapping:
+        <<: *orbit_zone_tile
     METOP_HIRSL1:
       parentIdentifier: EO:EUM:DAT:MULT:HIRSL1
+      metadata_mapping:
+        <<: *orbit_zone_tile
     GENERIC_PRODUCT_TYPE:
       productType: '{productType}'
       parentIdentifier: '{parentIdentifier}'
diff --git a/eodag/rest/core.py b/eodag/rest/core.py
index d4f22785..c509594c 100644
--- a/eodag/rest/core.py
+++ b/eodag/rest/core.py
@@ -33,6 +33,7 @@ from requests.models import Response as RequestsResponse
 import eodag
 from eodag import EOProduct
 from eodag.api.product.metadata_mapping import (
+    DEFAULT_METADATA_MAPPING,
     NOT_AVAILABLE,
     OFFLINE_STATUS,
     ONLINE_STATUS,
@@ -172,7 +173,6 @@ def search_stac_items(
         raise ValidationError(format_pydantic_error(e)) from e
 
     catalog_url = re.sub("/items.*", "", request.state.url)
-
     catalog = StacCatalog(
         url=(
             catalog_url
@@ -206,6 +206,16 @@ def search_stac_items(
             **catalog.search_args,
             **eodag_args.model_dump(exclude_none=True),
         }
+        # remove provider prefixes
+        stac_extensions = stac_config["extensions"]
+        keys_to_update = {}
+        for key in criteria:
+            if ":" in key and key.split(":")[0] not in stac_extensions:
+                new_key = key.split(":")[1]
+                keys_to_update[key] = new_key
+        for key, new_key in keys_to_update.items():
+            criteria[new_key] = criteria[key]
+            criteria.pop(key)
 
         search_results = eodag_api.search(count=True, **criteria)
         total = search_results.number_matched or 0
@@ -605,8 +615,18 @@ async def get_queryables(
         stac_queryables: Dict[str, StacQueryableProperty] = deepcopy(
             StacQueryables.default_properties
         )
+        # get stac default properties to set prefixes
+        stac_item_properties = list(stac_config["item"]["properties"].values())
+        stac_item_properties.extend(list(stac_queryables.keys()))
+        ignore = stac_config["metadata_ignore"]
+        stac_item_properties.extend(ignore)
+        default_mapping = DEFAULT_METADATA_MAPPING.keys()
         for param, queryable in python_queryables.items():
-            stac_param = EODAGSearch.to_stac(param)
+            if param in default_mapping and not any(
+                param in str(prop) for prop in stac_item_properties
+            ):
+                param = f"oseo:{param}"
+            stac_param = EODAGSearch.to_stac(param, stac_item_properties, provider)
             # only keep "datetime" queryable for dates
             if stac_param in stac_queryables or stac_param in (
                 "start_datetime",
diff --git a/eodag/rest/server.py b/eodag/rest/server.py
index a5085330..4bbc3143 100755
--- a/eodag/rest/server.py
+++ b/eodag/rest/server.py
@@ -36,6 +36,7 @@ from typing import (
 
 from fastapi import APIRouter as FastAPIRouter
 from fastapi import FastAPI, HTTPException, Request
+from fastapi.concurrency import run_in_threadpool
 from fastapi.middleware.cors import CORSMiddleware
 from fastapi.openapi.utils import get_openapi
 from fastapi.responses import ORJSONResponse
@@ -864,10 +865,12 @@ async def post_search(request: Request) -> ORJSONResponse:
 
     logger.debug("Body: %s", search_request.model_dump(exclude_none=True))
 
-    response = search_stac_items(
-        request=request,
-        search_request=search_request,
+    response = await run_in_threadpool(
+        search_stac_items,
+        request,
+        search_request,
     )
+
     return ORJSONResponse(content=response, media_type="application/json")
 
 
diff --git a/eodag/rest/types/eodag_search.py b/eodag/rest/types/eodag_search.py
index 38089cbf..3d546961 100644
--- a/eodag/rest/types/eodag_search.py
+++ b/eodag/rest/types/eodag_search.py
@@ -367,9 +367,21 @@ class EODAGSearch(BaseModel):
         return cls._to_eodag_map.get(value, value)
 
     @classmethod
-    def to_stac(cls, field_name: str) -> str:
+    def to_stac(
+        cls,
+        field_name: str,
+        stac_item_properties: List[str] = None,
+        provider: str = None,
+    ) -> str:
         """Get the alias of a field in a Pydantic model"""
         field = cls.model_fields.get(field_name)
         if field is not None and field.alias is not None:
             return field.alias
+        if (
+            provider
+            and ":" not in field_name
+            and stac_item_properties
+            and field_name not in stac_item_properties
+        ):
+            return f"{provider}:{field_name}"
         return field_name


Test patch:
diff --git a/tests/units/test_http_server.py b/tests/units/test_http_server.py
index 638a375a..a5fef56e 100644
--- a/tests/units/test_http_server.py
+++ b/tests/units/test_http_server.py
@@ -1017,6 +1017,41 @@ class RequestTestCase(unittest.TestCase):
             ],
         )
 
+    @mock.patch("eodag.rest.core.eodag_api.search", autospec=True)
+    def test_provider_prefix_post_search(self, mock_search):
+        """provider prefixes should be removed from query parameters"""
+        post_data = {
+            "collections": ["ERA5_SL"],
+            "provider": "cop_cds",
+            "query": {
+                "cop_cds:month": {"eq": "10"},
+                "cop_cds:year": {"eq": "2010"},
+                "cop_cds:day": {"eq": "10"},
+            },
+        }
+        mock_search.return_value = SearchResult.from_geojson(
+            {"features": [], "type": "FeatureCollection"}
+        )
+        self.app.request(
+            method="POST",
+            url="search",
+            json=post_data,
+            follow_redirects=True,
+            headers={"Content-Type": "application/json"},
+        )
+        expected_search_kwargs = dict(
+            productType="ERA5_SL",
+            page=1,
+            items_per_page=DEFAULT_ITEMS_PER_PAGE,
+            month="10",
+            year="2010",
+            day="10",
+            raise_errors=True,
+            count=True,
+            provider="cop_cds",
+        )
+        mock_search.assert_called_once_with(**expected_search_kwargs)
+
     def test_search_response_contains_pagination_info(self):
         """Responses to valid search requests must return a geojson with pagination info in properties"""
         response = self._request_valid(f"search?collections={self.tested_product_type}")
@@ -1730,11 +1765,14 @@ class RequestTestCase(unittest.TestCase):
         # queryables properties not shared by all constraints must be removed
         not_shared_properties = ["leadtime_hour", "type"]
         provider_queryables_from_constraints_file = [
-            properties
+            f"cop_cds:{properties}"
             for properties in provider_queryables_from_constraints_file
             if properties not in not_shared_properties
         ]
-        default_provider_stac_properties = ["api_product_type", "format"]
+        default_provider_stac_properties = [
+            "cop_cds:api_product_type",
+            "cop_cds:format",
+        ]
 
         res = self._request_valid(
             "collections/ERA5_SL/queryables?provider=cop_cds",