Repository: CS-SI/eodag
Pull request #578 (2022-12-13 04:13:37)

feat: added SARA as a provider and respective S3 product definitions.
### Your checklist for this pull request
Please review the [guidelines for contributing](../CONTRIBUTING.md) to this repository.

- [x] Make sure you are making a pull request against the **develop branch** (left side). Also you should start *your branch* off *our develop*.
- [x] Check the commit's or even all commits' message styles matches our requested structure.
    - As I've synced quite a few times without rebasing (whoops), it may be better to squash merge these changes.
- [x] Check your code additions will fail neither code linting checks nor unit test.
    - Currently passes all tests  the original passes except "tests/test_cli.py::TestEodagCli::test_eodag_cli_version", which may possibly just be on my end

### Description
Fixes/adds support for issues https://github.com/CS-SI/eodag/issues/575, https://github.com/CS-SI/eodag/issues/168 and https://github.com/CS-SI/eodag/issues/14. Adding  provider [SARA](https://copernicus.nci.org.au/sara.client/#/home) and SARA product types (eg S3 water products, SLSTR AOD & FRP, and synergy products).
The changes should only affect eodag/resources/providers.yml,  eodag/resources/product_types.yml, and update the test dictionaries with the newly added product types.

Also fixes  https://github.com/CS-SI/eodag/issues/577

catchSheep: > Hello @catchSheep , I wish you all the best for 2023! Sorry for the delay in reviewing this PR.
>
> Could you please rebase (or merge) it on up-to-date develop branch in order to include https://github.com/CS-SI/eodag/pull/580 that fixes the failing test in github actions ?
Thanks

No worries, happy new year to you too.

I had some issues merging the updates, so I re-wrote the history to the current CS-SI eodag develop branch, and git cherry-picked the relevant changes back in. It seems to be passing all relevant checks for python 3.9 & 3.10

Patch:
diff --git a/eodag/resources/product_types.yml b/eodag/resources/product_types.yml
index 72e1e472..01c2a313 100644
--- a/eodag/resources/product_types.yml
+++ b/eodag/resources/product_types.yml
@@ -782,13 +782,112 @@ S3_ERR:
   instrument: OLCI
   platform: SENTINEL3
   platformSerialIdentifier: S3A,S3B
-  processingLevel: L1,L2
-  keywords: OLCI,SENTINEL,SENTINEL3,S3,S3A,S3B,L1,L2,ERR
+  processingLevel: L1
+  keywords: OLCI,SENTINEL,SENTINEL3,S3,S3A,S3B,L1,ERR
   sensorType: OPTICAL
   license: proprietary
   title: SENTINEL3 ERR
   missionStartDate: "2016-02-16T00:00:00Z"
 
