Hint

You can run this notebook in a live session with Binder.

Queryables#

To know which query parameters can be used to filter the search result, the list_queryables() method from the gateway can be used. It has two optional arguments, provider and collection, additional keyword arguments to filter the queryable values can be added. The method returns a QueryablesDict which is a dictionary with an additional attribute additional_properties which indicates if additional properties (properties not in the queryables) can be added to the search.

If the function is called without any arguments, the basic queryables that are available for all providers and collections will be returned:

[1]:
# Switch to minimal mode for the exception handlers
%xmode Minimal

from eodag import EODataAccessGateway
dag = EODataAccessGateway()
dag.list_queryables()
Exception reporting mode: Minimal
[1]:
QueryablesDict (1) - additional_properties=True
'collection':  typing.Annotated[str,  FieldInfo( 'required': True, ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=True)
]
[2]:
queryables = dag.list_queryables()
queryables.additional_properties
[2]:
True

If the function is called for a specific collection, the queryables available for this collection, i.e., the basic queryables and collection specific queryables, are shown. Only parameters available for all providers offering the product are returned.

[3]:
queryables = dag.list_queryables(collection="GLOFAS_FORECAST")
queryables
[3]:
QueryablesDict (13) - additional_properties=True
'end':  typing.Annotated[str,  FieldInfo( 'alias': 'end_datetime',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias='end_datetime', alias_priority=2, title='Date and Time', description='The searchable date/time of the assets, in UTC (Formatted in RFC 3339) ', metadata=[_PydanticGeneralMetadata(pattern='(\\+00:00|Z)$')])
]
'start':  typing.Annotated[str,  FieldInfo( 'alias': 'AliasChoices(choices=[''start_datetime", "datetime''])',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias=AliasChoices(choices=['start_datetime', 'datetime']), alias_priority=2, description="Date/time as string in ISO 8601 format (e.g. '2024-06-10T12:00:00Z')")
]
'ecmwf_area':  typing.Annotated[str | list[float],  FieldInfo( 'alias': 'AliasChoices(choices=[''ecmwf:area", "area''])',  ... )] typing.Annotated[
str | list[float],
FieldInfo(annotation=NoneType, required=False, default=None, alias='ecmwf:area', alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:area', 'area']), title='Sub-region extraction', description='Please select the bounding box for the region of interest.
Please note that the resolution of versions 2.1 and 3.2 is 0.1 degrees and version 4.0 the resolution is 0.05.
Please ensure that the area selected encompasses at least 1 grid cell.', metadata=[{'extension': 'EcmwfExtension'}])
]
'ecmwf_data_format':  typing.Annotated[Literal['grib2', ...],  FieldInfo( 'alias': 'AliasChoices(choices=[''ecmwf:data_format", "data_format''])',  ... )] typing.Annotated[
typing.Literal['grib2', 'netcdf'],
FieldInfo(annotation=NoneType, required=False, default=None, alias='ecmwf:data_format', alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:data_format', 'data_format']), title='Data format', description='Select a format for the data files, the native format of MARS datasets is GRIB, and this format is recommended for any operational use, such as deriving downstream products.\nPlease note that to ensure that data is accurate and sufficient metadata is included in the output, your request may be split into multiple files when converted to netCDF.', metadata=[{'extension': 'EcmwfExtension'}])
]
'ecmwf_day':  typing.Annotated[list[Literal['01', ...]],  FieldInfo( 'alias': 'AliasChoices(choices=[''ecmwf:day", "day''])',  ... )] typing.Annotated[
list[typing.Literal['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '30', '31']],
FieldInfo(annotation=NoneType, required=False, default=None, alias='ecmwf:day', alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:day', 'day']), title='Day', metadata=[{'extension': 'EcmwfExtension'}])
]
'ecmwf_download_format':  typing.Annotated[Literal['unarchived', ...],  FieldInfo( 'alias': 'AliasChoices(choices=[''ecmwf:download_format", "download_format''])',  ... )] typing.Annotated[
typing.Literal['unarchived', 'zip'],
FieldInfo(annotation=NoneType, required=False, default=None, alias='ecmwf:download_format', alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:download_format', 'download_format']), title='Download format', description="Please note that in some circumstance the conversion from GRIB to NetCDF can result in multiple files.

If you select 'Zip' the files will always be zipped into a single file.

If you select 'Unarchived' then the files will be returned unarchived if there is only one file, and zipped if there are multiple files.", metadata=[{'extension': 'EcmwfExtension'}])
]
'ecmwf_hydrological_model':  typing.Annotated[list[Literal['htessel_lisflood', ...]],  FieldInfo( 'alias': 'AliasChoices(choices=[''ecmwf:hydrological_model", "hydrological_model''])',  ... )] typing.Annotated[
list[typing.Literal['htessel_lisflood', 'lisflood']],
FieldInfo(annotation=NoneType, required=False, default=None, alias='ecmwf:hydrological_model', alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:hydrological_model', 'hydrological_model']), title='Hydrological model', description="Hydrological model chain used to generate the hydrological simulations. Details can be found in the documentation under 'GloFAS hydrological models'.", metadata=[{'extension': 'EcmwfExtension'}])
]
'ecmwf_leadtime_hour':  typing.Annotated[list[Literal['120', ...]],  FieldInfo( 'alias': 'AliasChoices(choices=[''ecmwf:leadtime_hour", "leadtime_hour''])',  ... )] typing.Annotated[
list[typing.Literal['120', '144', '168', '192', '216', '24', '240', '264', '288', '312', '336', '360', '384', '408', '432', '456', '48', '480', '504', '528', '552', '576', '600', '624', '648', '672', '696', '72', '720', '96']],
FieldInfo(annotation=NoneType, required=False, default=None, alias='ecmwf:leadtime_hour', alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:leadtime_hour', 'leadtime_hour']), title='Leadtime hour', description='Time step of the forecast in hours.', metadata=[{'extension': 'EcmwfExtension'}])
]
'ecmwf_month':  typing.Annotated[list[Literal['01', ...]],  FieldInfo( 'alias': 'AliasChoices(choices=[''ecmwf:month", "month''])',  ... )] typing.Annotated[
list[typing.Literal['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']],
FieldInfo(annotation=NoneType, required=False, default=None, alias='ecmwf:month', alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:month', 'month']), title='Month', metadata=[{'extension': 'EcmwfExtension'}])
]
'ecmwf_product_type':  typing.Annotated[list[Literal['control_forecast', ...]],  FieldInfo( 'alias': 'AliasChoices(choices=[''ecmwf:product_type", "product_type''])',  ... )] typing.Annotated[
list[typing.Literal['control_forecast', 'ensemble_perturbed_forecasts']],
FieldInfo(annotation=NoneType, required=False, default=None, alias='ecmwf:product_type', alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:product_type', 'product_type']), title='Product type', description="Ensemble forecasts consisting of a single, unperturbed member ('control forecast') and perturbed ensemble members.", metadata=[{'extension': 'EcmwfExtension'}])
]
'ecmwf_system_version':  typing.Annotated[list[Literal['operational', ...]],  FieldInfo( 'alias': 'AliasChoices(choices=[''ecmwf:system_version", "system_version''])',  ... )] typing.Annotated[
list[typing.Literal['operational', 'version_2_1', 'version_3_1']],
FieldInfo(annotation=NoneType, required=False, default=None, alias='ecmwf:system_version', alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:system_version', 'system_version']), title='System version', description="System version is the version number of the GloFAS system. Choose 'Operational' for accessing datasets from the official system maintained 24/7 into operations. Following an update, we may provide access to the old GloFAS system for a few months after the official release, these can be found in the Legacy section. Details on system version can be found in the documentation under 'GloFAS versioning system'.

The GloFAS version that was in operations for forecasts between

2019/11/05 - 2021/05/25 GloFAS v2.1

2021/05/26 - 2023/07/25 GloFAS v3.1

2023/07/26 - present GloFAS v4.0", metadata=[{'extension': 'EcmwfExtension'}])
]
'ecmwf_variable':  typing.Annotated[Literal['river_discharge_in_the_last_24_hours', ...],  FieldInfo( 'alias': 'AliasChoices(choices=[''ecmwf:variable", "variable''])',  ... )] typing.Annotated[
typing.Literal['river_discharge_in_the_last_24_hours', 'runoff_water_equivalent', 'snow_depth_water_equivalent', 'soil_wetness_index'],
FieldInfo(annotation=NoneType, required=False, default=None, alias='ecmwf:variable', alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:variable', 'variable']), title='Variable', description="Note that the term 'last hours' in the discharge time step refers to the hours preceeding the end of each time step. For more information about the variables we refer to the Documentation.", metadata=[{'extension': 'EcmwfExtension'}])
]
'ecmwf_year':  typing.Annotated[list[Literal['2019', ...]],  FieldInfo( 'alias': 'AliasChoices(choices=[''ecmwf:year", "year''])',  ... )] typing.Annotated[
list[typing.Literal['2019', '2020', '2021', '2022', '2023', '2024', '2025', '2026']],
FieldInfo(annotation=NoneType, required=False, default=None, alias='ecmwf:year', alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:year', 'year']), title='Year', metadata=[{'extension': 'EcmwfExtension'}])
]

Queryables values: typing.Annotated#

Queryables values are returned using typing.Annotated format. It contains parameter expected type, allowed alias for query, constraints and other metadata:

[4]:
queryables["ecmwf_data_format"]
[4]:
typing.Annotated[typing.Literal['grib2', 'netcdf'], FieldInfo(annotation=NoneType, required=False, default=None, alias='ecmwf:data_format', alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:data_format', 'data_format']), title='Data format', description='Select a format for the data files, the native format of MARS datasets is GRIB, and this format is recommended for any operational use, such as deriving downstream products.\nPlease note that to ensure that data is accurate and sufficient metadata is included in the output, your request may be split into multiple files when converted to netCDF.', metadata=[{'extension': 'EcmwfExtension'}])]
[5]:
from typing import get_args

queryable_type, *queryable_metadata= get_args(queryables["ecmwf_data_format"])
queryable_type
[5]:
typing.Literal['grib2', 'netcdf']
[6]:
queryable_metadata[0].validation_alias
[6]:
AliasChoices(choices=['ecmwf:data_format', 'data_format'])
[7]:
queryable_metadata[0].is_required()
[7]:
False

We can see that ecmwf_data_format is required, it accepts values grib or netcdf, and can also be queried using ecmwf:data_format or data_format keys.

Queryables filtering#

The queryables can also be retrieved for a specific provider. These queryables are either taken from the queryables endpoint of the provider (if available), the constraints for the query parameter values defined by the provider (if available) or the provider configuration in EODAG. In the example below we use a provider offering a queryables endpoint.

[8]:
dag.list_queryables(collection="S1_SAR_GRD", provider="planetary_computer")
[8]:
QueryablesDict (32) - additional_properties=True
'constellation':  typing.Annotated[str,  FieldInfo( ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None)
]
'end':  typing.Annotated[str,  FieldInfo( 'alias': 'end_datetime',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias='end_datetime', alias_priority=2, title='End datetime', description='End datetime', metadata=[_PydanticGeneralMetadata(pattern='(\\+00:00|Z)$')])
]
'geom':  typing.Annotated[str | dict[str, ...] | BaseGeometry,  FieldInfo( 'alias': 'AliasChoices(choices=[''geometry", "intersects''])',  ... )] typing.Annotated[
str | dict[str, float] | shapely.geometry.base.BaseGeometry,
FieldInfo(annotation=NoneType, required=False, default=None, alias=AliasChoices(choices=['geometry', 'intersects']), alias_priority=2, title='Item Geometry', description='Item Geometry', json_schema_extra={'$ref': 'https://geojson.org/schema/Feature.json'})
]
'id':  typing.Annotated[str,  FieldInfo( ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, title='Item ID', description='Item identifier', json_schema_extra={'$ref': 'https://schemas.stacspec.org/v1.0.0/item-spec/json-schema/item.json#/definitions/core/allOf/2/properties/id'})
]
'platform':  typing.Annotated[Literal['SENTINEL-1A', ...],  FieldInfo( ... )] typing.Annotated[
typing.Literal['SENTINEL-1A', 'SENTINEL-1B', 'SENTINEL-1C'],
FieldInfo(annotation=NoneType, required=False, default=None, title='Platform')
]
'start':  typing.Annotated[str,  FieldInfo( 'alias': 'AliasChoices(choices=[''start_datetime", "datetime''])',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias=AliasChoices(choices=['start_datetime', 'datetime']), alias_priority=2, title='Start datetime', description='Start datetime', metadata=[_PydanticGeneralMetadata(pattern='(\\+00:00|Z)$')])
]
'processing_level':  typing.Annotated[str,  FieldInfo( 'alias': 'processing:level',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias='processing:level', alias_priority=2, metadata=[{'extension': 'ProcessingExtension'}])
]
's1:datatake_id':  typing.Annotated[str,  FieldInfo( ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, title='Datatake ID')
]
's1:instrument_configuration_ID':  typing.Annotated[str,  FieldInfo( ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None)
]
's1:orbit_source':  typing.Annotated[Literal['DOWNLINK', ...],  FieldInfo( ... )] typing.Annotated[
typing.Literal['DOWNLINK', 'POEORB', 'PREORB', 'RESORB'],
FieldInfo(annotation=NoneType, required=False, default=None, title='Orbit Source')
]
's1:product_timeliness':  typing.Annotated[Literal['Fast-24h', ...],  FieldInfo( ... )] typing.Annotated[
typing.Literal['Fast-24h', 'NRT-10m', 'NRT-1h', 'NRT-3h', 'Off-line', 'Reprocessing'],
FieldInfo(annotation=NoneType, required=False, default=None, title='Product Timeliness')
]
's1:resolution':  typing.Annotated[Literal['full', ...],  FieldInfo( ... )] typing.Annotated[
typing.Literal['full', 'high', 'medium'],
FieldInfo(annotation=NoneType, required=False, default=None, title='Resolution')
]
's1:shape':  typing.Annotated[list,  FieldInfo( ... )] typing.Annotated[
list,
FieldInfo(annotation=NoneType, required=False, default=None)
]
's1:slice_number':  typing.Annotated[str,  FieldInfo( ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, title='Slice Number')
]
's1:total_slices':  typing.Annotated[str,  FieldInfo( ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, title='Total Slices')
]
'sar:product_type':  typing.Annotated[str,  FieldInfo( ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, title='Product type')
]
'sar_center_frequency':  typing.Annotated[float,  FieldInfo( 'alias': 'sar:center_frequency',  ... )] typing.Annotated[
float,
FieldInfo(annotation=NoneType, required=False, default=None, alias='sar:center_frequency', alias_priority=2, title='Center Frequency (GHz)', metadata=[{'extension': 'SarExtension'}])
]
'sar_frequency_band':  typing.Annotated[Literal['C', ...],  FieldInfo( 'alias': 'sar:frequency_band',  ... )] typing.Annotated[
typing.Literal['C', 'K', 'Ka', 'Ku', 'L', 'P', 'S', 'X'],
FieldInfo(annotation=NoneType, required=False, default=None, alias='sar:frequency_band', alias_priority=2, title='Frequency Band', metadata=[{'extension': 'SarExtension'}])
]
'sar_instrument_mode':  typing.Annotated[str,  FieldInfo( 'alias': 'sar:instrument_mode',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias='sar:instrument_mode', alias_priority=2, title='Instrument Mode', metadata=[{'extension': 'SarExtension'}])
]
'sar_looks_azimuth':  typing.Annotated[int,  FieldInfo( 'alias': 'sar:looks_azimuth',  ... )] typing.Annotated[
int,
FieldInfo(annotation=NoneType, required=False, default=None, alias='sar:looks_azimuth', alias_priority=2, title='Looks azimuth', metadata=[Ge(ge=0), {'extension': 'SarExtension'}])
]
'sar_looks_equivalent_number':  typing.Annotated[float,  FieldInfo( 'alias': 'sar:looks_equivalent_number',  ... )] typing.Annotated[
float,
FieldInfo(annotation=NoneType, required=False, default=None, alias='sar:looks_equivalent_number', alias_priority=2, title='Equivalent number of looks (ENL)', metadata=[Ge(ge=0), {'extension': 'SarExtension'}])
]
'sar_looks_range':  typing.Annotated[int,  FieldInfo( 'alias': 'sar:looks_range',  ... )] typing.Annotated[
int,
FieldInfo(annotation=NoneType, required=False, default=None, alias='sar:looks_range', alias_priority=2, title='Looks range', metadata=[Ge(ge=0), {'extension': 'SarExtension'}])
]
'sar_observation_direction':  typing.Annotated[Literal['left', ...],  FieldInfo( 'alias': 'sar:observation_direction',  ... )] typing.Annotated[
typing.Literal['left', 'right'],
FieldInfo(annotation=NoneType, required=False, default=None, alias='sar:observation_direction', alias_priority=2, title='Antenna pointing direction', metadata=[{'extension': 'SarExtension'}])
]
'sar_pixel_spacing_azimuth':  typing.Annotated[float,  FieldInfo( 'alias': 'sar:pixel_spacing_azimuth',  ... )] typing.Annotated[
float,
FieldInfo(annotation=NoneType, required=False, default=None, alias='sar:pixel_spacing_azimuth', alias_priority=2, title='Pixel spacing azimuth (m)', metadata=[Ge(ge=0), {'extension': 'SarExtension'}])
]
'sar_pixel_spacing_range':  typing.Annotated[float,  FieldInfo( 'alias': 'sar:pixel_spacing_range',  ... )] typing.Annotated[
float,
FieldInfo(annotation=NoneType, required=False, default=None, alias='sar:pixel_spacing_range', alias_priority=2, title='Pixel spacing range (m)', metadata=[Ge(ge=0), {'extension': 'SarExtension'}])
]
'sar_polarizations':  typing.Annotated[list[Literal['HH', ...]],  FieldInfo( 'alias': 'sar:polarizations',  ... )] typing.Annotated[
list[typing.Literal['HH', 'HV', 'VH', 'VV']],
FieldInfo(annotation=NoneType, required=False, default=None, alias='sar:polarizations', alias_priority=2, title='Polarizations', metadata=[{'extension': 'SarExtension'}])
]
'sar_resolution_azimuth':  typing.Annotated[float,  FieldInfo( 'alias': 'sar:resolution_azimuth',  ... )] typing.Annotated[
float,
FieldInfo(annotation=NoneType, required=False, default=None, alias='sar:resolution_azimuth', alias_priority=2, title='Resolution azimuth (m)', metadata=[Ge(ge=0), {'extension': 'SarExtension'}])
]
'sar_resolution_range':  typing.Annotated[float,  FieldInfo( 'alias': 'sar:resolution_range',  ... )] typing.Annotated[
float,
FieldInfo(annotation=NoneType, required=False, default=None, alias='sar:resolution_range', alias_priority=2, title='Resolution range (m)', metadata=[Ge(ge=0), {'extension': 'SarExtension'}])
]
'sat_absolute_orbit':  typing.Annotated[int,  FieldInfo( 'alias': 'sat:absolute_orbit',  ... )] typing.Annotated[
int,
FieldInfo(annotation=NoneType, required=False, default=None, alias='sat:absolute_orbit', alias_priority=2, title='Absolute Orbit', json_schema_extra={'$ref': 'https://stac-extensions.github.io/sat/v1.0.0/schema.json#/definitions/fields/properties/sat:absolute_orbit'}, metadata=[{'extension': 'SatelliteExtension'}])
]
'sat_orbit_state':  typing.Annotated[Literal['ascending', ...],  FieldInfo( 'alias': 'sat:orbit_state',  ... )] typing.Annotated[
typing.Literal['ascending', 'descending', 'geostationary'],
FieldInfo(annotation=NoneType, required=False, default=None, alias='sat:orbit_state', alias_priority=2, title='Orbit State', metadata=[{'extension': 'SatelliteExtension'}])
]
'sat_platform_international_designator':  typing.Annotated[Literal['0000-000A', ...],  FieldInfo( 'alias': 'sat:platform_international_designator',  ... )] typing.Annotated[
typing.Literal['0000-000A', '2014-016A', '2016-025A'],
FieldInfo(annotation=NoneType, required=False, default=None, alias='sat:platform_international_designator', alias_priority=2, title='Platform Designation', metadata=[{'extension': 'SatelliteExtension'}])
]
'sat_relative_orbit':  typing.Annotated[int,  FieldInfo( 'alias': 'sat:relative_orbit',  ... )] typing.Annotated[
int,
FieldInfo(annotation=NoneType, required=False, default=None, alias='sat:relative_orbit', alias_priority=2, title='Relative Orbit', json_schema_extra={'$ref': 'https://stac-extensions.github.io/sat/v1.0.0/schema.json#/definitions/fields/properties/sat:relative_orbit'}, metadata=[{'extension': 'SatelliteExtension'}])
]

For each queryable the possible values will be included in the result if they are available from either the provider queryables or the constraints. If constraints are available for a provider, the queryables can be filtered by the value of a specific parameter. E.g. if the queryables month and day are available, we can set the month to a specific value to get only the days available for that month.

[9]:
dag.list_queryables(
    collection="ERA5_SL",
    provider="cop_cds",
    ecmwf_month=["02"]
)
[9]:
QueryablesDict (11) - additional_properties=False
'ecmwf_area':  typing.Annotated[tuple[Annotated[float, FieldInfo(annotation=NoneType, required=True, description='North border of the bounding box', metadata=[Ge(ge=-90), ...])], Annotated[float, FieldInfo(annotation=NoneType, required=True, description='West border of the bounding box', metadata=[Ge(ge=-180), ...])], Annotated[float, FieldInfo(annotation=NoneType, required=True, description='South border of the bounding box', metadata=[Ge(ge=-90), ...])], Annotated[float, FieldInfo(annotation=NoneType, required=True, description='East border of the bounding box', metadata=[Ge(ge=-180), ...])]],  FieldInfo( 'alias': 'AliasChoices(choices=[''ecmwf:area", "area''])',  ... )] typing.Annotated[
tuple[typing.Annotated[float, FieldInfo(annotation=NoneType, required=True, description='North border of the bounding box', metadata=[Ge(ge=-90), Le(le=90)])], typing.Annotated[float, FieldInfo(annotation=NoneType, required=True, description='West border of the bounding box', metadata=[Ge(ge=-180), Le(le=180)])], typing.Annotated[float, FieldInfo(annotation=NoneType, required=True, description='South border of the bounding box', metadata=[Ge(ge=-90), Le(le=90)])], typing.Annotated[float, FieldInfo(annotation=NoneType, required=True, description='East border of the bounding box', metadata=[Ge(ge=-180), Le(le=180)])]],
FieldInfo(annotation=NoneType, required=False, default=None, alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:area', 'area']), serialization_alias='ecmwf:area', title='Sub-region extraction', description='Select a sub-region of the available area by providing its limits on latitude and longitude. For areas smaller than the grid cell or point locations, please use the relevant post-processed ERA5 timeseries datasets.')
]
'ecmwf_data_format':  typing.Annotated[Literal['grib', ...],  FieldInfo( 'required': True, 'alias': 'AliasChoices(choices=[''ecmwf:data_format", "data_format''])',  ... )] typing.Annotated[
typing.Literal['grib', 'netcdf'],
FieldInfo(annotation=NoneType, required=True, alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:data_format', 'data_format']), serialization_alias='ecmwf:data_format', title='Data format', description='Select a format for the data files, the native format of MARS datasets is GRIB, and this format is recommended for any operational use, such as deriving downstream products.

Please note that to ensure accuracy and sufficient metadata is included in the output, your request may be split into multiple files when converted to netCDF.')
]
'ecmwf_day':  typing.Annotated[list[Literal['01', ...]],  FieldInfo( 'required': True, 'alias': 'AliasChoices(choices=[''ecmwf:day", "day''])',  ... )] typing.Annotated[
list[typing.Literal['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29']],
FieldInfo(annotation=NoneType, required=True, alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:day', 'day']), serialization_alias='ecmwf:day', title='Day')
]
'ecmwf_download_format':  typing.Annotated[Literal['unarchived', ...],  FieldInfo( 'required': True, 'alias': 'AliasChoices(choices=[''ecmwf:download_format", "download_format''])',  ... )] typing.Annotated[
typing.Literal['unarchived', 'zip'],
FieldInfo(annotation=NoneType, required=True, alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:download_format', 'download_format']), serialization_alias='ecmwf:download_format', title='Download format', description="If you select 'Zip' the files will always be zipped into a single file.

If you select 'Unarchived' then the files will be returned unzipped if there is only one file, and zipped if there are multiple files.

Please note that in some circumstances the conversion from GRIB to NetCDF can result in multiple files.")
]
'ecmwf_month':  typing.Annotated[list[Literal['02']],  FieldInfo('default': '['02']',  'alias': 'AliasChoices(choices=[''ecmwf:month", "month''])',  ... )] typing.Annotated[
list[typing.Literal['02']],
FieldInfo(annotation=NoneType, required=False, default=['02'], alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:month', 'month']), serialization_alias='ecmwf:month', title='Month')
]
'ecmwf_product_type':  typing.Annotated[list[Literal['ensemble_mean', ...]],  FieldInfo( 'required': True, 'alias': 'AliasChoices(choices=[''ecmwf:product_type", "product_type''])',  ... )] typing.Annotated[
list[typing.Literal['ensemble_mean', 'ensemble_members', 'ensemble_spread', 'reanalysis']],
FieldInfo(annotation=NoneType, required=True, alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:product_type', 'product_type']), serialization_alias='ecmwf:product_type', title='Product type')
]
'ecmwf_time':  typing.Annotated[list[Literal['00:00', ...]],  FieldInfo( 'required': True, 'alias': 'AliasChoices(choices=[''ecmwf:time", "time''])',  ... )] typing.Annotated[
list[typing.Literal['00:00', '01:00', '02:00', '03:00', '04:00', '05:00', '06:00', '07:00', '08:00', '09:00', '10:00', '11:00', '12:00', '13:00', '14:00', '15:00', '16:00', '17:00', '18:00', '19:00', '20:00', '21:00', '22:00', '23:00']],
FieldInfo(annotation=NoneType, required=True, alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:time', 'time']), serialization_alias='ecmwf:time', title='Time', description='UTC time standard. UTC stands for Universal Time Coordinated as well as for Coordinated Universal Time.')
]
'ecmwf_variable':  typing.Annotated[list[Literal['100m_u_component_of_wind', ...]],  FieldInfo( 'required': True, 'alias': 'AliasChoices(choices=[''ecmwf:variable", "variable''])',  ... )] typing.Annotated[
list[typing.Literal['100m_u_component_of_wind', '100m_v_component_of_wind', '10m_u_component_of_neutral_wind', '10m_u_component_of_wind', '10m_v_component_of_neutral_wind', '10m_v_component_of_wind', '10m_wind_gust_since_previous_post_processing', '2m_dewpoint_temperature', '2m_temperature', 'air_density_over_the_oceans', 'angle_of_sub_gridscale_orography', 'anisotropy_of_sub_gridscale_orography', 'benjamin_feir_index', 'boundary_layer_dissipation', 'boundary_layer_height', 'charnock', 'clear_sky_direct_solar_radiation_at_surface', 'cloud_base_height', 'coefficient_of_drag_with_waves', 'convective_available_potential_energy', 'convective_inhibition', 'convective_precipitation', 'convective_rain_rate', 'convective_snowfall', 'convective_snowfall_rate_water_equivalent', 'downward_uv_radiation_at_the_surface', 'duct_base_height', 'eastward_gravity_wave_surface_stress', 'eastward_turbulent_surface_stress', 'evaporation', 'forecast_albedo', 'forecast_logarithm_of_surface_roughness_for_heat', 'forecast_surface_roughness', 'free_convective_velocity_over_the_oceans', 'friction_velocity', 'geopotential', 'gravity_wave_dissipation', 'high_cloud_cover', 'high_vegetation_cover', 'ice_temperature_layer_1', 'ice_temperature_layer_2', 'ice_temperature_layer_3', 'ice_temperature_layer_4', 'instantaneous_10m_wind_gust', 'instantaneous_eastward_turbulent_surface_stress', 'instantaneous_large_scale_surface_precipitation_fraction', 'instantaneous_moisture_flux', 'instantaneous_northward_turbulent_surface_stress', 'instantaneous_surface_sensible_heat_flux', 'k_index', 'lake_bottom_temperature', 'lake_cover', 'lake_depth', 'lake_ice_depth', 'lake_ice_temperature', 'lake_mix_layer_depth', 'lake_mix_layer_temperature', 'lake_shape_factor', 'lake_total_layer_temperature', 'land_sea_mask', 'large_scale_precipitation', 'large_scale_precipitation_fraction', 'large_scale_rain_rate', 'large_scale_snowfall', 'large_scale_snowfall_rate_water_equivalent', 'leaf_area_index_high_vegetation', 'leaf_area_index_low_vegetation', 'low_cloud_cover', 'low_vegetation_cover', 'maximum_2m_temperature_since_previous_post_processing', 'maximum_individual_wave_height', 'maximum_total_precipitation_rate_since_previous_post_processing', 'mean_boundary_layer_dissipation', 'mean_convective_precipitation_rate', 'mean_convective_snowfall_rate', 'mean_direction_of_total_swell', 'mean_direction_of_wind_waves', 'mean_eastward_gravity_wave_surface_stress', 'mean_eastward_turbulent_surface_stress', 'mean_evaporation_rate', 'mean_gravity_wave_dissipation', 'mean_large_scale_precipitation_fraction', 'mean_large_scale_precipitation_rate', 'mean_large_scale_snowfall_rate', 'mean_northward_gravity_wave_surface_stress', 'mean_northward_turbulent_surface_stress', 'mean_period_of_total_swell', 'mean_period_of_wind_waves', 'mean_potential_evaporation_rate', 'mean_runoff_rate', 'mean_sea_level_pressure', 'mean_snow_evaporation_rate', 'mean_snowfall_rate', 'mean_snowmelt_rate', 'mean_square_slope_of_waves', 'mean_sub_surface_runoff_rate', 'mean_surface_direct_short_wave_radiation_flux', 'mean_surface_direct_short_wave_radiation_flux_clear_sky', 'mean_surface_downward_long_wave_radiation_flux', 'mean_surface_downward_long_wave_radiation_flux_clear_sky', 'mean_surface_downward_short_wave_radiation_flux', 'mean_surface_downward_short_wave_radiation_flux_clear_sky', 'mean_surface_downward_uv_radiation_flux', 'mean_surface_latent_heat_flux', 'mean_surface_net_long_wave_radiation_flux', 'mean_surface_net_long_wave_radiation_flux_clear_sky', 'mean_surface_net_short_wave_radiation_flux', 'mean_surface_net_short_wave_radiation_flux_clear_sky', 'mean_surface_runoff_rate', 'mean_surface_sensible_heat_flux', 'mean_top_downward_short_wave_radiation_flux', 'mean_top_net_long_wave_radiation_flux', 'mean_top_net_long_wave_radiation_flux_clear_sky', 'mean_top_net_short_wave_radiation_flux', 'mean_top_net_short_wave_radiation_flux_clear_sky', 'mean_total_precipitation_rate', 'mean_vertical_gradient_of_refractivity_inside_trapping_layer', 'mean_vertically_integrated_moisture_divergence', 'mean_wave_direction', 'mean_wave_direction_of_first_swell_partition', 'mean_wave_direction_of_second_swell_partition', 'mean_wave_direction_of_third_swell_partition', 'mean_wave_period', 'mean_wave_period_based_on_first_moment', 'mean_wave_period_based_on_first_moment_for_swell', 'mean_wave_period_based_on_first_moment_for_wind_waves', 'mean_wave_period_based_on_second_moment_for_swell', 'mean_wave_period_based_on_second_moment_for_wind_waves', 'mean_wave_period_of_first_swell_partition', 'mean_wave_period_of_second_swell_partition', 'mean_wave_period_of_third_swell_partition', 'mean_zero_crossing_wave_period', 'medium_cloud_cover', 'minimum_2m_temperature_since_previous_post_processing', 'minimum_total_precipitation_rate_since_previous_post_processing', 'minimum_vertical_gradient_of_refractivity_inside_trapping_layer', 'model_bathymetry', 'near_ir_albedo_for_diffuse_radiation', 'near_ir_albedo_for_direct_radiation', 'normalized_energy_flux_into_ocean', 'normalized_energy_flux_into_waves', 'normalized_stress_into_ocean', 'northward_gravity_wave_surface_stress', 'northward_turbulent_surface_stress', 'ocean_surface_stress_equivalent_10m_neutral_wind_direction', 'ocean_surface_stress_equivalent_10m_neutral_wind_speed', 'peak_wave_period', 'period_corresponding_to_maximum_individual_wave_height', 'potential_evaporation', 'precipitation_type', 'runoff', 'sea_ice_cover', 'sea_surface_temperature', 'significant_height_of_combined_wind_waves_and_swell', 'significant_height_of_total_swell', 'significant_height_of_wind_waves', 'significant_wave_height_of_first_swell_partition', 'significant_wave_height_of_second_swell_partition', 'significant_wave_height_of_third_swell_partition', 'skin_reservoir_content', 'skin_temperature', 'slope_of_sub_gridscale_orography', 'snow_albedo', 'snow_density', 'snow_depth', 'snow_evaporation', 'snowfall', 'snowmelt', 'soil_temperature_level_1', 'soil_temperature_level_2', 'soil_temperature_level_3', 'soil_temperature_level_4', 'soil_type', 'standard_deviation_of_filtered_subgrid_orography', 'standard_deviation_of_orography', 'sub_surface_runoff', 'surface_latent_heat_flux', 'surface_net_solar_radiation', 'surface_net_solar_radiation_clear_sky', 'surface_net_thermal_radiation', 'surface_net_thermal_radiation_clear_sky', 'surface_pressure', 'surface_runoff', 'surface_sensible_heat_flux', 'surface_solar_radiation_downward_clear_sky', 'surface_solar_radiation_downwards', 'surface_thermal_radiation_downward_clear_sky', 'surface_thermal_radiation_downwards', 'temperature_of_snow_layer', 'toa_incident_solar_radiation', 'top_net_solar_radiation', 'top_net_solar_radiation_clear_sky', 'top_net_thermal_radiation', 'top_net_thermal_radiation_clear_sky', 'total_cloud_cover', 'total_column_cloud_ice_water', 'total_column_cloud_liquid_water', 'total_column_ozone', 'total_column_rain_water', 'total_column_snow_water', 'total_column_supercooled_liquid_water', 'total_column_water', 'total_column_water_vapour', 'total_precipitation', 'total_sky_direct_solar_radiation_at_surface', 'total_totals_index', 'trapping_layer_base_height', 'trapping_layer_top_height', 'type_of_high_vegetation', 'type_of_low_vegetation', 'u_component_stokes_drift', 'uv_visible_albedo_for_diffuse_radiation', 'uv_visible_albedo_for_direct_radiation', 'v_component_stokes_drift', 'vertical_integral_of_divergence_of_cloud_frozen_water_flux', 'vertical_integral_of_divergence_of_cloud_liquid_water_flux', 'vertical_integral_of_divergence_of_geopotential_flux', 'vertical_integral_of_divergence_of_kinetic_energy_flux', 'vertical_integral_of_divergence_of_mass_flux', 'vertical_integral_of_divergence_of_moisture_flux', 'vertical_integral_of_divergence_of_ozone_flux', 'vertical_integral_of_divergence_of_thermal_energy_flux', 'vertical_integral_of_divergence_of_total_energy_flux', 'vertical_integral_of_eastward_cloud_frozen_water_flux', 'vertical_integral_of_eastward_cloud_liquid_water_flux', 'vertical_integral_of_eastward_geopotential_flux', 'vertical_integral_of_eastward_heat_flux', 'vertical_integral_of_eastward_kinetic_energy_flux', 'vertical_integral_of_eastward_mass_flux', 'vertical_integral_of_eastward_ozone_flux', 'vertical_integral_of_eastward_total_energy_flux', 'vertical_integral_of_eastward_water_vapour_flux', 'vertical_integral_of_energy_conversion', 'vertical_integral_of_kinetic_energy', 'vertical_integral_of_mass_of_atmosphere', 'vertical_integral_of_mass_tendency', 'vertical_integral_of_northward_cloud_frozen_water_flux', 'vertical_integral_of_northward_cloud_liquid_water_flux', 'vertical_integral_of_northward_geopotential_flux', 'vertical_integral_of_northward_heat_flux', 'vertical_integral_of_northward_kinetic_energy_flux', 'vertical_integral_of_northward_mass_flux', 'vertical_integral_of_northward_ozone_flux', 'vertical_integral_of_northward_total_energy_flux', 'vertical_integral_of_northward_water_vapour_flux', 'vertical_integral_of_potential_and_internal_energy', 'vertical_integral_of_potential_internal_and_latent_energy', 'vertical_integral_of_temperature', 'vertical_integral_of_thermal_energy', 'vertical_integral_of_total_energy', 'vertically_integrated_moisture_divergence', 'volumetric_soil_water_layer_1', 'volumetric_soil_water_layer_2', 'volumetric_soil_water_layer_3', 'volumetric_soil_water_layer_4', 'wave_spectral_directional_width', 'wave_spectral_directional_width_for_swell', 'wave_spectral_directional_width_for_wind_waves', 'wave_spectral_kurtosis', 'wave_spectral_peakedness', 'wave_spectral_skewness', 'zero_degree_level']],
FieldInfo(annotation=NoneType, required=True, alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:variable', 'variable']), serialization_alias='ecmwf:variable', title='Variable', description='Please, consult the product user guide in the documentation section for more information on these variables.')
]
'ecmwf_year':  typing.Annotated[list[Literal['1940', ...]],  FieldInfo( 'required': True, 'alias': 'AliasChoices(choices=[''ecmwf:year", "year''])',  ... )] typing.Annotated[
list[typing.Literal['1940', '1941', '1942', '1943', '1944', '1945', '1946', '1947', '1948', '1949', '1950', '1951', '1952', '1953', '1954', '1955', '1956', '1957', '1958', '1959', '1960', '1961', '1962', '1963', '1964', '1965', '1966', '1967', '1968', '1969', '1970', '1971', '1972', '1973', '1974', '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995', '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024', '2025', '2026']],
FieldInfo(annotation=NoneType, required=True, alias_priority=2, validation_alias=AliasChoices(choices=['ecmwf:year', 'year']), serialization_alias='ecmwf:year', title='Year')
]
'end':  typing.Annotated[str,  FieldInfo( 'alias': 'end_datetime',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias='end_datetime', alias_priority=2, description="Date/time as string in ISO 8601 format (e.g. '2024-06-10T12:00:00Z')")
]
'start':  typing.Annotated[str,  FieldInfo( 'alias': 'AliasChoices(choices=[''start_datetime", "datetime''])',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias=AliasChoices(choices=['start_datetime', 'datetime']), alias_priority=2, description="Date/time as string in ISO 8601 format (e.g. '2024-06-10T12:00:00Z')")
]

Queryables validation#

The result returned by the list_queryables method can also be used to validate input parameters using the get_model method of the QueryablesDict object and the pydantic method model_validate:

[10]:
queryables = dag.list_queryables(
    collection="ERA5_SL",
    provider="cop_cds",
)
queryables.get_model().model_validate(
    {
        "collection": "ERA5_SL",
        "ecmwf:product_type": ["reanalysis"],
        "ecmwf:variable": ["2m_temperature"],
        "ecmwf:data_format": "grib",
        "ecmwf:download_format": "unarchived",
        "ecmwf:year": ["2025"],
        "ecmwf:month": ["02"],
        "ecmwf:day": ["05"],
        "ecmwf:time": ["00:00"]
    }
)
[10]:
Queryables(collection='ERA5_SL', start=None, end=None, geom=None, id=None, ecmwf_area=None, ecmwf_data_format='grib', ecmwf_day=['05'], ecmwf_download_format='unarchived', ecmwf_month=['02'], ecmwf_product_type=['reanalysis'], ecmwf_time=['00:00'], ecmwf_variable=['2m_temperature'], ecmwf_year=['2025'])

In this example, we gave expected search parameters to pydantic.BaseModel.model_validate method to check if they match with queryables constraints.

No error occured because ["2025"] is a valid value for the parameter ecmwf:year and a model object is returned. If we change ecmwf:year to an invalid value, we can see that an error is raised:

[12]:
queryables.get_model().model_validate(
    {
        "collection": "ERA5_SL",
        "ecmwf:product_type": ["reanalysis"],
        "ecmwf:variable": ["2m_temperature"],
        "ecmwf:data_format": "grib",
        "ecmwf:download_format": "unarchived",
        "ecmwf:year": ["3025"],
        "ecmwf:month": ["02"],
        "ecmwf:day": ["05"],
        "ecmwf:time": ["00:00"]
    }
)
ValidationError: 1 validation error for Queryables
ecmwf:year.0
  Input should be '1940', '1941', '1942', '1943', '1944', '1945', '1946', '1947', '1948', '1949', '1950', '1951', '1952', '1953', '1954', '1955', '1956', '1957', '1958', '1959', '1960', '1961', '1962', '1963', '1964', '1965', '1966', '1967', '1968', '1969', '1970', '1971', '1972', '1973', '1974', '1975', '1976', '1977', '1978', '1979', '1980', '1981', '1982', '1983', '1984', '1985', '1986', '1987', '1988', '1989', '1990', '1991', '1992', '1993', '1994', '1995', '1996', '1997', '1998', '1999', '2000', '2001', '2002', '2003', '2004', '2005', '2006', '2007', '2008', '2009', '2010', '2011', '2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024', '2025' or '2026' [type=literal_error, input_value='3025', input_type=str]
    For further information visit https://errors.pydantic.dev/2.12/v/literal_error

The same validation can also be directly performed through search() method (validate parameter is set to True by default). It checks queryables before performing the request:

[13]:
dag.search(**{
    "collection": "ERA5_SL",
    "ecmwf:product_type": ["reanalysis"],
    "ecmwf:variable": ["2m_temperature"],
    "ecmwf:data_format": "grib",
    "ecmwf:download_format": "unarchived",
    "ecmwf:year": ["3025"],
    "ecmwf:month": ["02"],
    "ecmwf:day": ["05"],
    "ecmwf:time": ["00:00"],
    "raise_errors": True
})
ValidationError: ("ecmwf:year=['3025'] is not available with ecmwf:product_type=['reanalysis'], ecmwf:variable=['2m_temperature']. Allowed values are 1948, 2023, 2024, 1986, 2017, 1977, 2018, 1951, 2007, 1961, 1996, 2022, 1968, 1947, 1993, 2005, 1950, 1982, 1945, 1991, 1995, 1972, 1975, 2013, 2009, 1969, 2025, 1964, 2021, 1955, 1980, 1958, 1988, 2012, 1973, 2004, 1952, 1944, 1976, 1953, 1971, 1984, 1956, 1957, 1954, 1979, 1965, 2020, 1998, 1967, 2003, 1966, 1992, 2026, 1983, 1959, 1999, 2006, 1970, 2014, 1987, 2015, 1960, 1963, 1994, 2002, 1978, 2011, 2000, 1962, 1990, 1974, 2016, 1989, 2010, 1985, 1943, 1946, 1981, 1941, 1940, 1942, 2019, 2001, 1949, 1997, 2008.", {'product_type', 'variable', 'ecmwf:year'})

Queryables from Collection#

As mentioned respectively in this section and in this one, since v4.0.0, list_collections() and guess_collection() return a list of Collection instances, each of it exposing the same list_queryables() method. Here is an example with list_collections().

[14]:
cop_dataspace_internal_catalog = dag.list_collections(provider="cop_dataspace", fetch_providers=False)
a_collection = cop_dataspace_internal_catalog[0]
a_collection
[14]:
Collection("S1_AUX_GNSSRD")
id: 'S1_AUX_GNSSRD',
title: 'SENTINEL1 Auxiliary Product',
description: 'The Auxiliary (AUX) product contains the precise orbit ephemerides and the GNSS-Raw Data (GNSSRD) data. The precise orbit ephemerides are provided as a text file in the format of the International GNSS Service (IGS). The GNSS-Raw Data (GNSSRD) data is provided as a binary file in a specific format. SAFE formatted product, see https://sentinel.esa.int/web/sentinel/user-guides/sentinel-1-sar/data-formats/safe-specification ',
extent: { 'spatial': { 'bbox': [[-180.0 , -90.0 , 180.0 , 90.0 ] ] } , 'temporal': { 'interval': [[2014-04-06 00:00:00+00:00 , None ] ] } },
keywords: ['SAR' , 'SENTINEL' , 'SENTINEL1' , 'S1' , 'S1A' , 'S1B' , 'S1C' , 'AUX' , 'GNSSRD' , 'SAFE' ],
license: 'other',
providers: [{ 'name': 'European Space Agency (ESA)' , 'roles': ['producer' , 'processor' , 'licensor' ] , 'url': 'https://earth.esa.int' } ],
constellation: 'SENTINEL1',
instruments: ['SAR' ],
platform: 'S1A,S1B,S1C',
processing:level: 'AUX',
eodag:sensor_type: 'RADAR',
[15]:
a_collection.list_queryables(provider="cop_dataspace")
[15]:
QueryablesDict (22) - additional_properties=True
'collection':  typing.Annotated[str,  FieldInfo('default': 'S1_AUX_GNSSRD',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default='S1_AUX_GNSSRD')
]
'constellation':  typing.Annotated[str,  FieldInfo( ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None)
]
'end':  typing.Annotated[str,  FieldInfo( 'alias': 'end_datetime',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias='end_datetime', alias_priority=2, description="Date/time as string in ISO 8601 format (e.g. '2024-06-10T12:00:00Z')")
]
'geom':  typing.Annotated[str | dict[str, ...] | BaseGeometry,  FieldInfo( 'alias': 'AliasChoices(choices=[''geometry", "intersects''])',  ... )] typing.Annotated[
str | dict[str, float] | shapely.geometry.base.BaseGeometry,
FieldInfo(annotation=NoneType, required=False, default=None, alias=AliasChoices(choices=['geometry', 'intersects']), alias_priority=2, description='Read EODAG documentation for all supported geometry format.')
]
'gsd':  typing.Annotated[float,  FieldInfo( ... )] typing.Annotated[
float,
FieldInfo(annotation=NoneType, required=False, default=None, metadata=[Gt(gt=0)])
]
'id':  typing.Annotated[str,  FieldInfo( ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None)
]
'instruments':  typing.Annotated[list[str],  FieldInfo( ... )] typing.Annotated[
list[str],
FieldInfo(annotation=NoneType, required=False, default=None)
]
'platform':  typing.Annotated[str,  FieldInfo( ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None)
]
'providers':  typing.Annotated[list[Provider],  FieldInfo( ... )] typing.Annotated[
list[stac_pydantic.shared.Provider],
FieldInfo(annotation=NoneType, required=False, default=None)
]
'start':  typing.Annotated[str,  FieldInfo( 'alias': 'AliasChoices(choices=[''start_datetime", "datetime''])',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias=AliasChoices(choices=['start_datetime', 'datetime']), alias_priority=2, description="Date/time as string in ISO 8601 format (e.g. '2024-06-10T12:00:00Z')")
]
'start_datetime':  typing.Annotated[,  FieldInfo( ... )] typing.Annotated[
,
FieldInfo(annotation=NoneType, required=False, default=None)
]
'updated':  typing.Annotated[,  FieldInfo( ... )] typing.Annotated[
,
FieldInfo(annotation=NoneType, required=False, default=None)
]
'grid_code':  typing.Annotated[str,  FieldInfo( 'alias': 'grid:code',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias='grid:code', metadata=[{'extension': 'GridExtension'}, _PydanticGeneralMetadata(pattern='^[A-Z0-9]+-[-_.A-Za-z0-9]+$')])
]
'processing_facility':  typing.Annotated[str,  FieldInfo( 'alias': 'processing:facility',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias='processing:facility', metadata=[{'extension': 'ProcessingExtension'}])
]
'processing_level':  typing.Annotated[str,  FieldInfo( 'alias': 'processing:level',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias='processing:level', metadata=[{'extension': 'ProcessingExtension'}])
]
'product_timeliness':  typing.Annotated[str,  FieldInfo( 'alias': 'product:timeliness',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias='product:timeliness', metadata=[{'extension': 'ProductExtension'}])
]
'product_type':  typing.Annotated[str,  FieldInfo( 'alias': 'product:type',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias='product:type', metadata=[{'extension': 'ProductExtension'}])
]
'sar_instrument_mode':  typing.Annotated[str,  FieldInfo( 'alias': 'sar:instrument_mode',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias='sar:instrument_mode', metadata=[{'extension': 'SarExtension'}])
]
'sar_polarizations':  typing.Annotated[list[str],  FieldInfo( 'alias': 'sar:polarizations',  ... )] typing.Annotated[
list[str],
FieldInfo(annotation=NoneType, required=False, default=None, alias='sar:polarizations', metadata=[{'extension': 'SarExtension'}])
]
'sat_absolute_orbit':  typing.Annotated[int,  FieldInfo( 'alias': 'sat:absolute_orbit',  ... )] typing.Annotated[
int,
FieldInfo(annotation=NoneType, required=False, default=None, alias='sat:absolute_orbit', metadata=[{'extension': 'SatelliteExtension'}])
]
'sat_orbit_state':  typing.Annotated[str,  FieldInfo( 'alias': 'sat:orbit_state',  ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, alias='sat:orbit_state', metadata=[{'extension': 'SatelliteExtension'}])
]
'sat_relative_orbit':  typing.Annotated[int,  FieldInfo( 'alias': 'sat:relative_orbit',  ... )] typing.Annotated[
int,
FieldInfo(annotation=NoneType, required=False, default=None, alias='sat:relative_orbit', metadata=[{'extension': 'SatelliteExtension'}])
]
[ ]: