Skip to content

Commit

Permalink
chore: verify the requested fields and return list of available ones (#…
Browse files Browse the repository at this point in the history
…237)

Add some verification on the inputs of the user for the response-fields and returne fields: when a warning or an error return all the possibilities
  • Loading branch information
renaudjester authored Nov 28, 2024
1 parent 69be1e7 commit 1c44b37
Show file tree
Hide file tree
Showing 9 changed files with 348 additions and 135 deletions.
10 changes: 6 additions & 4 deletions copernicusmarine/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
import copernicusmarine.logger as logger
from copernicusmarine.versioner import __version__

from copernicusmarine.catalogue_parser.models import (
CopernicusMarineCatalogue,
CopernicusMarineCoordinate,
Expand Down Expand Up @@ -29,12 +27,15 @@
from copernicusmarine.core_functions.exceptions import (
CoordinatesOutOfDatasetBounds,
FormatNotSupported,
GeospatialSubsetNotAvailableForNonLatLon,
MinimumLongitudeGreaterThanMaximumLongitude,
NetCDFCompressionNotAvailable,
ServiceNotSupported,
VariableDoesNotExistInTheDataset,
WrongDatetimeFormat,
GeospatialSubsetNotAvailableForNonLatLon,
)
from copernicusmarine.core_functions.fields_query_builder import (
WrongFieldsError,
)
from copernicusmarine.core_functions.models import (
FileGet,
Expand All @@ -61,7 +62,7 @@
read_dataframe,
)
from copernicusmarine.python_interface.subset import subset

from copernicusmarine.versioner import __version__

__all__ = [
"CoordinatesOutOfDatasetBounds",
Expand Down Expand Up @@ -102,6 +103,7 @@
"TimeExtent",
"VariableDoesNotExistInTheDataset",
"WrongDatetimeFormat",
"WrongFieldsError",
"__version__",
"describe",
"get",
Expand Down
112 changes: 0 additions & 112 deletions copernicusmarine/catalogue_parser/fields_query_builder.py

This file was deleted.

23 changes: 17 additions & 6 deletions copernicusmarine/command_line_interface/group_describe.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@

import click

from copernicusmarine.catalogue_parser.fields_query_builder import QueryBuilder
from copernicusmarine.catalogue_parser.models import CopernicusMarineCatalogue
from copernicusmarine.command_line_interface.exception_handler import (
log_exception_and_exit,
Expand All @@ -14,6 +13,10 @@
CustomClickOptionsCommand,
)
from copernicusmarine.core_functions.describe import describe_function
from copernicusmarine.core_functions.fields_query_builder import (
build_query,
get_queryable_requested_fields,
)

logger = logging.getLogger("copernicusmarine")
blank_logger = logging.getLogger("copernicusmarine_blank_logger")
Expand Down Expand Up @@ -161,13 +164,21 @@ def _create_include_and_exclude(
if return_fields:
include_in_output = set(return_fields.replace(" ", "").split(","))
if "all" not in include_in_output:
query_builder = QueryBuilder(include_in_output)
include_query = query_builder.build_query(
CopernicusMarineCatalogue
queryable_fields = get_queryable_requested_fields(
include_in_output,
CopernicusMarineCatalogue,
"--return-fields",
)
include_query = build_query(
queryable_fields, CopernicusMarineCatalogue
)
if exclude_fields:
exclude_from_output = set(exclude_fields.replace(" ", "").split(","))
query_builder = QueryBuilder(exclude_from_output)
exclude_query = query_builder.build_query(CopernicusMarineCatalogue)
queryable_fields = get_queryable_requested_fields(
exclude_from_output, CopernicusMarineCatalogue, "--exclude-fields"
)
exclude_query = build_query(
queryable_fields, CopernicusMarineCatalogue
)

return include_query, exclude_query
16 changes: 11 additions & 5 deletions copernicusmarine/command_line_interface/group_get.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import logging
import pathlib
from typing import Optional
from typing import Optional, Union

import click

from copernicusmarine.catalogue_parser.fields_query_builder import QueryBuilder
from copernicusmarine.command_line_interface.exception_handler import (
log_exception_and_exit,
)
Expand All @@ -19,6 +18,10 @@
from copernicusmarine.core_functions.click_custom_class import (
CustomClickOptionsCommand,
)
from copernicusmarine.core_functions.fields_query_builder import (
build_query,
get_queryable_requested_fields,
)
from copernicusmarine.core_functions.get import (
create_get_template,
get_function,
Expand Down Expand Up @@ -271,18 +274,21 @@ def get(
)

if response_fields:
fields_to_include = set(response_fields.split(","))
fields_to_include = set(response_fields.replace(" ", "").split(","))
elif dry_run:
fields_to_include = {"all"}
else:
fields_to_include = {"status", "message"}
included_fields: Optional[Union[set[str], dict]]
if "all" in fields_to_include:
included_fields = None
elif "none" in fields_to_include:
included_fields = set()
else:
query_builder = QueryBuilder(set(fields_to_include))
included_fields = query_builder.build_query(ResponseGet)
queryable_fields = get_queryable_requested_fields(
fields_to_include, ResponseGet, "--response-fields"
)
included_fields = build_query(set(queryable_fields), ResponseGet)

blank_logger.info(
response.model_dump_json(
Expand Down
16 changes: 11 additions & 5 deletions copernicusmarine/command_line_interface/group_subset.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import logging
import pathlib
from typing import List, Optional
from typing import List, Optional, Union

import click

from copernicusmarine.catalogue_parser.fields_query_builder import QueryBuilder
from copernicusmarine.command_line_interface.exception_handler import (
log_exception_and_exit,
)
Expand All @@ -20,6 +19,10 @@
CustomClickOptionsCommand,
DeprecatedClickOption,
)
from copernicusmarine.core_functions.fields_query_builder import (
build_query,
get_queryable_requested_fields,
)
from copernicusmarine.core_functions.models import (
DEFAULT_COORDINATES_SELECTION_METHOD,
DEFAULT_COORDINATES_SELECTION_METHODS,
Expand Down Expand Up @@ -367,19 +370,22 @@ def subset(
chunk_size_limit=chunk_size_limit,
)
if response_fields:
fields_to_include = set(response_fields.split(","))
fields_to_include = set(response_fields.replace(" ", "").split(","))
elif dry_run:
fields_to_include = {"all"}
else:
fields_to_include = {"status", "message"}

included_fields: Optional[Union[dict, set]]
if "all" in fields_to_include:
included_fields = None
elif "none" in fields_to_include:
included_fields = set()
else:
query_builder = QueryBuilder(set(fields_to_include))
included_fields = query_builder.build_query(ResponseSubset)
queryable_fields = get_queryable_requested_fields(
fields_to_include, ResponseSubset, "--response-fields"
)
included_fields = build_query(set(queryable_fields), ResponseSubset)

blank_logger.info(
response.model_dump_json(
Expand Down
Loading

0 comments on commit 1c44b37

Please sign in to comment.