+S3_RAC:
+  abstract: |
+    Sentinel 3 OLCI products output during Radiometric Calibration mode
+  instrument: OLCI
+  platform: SENTINEL3
+  platformSerialIdentifier: S3A,S3B
+  processingLevel: L1
+  keywords: OLCI,SENTINEL,SENTINEL3,S3,S3A,S3B,L1,L2,RAC
+  sensorType: OPTICAL
+  license: proprietary
+  title: SENTINEL3 RAC
+  missionStartDate: "2016-02-16T00:00:00Z"
+
+  # S3 OLCI L2
+S3_OLCI_L2LRR:
+  abstract: |
+    The OLCI Level-2 Land Reduced Resolution (OL_2_LRR) products contain land and atmospheric geophysical products
+    at Reduced resolution with a spatial sampling of approximately 1.2 km. The products are assumed to be computed
+    in Near Real Time (NRT) (i.e. delivered to users less than 3 hours after acquisition), in Non-Time Critical
+    (NTC) (i.e. within 1 month after acquisition) or in re-processed NTC.
+    Details at https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-olci/product-types/level-2-land
+  instrument: OLCI
+  platform: SENTINEL3
+  platformSerialIdentifier: S3A,S3B
+  processingLevel: L2
+  keywords: OLCI,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,L2LRR,LRR
+  sensorType: OPTICAL
+  license: proprietary
+  title: SENTINEL3 OLCI Level-2 Land Reduced Resolution
+  missionStartDate: "2016-02-16T00:00:00Z"
+
+S3_OLCI_L2LFR:
+  abstract: |
+    The OLCI Level-2 Land Full Resolution (OL_2_LFR) products contain land and atmospheric geophysical products at Full
+    resolution with a spatial sampling of approximately 300 m. The products are assumed to be computed in Near Real
+    Time (NRT) (i.e. delivered to users less than 3 hours after acquisition), in Non-Time Critical (NTC) (i.e.
+    within 1 month after acquisition) or in re-processed NTC.
+    Details at https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-olci/product-types/level-2-land
+  instrument: OLCI
+  platform: SENTINEL3
+  platformSerialIdentifier: S3A,S3B
+  processingLevel: L2
+  keywords: OLCI,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,L2LFR,LFR
+  sensorType: OPTICAL
+  license: proprietary
+  title: SENTINEL3 OLCI Level-2 Land Full Resolution
+  missionStartDate: "2016-02-16T00:00:00Z"
+
+S3_OLCI_L2WRR:
+  abstract: |
+    The OLCI Level-2 Water Reduced Resolution (OL_2_WRR) products contain water and atmospheric geophysical products
+    at Reduced resolution with a spatial sampling of approximately 1.2 km. The products are assumed to be computed
+    in Near Real Time (NRT) (i.e. delivered to users less than 3 hours after acquisition), in Non-Time Critical
+    (NTC) (i.e. within 1 month after acquisition) or in re-processed NTC.
+    Details at https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-olci/product-types/level-2-water
+  instrument: OLCI
+  platform: SENTINEL3
+  platformSerialIdentifier: S3A,S3B
+  processingLevel: L2
+  keywords: OLCI,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,L2WRR,WRR
+  sensorType: OPTICAL
+  license: proprietary
+  title: SENTINEL3 OLCI Level-2 Water Reduced Resolution
+  missionStartDate: "2016-02-16T00:00:00Z"
+
+S3_OLCI_L2LFR:
+  abstract: |
+    The OLCI Level-2 Water Full Resolution (OL_2_WFR) products contain water and atmospheric geophysical products at Full
+    resolution with a spatial sampling of approximately 300 m. The products are assumed to be computed in Near Real
+    Time (NRT) (i.e. delivered to users less than 3 hours after acquisition), in Non-Time Critical (NTC) (i.e.
+    within 1 month after acquisition) or in re-processed NTC.
+    Details at https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-olci/product-types/level-2-water
+  instrument: OLCI
+  platform: SENTINEL3
+  platformSerialIdentifier: S3A,S3B
+  processingLevel: L2
+  keywords: OLCI,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,L2WFR,WFR
+  sensorType: OPTICAL
+  license: proprietary
+  title: SENTINEL3 OLCI Level-2 Water Full Resolution
+  missionStartDate: "2016-02-16T00:00:00Z"
+
+S3_OLCI_L2WFR:
+  abstract: |
+    The OLCI Level-2 Water Full Resolution (OL_2_WRR) products contain water and atmospheric geophysical products
+    at Full resolution with a spatial sampling of approximately 1.2 km. The products are assumed to be computed
+    in Near Real Time (NRT) (i.e. delivered to users less than 3 hours after acquisition), in Non-Time Critical
+    (NTC) (i.e. within 1 month after acquisition) or in re-processed NTC.
+    Details at https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-olci/product-types/level-2-water
+  instrument: OLCI
+  platform: SENTINEL3
+  platformSerialIdentifier: S3A,S3B
+  processingLevel: L2
+  keywords: OLCI,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,L2WRR,WRR
+  sensorType: OPTICAL
+  license: proprietary
+  title: SENTINEL3 OLCI Level-2 Water Full Resolution
+  missionStartDate: "2016-02-16T00:00:00Z"
+# S3 SLSTR
 S3_SLSTR_L1RBT:
   abstract: |
     SLSTR Level-1 observation mode products consisting of full resolution,
@@ -807,6 +906,70 @@ S3_SLSTR_L1RBT:
   title: SENTINEL3 SLSTR Level-1
   missionStartDate: "2016-02-16T00:00:00Z"
 
