Queryables

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 can be used. It has two optional arguments, provider and productType, 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 product types will be returned:

[1]:
from eodag import EODataAccessGateway
dag = EODataAccessGateway()
dag.list_queryables()
[1]:
QueryablesDict (1) - additional_properties=True
'productType':  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 product type, the queryables available for this product type, i.e., the basic queryables and product type specific queryables, are shown. Only parameters available for all providers offering the product are returned.

[4]:
dag.list_queryables(productType="GLOFAS_FORECAST")
[4]:
QueryablesDict (13) - additional_properties=False
'ecmwf:system_version':  typing.Annotated[List[Literal['operational']],  FieldInfo('default': 'operational',  'required': False, ... )] typing.Annotated[
typing.List[typing.Literal['operational']],
FieldInfo(annotation=NoneType, required=False, default='operational', 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")
]
'ecmwf:hydrological_model':  typing.Annotated[List[Literal['htessel_lisflood']],  FieldInfo('default': 'htessel_lisflood',  'required': False, ... )] typing.Annotated[
typing.List[typing.Literal['htessel_lisflood']],
FieldInfo(annotation=NoneType, required=False, default='htessel_lisflood', title='Hydrological model', description="Hydrological model chain used to generate the hydrological simulations. Details can be found in the documentation under 'GloFAS hydrological models'.")
]
'ecmwf:product_type':  typing.Annotated[List[Literal['control_forecast']],  FieldInfo('default': 'control_forecast',  'required': False, ... )] typing.Annotated[
typing.List[typing.Literal['control_forecast']],
FieldInfo(annotation=NoneType, required=False, default='control_forecast', title='Product type', description="Ensemble forecasts consisting of a single, unperturbed member ('control forecast') and perturbed ensemble members.")
]
'ecmwf:variable':  typing.Annotated[Literal['river_discharge_in_the_last_24_hours'],  FieldInfo('default': 'river_discharge_in_the_last_24_hours',  'required': False, ... )] typing.Annotated[
typing.Literal['river_discharge_in_the_last_24_hours'],
FieldInfo(annotation=NoneType, required=False, default='river_discharge_in_the_last_24_hours', 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.")
]
'ecmwf:year':  typing.Annotated[List[Literal['2019']],  FieldInfo('default': '['2019']',  'required': False, ... )] typing.Annotated[
typing.List[typing.Literal['2019']],
FieldInfo(annotation=NoneType, required=False, default=['2019'], title='Year')
]
'ecmwf:month':  typing.Annotated[List[Literal['11']],  FieldInfo('default': '['11']',  'required': False, ... )] typing.Annotated[
typing.List[typing.Literal['11']],
FieldInfo(annotation=NoneType, required=False, default=['11'], title='Month')
]
'ecmwf:day':  typing.Annotated[List[Literal['05', ...]],  FieldInfo('default': '['05']',  'required': False, ... )] typing.Annotated[
typing.List[typing.Literal['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']],
FieldInfo(annotation=NoneType, required=False, default=['05'], title='Day')
]
'ecmwf:leadtime_hour':  typing.Annotated[List[Literal['120', ...]],  FieldInfo('default': '24',  'required': False, ... )] typing.Annotated[
typing.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='24', title='Leadtime hour', description='Time step of the forecast in hours.')
]
'ecmwf:data_format':  typing.Annotated[Literal['grib2', ...],  FieldInfo('default': 'grib2',  'required': False, ... )] typing.Annotated[
typing.Literal['grib2', 'netcdf'],
FieldInfo(annotation=NoneType, required=False, default='grib2', 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.')
]
'ecmwf:download_format':  typing.Annotated[Literal['unarchived', ...],  FieldInfo('default': 'zip',  'required': False, ... )] typing.Annotated[
typing.Literal['unarchived', 'zip'],
FieldInfo(annotation=NoneType, required=False, default='zip', 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.")
]
'start':  typing.Annotated[Union[datetime, ...],  FieldInfo('default': '2019-11-05T00:00:00Z',  'required': False, ... )] typing.Annotated[
typing.Union[datetime.datetime, datetime.date],
FieldInfo(annotation=NoneType, required=False, default='2019-11-05T00:00:00Z', alias='startTimeFromAscendingNode', alias_priority=2)
]
'end':  typing.Annotated[Union[datetime, ...],  FieldInfo('default': '2019-11-05T00:00:00+00:00',  'required': False, ... )] typing.Annotated[
typing.Union[datetime.datetime, datetime.date],
FieldInfo(annotation=NoneType, required=False, default='2019-11-05T00:00:00+00:00', alias='completionTimeFromAscendingNode', alias_priority=2)
]
'geom':  typing.Annotated[Union[str, Dict[str, ...], ...],  FieldInfo( 'required': False, ... )] typing.Annotated[
typing.Union[str, typing.Dict[str, float], shapely.geometry.base.BaseGeometry],
FieldInfo(annotation=NoneType, required=False, default=None, description='Read EODAG documentation for all supported geometry format.')
]

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.

[10]:
dag.list_queryables(productType="S1_SAR_GRD", provider="planetary_computer")
[10]:
QueryablesDict (33) - additional_properties=True
'id':  typing.Annotated[NoneType,  FieldInfo( 'required': False, ... )] typing.Annotated[
NoneType,
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'})
]
'end':  typing.Annotated[str,  FieldInfo( 'required': False, ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, title='Acquired', description='Datetime', metadata=[_PydanticGeneralMetadata(pattern='(\\+00:00|Z)$')])
]
'platformSerialIdentifier':  typing.Annotated[Literal['SENTINEL-1A', ...],  FieldInfo( 'required': False, ... )] typing.Annotated[
typing.Literal['SENTINEL-1A', 'SENTINEL-1B'],
FieldInfo(annotation=NoneType, required=False, default=None, title='Platform')
]
's1:shape':  typing.Annotated[list,  FieldInfo( 'required': False, ... )] typing.Annotated[
list,
FieldInfo(annotation=NoneType, required=False, default=None)
]
'end_datetime':  typing.Annotated[str,  FieldInfo( 'required': False, ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, title='End datetime', description='End datetime', metadata=[_PydanticGeneralMetadata(pattern='(\\+00:00|Z)$')])
]
'platform':  typing.Annotated[str,  FieldInfo( 'required': False, ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None)
]
's1:resolution':  typing.Annotated[Literal['full', ...],  FieldInfo( 'required': False, ... )] typing.Annotated[
typing.Literal['full', 'high', 'medium'],
FieldInfo(annotation=NoneType, required=False, default=None, title='Resolution')
]
's1:datatake_id':  typing.Annotated[str,  FieldInfo( 'required': False, ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, title='Datatake ID')
]
'start_datetime':  typing.Annotated[str,  FieldInfo( 'required': False, ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, title='Start datetime', description='Start datetime', metadata=[_PydanticGeneralMetadata(pattern='(\\+00:00|Z)$')])
]
's1:orbit_source':  typing.Annotated[Literal['DOWNLINK', ...],  FieldInfo( 'required': False, ... )] typing.Annotated[
typing.Literal['DOWNLINK', 'POEORB', 'PREORB', 'RESORB'],
FieldInfo(annotation=NoneType, required=False, default=None, title='Orbit Source')
]
's1:slice_number':  typing.Annotated[str,  FieldInfo( 'required': False, ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, title='Slice Number')
]
's1:total_slices':  typing.Annotated[str,  FieldInfo( 'required': False, ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, title='Total Slices')
]
'sar:looks_range':  typing.Annotated[int,  FieldInfo( 'required': False, ... )] typing.Annotated[
int,
FieldInfo(annotation=NoneType, required=False, default=None, title='Looks range', metadata=[Ge(ge=0)])
]
'orbitDirection':  typing.Annotated[Literal['ascending', ...],  FieldInfo( 'required': False, ... )] typing.Annotated[
typing.Literal['ascending', 'descending', 'geostationary'],
FieldInfo(annotation=NoneType, required=False, default=None, title='Orbit State')
]
'sar:product_type':  typing.Annotated[str,  FieldInfo( 'required': False, ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, title='Product type')
]
'sar:looks_azimuth':  typing.Annotated[int,  FieldInfo( 'required': False, ... )] typing.Annotated[
int,
FieldInfo(annotation=NoneType, required=False, default=None, title='Looks azimuth', metadata=[Ge(ge=0)])
]
'polarizationChannels':  typing.Annotated[List[Literal['HH', ...]],  FieldInfo( 'required': False, ... )] typing.Annotated[
typing.List[typing.Literal['HH', 'HV', 'VH', 'VV']],
FieldInfo(annotation=NoneType, required=False, default=None, title='Polarizations')
]
'dopplerFrequency':  typing.Annotated[Literal['C', ...],  FieldInfo( 'required': False, ... )] typing.Annotated[
typing.Literal['C', 'K', 'Ka', 'Ku', 'L', 'P', 'S', 'X'],
FieldInfo(annotation=NoneType, required=False, default=None, title='Frequency Band')
]
'sat:absolute_orbit':  typing.Annotated[NoneType,  FieldInfo( 'required': False, ... )] typing.Annotated[
NoneType,
FieldInfo(annotation=NoneType, required=False, default=None, title='Absolute Orbit', json_schema_extra={'$ref': 'https://stac-extensions.github.io/sat/v1.0.0/schema.json#/definitions/fields/properties/sat:absolute_orbit'})
]
'orbitNumber':  typing.Annotated[NoneType,  FieldInfo( 'required': False, ... )] typing.Annotated[
NoneType,
FieldInfo(annotation=NoneType, required=False, default=None, title='Relative Orbit', json_schema_extra={'$ref': 'https://stac-extensions.github.io/sat/v1.0.0/schema.json#/definitions/fields/properties/sat:relative_orbit'})
]
'processingLevel':  typing.Annotated[str,  FieldInfo( 'required': False, ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None)
]
'sensorMode':  typing.Annotated[str,  FieldInfo( 'required': False, ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None, title='Instrument Mode')
]
'sar:center_frequency':  typing.Annotated[float,  FieldInfo( 'required': False, ... )] typing.Annotated[
float,
FieldInfo(annotation=NoneType, required=False, default=None, title='Center Frequency (GHz)')
]
'sar:resolution_range':  typing.Annotated[float,  FieldInfo( 'required': False, ... )] typing.Annotated[
float,
FieldInfo(annotation=NoneType, required=False, default=None, title='Resolution range (m)', metadata=[Ge(ge=0)])
]
's1:product_timeliness':  typing.Annotated[Literal['Fast-24h', ...],  FieldInfo( 'required': False, ... )] 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')
]
'sar:resolution_azimuth':  typing.Annotated[float,  FieldInfo( 'required': False, ... )] typing.Annotated[
float,
FieldInfo(annotation=NoneType, required=False, default=None, title='Resolution azimuth (m)', metadata=[Ge(ge=0)])
]
'sar:pixel_spacing_range':  typing.Annotated[float,  FieldInfo( 'required': False, ... )] typing.Annotated[
float,
FieldInfo(annotation=NoneType, required=False, default=None, title='Pixel spacing range (m)', metadata=[Ge(ge=0)])
]
'sar:observation_direction':  typing.Annotated[Literal['left', ...],  FieldInfo( 'required': False, ... )] typing.Annotated[
typing.Literal['left', 'right'],
FieldInfo(annotation=NoneType, required=False, default=None, title='Antenna pointing direction')
]
'sar:pixel_spacing_azimuth':  typing.Annotated[float,  FieldInfo( 'required': False, ... )] typing.Annotated[
float,
FieldInfo(annotation=NoneType, required=False, default=None, title='Pixel spacing azimuth (m)', metadata=[Ge(ge=0)])
]
'sar:looks_equivalent_number':  typing.Annotated[float,  FieldInfo( 'required': False, ... )] typing.Annotated[
float,
FieldInfo(annotation=NoneType, required=False, default=None, title='Equivalent number of looks (ENL)', metadata=[Ge(ge=0)])
]
's1:instrument_configuration_ID':  typing.Annotated[str,  FieldInfo( 'required': False, ... )] typing.Annotated[
str,
FieldInfo(annotation=NoneType, required=False, default=None)
]
'sat:platform_international_designator':  typing.Annotated[Literal['0000-000A', ...],  FieldInfo( 'required': False, ... )] typing.Annotated[
typing.Literal['0000-000A', '2014-016A', '2016-025A'],
FieldInfo(annotation=NoneType, required=False, default=None, title='Platform Designation')
]
'geom':  typing.Annotated[NoneType,  FieldInfo( 'required': False, ... )] typing.Annotated[
NoneType,
FieldInfo(annotation=NoneType, required=False, default=None, title='Item Geometry', description='Item Geometry', json_schema_extra={'$ref': 'https://geojson.org/schema/Feature.json'})
]

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.

[13]:
dag.list_queryables(
    productType="ERA5_SL",
    provider="cop_cds",
    **{"ecmwf:month": "02"}
)
[13]:
QueryablesDict (11) - additional_properties=False
'ecmwf:product_type':  typing.Annotated[List[Literal['reanalysis']],  FieldInfo('default': 'reanalysis',  'required': False, ... )] typing.Annotated[
typing.List[typing.Literal['reanalysis']],
FieldInfo(annotation=NoneType, required=False, default='reanalysis', title='Product type')
]
'ecmwf:variable':  typing.Annotated[List[Literal['100m_u_component_of_wind', ...]],  FieldInfo('default': '10m_u_component_of_wind',  'required': False, ... )] typing.Annotated[
typing.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=False, default='10m_u_component_of_wind', 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('default': '['1940']',  'required': False, ... )] typing.Annotated[
typing.List[typing.Literal['1940', '1944', '1948', '1952', '1956', '1960', '1964', '1968', '1972', '1976', '1980', '1984', '1988', '1992', '1996', '2000', '2004', '2008', '2012', '2016', '2020']],
FieldInfo(annotation=NoneType, required=False, default=['1940'], title='Year')
]
'ecmwf:month':  typing.Annotated[List[Literal['02']],  FieldInfo('default': '02',  'required': False, ... )] typing.Annotated[
typing.List[typing.Literal['02']],
FieldInfo(annotation=NoneType, required=False, default='02', title='Month')
]
'ecmwf:day':  typing.Annotated[List[Literal['01', ...]],  FieldInfo('default': '['01']',  'required': False, ... )] typing.Annotated[
typing.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=False, default=['01'], title='Day')
]
'ecmwf:time':  typing.Annotated[List[Literal['00:00', ...]],  FieldInfo('default': '['09:00']',  'required': False, ... )] typing.Annotated[
typing.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=False, default=['09:00'], title='Time', description='UTC time standard. UTC stands for Universal Time Coordinated as well as for Coordinated Universal Time.')
]
'ecmwf:data_format':  typing.Annotated[Literal['grib', ...],  FieldInfo('default': 'grib',  'required': False, ... )] typing.Annotated[
typing.Literal['grib', 'netcdf'],
FieldInfo(annotation=NoneType, required=False, default='grib', 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:download_format':  typing.Annotated[Literal['unarchived', ...],  FieldInfo('default': 'zip',  'required': False, ... )] typing.Annotated[
typing.Literal['unarchived', 'zip'],
FieldInfo(annotation=NoneType, required=False, default='zip', 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.")
]
'start':  typing.Annotated[Union[datetime, ...],  FieldInfo('default': '1940-01-01T09:00:00Z',  'required': False, ... )] typing.Annotated[
typing.Union[datetime.datetime, datetime.date],
FieldInfo(annotation=NoneType, required=False, default='1940-01-01T09:00:00Z', alias='startTimeFromAscendingNode', alias_priority=2)
]
'end':  typing.Annotated[Union[datetime, ...],  FieldInfo('default': '1940-01-01T09:00:00+00:00',  'required': False, ... )] typing.Annotated[
typing.Union[datetime.datetime, datetime.date],
FieldInfo(annotation=NoneType, required=False, default='1940-01-01T09:00:00+00:00', alias='completionTimeFromAscendingNode', alias_priority=2)
]
'geom':  typing.Annotated[Union[str, Dict[str, ...], ...],  FieldInfo( 'required': False, ... )] typing.Annotated[
typing.Union[str, typing.Dict[str, float], shapely.geometry.base.BaseGeometry],
FieldInfo(annotation=NoneType, required=False, default=None, description='Read EODAG documentation for all supported geometry format.')
]

If default values are defined for a parameter in the configuration, the values of the other parameters will be filtered by this default value if constraints are available. If all possible configurations shall be shown, the default value can be removed by setting it to empty. The example below shows on request in which all default values are used and one where the default for ecmwf:product_type is removed.

[15]:
dag.list_queryables(
    productType="GLACIERS_DIST_RANDOLPH",
    provider="cop_cds"
)
[15]:
QueryablesDict (3) - additional_properties=False
'ecmwf:variable':  typing.Annotated[List[Literal['glacier_area']],  FieldInfo('default': 'glacier_area',  'required': False, ... )] typing.Annotated[
typing.List[typing.Literal['glacier_area']],
FieldInfo(annotation=NoneType, required=False, default='glacier_area', title='Variable', description='Please, consult the product user guide in the documentation section for more information on these variables.')
]
'ecmwf:product_type':  typing.Annotated[List[Literal['gridded']],  FieldInfo('default': 'gridded',  'required': False, ... )] typing.Annotated[
typing.List[typing.Literal['gridded']],
FieldInfo(annotation=NoneType, required=False, default='gridded', title='Product type', description='Vector and gridded are two different output formats of the same data and the hypsometry file includes supplementary information that is useful together with the vector file. The file formats are netCDF for the gridded product, zipped Esri vector data storage format for the vector product, and comma-separated values (csv) for the hypsometry product.')
]
'ecmwf:version':  typing.Annotated[Literal['rgi_6_0', ...],  FieldInfo('default': 'rgi_6_0',  'required': False, ... )] typing.Annotated[
typing.Literal['rgi_6_0', 'rgi_7_0'],
FieldInfo(annotation=NoneType, required=False, default='rgi_6_0', title='Version')
]
[16]:
params = {
   "productType": "GLACIERS_DIST_RANDOLPH",
   "provider": "cop_cds",
   "ecmwf:product_type": None
}
dag.list_queryables(**params)
[16]:
QueryablesDict (3) - additional_properties=False
'ecmwf:variable':  typing.Annotated[List[Literal['glacier_area']],  FieldInfo('default': 'glacier_area',  'required': False, ... )] typing.Annotated[
typing.List[typing.Literal['glacier_area']],
FieldInfo(annotation=NoneType, required=False, default='glacier_area', title='Variable', description='Please, consult the product user guide in the documentation section for more information on these variables.')
]
'ecmwf:product_type':  typing.Annotated[List[Literal['gridded', ...]],  FieldInfo( 'required': True, ... )] typing.Annotated[
typing.List[typing.Literal['gridded', 'hypsometry', 'vector']],
FieldInfo(annotation=NoneType, required=True, title='Product type', description='Vector and gridded are two different output formats of the same data and the hypsometry file includes supplementary information that is useful together with the vector file. The file formats are netCDF for the gridded product, zipped Esri vector data storage format for the vector product, and comma-separated values (csv) for the hypsometry product.')
]
'ecmwf:version':  typing.Annotated[Literal['rgi_5_0', ...],  FieldInfo('default': 'rgi_6_0',  'required': False, ... )] typing.Annotated[
typing.Literal['rgi_5_0', 'rgi_6_0', 'rgi_7_0'],
FieldInfo(annotation=NoneType, required=False, default='rgi_6_0', title='Version')
]

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:

[17]:
queryables = dag.list_queryables(
    productType="ERA5_SL",
    provider="cop_cds",
)
queryables.get_model().model_validate({"ecmwf:day": ["05"]})
[17]:
Queryables(ecmwf:product_type='reanalysis', ecmwf:variable='10m_u_component_of_wind', ecmwf:year=['1940'], ecmwf:month=['01'], ecmwf:day=['05'], ecmwf:time=['09:00'], ecmwf:data_format='grib', ecmwf:download_format='zip', start='1940-01-01T09:00:00Z', end='1940-01-01T09:00:00+00:00', geom=None)

In this case no errors have occured because [“05”] is a valid value for the parameter ecmwf:day and a model object is returned. If we change ecmwf:day to an invalid value, we can see that an error is raised:

[18]:
queryables.get_model().model_validate({"ecmwf:day": ["55"]})
---------------------------------------------------------------------------
ValidationError                           Traceback (most recent call last)
Cell In[18], line 1
----> 1 queryables.get_model().model_validate({"ecmwf:day": ["55"]})

File ~/venvs/dedl/lib/python3.13/site-packages/pydantic/main.py:627, in BaseModel.model_validate(cls, obj, strict, from_attributes, context)
    625 # `__tracebackhide__` tells pytest and some other tools to omit this function from tracebacks
    626 __tracebackhide__ = True
--> 627 return cls.__pydantic_validator__.validate_python(
    628     obj, strict=strict, from_attributes=from_attributes, context=context
    629 )

ValidationError: 1 validation error for Queryables
ecmwf:day.0
  Input should be '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' or '31' [type=literal_error, input_value='55', input_type=str]
    For further information visit https://errors.pydantic.dev/2.10/v/literal_error

NOTE: Only values matching the default values of the other values will be considered as valid, e.g. ecmwf:month=["04"] is considered invalid, although values for april are available with certain values of the other parameters:

[19]:
queryables.get_model().model_validate({"ecmwf:month": ["04"]})
---------------------------------------------------------------------------
ValidationError                           Traceback (most recent call last)
Cell In[19], line 1
----> 1 queryables.get_model().model_validate({"ecmwf:month": ["04"]})

File ~/venvs/dedl/lib/python3.13/site-packages/pydantic/main.py:627, in BaseModel.model_validate(cls, obj, strict, from_attributes, context)
    625 # `__tracebackhide__` tells pytest and some other tools to omit this function from tracebacks
    626 __tracebackhide__ = True
--> 627 return cls.__pydantic_validator__.validate_python(
    628     obj, strict=strict, from_attributes=from_attributes, context=context
    629 )

ValidationError: 1 validation error for Queryables
ecmwf:month.0
  Input should be '01' [type=literal_error, input_value='04', input_type=str]
    For further information visit https://errors.pydantic.dev/2.10/v/literal_error

To avoid this, the default value can be removed in the queryables request:

[21]:
queryables = dag.list_queryables(
    **{"productType": "ERA5_SL", "provider": "cop_cds", "ecmwf:month": None}
)
queryables.get_model().model_validate({"ecmwf:month": ["04"]})
[21]:
Queryables(ecmwf:product_type='reanalysis', ecmwf:variable='10m_u_component_of_wind', ecmwf:year=['1940'], ecmwf:month=['04'], ecmwf:day=['01'], ecmwf:time=['09:00'], ecmwf:data_format='grib', ecmwf:download_format='zip', start='1940-01-01T09:00:00Z', end='1940-01-01T09:00:00+00:00', geom=None)