Skip to content
Merged
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
2 changes: 2 additions & 0 deletions buf.gen.datasets.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# please keep this file in sync with buf.gen.workflows.yaml, especially the plugins versions
version: v2
managed:
enabled: true
Expand All @@ -14,3 +15,4 @@ inputs:
- module: buf.build/tilebox/api
paths:
- "datasets"
- "tilebox"
1 change: 1 addition & 0 deletions buf.gen.workflows.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# please keep this file in sync with buf.gen.datasets.yaml, especially the plugins versions
version: v2
managed:
enabled: true
Expand Down
2 changes: 2 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,7 @@ exclude = [
# it's auto generated, don't lint it
"*/datasets/v1/*",
"*/workflows/v1/*",
"*/tilebox/v1/*",
]

[tool.ruff.lint]
Expand Down Expand Up @@ -118,6 +119,7 @@ ignore = [
# it's auto generated
"**/datasets/v1",
"**/workflows/v1",
"**/tilebox/v1",
]

# pyright needs to have all the dependencies installed to be able to type check
Expand Down
2 changes: 1 addition & 1 deletion tilebox-datasets/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ packages = ["tilebox"]
packages = ["tilebox"]

[tool.coverage.run]
omit = ["tilebox/*/datasets/v1/*"]
omit = ["tilebox/*/datasets/v1/*", "tilebox/*/tilebox/v1/*"]

[tool.pytest.ini_options]
minversion = "6.0"
Expand Down
4 changes: 2 additions & 2 deletions tilebox-datasets/tests/data/collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@

from hypothesis.strategies import DrawFn, composite, integers, just, none, text, uuids

from tests.data.time_interval import time_intervals
from tests.query.time_interval import time_intervals
from tilebox.datasets.data.collection import Collection, CollectionInfo
from tilebox.datasets.data.time_interval import _EMPTY_TIME_INTERVAL
from tilebox.datasets.query.time_interval import _EMPTY_TIME_INTERVAL


@composite
Expand Down
6 changes: 3 additions & 3 deletions tilebox-datasets/tests/data/data_access.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
from hypothesis.strategies import DrawFn, booleans, composite, none, one_of, sampled_from
from shapely import Geometry

from tests.data.datapoint import datapoint_intervals
from tests.data.time_interval import time_intervals
from tests.data.well_known_types import shapely_polygons
from tests.query.datapoint import id_intervals
from tests.query.time_interval import time_intervals
from tilebox.datasets.data.data_access import (
QueryFilters,
SpatialCoordinateSystem,
Expand Down Expand Up @@ -55,6 +55,6 @@ def spatial_filters(draw: DrawFn) -> SpatialFilter:
@composite
def query_filters(draw: DrawFn) -> QueryFilters:
"""A hypothesis strategy for generating random query filters"""
temporal_extent = draw(one_of(time_intervals(), datapoint_intervals()))
temporal_extent = draw(one_of(time_intervals(), id_intervals()))
spatial_extent = draw(spatial_filters() | none())
return QueryFilters(temporal_extent, spatial_extent)
43 changes: 4 additions & 39 deletions tilebox-datasets/tests/data/datapoint.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,6 @@
)

from tests.data.datasets import example_dataset_type_url
from tests.data.pagination import paginations
from tests.data.time_interval import i64_datetimes
from tests.data.well_known_types import (
datetime_messages,
duration_messages,
Expand All @@ -31,44 +29,11 @@
vec3_messages,
)
from tests.example_dataset.example_dataset_pb2 import ExampleDatapoint
from tilebox.datasets.data.datapoint import (
AnyMessage,
DatapointInterval,
DatapointIntervalLike,
IngestResponse,
QueryResultPage,
RepeatedAny,
)
from tilebox.datasets.data.time_interval import (
datetime_to_timestamp,
)
from tests.query.pagination import paginations
from tests.query.time_interval import i64_datetimes
from tilebox.datasets.data.datapoint import AnyMessage, IngestResponse, QueryResultPage, RepeatedAny
from tilebox.datasets.datasets.v1 import core_pb2


@composite
def datapoint_intervals(draw: DrawFn) -> DatapointInterval:
"""A hypothesis strategy for generating random datapoint intervals"""
start = draw(uuids(version=4))
end = draw(uuids(version=4))
start, end = min(start, end), max(start, end) # make sure start is before end

start_exclusive = draw(booleans())
end_inclusive = draw(booleans())

return DatapointInterval(start, end, start_exclusive, end_inclusive)


@composite
def datapoint_intervals_like(draw: DrawFn) -> DatapointIntervalLike:
"""A hypothesis strategy for generating random datapoint intervals"""
interval = draw(datapoint_intervals())
return draw(
one_of(
just(interval),
just((str(interval.start_id), str(interval.end_id))),
just((interval.start_id, interval.end_id)),
)
)
from tilebox.datasets.query.time_interval import datetime_to_timestamp


@composite
Expand Down
2 changes: 1 addition & 1 deletion tilebox-datasets/tests/data/test_collection.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from tests.data.collection import collection_infos, collections
from tilebox.datasets.data.collection import Collection, CollectionInfo
from tilebox.datasets.data.time_interval import _EMPTY_TIME_INTERVAL
from tilebox.datasets.query.time_interval import _EMPTY_TIME_INTERVAL


@given(collections())
Expand Down
36 changes: 2 additions & 34 deletions tilebox-datasets/tests/data/test_datapoint.py
Original file line number Diff line number Diff line change
@@ -1,39 +1,7 @@
from hypothesis import given

from tests.data.datapoint import (
anys,
datapoint_intervals,
datapoint_intervals_like,
ingest_datapoints_responses,
query_result_pages,
repeated_anys,
)
from tilebox.datasets.data.datapoint import (
AnyMessage,
DatapointInterval,
DatapointIntervalLike,
IngestResponse,
QueryResultPage,
RepeatedAny,
)


@given(datapoint_intervals())
def test_datapoint_intervals_to_message_and_back(interval: DatapointInterval) -> None:
assert DatapointInterval.from_message(interval.to_message()) == interval


@given(datapoint_intervals_like())
def test_parse_datapoint_interval_from_tuple(interval: DatapointIntervalLike) -> None:
parsed = DatapointInterval.parse(interval)

if isinstance(interval, DatapointInterval):
assert parsed == interval, f"Failed parsing interval from {interval}"
assert parsed.start_exclusive == interval.start_exclusive
assert parsed.end_inclusive == interval.end_inclusive
else:
assert not parsed.start_exclusive
assert parsed.end_inclusive
from tests.data.datapoint import anys, ingest_datapoints_responses, query_result_pages, repeated_anys
from tilebox.datasets.data.datapoint import AnyMessage, IngestResponse, QueryResultPage, RepeatedAny


@given(anys())
Expand Down
4 changes: 2 additions & 2 deletions tilebox-datasets/tests/data/well_known_types.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
)
from shapely import MultiPolygon, Polygon, box, to_wkb

from tests.data.time_interval import i64_datetimes
from tilebox.datasets.data.time_interval import datetime_to_timestamp
from tests.query.time_interval import i64_datetimes
from tilebox.datasets.datasets.v1 import well_known_types_pb2
from tilebox.datasets.query.time_interval import datetime_to_timestamp


@composite
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@

from tests.data.datapoint import example_datapoints
from tests.example_dataset.example_dataset_pb2 import ExampleDatapoint
from tilebox.datasets.data.time_interval import timestamp_to_datetime, us_to_datetime
from tilebox.datasets.protobuf_conversion.protobuf_xarray import MessageToXarrayConverter
from tilebox.datasets.query.time_interval import timestamp_to_datetime, us_to_datetime


@given(example_datapoints(generated_fields=True, missing_fields=False))
Expand Down
29 changes: 29 additions & 0 deletions tilebox-datasets/tests/query/datapoint.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from hypothesis.strategies import DrawFn, booleans, composite, just, one_of, uuids

from tilebox.datasets.query.id_interval import IDInterval, IDIntervalLike


@composite
def id_intervals(draw: DrawFn) -> IDInterval:
"""A hypothesis strategy for generating random id intervals"""
start = draw(uuids(version=4))
end = draw(uuids(version=4))
start, end = min(start, end), max(start, end) # make sure start is before end

start_exclusive = draw(booleans())
end_inclusive = draw(booleans())

return IDInterval(start, end, start_exclusive, end_inclusive)


@composite
def id_intervals_like(draw: DrawFn) -> IDIntervalLike:
"""A hypothesis strategy for generating random id intervals"""
interval = draw(id_intervals())
return draw(
one_of(
just(interval),
just((str(interval.start_id), str(interval.end_id))),
just((interval.start_id, interval.end_id)),
)
)
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
from hypothesis.strategies import (
DrawFn,
booleans,
composite,
integers,
uuids,
)
from hypothesis.strategies import DrawFn, booleans, composite, integers, uuids