+S3_SLSTR_L2LST:
+  abstract: |
+    The SLSTR Level-2 LST product provides land surface parameters generated on the wide 1 km measurement grid.
+    It contains measurement file with Land Surface Temperature (LST) values with associated parameters (LST
+    parameters are computed and provided for each pixel (re-gridded or orphan) included in the 1 km measurement grid)
+  instrument: SLSTR
+  platform: SENTINEL3
+  platformSerialIdentifier: S3A,S3B
+  processingLevel: L2
+  keywords: SLSTR,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,L2LST,LST
+  sensorType: OPTICAL
+  license: proprietary
+  title: SENTINEL3 SLSTR Level-2 LST
+  missionStartDate: "2016-02-16T00:00:00Z"
+
+S3_SLSTR_L2WST:
+  abstract: |
+    The SLSTR Level-2 WST product provides land surface parameters generated on the wide 1 km measurement grid.
+    It contains measurement file with Water Surface Temperature (WST) values with associated parameters (WST
+    parameters are computed and provided for each pixel (re-gridded or orphan) included in the 1 km measurement grid)
+  instrument: SLSTR
+  platform: SENTINEL3
+  platformSerialIdentifier: S3A,S3B
+  processingLevel: L2
+  keywords: SLSTR,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,L2WST,WST
+  sensorType: OPTICAL
+  license: proprietary
+  title: SENTINEL3 SLSTR Level-2 WST
+  missionStartDate: "2016-02-16T00:00:00Z"
+
+S3_SLSTR_L2AOD:
+  abstract: |
+    The Copernicus NRT S3 AOD processor quantifies the abundance of aerosol particles and monitors their global
+    distribution and long-range transport, at the scale of 9.5 x 9.5 km2. All observations are made available in
+    less than three hours from the SLSTR observation sensing time. It is only applicable during daytime.
+    NOTE: The SLSTR L2 AOD product is generated by EUMETSAT in NRT only. An offline (NTC) AOD product is generated
+    from SYN data by ESA, exploiting the synergy between the SLSTR and OLCI instruments.
+  instrument: SLSTR
+  platform: SENTINEL3
+  platformSerialIdentifier: S3A,S3B
+  processingLevel: L2
+  keywords: SLSTR,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,L2AOD,AOD
+  sensorType: OPTICAL
+  license: proprietary
+  title: SENTINEL3 SLSTR Level-2 AOD
+  missionStartDate: "2016-02-16T00:00:00Z"
+
+S3_SLSTR_L2FRP:
+  abstract: |
+    The SLSTR Level-2 FRP product is providing one measurement data file, FRP_in.nc, with Fire Radiative Power (FRP)
+    values and associated parameters generated for each fire detected over land and projected on the SLSTR 1 km grid.
+    The fire detection is based on a mixed thermal band, combining S7 radiometric measurements and,
+    for pixels associated with a saturated value of S7 (i.e. above 311 K), F1 radiometric measurements.
+  instrument: SLSTR
+  platform: SENTINEL3
+  platformSerialIdentifier: S3A,S3B
+  processingLevel: L2
+  keywords: SLSTR,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,L2FRP,FRP
+  sensorType: OPTICAL
+  license: proprietary
+  title: SENTINEL3 SLSTR Level-2 FRP
+  missionStartDate: "2016-02-16T00:00:00Z"
+
+# S3 SRAL
 S3_SRA:
   abstract: ""
   instrument: SRAL
@@ -819,6 +982,38 @@ S3_SRA:
   title: SENTINEL3 SRAL Level-1
   missionStartDate: "2016-02-16T00:00:00Z"
 
