tilebox-datasets 0.37.0__py3-none-any.whl → 0.38.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- tilebox/datasets/aio/dataset.py +15 -0
- tilebox/datasets/client.py +4 -1
- tilebox/datasets/data/time_interval.py +7 -0
- tilebox/datasets/data/timeseries.py +7 -1
- tilebox/datasets/datasetsv1/collections_pb2.py +9 -5
- tilebox/datasets/datasetsv1/collections_pb2.pyi +12 -0
- tilebox/datasets/datasetsv1/collections_pb2_grpc.py +43 -0
- tilebox/datasets/datasetsv1/core_pb2.py +8 -8
- tilebox/datasets/datasetsv1/core_pb2.pyi +4 -2
- tilebox/datasets/service.py +13 -0
- tilebox/datasets/sync/dataset.py +15 -0
- {tilebox_datasets-0.37.0.dist-info → tilebox_datasets-0.38.0.dist-info}/METADATA +3 -3
- {tilebox_datasets-0.37.0.dist-info → tilebox_datasets-0.38.0.dist-info}/RECORD +14 -14
- {tilebox_datasets-0.37.0.dist-info → tilebox_datasets-0.38.0.dist-info}/WHEEL +0 -0
tilebox/datasets/aio/dataset.py
CHANGED
|
@@ -127,6 +127,21 @@ class DatasetClient:
|
|
|
127
127
|
|
|
128
128
|
return CollectionClient(self, info)
|
|
129
129
|
|
|
130
|
+
async def delete_collection(self, collection: "str | UUID | CollectionClient") -> None:
|
|
131
|
+
"""Delete a collection.
|
|
132
|
+
|
|
133
|
+
Args:
|
|
134
|
+
collection: The collection to delete or a collection name or a collection id.
|
|
135
|
+
"""
|
|
136
|
+
if isinstance(collection, CollectionClient):
|
|
137
|
+
collection_id = collection._collection.id
|
|
138
|
+
elif isinstance(collection, UUID):
|
|
139
|
+
collection_id = collection
|
|
140
|
+
else: # str
|
|
141
|
+
collection_id = (await self.collection(collection))._collection.id
|
|
142
|
+
|
|
143
|
+
await self._service.delete_collection(self._dataset.id, collection_id)
|
|
144
|
+
|
|
130
145
|
def __repr__(self) -> str:
|
|
131
146
|
return f"{self.name} [Timeseries Dataset]: {self._dataset.summary}"
|
|
132
147
|
|
tilebox/datasets/client.py
CHANGED
|
@@ -6,6 +6,7 @@ from uuid import UUID
|
|
|
6
6
|
from loguru import logger
|
|
7
7
|
from promise import Promise
|
|
8
8
|
|
|
9
|
+
from _tilebox.grpc.channel import parse_channel_info
|
|
9
10
|
from tilebox.datasets.data.datasets import Dataset, DatasetGroup, ListDatasetsResponse
|
|
10
11
|
from tilebox.datasets.data.uuid import as_uuid
|
|
11
12
|
from tilebox.datasets.group import Group
|
|
@@ -66,11 +67,13 @@ class Client:
|
|
|
66
67
|
def token_from_env(url: str, token: str | None) -> str | None:
|
|
67
68
|
if token is None: # if no token is provided, try to get it from the environment
|
|
68
69
|
token = os.environ.get("TILEBOX_API_KEY", None)
|
|
69
|
-
|
|
70
|
+
|
|
71
|
+
if token is None and parse_channel_info(url).address == "api.tilebox.com":
|
|
70
72
|
raise ValueError(
|
|
71
73
|
"No API key provided and no TILEBOX_API_KEY environment variable set. Please specify an API key using "
|
|
72
74
|
"the token argument. For example: `Client(token='YOUR_TILEBOX_API_KEY')`"
|
|
73
75
|
)
|
|
76
|
+
|
|
74
77
|
return token
|
|
75
78
|
|
|
76
79
|
|
|
@@ -73,6 +73,13 @@ class TimeInterval:
|
|
|
73
73
|
a, b = self.to_half_open(), other.to_half_open()
|
|
74
74
|
return (a.start, a.end) == (b.start, b.end)
|
|
75
75
|
|
|
76
|
+
def __hash__(self) -> int:
|
|
77
|
+
"""Hash the time interval"""
|
|
78
|
+
|
|
79
|
+
# if two intervals are equal, they should have the same hash, so we convert to half-open intervals first
|
|
80
|
+
half_open = self.to_half_open()
|
|
81
|
+
return hash((half_open.start, half_open.end))
|
|
82
|
+
|
|
76
83
|
def __repr__(self) -> str:
|
|
77
84
|
return self.format()
|
|
78
85
|
|
|
@@ -21,7 +21,13 @@ class TimeseriesDatasetChunk:
|
|
|
21
21
|
@classmethod
|
|
22
22
|
def from_message(cls, chunk: timeseries_pb2.TimeseriesDatasetChunk) -> "TimeseriesDatasetChunk":
|
|
23
23
|
datapoint_interval = None
|
|
24
|
-
if
|
|
24
|
+
if (
|
|
25
|
+
chunk.datapoint_interval
|
|
26
|
+
and chunk.datapoint_interval.start_id
|
|
27
|
+
and chunk.datapoint_interval.end_id
|
|
28
|
+
and chunk.datapoint_interval.start_id.uuid
|
|
29
|
+
and chunk.datapoint_interval.end_id.uuid
|
|
30
|
+
):
|
|
25
31
|
datapoint_interval = DatapointInterval.from_message(chunk.datapoint_interval)
|
|
26
32
|
|
|
27
33
|
time_interval = None
|
|
@@ -25,7 +25,7 @@ _sym_db = _symbol_database.Default()
|
|
|
25
25
|
from tilebox.datasets.datasetsv1 import core_pb2 as datasets_dot_v1_dot_core__pb2
|
|
26
26
|
|
|
27
27
|
|
|
28
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x64\x61tasets/v1/collections.proto\x12\x0b\x64\x61tasets.v1\x1a\x16\x64\x61tasets/v1/core.proto\"]\n\x17\x43reateCollectionRequest\x12.\n\ndataset_id\x18\x01 \x01(\x0b\x32\x0f.datasets.v1.IDR\tdatasetId\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\"\xc1\x01\n\x1aGetCollectionByNameRequest\x12\'\n\x0f\x63ollection_name\x18\x01 \x01(\tR\x0e\x63ollectionName\x12+\n\x11with_availability\x18\x02 \x01(\x08R\x10withAvailability\x12\x1d\n\nwith_count\x18\x03 \x01(\x08R\twithCount\x12.\n\ndataset_id\x18\x04 \x01(\x0b\x32\x0f.datasets.v1.IDR\tdatasetId\"\x94\x01\n\x16ListCollectionsRequest\x12.\n\ndataset_id\x18\x01 \x01(\x0b\x32\x0f.datasets.v1.IDR\tdatasetId\x12+\n\x11with_availability\x18\x02 \x01(\x08R\x10withAvailability\x12\x1d\n\nwith_count\x18\x03 \x01(\x08R\twithCount2\
|
|
28
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1d\x64\x61tasets/v1/collections.proto\x12\x0b\x64\x61tasets.v1\x1a\x16\x64\x61tasets/v1/core.proto\"]\n\x17\x43reateCollectionRequest\x12.\n\ndataset_id\x18\x01 \x01(\x0b\x32\x0f.datasets.v1.IDR\tdatasetId\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\"\xc1\x01\n\x1aGetCollectionByNameRequest\x12\'\n\x0f\x63ollection_name\x18\x01 \x01(\tR\x0e\x63ollectionName\x12+\n\x11with_availability\x18\x02 \x01(\x08R\x10withAvailability\x12\x1d\n\nwith_count\x18\x03 \x01(\x08R\twithCount\x12.\n\ndataset_id\x18\x04 \x01(\x0b\x32\x0f.datasets.v1.IDR\tdatasetId\"\x7f\n\x17\x44\x65leteCollectionRequest\x12\x34\n\rcollection_id\x18\x01 \x01(\x0b\x32\x0f.datasets.v1.IDR\x0c\x63ollectionId\x12.\n\ndataset_id\x18\x02 \x01(\x0b\x32\x0f.datasets.v1.IDR\tdatasetId\"\x1a\n\x18\x44\x65leteCollectionResponse\"\x94\x01\n\x16ListCollectionsRequest\x12.\n\ndataset_id\x18\x01 \x01(\x0b\x32\x0f.datasets.v1.IDR\tdatasetId\x12+\n\x11with_availability\x18\x02 \x01(\x08R\x10withAvailability\x12\x1d\n\nwith_count\x18\x03 \x01(\x08R\twithCount2\x86\x03\n\x11\x43ollectionService\x12W\n\x10\x43reateCollection\x12$.datasets.v1.CreateCollectionRequest\x1a\x1b.datasets.v1.CollectionInfo\"\x00\x12]\n\x13GetCollectionByName\x12\'.datasets.v1.GetCollectionByNameRequest\x1a\x1b.datasets.v1.CollectionInfo\"\x00\x12\x61\n\x10\x44\x65leteCollection\x12$.datasets.v1.DeleteCollectionRequest\x1a%.datasets.v1.DeleteCollectionResponse\"\x00\x12V\n\x0fListCollections\x12#.datasets.v1.ListCollectionsRequest\x1a\x1c.datasets.v1.CollectionInfos\"\x00\x42\xb2\x01\n\x0f\x63om.datasets.v1B\x10\x43ollectionsProtoP\x01Z@github.com/tilebox/tilebox-go/protogen/go/datasets/v1;datasetsv1\xa2\x02\x03\x44XX\xaa\x02\x0b\x44\x61tasets.V1\xca\x02\x0b\x44\x61tasets\\V1\xe2\x02\x17\x44\x61tasets\\V1\\GPBMetadata\xea\x02\x0c\x44\x61tasets::V1b\x06proto3')
|
|
29
29
|
|
|
30
30
|
_globals = globals()
|
|
31
31
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -37,8 +37,12 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
|
37
37
|
_globals['_CREATECOLLECTIONREQUEST']._serialized_end=163
|
|
38
38
|
_globals['_GETCOLLECTIONBYNAMEREQUEST']._serialized_start=166
|
|
39
39
|
_globals['_GETCOLLECTIONBYNAMEREQUEST']._serialized_end=359
|
|
40
|
-
_globals['
|
|
41
|
-
_globals['
|
|
42
|
-
_globals['
|
|
43
|
-
_globals['
|
|
40
|
+
_globals['_DELETECOLLECTIONREQUEST']._serialized_start=361
|
|
41
|
+
_globals['_DELETECOLLECTIONREQUEST']._serialized_end=488
|
|
42
|
+
_globals['_DELETECOLLECTIONRESPONSE']._serialized_start=490
|
|
43
|
+
_globals['_DELETECOLLECTIONRESPONSE']._serialized_end=516
|
|
44
|
+
_globals['_LISTCOLLECTIONSREQUEST']._serialized_start=519
|
|
45
|
+
_globals['_LISTCOLLECTIONSREQUEST']._serialized_end=667
|
|
46
|
+
_globals['_COLLECTIONSERVICE']._serialized_start=670
|
|
47
|
+
_globals['_COLLECTIONSERVICE']._serialized_end=1060
|
|
44
48
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -25,6 +25,18 @@ class GetCollectionByNameRequest(_message.Message):
|
|
|
25
25
|
dataset_id: _core_pb2.ID
|
|
26
26
|
def __init__(self, collection_name: _Optional[str] = ..., with_availability: bool = ..., with_count: bool = ..., dataset_id: _Optional[_Union[_core_pb2.ID, _Mapping]] = ...) -> None: ...
|
|
27
27
|
|
|
28
|
+
class DeleteCollectionRequest(_message.Message):
|
|
29
|
+
__slots__ = ("collection_id", "dataset_id")
|
|
30
|
+
COLLECTION_ID_FIELD_NUMBER: _ClassVar[int]
|
|
31
|
+
DATASET_ID_FIELD_NUMBER: _ClassVar[int]
|
|
32
|
+
collection_id: _core_pb2.ID
|
|
33
|
+
dataset_id: _core_pb2.ID
|
|
34
|
+
def __init__(self, collection_id: _Optional[_Union[_core_pb2.ID, _Mapping]] = ..., dataset_id: _Optional[_Union[_core_pb2.ID, _Mapping]] = ...) -> None: ...
|
|
35
|
+
|
|
36
|
+
class DeleteCollectionResponse(_message.Message):
|
|
37
|
+
__slots__ = ()
|
|
38
|
+
def __init__(self) -> None: ...
|
|
39
|
+
|
|
28
40
|
class ListCollectionsRequest(_message.Message):
|
|
29
41
|
__slots__ = ("dataset_id", "with_availability", "with_count")
|
|
30
42
|
DATASET_ID_FIELD_NUMBER: _ClassVar[int]
|
|
@@ -26,6 +26,11 @@ class CollectionServiceStub(object):
|
|
|
26
26
|
request_serializer=datasets_dot_v1_dot_collections__pb2.GetCollectionByNameRequest.SerializeToString,
|
|
27
27
|
response_deserializer=datasets_dot_v1_dot_core__pb2.CollectionInfo.FromString,
|
|
28
28
|
_registered_method=True)
|
|
29
|
+
self.DeleteCollection = channel.unary_unary(
|
|
30
|
+
'/datasets.v1.CollectionService/DeleteCollection',
|
|
31
|
+
request_serializer=datasets_dot_v1_dot_collections__pb2.DeleteCollectionRequest.SerializeToString,
|
|
32
|
+
response_deserializer=datasets_dot_v1_dot_collections__pb2.DeleteCollectionResponse.FromString,
|
|
33
|
+
_registered_method=True)
|
|
29
34
|
self.ListCollections = channel.unary_unary(
|
|
30
35
|
'/datasets.v1.CollectionService/ListCollections',
|
|
31
36
|
request_serializer=datasets_dot_v1_dot_collections__pb2.ListCollectionsRequest.SerializeToString,
|
|
@@ -49,6 +54,12 @@ class CollectionServiceServicer(object):
|
|
|
49
54
|
context.set_details('Method not implemented!')
|
|
50
55
|
raise NotImplementedError('Method not implemented!')
|
|
51
56
|
|
|
57
|
+
def DeleteCollection(self, request, context):
|
|
58
|
+
"""Missing associated documentation comment in .proto file."""
|
|
59
|
+
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
60
|
+
context.set_details('Method not implemented!')
|
|
61
|
+
raise NotImplementedError('Method not implemented!')
|
|
62
|
+
|
|
52
63
|
def ListCollections(self, request, context):
|
|
53
64
|
"""Missing associated documentation comment in .proto file."""
|
|
54
65
|
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
|
@@ -68,6 +79,11 @@ def add_CollectionServiceServicer_to_server(servicer, server):
|
|
|
68
79
|
request_deserializer=datasets_dot_v1_dot_collections__pb2.GetCollectionByNameRequest.FromString,
|
|
69
80
|
response_serializer=datasets_dot_v1_dot_core__pb2.CollectionInfo.SerializeToString,
|
|
70
81
|
),
|
|
82
|
+
'DeleteCollection': grpc.unary_unary_rpc_method_handler(
|
|
83
|
+
servicer.DeleteCollection,
|
|
84
|
+
request_deserializer=datasets_dot_v1_dot_collections__pb2.DeleteCollectionRequest.FromString,
|
|
85
|
+
response_serializer=datasets_dot_v1_dot_collections__pb2.DeleteCollectionResponse.SerializeToString,
|
|
86
|
+
),
|
|
71
87
|
'ListCollections': grpc.unary_unary_rpc_method_handler(
|
|
72
88
|
servicer.ListCollections,
|
|
73
89
|
request_deserializer=datasets_dot_v1_dot_collections__pb2.ListCollectionsRequest.FromString,
|
|
@@ -139,6 +155,33 @@ class CollectionService(object):
|
|
|
139
155
|
metadata,
|
|
140
156
|
_registered_method=True)
|
|
141
157
|
|
|
158
|
+
@staticmethod
|
|
159
|
+
def DeleteCollection(request,
|
|
160
|
+
target,
|
|
161
|
+
options=(),
|
|
162
|
+
channel_credentials=None,
|
|
163
|
+
call_credentials=None,
|
|
164
|
+
insecure=False,
|
|
165
|
+
compression=None,
|
|
166
|
+
wait_for_ready=None,
|
|
167
|
+
timeout=None,
|
|
168
|
+
metadata=None):
|
|
169
|
+
return grpc.experimental.unary_unary(
|
|
170
|
+
request,
|
|
171
|
+
target,
|
|
172
|
+
'/datasets.v1.CollectionService/DeleteCollection',
|
|
173
|
+
datasets_dot_v1_dot_collections__pb2.DeleteCollectionRequest.SerializeToString,
|
|
174
|
+
datasets_dot_v1_dot_collections__pb2.DeleteCollectionResponse.FromString,
|
|
175
|
+
options,
|
|
176
|
+
channel_credentials,
|
|
177
|
+
insecure,
|
|
178
|
+
call_credentials,
|
|
179
|
+
compression,
|
|
180
|
+
wait_for_ready,
|
|
181
|
+
timeout,
|
|
182
|
+
metadata,
|
|
183
|
+
_registered_method=True)
|
|
184
|
+
|
|
142
185
|
@staticmethod
|
|
143
186
|
def ListCollections(request,
|
|
144
187
|
target,
|
|
@@ -26,7 +26,7 @@ from tilebox.datasets.datasetsv1 import dataset_type_pb2 as datasets_dot_v1_dot_
|
|
|
26
26
|
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x64\x61tasets/v1/core.proto\x12\x0b\x64\x61tasets.v1\x1a\x1e\x64\x61tasets/v1/dataset_type.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x18\n\x02ID\x12\x12\n\x04uuid\x18\x01 \x01(\x0cR\x04uuid\"\xce\x01\n\x0cTimeInterval\x12\x39\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x35\n\x08\x65nd_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x65ndTime\x12\'\n\x0fstart_exclusive\x18\x03 \x01(\x08R\x0estartExclusive\x12#\n\rend_inclusive\x18\x04 \x01(\x08R\x0c\x65ndInclusive\"\xb5\x01\n\x11\x44\x61tapointInterval\x12*\n\x08start_id\x18\x01 \x01(\x0b\x32\x0f.datasets.v1.IDR\x07startId\x12&\n\x06\x65nd_id\x18\x02 \x01(\x0b\x32\x0f.datasets.v1.IDR\x05\x65ndId\x12\'\n\x0fstart_exclusive\x18\x03 \x01(\x08R\x0estartExclusive\x12#\n\rend_inclusive\x18\x04 \x01(\x08R\x0c\x65ndInclusive\"v\n\x10LegacyPagination\x12\x19\n\x05limit\x18\x01 \x01(\x03H\x00R\x05limit\x88\x01\x01\x12*\n\x0estarting_after\x18\x02 \x01(\tH\x01R\rstartingAfter\x88\x01\x01\x42\x08\n\x06_limitB\x11\n\x0f_starting_after\"\x81\x01\n\nPagination\x12\x19\n\x05limit\x18\x01 \x01(\x03H\x00R\x05limit\x88\x01\x01\x12;\n\x0estarting_after\x18\x02 \x01(\x0b\x32\x0f.datasets.v1.IDH\x01R\rstartingAfter\x88\x01\x01\x42\x08\n\x06_limitB\x11\n\x0f_starting_after\"6\n\x03\x41ny\x12\x19\n\x08type_url\x18\x01 \x01(\tR\x07typeUrl\x12\x14\n\x05value\x18\x02 \x01(\x0cR\x05value\">\n\x0bRepeatedAny\x12\x19\n\x08type_url\x18\x01 \x01(\tR\x07typeUrl\x12\x14\n\x05value\x18\x02 \x03(\x0cR\x05value\"\xad\x01\n\x11\x44\x61tapointMetadata\x12\x39\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\teventTime\x12\x41\n\x0eingestion_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ringestionTime\x12\x13\n\x02id\x18\x03 \x01(\tH\x00R\x02id\x88\x01\x01\x42\x05\n\x03_id\"n\n\nDatapoints\x12\x32\n\x04meta\x18\x01 \x03(\x0b\x32\x1e.datasets.v1.DatapointMetadataR\x04meta\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.datasets.v1.RepeatedAnyR\x04\x64\x61ta\"\xc0\x01\n\rDatapointPage\x12\x32\n\x04meta\x18\x01 \x03(\x0b\x32\x1e.datasets.v1.DatapointMetadataR\x04meta\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.datasets.v1.RepeatedAnyR\x04\x64\x61ta\x12?\n\tnext_page\x18\x03 \x01(\x0b\x32\x1d.datasets.v1.LegacyPaginationH\x00R\x08nextPage\x88\x01\x01\x42\x0c\n\n_next_page\"e\n\tDatapoint\x12\x32\n\x04meta\x18\x01 \x01(\x0b\x32\x1e.datasets.v1.DatapointMetadataR\x04meta\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x10.datasets.v1.AnyR\x04\x64\x61ta\"^\n\nCollection\x12\x1b\n\tlegacy_id\x18\x01 \x01(\tR\x08legacyId\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x1f\n\x02id\x18\x03 \x01(\x0b\x32\x0f.datasets.v1.IDR\x02id\"\xc3\x01\n\x0e\x43ollectionInfo\x12\x37\n\ncollection\x18\x01 \x01(\x0b\x32\x17.datasets.v1.CollectionR\ncollection\x12\x42\n\x0c\x61vailability\x18\x02 \x01(\x0b\x32\x19.datasets.v1.TimeIntervalH\x00R\x0c\x61vailability\x88\x01\x01\x12\x19\n\x05\x63ount\x18\x03 \x01(\x04H\x01R\x05\x63ount\x88\x01\x01\x42\x0f\n\r_availabilityB\x08\n\x06_count\"B\n\x0f\x43ollectionInfos\x12/\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x1b.datasets.v1.CollectionInfoR\x04\x64\x61ta\"\
|
|
29
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x16\x64\x61tasets/v1/core.proto\x12\x0b\x64\x61tasets.v1\x1a\x1e\x64\x61tasets/v1/dataset_type.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\x18\n\x02ID\x12\x12\n\x04uuid\x18\x01 \x01(\x0cR\x04uuid\"\xce\x01\n\x0cTimeInterval\x12\x39\n\nstart_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\tstartTime\x12\x35\n\x08\x65nd_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\x07\x65ndTime\x12\'\n\x0fstart_exclusive\x18\x03 \x01(\x08R\x0estartExclusive\x12#\n\rend_inclusive\x18\x04 \x01(\x08R\x0c\x65ndInclusive\"\xb5\x01\n\x11\x44\x61tapointInterval\x12*\n\x08start_id\x18\x01 \x01(\x0b\x32\x0f.datasets.v1.IDR\x07startId\x12&\n\x06\x65nd_id\x18\x02 \x01(\x0b\x32\x0f.datasets.v1.IDR\x05\x65ndId\x12\'\n\x0fstart_exclusive\x18\x03 \x01(\x08R\x0estartExclusive\x12#\n\rend_inclusive\x18\x04 \x01(\x08R\x0c\x65ndInclusive\"v\n\x10LegacyPagination\x12\x19\n\x05limit\x18\x01 \x01(\x03H\x00R\x05limit\x88\x01\x01\x12*\n\x0estarting_after\x18\x02 \x01(\tH\x01R\rstartingAfter\x88\x01\x01\x42\x08\n\x06_limitB\x11\n\x0f_starting_after\"\x81\x01\n\nPagination\x12\x19\n\x05limit\x18\x01 \x01(\x03H\x00R\x05limit\x88\x01\x01\x12;\n\x0estarting_after\x18\x02 \x01(\x0b\x32\x0f.datasets.v1.IDH\x01R\rstartingAfter\x88\x01\x01\x42\x08\n\x06_limitB\x11\n\x0f_starting_after\"6\n\x03\x41ny\x12\x19\n\x08type_url\x18\x01 \x01(\tR\x07typeUrl\x12\x14\n\x05value\x18\x02 \x01(\x0cR\x05value\">\n\x0bRepeatedAny\x12\x19\n\x08type_url\x18\x01 \x01(\tR\x07typeUrl\x12\x14\n\x05value\x18\x02 \x03(\x0cR\x05value\"\xad\x01\n\x11\x44\x61tapointMetadata\x12\x39\n\nevent_time\x18\x01 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\teventTime\x12\x41\n\x0eingestion_time\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.TimestampR\ringestionTime\x12\x13\n\x02id\x18\x03 \x01(\tH\x00R\x02id\x88\x01\x01\x42\x05\n\x03_id\"n\n\nDatapoints\x12\x32\n\x04meta\x18\x01 \x03(\x0b\x32\x1e.datasets.v1.DatapointMetadataR\x04meta\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.datasets.v1.RepeatedAnyR\x04\x64\x61ta\"\xc0\x01\n\rDatapointPage\x12\x32\n\x04meta\x18\x01 \x03(\x0b\x32\x1e.datasets.v1.DatapointMetadataR\x04meta\x12,\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x18.datasets.v1.RepeatedAnyR\x04\x64\x61ta\x12?\n\tnext_page\x18\x03 \x01(\x0b\x32\x1d.datasets.v1.LegacyPaginationH\x00R\x08nextPage\x88\x01\x01\x42\x0c\n\n_next_page\"e\n\tDatapoint\x12\x32\n\x04meta\x18\x01 \x01(\x0b\x32\x1e.datasets.v1.DatapointMetadataR\x04meta\x12$\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x10.datasets.v1.AnyR\x04\x64\x61ta\"^\n\nCollection\x12\x1b\n\tlegacy_id\x18\x01 \x01(\tR\x08legacyId\x12\x12\n\x04name\x18\x02 \x01(\tR\x04name\x12\x1f\n\x02id\x18\x03 \x01(\x0b\x32\x0f.datasets.v1.IDR\x02id\"\xc3\x01\n\x0e\x43ollectionInfo\x12\x37\n\ncollection\x18\x01 \x01(\x0b\x32\x17.datasets.v1.CollectionR\ncollection\x12\x42\n\x0c\x61vailability\x18\x02 \x01(\x0b\x32\x19.datasets.v1.TimeIntervalH\x00R\x0c\x61vailability\x88\x01\x01\x12\x19\n\x05\x63ount\x18\x03 \x01(\x04H\x01R\x05\x63ount\x88\x01\x01\x42\x0f\n\r_availabilityB\x08\n\x06_count\"B\n\x0f\x43ollectionInfos\x12/\n\x04\x64\x61ta\x18\x01 \x03(\x0b\x32\x1b.datasets.v1.CollectionInfoR\x04\x64\x61ta\"\xbb\x03\n\x07\x44\x61taset\x12\x1f\n\x02id\x18\x01 \x01(\x0b\x32\x0f.datasets.v1.IDR\x02id\x12*\n\x08group_id\x18\x02 \x01(\x0b\x32\x0f.datasets.v1.IDR\x07groupId\x12.\n\x04type\x18\x03 \x01(\x0b\x32\x1a.datasets.v1.AnnotatedTypeR\x04type\x12\x1b\n\tcode_name\x18\x04 \x01(\tR\x08\x63odeName\x12\x12\n\x04name\x18\x05 \x01(\tR\x04name\x12\x18\n\x07summary\x18\x06 \x01(\tR\x07summary\x12\x12\n\x04icon\x18\x07 \x01(\tR\x04icon\x12 \n\x0b\x64\x65scription\x18\x08 \x01(\tR\x0b\x64\x65scription\x12@\n\x0bpermissions\x18\n \x03(\x0e\x32\x1e.datasets.v1.DatasetPermissionR\x0bpermissions\x12\x37\n\nvisibility\x18\x0b \x01(\x0e\x32\x17.datasets.v1.VisibilityR\nvisibility\x12\x12\n\x04slug\x18\x0c \x01(\tR\x04slug\x12#\n\rtype_editable\x18\r \x01(\x08R\x0ctypeEditable\"\xa2\x01\n\x0c\x44\x61tasetGroup\x12\x1f\n\x02id\x18\x01 \x01(\x0b\x32\x0f.datasets.v1.IDR\x02id\x12,\n\tparent_id\x18\x02 \x01(\x0b\x32\x0f.datasets.v1.IDR\x08parentId\x12\x1b\n\tcode_name\x18\x03 \x01(\tR\x08\x63odeName\x12\x12\n\x04name\x18\x04 \x01(\tR\x04name\x12\x12\n\x04icon\x18\x05 \x01(\tR\x04icon*\x9b\x01\n\x11\x44\x61tasetPermission\x12\"\n\x1e\x44\x41TASET_PERMISSION_UNSPECIFIED\x10\x00\x12\"\n\x1e\x44\x41TASET_PERMISSION_ACCESS_DATA\x10\x01\x12!\n\x1d\x44\x41TASET_PERMISSION_WRITE_DATA\x10\x02\x12\x1b\n\x17\x44\x41TASET_PERMISSION_EDIT\x10\x03*v\n\nVisibility\x12\x1a\n\x16VISIBILITY_UNSPECIFIED\x10\x00\x12\x16\n\x12VISIBILITY_PRIVATE\x10\x01\x12\x1d\n\x19VISIBILITY_SHARED_WITH_ME\x10\x02\x12\x15\n\x11VISIBILITY_PUBLIC\x10\x03\x42\xab\x01\n\x0f\x63om.datasets.v1B\tCoreProtoP\x01Z@github.com/tilebox/tilebox-go/protogen/go/datasets/v1;datasetsv1\xa2\x02\x03\x44XX\xaa\x02\x0b\x44\x61tasets.V1\xca\x02\x0b\x44\x61tasets\\V1\xe2\x02\x17\x44\x61tasets\\V1\\GPBMetadata\xea\x02\x0c\x44\x61tasets::V1b\x06proto3')
|
|
30
30
|
|
|
31
31
|
_globals = globals()
|
|
32
32
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
@@ -34,10 +34,10 @@ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'datasets.v1.core_pb2', _glo
|
|
|
34
34
|
if not _descriptor._USE_C_DESCRIPTORS:
|
|
35
35
|
_globals['DESCRIPTOR']._loaded_options = None
|
|
36
36
|
_globals['DESCRIPTOR']._serialized_options = b'\n\017com.datasets.v1B\tCoreProtoP\001Z@github.com/tilebox/tilebox-go/protogen/go/datasets/v1;datasetsv1\242\002\003DXX\252\002\013Datasets.V1\312\002\013Datasets\\V1\342\002\027Datasets\\V1\\GPBMetadata\352\002\014Datasets::V1'
|
|
37
|
-
_globals['_DATASETPERMISSION']._serialized_start=
|
|
38
|
-
_globals['_DATASETPERMISSION']._serialized_end=
|
|
39
|
-
_globals['_VISIBILITY']._serialized_start=
|
|
40
|
-
_globals['_VISIBILITY']._serialized_end=
|
|
37
|
+
_globals['_DATASETPERMISSION']._serialized_start=2455
|
|
38
|
+
_globals['_DATASETPERMISSION']._serialized_end=2610
|
|
39
|
+
_globals['_VISIBILITY']._serialized_start=2612
|
|
40
|
+
_globals['_VISIBILITY']._serialized_end=2730
|
|
41
41
|
_globals['_ID']._serialized_start=104
|
|
42
42
|
_globals['_ID']._serialized_end=128
|
|
43
43
|
_globals['_TIMEINTERVAL']._serialized_start=131
|
|
@@ -67,7 +67,7 @@ if not _descriptor._USE_C_DESCRIPTORS:
|
|
|
67
67
|
_globals['_COLLECTIONINFOS']._serialized_start=1775
|
|
68
68
|
_globals['_COLLECTIONINFOS']._serialized_end=1841
|
|
69
69
|
_globals['_DATASET']._serialized_start=1844
|
|
70
|
-
_globals['_DATASET']._serialized_end=
|
|
71
|
-
_globals['_DATASETGROUP']._serialized_start=
|
|
72
|
-
_globals['_DATASETGROUP']._serialized_end=
|
|
70
|
+
_globals['_DATASET']._serialized_end=2287
|
|
71
|
+
_globals['_DATASETGROUP']._serialized_start=2290
|
|
72
|
+
_globals['_DATASETGROUP']._serialized_end=2452
|
|
73
73
|
# @@protoc_insertion_point(module_scope)
|
|
@@ -155,7 +155,7 @@ class CollectionInfos(_message.Message):
|
|
|
155
155
|
def __init__(self, data: _Optional[_Iterable[_Union[CollectionInfo, _Mapping]]] = ...) -> None: ...
|
|
156
156
|
|
|
157
157
|
class Dataset(_message.Message):
|
|
158
|
-
__slots__ = ("id", "group_id", "type", "code_name", "name", "summary", "icon", "description", "permissions", "visibility", "slug")
|
|
158
|
+
__slots__ = ("id", "group_id", "type", "code_name", "name", "summary", "icon", "description", "permissions", "visibility", "slug", "type_editable")
|
|
159
159
|
ID_FIELD_NUMBER: _ClassVar[int]
|
|
160
160
|
GROUP_ID_FIELD_NUMBER: _ClassVar[int]
|
|
161
161
|
TYPE_FIELD_NUMBER: _ClassVar[int]
|
|
@@ -167,6 +167,7 @@ class Dataset(_message.Message):
|
|
|
167
167
|
PERMISSIONS_FIELD_NUMBER: _ClassVar[int]
|
|
168
168
|
VISIBILITY_FIELD_NUMBER: _ClassVar[int]
|
|
169
169
|
SLUG_FIELD_NUMBER: _ClassVar[int]
|
|
170
|
+
TYPE_EDITABLE_FIELD_NUMBER: _ClassVar[int]
|
|
170
171
|
id: ID
|
|
171
172
|
group_id: ID
|
|
172
173
|
type: _dataset_type_pb2.AnnotatedType
|
|
@@ -178,7 +179,8 @@ class Dataset(_message.Message):
|
|
|
178
179
|
permissions: _containers.RepeatedScalarFieldContainer[DatasetPermission]
|
|
179
180
|
visibility: Visibility
|
|
180
181
|
slug: str
|
|
181
|
-
|
|
182
|
+
type_editable: bool
|
|
183
|
+
def __init__(self, id: _Optional[_Union[ID, _Mapping]] = ..., group_id: _Optional[_Union[ID, _Mapping]] = ..., type: _Optional[_Union[_dataset_type_pb2.AnnotatedType, _Mapping]] = ..., code_name: _Optional[str] = ..., name: _Optional[str] = ..., summary: _Optional[str] = ..., icon: _Optional[str] = ..., description: _Optional[str] = ..., permissions: _Optional[_Iterable[_Union[DatasetPermission, str]]] = ..., visibility: _Optional[_Union[Visibility, str]] = ..., slug: _Optional[str] = ..., type_editable: bool = ...) -> None: ...
|
|
182
184
|
|
|
183
185
|
class DatasetGroup(_message.Message):
|
|
184
186
|
__slots__ = ("id", "parent_id", "code_name", "name", "icon")
|
tilebox/datasets/service.py
CHANGED
|
@@ -18,6 +18,7 @@ from tilebox.datasets.data.uuid import must_uuid_to_uuid_message, uuid_to_uuid_m
|
|
|
18
18
|
from tilebox.datasets.datasetsv1 import core_pb2
|
|
19
19
|
from tilebox.datasets.datasetsv1.collections_pb2 import (
|
|
20
20
|
CreateCollectionRequest,
|
|
21
|
+
DeleteCollectionRequest,
|
|
21
22
|
GetCollectionByNameRequest,
|
|
22
23
|
ListCollectionsRequest,
|
|
23
24
|
)
|
|
@@ -83,6 +84,18 @@ class TileboxDatasetService:
|
|
|
83
84
|
req = CreateCollectionRequest(dataset_id=uuid_to_uuid_message(dataset_id), name=name)
|
|
84
85
|
return Promise.resolve(self._collection_service.CreateCollection(req)).then(CollectionInfo.from_message)
|
|
85
86
|
|
|
87
|
+
def delete_collection(self, dataset_id: UUID, collection_id: UUID) -> Promise[None]:
|
|
88
|
+
"""Delete a collection in a dataset by id.
|
|
89
|
+
|
|
90
|
+
Args:
|
|
91
|
+
dataset_id: The id of the dataset to delete the collection from.
|
|
92
|
+
collection_id: The id of the collection to delete.
|
|
93
|
+
"""
|
|
94
|
+
req = DeleteCollectionRequest(
|
|
95
|
+
dataset_id=uuid_to_uuid_message(dataset_id), collection_id=uuid_to_uuid_message(collection_id)
|
|
96
|
+
)
|
|
97
|
+
return Promise.resolve(self._collection_service.DeleteCollection(req))
|
|
98
|
+
|
|
86
99
|
def get_collections(
|
|
87
100
|
self, dataset_id: UUID, with_availability: bool = True, with_count: bool = False
|
|
88
101
|
) -> Promise[list[CollectionInfo]]:
|
tilebox/datasets/sync/dataset.py
CHANGED
|
@@ -124,6 +124,21 @@ class DatasetClient:
|
|
|
124
124
|
|
|
125
125
|
return CollectionClient(self, info)
|
|
126
126
|
|
|
127
|
+
def delete_collection(self, collection: "str | UUID | CollectionClient") -> None:
|
|
128
|
+
"""Delete a collection.
|
|
129
|
+
|
|
130
|
+
Args:
|
|
131
|
+
collection: The collection to delete or a collection name or a collection id.
|
|
132
|
+
"""
|
|
133
|
+
if isinstance(collection, CollectionClient):
|
|
134
|
+
collection_id = collection._collection.id
|
|
135
|
+
elif isinstance(collection, UUID):
|
|
136
|
+
collection_id = collection
|
|
137
|
+
else: # str
|
|
138
|
+
collection_id = self.collection(collection)._collection.id
|
|
139
|
+
|
|
140
|
+
self._service.delete_collection(self._dataset.id, collection_id).get()
|
|
141
|
+
|
|
127
142
|
def __repr__(self) -> str:
|
|
128
143
|
return f"{self.name} [Timeseries Dataset]: {self._dataset.summary}"
|
|
129
144
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tilebox-datasets
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.38.0
|
|
4
4
|
Summary: Access Tilebox datasets from Python
|
|
5
5
|
Project-URL: Homepage, https://tilebox.com
|
|
6
6
|
Project-URL: Documentation, https://docs.tilebox.com/datasets/introduction
|
|
@@ -98,7 +98,7 @@ Query data:
|
|
|
98
98
|
```python
|
|
99
99
|
s2a_l1c = sentinel2_msi.collection("S2A_S2MSI1C")
|
|
100
100
|
results = s2a_l1c.query(
|
|
101
|
-
temporal_extent=("
|
|
101
|
+
temporal_extent=("2025-03-01", "2025-06-01"),
|
|
102
102
|
show_progress=True
|
|
103
103
|
)
|
|
104
104
|
print(f"Found {results.sizes['time']} datapoints") # Found 220542 datapoints
|
|
@@ -115,7 +115,7 @@ area_of_interest = shape({
|
|
|
115
115
|
)
|
|
116
116
|
s2a_l1c = sentinel2_msi.collection("S2A_S2MSI1C")
|
|
117
117
|
results = s2a_l1c.query(
|
|
118
|
-
temporal_extent=("
|
|
118
|
+
temporal_extent=("2025-03-01", "2025-06-01"),
|
|
119
119
|
spatial_extent=area_of_interest,
|
|
120
120
|
show_progress=True
|
|
121
121
|
)
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
tilebox/datasets/__init__.py,sha256=4fI6ErCVb15KD_iPWIM6TUXTPgU8qrJVx3Cx7m7jeC8,824
|
|
2
|
-
tilebox/datasets/client.py,sha256=
|
|
2
|
+
tilebox/datasets/client.py,sha256=Uv_Pa3nTRKktbPTvxYDh1t_JwcjQMAoZjlqVJe4sZ6o,4081
|
|
3
3
|
tilebox/datasets/group.py,sha256=DoGl4w7Viy-l4kE9580dJOymP_B2pj3LRqvMNxvrYmU,1884
|
|
4
4
|
tilebox/datasets/message_pool.py,sha256=vndyPAR_X_rgGVvOTTBarkONTFpRSATB-3toO0oFUrw,1271
|
|
5
5
|
tilebox/datasets/progress.py,sha256=NC3YFnK4EqspCH0QPKsAHmkzoAl5KHedPWYvdS37Tp8,3516
|
|
6
|
-
tilebox/datasets/service.py,sha256=
|
|
6
|
+
tilebox/datasets/service.py,sha256=oEIznMBN75RNtFJFHtQ8I3hX5nnPRgD9oAlkwKT0MDQ,8895
|
|
7
7
|
tilebox/datasets/aio/__init__.py,sha256=0x_gddLgDsUCdl8MMZj4MPH1lp4HuOrExMHTjIFmM6s,405
|
|
8
8
|
tilebox/datasets/aio/client.py,sha256=NLA59PvFVRJtAhfYbRNYOvzJ9KnL6Uptji7pBYDNRcc,2126
|
|
9
|
-
tilebox/datasets/aio/dataset.py,sha256=
|
|
9
|
+
tilebox/datasets/aio/dataset.py,sha256=9zwEdS9QHRcv1VDaDTvz2ARQUEEP0dxuQHj7XcOtyOg,22535
|
|
10
10
|
tilebox/datasets/aio/pagination.py,sha256=ziLecwntNWqWqko61UK8fHxhf-enTcSHn0S3gDLcw9o,6105
|
|
11
11
|
tilebox/datasets/aio/timeseries.py,sha256=iQqIyh9TPL_gJz18GCxmtFJEwObR9S2rPsUohFYM8wQ,301
|
|
12
12
|
tilebox/datasets/data/__init__.py,sha256=vgHSaWXMuC5NLlMwC_VhwKd4nvpOn1NIL4YzaD58goQ,401
|
|
@@ -15,14 +15,14 @@ tilebox/datasets/data/data_access.py,sha256=Z0PuUem9I2TOdAiHiaLrZ-pC1UiNhr9dES0P
|
|
|
15
15
|
tilebox/datasets/data/datapoint.py,sha256=eM1fS8s5LjH6ENFxJckdl_-1v9KJAEGLFx5XWx8C1nk,6127
|
|
16
16
|
tilebox/datasets/data/datasets.py,sha256=mOp5MHE4oktUcUB9Q3n1emA_zv3LjXT6gc7m0rLzYNQ,4238
|
|
17
17
|
tilebox/datasets/data/pagination.py,sha256=X3mNNm3EF6m5dH3zwRkGvqqcnyFvEG5OrMVGX2Wm3wM,775
|
|
18
|
-
tilebox/datasets/data/time_interval.py,sha256=
|
|
19
|
-
tilebox/datasets/data/timeseries.py,sha256=
|
|
18
|
+
tilebox/datasets/data/time_interval.py,sha256=oTvaIXyXV9z0QTpBeOdFTdPxBMPaDpWqlT09Ovdpsrg,10014
|
|
19
|
+
tilebox/datasets/data/timeseries.py,sha256=qAhIOczp74E18sXQ2j5Mc3_NJd5zgosgSRm3lWQ3zlk,3632
|
|
20
20
|
tilebox/datasets/data/uuid.py,sha256=cmsGCBEj7AOTsCNN6JELaoI2CGQBVzxfL7JPs-x_JTw,1081
|
|
21
|
-
tilebox/datasets/datasetsv1/collections_pb2.py,sha256=
|
|
22
|
-
tilebox/datasets/datasetsv1/collections_pb2.pyi,sha256=
|
|
23
|
-
tilebox/datasets/datasetsv1/collections_pb2_grpc.py,sha256=
|
|
24
|
-
tilebox/datasets/datasetsv1/core_pb2.py,sha256=
|
|
25
|
-
tilebox/datasets/datasetsv1/core_pb2.pyi,sha256=
|
|
21
|
+
tilebox/datasets/datasetsv1/collections_pb2.py,sha256=InCBLsIDfkyP0OFr7e6Me-HfAGLiy6IdFFbXQ92rKZg,4024
|
|
22
|
+
tilebox/datasets/datasetsv1/collections_pb2.pyi,sha256=5EfzYW_7EmZzQncMO8OSdS3g62oSp-10hRhnWWSw4as,2266
|
|
23
|
+
tilebox/datasets/datasetsv1/collections_pb2_grpc.py,sha256=hOd8NlcFE6094e9F8FFbwitTpIqFETnsM23SDenv1bc,8970
|
|
24
|
+
tilebox/datasets/datasetsv1/core_pb2.py,sha256=o33EXCT38Gd_pEcMhDQEqtt8FnJI-E9BJPY7QdxBYqw,8257
|
|
25
|
+
tilebox/datasets/datasetsv1/core_pb2.pyi,sha256=znHcYvUL1zY4n1n7GJpMgwpB5YUz8ZAsN8R6E17EViU,9265
|
|
26
26
|
tilebox/datasets/datasetsv1/core_pb2_grpc.py,sha256=xYOs94SXiNYAlFodACnsXW5QovLsHY5tCk3p76RH5Zc,158
|
|
27
27
|
tilebox/datasets/datasetsv1/data_access_pb2.py,sha256=fOgy5ZQb9ojGUbFr6_NFDowYQfegXUidi9ljdJeIyKY,6182
|
|
28
28
|
tilebox/datasets/datasetsv1/data_access_pb2.pyi,sha256=maP2FKtta1nmQRyNLKvTPOlqA-LDEV-x8N6ZgMJQTak,5743
|
|
@@ -48,9 +48,9 @@ tilebox/datasets/protobuf_conversion/protobuf_xarray.py,sha256=HENZuGxrG8yi031Vw
|
|
|
48
48
|
tilebox/datasets/protobuf_conversion/to_protobuf.py,sha256=ekGusGHUzbYdSg01pij4JSQHq1vbOGfl0EX_bt1jOb0,7475
|
|
49
49
|
tilebox/datasets/sync/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
50
|
tilebox/datasets/sync/client.py,sha256=d6d2ABi9Lo9oIgpnq_1O0v4JqJrppaP4hCT5TWWXHyE,2101
|
|
51
|
-
tilebox/datasets/sync/dataset.py,sha256=
|
|
51
|
+
tilebox/datasets/sync/dataset.py,sha256=TbsmeUSRletHpY9BGXKkJHwChFBKSASswfTy4lsfJLA,22181
|
|
52
52
|
tilebox/datasets/sync/pagination.py,sha256=Wn_rHwKr4fW31y0fCQFLvcn6jumqkerT3UeWeVpOVzk,6019
|
|
53
53
|
tilebox/datasets/sync/timeseries.py,sha256=4nTP8_tmv6V7PXTUNzzlbzlxv0OXo_IqVLtSdJpUOW0,303
|
|
54
|
-
tilebox_datasets-0.
|
|
55
|
-
tilebox_datasets-0.
|
|
56
|
-
tilebox_datasets-0.
|
|
54
|
+
tilebox_datasets-0.38.0.dist-info/METADATA,sha256=59l6yzt55SQvoFZ0INUv7JgAd3r_S9z9NlNI2vGuhoo,4234
|
|
55
|
+
tilebox_datasets-0.38.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
56
|
+
tilebox_datasets-0.38.0.dist-info/RECORD,,
|
|
File without changes
|