Repository navigation
refactor(ogc): declare date parameters on the dialect and read them on entry (ADR 0014, step 2) - #449
Closed
thodson-usgs wants to merge 4 commits into
Closed
thodson-usgs wants to merge 4 commits into
thodson-usgs wants to merge 4 commits into
Conversation
… (ADR 0014) Step 1 of ADR 0014 (proposed), which replaces the single-branch draft in DOI-USGS#445. - dataretrieval._dates (a dependency-free leaf) reads a date argument into a DateRange: an instant, a range with None for an open bound, or a duration. Every bound is UTC; a naive value is UTC, as in pandas. - dataretrieval._intervals writes a DateRange in the ISO 8601 interval grammar that OGC API Features and STAC share, adjusted by a DateDialect(open_start, durations). It sits below ogc because STAC is not OGC. - OgcDialect.open_start becomes OgcDialect.dates. Water Data sets durations=True; NGWMN sets open_start=""; get_ratings uses STAC_DATES (open_start=""). - ogc/dates.py and get_ratings' separate duration check are removed. Behavior change: a lone duration passed to an NGWMN getter raises ValueError before sending; the service rejects one with HTTP 400. get_ratings' duration message is now the shared one. Otherwise the values sent are unchanged: a comparison of 1432 inputs (each element type, every pair, interval strings, error cases) against main's _format_api_dates found no difference in output or message, under UTC and America/Chicago. Live tests check each DateDialect field against the Water Data OGC, NGWMN, and STAC services. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HBt3Ee7eneKtdKQWq2T3YK
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HBt3Ee7eneKtdKQWq2T3YK
thodson-usgs
force-pushed
the
refactor/ogc-date-fields
branch
from
October 12, 2026 20:56
3da0abc to
3e446e8
Compare
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HBt3Ee7eneKtdKQWq2T3YK
…n entry (ADR 0014) Step 2 of ADR 0014 (proposed), stacked on step 1 (DOI-USGS#448). - OgcDialect gains date_params (default {"datetime"}, the standard's one date parameter) and timed_params, and date_only_services is renamed date_only_collections, since it is keyed by collection. The Water Data dialect lists its seven date parameters and timed_params {"last_modified"}, which the request builder used to name. - prepare_request_args(..., dialect=) reads the dialect's date parameters into a DateRange when the getter is called and drops an all-open one. Water Data's _get_args passes WATERDATA_DIALECT (the Samples and Statistics getters pass None, as those APIs are not OGC); NGWMN passes NGWMN_DIALECT. - get_ogc_data reads any date parameter still raw (a verbatim query from get_reference_table), and raises TypeError for a DateRange under a key the dialect does not list. - The chunk planner's _NEVER_CHUNK lists no date parameter: a DateRange is not a list. _DATE_RANGE_PARAMS is removed. - tests/architecture_test.py fails if a string a shipped dialect lists appears as a literal in ogc/ or _intervals.py. It found one: the "value" default of _normalize_str_iterable's param_name, now required. The values sent are unchanged. An unreadable date now raises when the getter is called rather than when the first request is built; the message is the same. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HBt3Ee7eneKtdKQWq2T3YK
thodson-usgs
force-pushed
the
refactor/ogc-date-fields
branch
from
October 12, 2026 21:02
3e446e8 to
5a9a049
Compare
Collaborator
Author
|
Combined into #448, which now holds all three ADR 0014 steps as one commit each. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Step 2 of ADR 0014 (proposed). Stacked on #448: this branch includes #448's three commits. Review only the last commit,
5a9a0490; I'll rebase once #448 merges.Problem
The shared OGC code still named Water Data's facts:
_DATE_RANGE_PARAMS);last_modifiedby name from date-only writing;_NEVER_CHUNK, and a test checked that the two lists matched.Change
OgcDialect:date_params, defaulting to{"datetime"}, the standard's one date parameter.timed_params.date_only_servicesis renameddate_only_collections, because it is keyed by collection (see the CONTEXT.md note).timed_params={"last_modified"}.prepare_request_args(..., dialect=)reads the dialect's date parameters into aDateRangewhen the getter is called, and drops a range with both ends open._get_argspassesWATERDATA_DIALECT. The Samples and Statistics getters passNone, because those APIs are not OGC.NGWMN_DIALECT.get_ogc_datareads any date parameter that is still raw, which is the case for aget_reference_table(query=...)dict. It raisesTypeErrorfor aDateRangeunder a key the dialect does not list, which would otherwise be sent as its repr.DateRangeis not a list._DATE_RANGE_PARAMSis removed.test_protocol_code_names_nothing_a_dialect_declaresfails if a string a shipped dialect lists appears as a literal inogc/or_intervals.py."value"default of_normalize_str_iterable'sparam_name, which matches Water Data'svaluecolumn.param_nameis now required.monitoring_location_idis the one allowlisted literal; ADR 0014 records it as a known departure.Behavior
Tests
prepare_request_argsreads dates on entry, and reads none without a dialect;DateRangeunder an unlisted key raises;get_reference_table(query={"last_modified": ...})reads and writes the date, and drops[None, None];DateRange.Next
Step 3:
ServiceandEndpoint, and the service-name architecture test.🤖 Generated with Claude Code
https://claude.ai/code/session_01HBt3Ee7eneKtdKQWq2T3YK