+S3_SRA_A:
+  abstract: |
+    A Level 1A SRAL product contains one "measurement data file" containing the L1A measurements parameters:
+    ECHO_SAR_Ku: L1A Tracking measurements (sorted and calibrated) in SAR mode – Ku-band (80-Hz)
+    ECHO_PLRM: L1A Tracking measurements (sorted and calibrated) in pseudo-LRM mode – Ku and C bands (80-Hz)
+  instrument: SRAL
+  platform: SENTINEL3
+  platformSerialIdentifier: S3A,S3B
+  processingLevel: L1
+  keywords: SRA,SRAL,SENTINEL,SENTINEL3,S3,S3A,S3B,L1
+  sensorType: RADAR
+  license: proprietary
+  title: SENTINEL3 SRAL Level-1 SRA_A
+  missionStartDate: "2016-02-16T00:00:00Z"
+
+S3_SRA_BS:
+  abstract: |
+    A Level 1B-S SRAL product contains one "measurement data file" containing the L1b measurements parameters:
+    ECHO_SAR_Ku : L1b Tracking measurements in SAR mode - Ku band (20-Hz) as defined in the L1b MEAS product
+                  completed with SAR expert information
+    ECHO_PLRM : L1b Tracking measurements in pseudo-LRM mode – Ku and C bands (20-Hz) as defined in the L1b
+                MEAS product
+  instrument: SRAL
+  platform: SENTINEL3
+  platformSerialIdentifier: S3A,S3B
+  processingLevel: L1
+  keywords: SRA,SRAL,SENTINEL,SENTINEL3,S3,S3A,S3B,L1
+  sensorType: RADAR
+  license: proprietary
+  title: SENTINEL3 SRAL Level-1 SRA_BS
+  missionStartDate: "2016-02-16T00:00:00Z"
+
 S3_WAT:
   abstract: ""
   instrument: SRAL
@@ -843,55 +1038,91 @@ S3_LAN:
   title: SENTINEL3 SRAL Level-2 LAN
   missionStartDate: "2016-02-16T00:00:00Z"
 
-S3_SLSTR_L2LST:
+# S3 SYNERGY
+# Synergy data products are generally combinations of OLCI and SLSTR instruments
+S3_SY_SYN:
   abstract: |
-    The SLSTR Level-2 LST product provides land surface parameters generated on the wide 1 km measurement grid.
-    It contains measurement file with Land Surface Temperature (LST) values with associated parameters (LST
-    parameters are computed and provided for each pixel (re-gridded or orphan) included in the 1 km measurement grid)
-  instrument: SLSTR
+    The Level-2 SYN product (SY_2_SYN) is produced by the Synergy Level-1/2 SDR software and contains
+    surface reflectance and aerosol parameters over land. All measurement datasets are provided on the
+    OLCI image grid, similar to the one included in the OLCI L1b product.
+    Some sub-sampled annotations and atmospheric datasets are provided on the OLCI tie-points grid.
+    Several associated variables are also provided in annotation data files.
+  instrument: SYNERGY
   platform: SENTINEL3
   platformSerialIdentifier: S3A,S3B
   processingLevel: L2
-  keywords: SLSTR,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,L2LST,LST
-  sensorType: OPTICAL
+  keywords: SYNERGY,SY,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,SYN
+  sensorType: OPTICAL,RADAR
   license: proprietary
-  title: SENTINEL3 SLSTR Level-2 LST
+  title: SENTINEL3 SYNERGY Level-2 SYN
   missionStartDate: "2016-02-16T00:00:00Z"
 
-S3_OLCI_L2LRR:
+S3_SY_AOD:
   abstract: |
-    The OLCI Level-2 Land Reduced Resolution (OL_2_LRR) products contain land and atmospheric geophysical products
-    at Reduced resolution with a spatial sampling of approximately 1.2 km. The products are assumed to be computed
-    in Near Real Time (NRT) (i.e. delivered to users less than 3 hours after acquisition), in Non-Time Critical
-    (NTC) (i.e. within 1 month after acquisition) or in re-processed NTC.
-    Details at https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-olci/product-types/level-2-land
-  instrument: OLCI
+    The Level-2 SYN AOD product (SY_2_AOD) is produced by a dedicated processor including the whole
+    SYN L1 processing module and a global synergy level 2 processing module retrieving, over land and
+    sea, aerosol optical thickness. The resolution of this product is wider than classic S3 products,
+    as the dataset are provided on a 4.5 km² resolution
+  instrument: SYNERGY
   platform: SENTINEL3
   platformSerialIdentifier: S3A,S3B
   processingLevel: L2
-  keywords: OLCI,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,L2LRR,LRR
-  sensorType: OPTICAL
+  keywords: SYNERGY,SY,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,AOD
+  sensorType: OPTICAL,RADAR
   license: proprietary
-  title: SENTINEL3 OLCI Level-2 Land Reduced Resolution
+  title: SENTINEL3 SYNERGY Level-2 AOD
   missionStartDate: "2016-02-16T00:00:00Z"
 
