Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions cmr/queries.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from collections import defaultdict
from datetime import date, datetime, timezone
from inspect import getmembers, ismethod
from re import search
from re import fullmatch
from typing import Iterable, Iterator

from typing_extensions import (
Expand Down Expand Up @@ -228,7 +228,7 @@ def format(self, output_format: str = "json") -> Self:

# check requested format against the valid format regex's
for _format in self._valid_formats_regex:
if search(_format, output_format):
if fullmatch(_format, output_format):
self._format = output_format
return self

Expand Down Expand Up @@ -1027,7 +1027,7 @@ def __init__(self, mode: str = CMR_OPS):
Query.__init__(self, "collections", mode)
self.concept_id_chars = {"C"}
self._valid_formats_regex.extend([
"dif", "dif10", "opendata", "umm_json", "umm_json_v[0-9]_[0-9]"
"dif", "dif10", "opendata", "umm_json", "umm_json_v[0-9]+_[0-9]+"
])

def archive_center(self, center: str) -> Self:
Expand Down Expand Up @@ -1242,7 +1242,7 @@ def __init__(self, mode: str = CMR_OPS):
Query.__init__(self, "tools", mode)
self.concept_id_chars = {"T"}
self._valid_formats_regex.extend([
"dif", "dif10", "opendata", "umm_json", "umm_json_v[0-9]_[0-9]"
"dif", "dif10", "opendata", "umm_json", "umm_json_v[0-9]+_[0-9]+"
])

@override
Expand All @@ -1259,7 +1259,7 @@ def __init__(self, mode: str = CMR_OPS):
Query.__init__(self, "services", mode)
self.concept_id_chars = {"S"}
self._valid_formats_regex.extend([
"dif", "dif10", "opendata", "umm_json", "umm_json_v[0-9]_[0-9]"
"dif", "dif10", "opendata", "umm_json", "umm_json_v[0-9]+_[0-9]+"
])

@override
Expand All @@ -1273,7 +1273,7 @@ def __init__(self, mode: str = CMR_OPS):
Query.__init__(self, "variables", mode)
self.concept_id_chars = {"V"}
self._valid_formats_regex.extend([
"dif", "dif10", "opendata", "umm_json", "umm_json_v[0-9]_[0-9]"
"dif", "dif10", "opendata", "umm_json", "umm_json_v[0-9]+_[0-9]+"
])

def instance_format(self, format: Union[str, Sequence[str]]) -> Self:
Expand Down
2 changes: 1 addition & 1 deletion tests/test_collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ def test_valid_formats(self):
formats = [
"json", "xml", "echo10", "iso", "iso19115",
"csv", "atom", "kml", "native", "dif", "dif10",
"opendata", "umm_json", "umm_json_v1_1" "umm_json_v1_9"]
"opendata", "umm_json", "umm_json_v1_1", "umm_json_v1_9"]

for _format in formats:
query.format(_format)
Expand Down
18 changes: 18 additions & 0 deletions tests/test_format_validation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import pytest

from cmr.queries import CollectionQuery, GranuleQuery, ServiceQuery, ToolQuery, VariableQuery


@pytest.mark.parametrize("query_type", [CollectionQuery, GranuleQuery, ServiceQuery, ToolQuery, VariableQuery])
@pytest.mark.parametrize("output_format", ["jsonn", "not-json", "iso19116", "umm_json_v1_9suffix"])
def test_rejects_partial_format_matches(query_type, output_format):
query = query_type()
with pytest.raises(ValueError, match="Unsupported format"):
query.format(output_format)
assert query._format == "json"


@pytest.mark.parametrize("output_format", ["umm_json", "umm_json_v1_9", "umm_json_v1_18"])
def test_accepts_complete_umm_versions(output_format):
query = CollectionQuery().format(output_format)
assert query._format == output_format
2 changes: 1 addition & 1 deletion tests/test_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def test_valid_formats(self):
formats = [
"json", "xml", "echo10", "iso", "iso19115",
"csv", "atom", "kml", "native", "dif", "dif10",
"opendata", "umm_json", "umm_json_v1_1" "umm_json_v1_9"]
"opendata", "umm_json", "umm_json_v1_1", "umm_json_v1_9"]

for _format in formats:
query.format(_format)
Expand Down
2 changes: 1 addition & 1 deletion tests/test_tool.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def test_valid_formats(self):
formats = [
"json", "xml", "echo10", "iso", "iso19115",
"csv", "atom", "kml", "native", "dif", "dif10",
"opendata", "umm_json", "umm_json_v1_1" "umm_json_v1_9"]
"opendata", "umm_json", "umm_json_v1_1", "umm_json_v1_9"]

for _format in formats:
query.format(_format)
Expand Down
2 changes: 1 addition & 1 deletion tests/test_variable.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def test_valid_formats(self):
formats = [
"json", "xml", "echo10", "iso", "iso19115",
"csv", "atom", "kml", "native", "dif", "dif10",
"opendata", "umm_json", "umm_json_v1_1" "umm_json_v1_9"]
"opendata", "umm_json", "umm_json_v1_1", "umm_json_v1_9"]

for _format in formats:
query.format(_format)
Expand Down