from tilebox.datasets.data.pagination import Pagination
from tilebox.datasets.query.pagination import Pagination


@composite
Expand Down
22 changes: 22 additions & 0 deletions tilebox-datasets/tests/query/test_datapoint.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from hypothesis import given
from tests.query.datapoint import id_intervals, id_intervals_like

from tilebox.datasets.query.id_interval import IDInterval, IDIntervalLike


@given(id_intervals())
def test_id_intervals_to_message_and_back(interval: IDInterval) -> None:
assert IDInterval.from_message(interval.to_message()) == interval


@given(id_intervals_like())
def test_parse_id_interval_from_tuple(interval: IDIntervalLike) -> None:
parsed = IDInterval.parse(interval)

if isinstance(interval, IDInterval):
assert parsed == interval, f"Failed parsing interval from {interval}"
assert parsed.start_exclusive == interval.start_exclusive
assert parsed.end_inclusive == interval.end_inclusive
else:
assert not parsed.start_exclusive
assert parsed.end_inclusive
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from hypothesis import given
from tests.query.pagination import paginations

from tests.data.pagination import paginations
from tilebox.datasets.data.pagination import Pagination
from tilebox.datasets.query.pagination import Pagination


@given(paginations())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
from hypothesis import given
from hypothesis.strategies import datetimes
from pandas.core.tools.datetimes import DatetimeScalar
from tests.query.time_interval import datetime_scalars, time_intervals

from tests.data.time_interval import datetime_scalars, time_intervals
from tilebox.datasets.data.time_interval import (
from tilebox.datasets.query.time_interval import (
_SMALLEST_POSSIBLE_TIMEDELTA,
TimeInterval,
_convert_to_datetime,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,10 @@
from datetime import datetime, timezone

import pandas as pd
from hypothesis.strategies import (
DrawFn,
booleans,
composite,
datetimes,
just,
sampled_from,
)
from hypothesis.strategies import DrawFn, booleans, composite, datetimes, just, sampled_from
from pandas.core.tools.datetimes import DatetimeScalar

from tilebox.datasets.data.time_interval import (
TimeInterval,
datetime_to_us,
)
from tilebox.datasets.query.time_interval import TimeInterval, datetime_to_us

# The minimum and maximum datetime that can be represented by pandas.Timestamp and are therefore supported
# by the pd.to_datetime function which we are using for parsing datetime scalars.
Expand Down
2 changes: 1 addition & 1 deletion tilebox-datasets/tests/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from _tilebox.grpc.replay import open_recording_channel, open_replay_channel
from tilebox.datasets import Client, DatasetClient
from tilebox.datasets.data.datapoint import QueryResultPage
from tilebox.datasets.data.time_interval import us_to_datetime
from tilebox.datasets.query.time_interval import us_to_datetime


def replay_client(replay_file: str, assert_request_matches: bool = True) -> Client:
Expand Down
14 changes: 7 additions & 7 deletions tilebox-datasets/tests/test_timeseries.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,6 @@
from tilebox.datasets.data.collection import Collection, CollectionInfo
from tilebox.datasets.data.datapoint import AnyMessage, QueryResultPage
from tilebox.datasets.data.datasets import Dataset
from tilebox.datasets.data.time_interval import (
_EMPTY_TIME_INTERVAL,
TimeInterval,
_convert_to_datetime,
timestamp_to_datetime,
)
from tilebox.datasets.data.uuid import uuid_message_to_uuid, uuid_to_uuid_message
from tilebox.datasets.datasets.v1.collections_pb2 import (
CreateCollectionRequest,
DeleteCollectionRequest,
Expand All @@ -36,7 +29,14 @@
from tilebox.datasets.datasets.v1.core_pb2 import Collection as CollectionMessage
from tilebox.datasets.datasets.v1.core_pb2 import CollectionInfo as CollectionInfoMessage
from tilebox.datasets.datasets.v1.core_pb2 import CollectionInfos as CollectionInfosMessage
from tilebox.datasets.query.time_interval import (
_EMPTY_TIME_INTERVAL,
TimeInterval,
_convert_to_datetime,
timestamp_to_datetime,
)
from tilebox.datasets.service import TileboxDatasetService
from tilebox.datasets.uuid import uuid_message_to_uuid, uuid_to_uuid_message


def _mocked_dataset() -> tuple[DatasetClient, MagicMock]:
Expand Down
Loading
Loading