-S3_OLCI_L2LFR:
+
+S3_SY_V10:
   abstract: |
-    The OLCI Level-2 Land Full Resolution (OL_2_LFR) products contain land and atmospheric geophysical products at Full
-    resolution with a spatial sampling of approximately 300 m. The products are assumed to be computed in Near Real
-    Time (NRT) (i.e. delivered to users less than 3 hours after acquisition), in Non-Time Critical (NTC) (i.e.
-    within 1 month after acquisition) or in re-processed NTC.
-    Details at https://sentinel.esa.int/web/sentinel/user-guides/sentinel-3-olci/product-types/level-2-land
-  instrument: OLCI
+    The Level-2 VG1 and V10 SYN products (SY_2_VG1 and SY_2_V10 respectively) are produced by the
+    SYNERGY Level-2 processor and contain 1 km VEGETATION-like product, 1 and 10 days synthesis surface
+    reflectances and NDVI. The product grid and the four spectral bands are similar to the SYN Level-2
+    VGP product.
+  instrument: SYNERGY
   platform: SENTINEL3
   platformSerialIdentifier: S3A,S3B
-  processingLevel: L2
-  keywords: OLCI,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,L2LFR,LFR
-  sensorType: OPTICAL
+  processingLevel: LEVEL-2W
+  keywords: SYNERGY,SY,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,V10
+  sensorType: OPTICAL,RADAR
   license: proprietary
-  title: SENTINEL3 OLCI Level-2 Land Full Resolution
+  title: SENTINEL3 SYNERGY Level-2 V10
   missionStartDate: "2016-02-16T00:00:00Z"
 
+S3_SY_VG1:
+  abstract: |
+    The Level-2 VG1 and V10 SYN products (SY_2_VG1 and SY_2_V10 respectively) are produced by the
+    SYNERGY Level-2 processor and contain 1 km VEGETATION-like product, 1 and 10 days synthesis surface
+    reflectances and NDVI. The product grid and the four spectral bands are similar to the SYN Level-2
+    VGP product.
+  instrument: SYNERGY
+  platform: SENTINEL3
+  platformSerialIdentifier: S3A,S3B
+  processingLevel: LEVEL-2
+  keywords: SYNERGY,SY,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,VG1
+  sensorType: OPTICAL,RADAR
+  license: proprietary
+  title: SENTINEL3 SYNERGY Level-2 VG1
+  missionStartDate: "2016-02-16T00:00:00Z"
+
+S3_SY_VGP:
+  abstract: |
+    The Level-2 VGP SYN product (SY_2_VGP) is produced by the Global Synergy Level-1/2 software and
+    contains 1 km VEGETATION-like product TOA reflectances. The "1 km VEGETATION-like product" label
+    means that measurements are provided on a regular latitude-longitude grid, with an equatorial
+    sampling distance of approximately 1 km. This product is restricted in longitude, including only filled ones.
+  instrument: SYNERGY
+  platform: SENTINEL3
+  platformSerialIdentifier: S3A,S3B
+  processingLevel: LEVEL-2
+  keywords: SYNERGY,SY,SENTINEL,SENTINEL3,S3,S3A,S3B,L2,VGP
+  sensorType: OPTICAL,RADAR
+  license: proprietary
+  title: SENTINEL3 SYNERGY Level-2 VGP
+  missionStartDate: "2016-02-16T00:00:00Z"
+
+
 # SPOT ------------------------------------------------------------------------
 SPOT_SWH:
   abstract: |
diff --git a/eodag/resources/providers.yml b/eodag/resources/providers.yml
index 269505ba..29a6889d 100644
--- a/eodag/resources/providers.yml
+++ b/eodag/resources/providers.yml
@@ -2683,3 +2683,267 @@
       dataset: '{productType}'
       time: '00:00'
       format: netcdf
+---
+!provider
+  name: sara
+  priority: 0
+  search: !plugin
+    type: QueryStringSearch
+    # The endpoint is based off of the collection. There is a generic endpoint,
+    # but can be very slow if not enough metdata is provided.
+    api_endpoint: 'https://copernicus.nci.org.au/sara.server/1.0/api/collections/{collection}/search.json'
+    need_auth: false
+    pagination:
+      next_page_url_tpl: '{url}?{search}&maxRecords={items_per_page}&page={page}'
+      total_items_nb_key_path: '$.properties.totalResults'
+      # 2021/03/19: 500 is the max, no error if greater
+      max_items_per_page: 500
+    discover_metadata:
+      auto_discovery: true
+      metadata_pattern: '^(?!collection)[a-zA-Z0-9_]+$'
+      search_param: '{metadata}={{{metadata}}}'
+      metadata_path: '$.properties.*'
+    metadata_mapping:
+      # Opensearch resource identifier within the search engine context (in our case
+      # within the context of the data provider)
+      uid: '$.id'
+      # OpenSearch Parameters for Collection Search (Table 3)
+      productType:
+        - productType
+        - '$.properties.productType'
+      platform: '$.properties.collection'
+      platformSerialIdentifier:
+        - platform
+        - '$.properties.platform'
+      instrument:
+        - instrument
+        - '$.properties.instrument'
+      processingLevel:
+        - processingLevel
+        - '$.properties.processingLevel'
+      # INSPIRE obligated OpenSearch Parameters for Collection Search (Table 4)
+      title: '$.properties.title'
+      topicCategory: '$.properties.topicCategory'
+      keyword: '$.properties.keywords'
+      abstract: '$.properties.description'
+      resolution:
+        - 'resolution'
+        - '$.properties.resolution'
+      organisationName:
+        - 'organisationName'
+        - '$.properties.organisationName'
+      publicationDate: '$.properties.published'
+      accessConstraint: '$.properties.license'
+      # OpenSearch Parameters for Product Search (Table 5)
+      parentIdentifier:
+        - 'parentIdentifier'
+        - '$.properties.parentIdentifier'
+      acquisitionType: '$.properties.acquisitionType'
+      orbitNumber:
+        - 'orbitNumber'
+        - '$.properties.orbitNumber'
+      orbitDirection:
+        - 'orbitDirection'
+        - '$.properties.orbitDirection'
+      swathIdentifier:
+        - 'swath'
+        - '$.properties.swath'
+      cloudCover:
+        - 'cloudCover=[0,{cloudCover}]'
+        - '$.properties.cloudCover'
+      snowCover:
+        - 'snowCover=[0,{snowCover}]'
+        - '$.properties.snowCover'
+      productVersion: '$.properties.version'
+      productQualityStatus: '$.properties.onlineQualityCheck'
+      processorName: '$.properties.processingName'
+      processingCenter: '$.properties.processingCenter'
+      creationDate: '$.properties.dhusIngestDate'
+      modificationDate: '$.properties.updated'
+      sensorMode:
+        - 'sensorMode'
+        - '$.properties.sensorMode'
+      # OpenSearch Parameters for Acquistion Parameters Search (Table 6)
+      startTimeFromAscendingNode:
+        - startDate
+        - '$.properties.startDate'
+      completionTimeFromAscendingNode:
+        - completionDate
+        - '$.properties.completionDate'
+      polarizationMode:
+        - 'polarisation'
+        - '$.properties.polarisation'
+      # Custom parameters (not defined in the base document referenced above)
+      id:
+        - 'productIdentifier={id#remove_extension}'
+        - '$.properties.productIdentifier'
+      # The geographic extent of the product
+      geometry:
+        - 'geometry={geometry#to_rounded_wkt}'
+        - '$.geometry'
+      # The url of the quicklook
+      quicklook: '$.properties.quicklook'
+      # The url to download the product "as is" (literal or as a template to be completed either after the search result
+      # is obtained from the provider or during the eodag download phase)
+      downloadLink: '$.properties.services.download.url'
+      # storageStatus set to ONLINE for consistency between providers
+      storageStatus: '{$.null#replace_str("Not Available","ONLINE")}'
+      # Additional metadata provided by the providers but that don't appear in the reference spec
+      thumbnail: '$.properties.thumbnail'
+  products:
+    # Sentinel 1
+    S1_SAR_OCN:
+      productType: OCN
+      collection: S1
+      instrument: C-SAR
+    S1_SAR_GRD:
+      productType: GRD
+      collection: S1
+      instrument: C-SAR
+    S1_SAR_SLC:
+      productType: SLC
+      collection: S1
+      instrument: C-SAR
+    # Sentinel 2
+    S2_MSI_L1C:
+      collection: S2
+      productType: S2MSIL1C
+      instrument: MSI
+      processingLevel: L1C
+    S2_MSI_L2A:
+      collection: S2
+      productType: S2MSIL2A
+      instrument: MSI
+      processingLevel: L2A
+    # OLCI products
+    # L1
+    S3_EFR:
+      productType: OL_1_EFR___
+      collection: S3
+      instrument: OLCI
+      processingLevel: LEVEL-1
+    S3_ERR:
+      productType: OL_1_ERR___
+      collection: S3
+      instrument: OLCI
+      processingLevel: LEVEL-1
+    # output during radiometric calibration mode
+    S3_RAC:
+      productType: OL_1_RAC___
+      collection: S3
+      instrument: OLCI
+      processingLevel: LEVEL-1
+    # L2
+    S3_OLCI_L2LRR:
+      productType: OL_2_LRR___
+      collection: S3
+      instrument: OLCI
+      processingLevel: LEVEL-2
+    S3_OLCI_L2LFR:
+      productType: OL_2_LFR___
+      collection: S3
+      instrument: OLCI
+      processingLevel: LEVEL-2
+    S3_OLCI_L2WRR:
+      productType: OL_2_WRR___
+      collection: S3
+      instrument: OLCI
+      processingLevel: LEVEL-2
+    S3_OLCI_L2WFR:
+      productType: OL_2_WFR___
+      collection: S3
+      instrument: OLCI
+      processingLevel: LEVEL-2
+    # SLSTR products
+    S3_SLSTR_L1RBT:
+      productType: SL_1_RBT___
+      collection: S3
+      instrument: SLSTR
+      processingLevel: LEVEL-1
+    S3_SLSTR_L2LST:
+      productType: SL_2_LST___
+      collection: S3
+      instrument: SLSTR
+      processingLevel: LEVEL-2
+    S3_SLSTR_L2WST:
+      productType: SL_2_WST___
+      collection: S3
+      instrument: SLSTR
+      processingLevel: LEVEL-2
+    S3_SLSTR_L2AOD:
+      productType: SL_2_AOD___
+      collection: S3
+      instrument: SLSTR
+      processingLevel: LEVEL-2
+    S3_SLSTR_L2FRP:
+      productType: SL_2_FRP___
+      collection: S3
+      instrument: SLSTR
+      processingLevel: LEVEL-2
+    # SRAL
+    # L1
+    S3_SRA:
+      productType: SR_1_SRA___
+      collection: S3
+      instrument: SRAL
+      processingLevel: LEVEL-1
+    S3_SRA_A:
+      productType: SR_1_SRA_A_
+      collection: S3
+      instrument: SRAL
+      processingLevel: LEVEL-1
+    S3_SRA_BS:
+      productType: SR_1_SRA_BS
+      collection: S3
+      instrument: SRAL
+      processingLevel: LEVEL-1
+    # L2
+    S3_LAN:
+      productType: SR_2_LAN___
+      collection: S3
+      instrument: SRAL
+      processingLevel: LEVEL-2
+    S3_WAT:
+      productType: SR_2_WAT___
+      collection: S3
+      instrument: SRAL
+      processingLevel: LEVEL-2
+    # Synergy products
+    S3_SY_AOD:
+      productType: SY_2_AOD___
+      collection: S3
+      instrument: SYNERGY
+      processingLevel: LEVEL-2
+    S3_SY_SYN:
+      productType: SY_2_SYN___
+      collection: S3
+      instrument: SYNERGY
+      processingLevel: LEVEL-2
+    S3_SY_V10:
+      productType: SY_2_V10___
+      collection: S3
+      instrument: SYNERGY
+      processingLevel: LEVEL-2W
+    S3_SY_VG1:
+      productType: SY_2_VG1___
+      collection: S3
+      instrument: SYNERGY
+      processingLevel: LEVEL-2
+    S3_SY_VGP:
+      productType: SY_2_VGP___
+      collection: S3
+      instrument: SYNERGY
+      processingLevel: LEVEL-2
+    GENERIC_PRODUCT_TYPE:
+      productType: '{productType}'
+      collection: '{collection}'
+  download: !plugin
+    type: HTTPDownload
+    base_uri: 'https://copernicus.nci.org.au/'
+    extract: true
+    archive_depth: 2
+    order_enabled: true
+    auth_error_code: 403
+  auth: !plugin
+    type: GenericAuth
+    method: basic


Test patch:
diff --git a/tests/units/test_core.py b/tests/units/test_core.py
index 775b3494..a16963ca 100644
--- a/tests/units/test_core.py
+++ b/tests/units/test_core.py
@@ -110,10 +110,11 @@ class TestCore(TestCoreBase):
             "creodias",
             "aws_eos",
             "astraea_eod",
+            "sara",
         ],
-        "S1_SAR_OCN": ["peps", "sobloo", "onda", "creodias"],
+        "S1_SAR_OCN": ["peps", "sobloo", "onda", "creodias", "sara"],
         "S1_SAR_RAW": ["sobloo", "onda", "creodias"],
-        "S1_SAR_SLC": ["peps", "sobloo", "onda", "mundi", "creodias"],
+        "S1_SAR_SLC": ["peps", "sobloo", "onda", "mundi", "creodias", "sara"],
         "S2_MSI_L2A": [
             "onda",
             "mundi",
@@ -123,6 +124,7 @@ class TestCore(TestCoreBase):
             "sobloo",
             "astraea_eod",
             "earth_search",
+            "sara",
         ],
         "S2_MSI_L2A_COG": ["earth_search_cog"],
         "S2_MSI_L2A_MAJA": ["theia"],
@@ -140,18 +142,31 @@ class TestCore(TestCoreBase):
             "earth_search",
             "earth_search_gcs",
             "usgs",
+            "sara",
         ],
-        "S3_ERR": ["onda", "creodias"],
-        "S3_EFR": ["onda", "creodias"],
-        "S3_LAN": ["onda", "creodias"],
-        "S3_SRA": ["onda", "creodias"],
-        "S3_SRA_BS": ["onda", "creodias"],
+        "S3_ERR": ["onda", "creodias", "sara"],
+        "S3_EFR": ["onda", "creodias", "sara"],
+        "S3_RAC": ["sara"],
+        "S3_OLCI_L2LFR": ["onda", "creodias", "mundi", "sara"],
+        "S3_OLCI_L2LRR": ["onda", "creodias", "sara"],
+        "S3_OLCI_L2WRR": ["sara"],
+        "S3_OLCI_L2WFR": ["sara"],
+        "S3_SLSTR_L1RBT": ["onda", "creodias", "sara"],
+        "S3_SLSTR_L2LST": ["onda", "creodias", "sara"],
+        "S3_SLSTR_L2WST": ["sara"],
+        "S3_SLSTR_L2AOD": ["sara"],
+        "S3_SLSTR_L2FRP": ["sara"],
+        "S3_SRA": ["onda", "creodias", "sara"],
+        "S3_SRA_A": ["sara"],
+        "S3_SRA_BS": ["onda", "creodias", "sara"],
         "S3_SRA_A_BS": ["onda", "creodias"],
-        "S3_WAT": ["onda", "creodias"],
-        "S3_OLCI_L2LFR": ["onda", "creodias", "mundi"],
-        "S3_OLCI_L2LRR": ["onda", "creodias"],
-        "S3_SLSTR_L1RBT": ["onda", "creodias"],
-        "S3_SLSTR_L2LST": ["onda", "creodias"],
+        "S3_LAN": ["onda", "creodias", "sara"],
+        "S3_WAT": ["onda", "creodias", "sara"],
+        "S3_SY_AOD": ["sara"],
+        "S3_SY_SYN": ["sara"],
+        "S3_SY_V10": ["sara"],
+        "S3_SY_VG1": ["sara"],
+        "S3_SY_VGP": ["sara"],
         "PLD_PAN": ["theia"],
         "PLD_XS": ["theia"],
         "PLD_BUNDLE": ["theia"],
@@ -214,6 +229,7 @@ class TestCore(TestCoreBase):
         "ecmwf",
         "cop_ads",
         "cop_cds",
+        "sara",
     ]
 
     def setUp(self):