|
37 | 37 | GetDatasetRequest, |
38 | 38 | ListDatasetsRequest, |
39 | 39 | Package, |
| 40 | + UpdateDatasetRequest, |
40 | 41 | ) |
41 | 42 | from tilebox.datasets.datasets.v1.datasets_pb2_grpc import DatasetServiceStub |
42 | 43 | from tilebox.datasets.query.pagination import Pagination |
@@ -64,24 +65,70 @@ def __init__( |
64 | 65 | self._data_ingestion_service = data_ingestion_service_stub |
65 | 66 |
|
66 | 67 | def create_dataset( |
67 | | - self, kind: DatasetKind, code_name: str, fields: list[FieldDict], name: str, summary: str |
| 68 | + self, kind: DatasetKind, code_name: str, name: str, custom_fields: list[FieldDict] |
68 | 69 | ) -> Promise[Dataset]: |
69 | 70 | """Create a new dataset. |
70 | 71 |
|
71 | 72 | Args: |
72 | 73 | kind: The kind of the dataset. |
73 | 74 | code_name: The code name of the dataset. |
74 | | - fields: The fields of the dataset. |
75 | 75 | name: The name of the dataset. |
76 | | - summary: A short summary of the dataset. |
| 76 | + fields: The custom fields of the dataset |
77 | 77 |
|
78 | 78 | Returns: |
79 | 79 | The created dataset. |
80 | 80 | """ |
81 | | - dataset_type = DatasetType(kind, _REQUIRED_FIELDS_PER_DATASET_KIND[kind] + [Field.from_dict(f) for f in fields]) |
82 | | - req = CreateDatasetRequest(name=name, type=dataset_type.to_message(), summary=summary, code_name=code_name) |
| 81 | + dataset_type = DatasetType( |
| 82 | + kind, _REQUIRED_FIELDS_PER_DATASET_KIND[kind] + [Field.from_dict(f) for f in custom_fields] |
| 83 | + ) |
| 84 | + req = CreateDatasetRequest(name=name, type=dataset_type.to_message(), code_name=code_name) |
83 | 85 | return Promise.resolve(self._dataset_service.CreateDataset(req)).then(Dataset.from_message) |
84 | 86 |
|
| 87 | + def update_dataset( |
| 88 | + self, kind: DatasetKind, dataset_id: UUID, name: str | None, custom_fields: list[FieldDict] |
| 89 | + ) -> Promise[Dataset]: |
| 90 | + """Update a dataset. |
| 91 | +
|
| 92 | + Args: |
| 93 | + kind: The kind of the dataset to update, cannot be changed. |
| 94 | + dataset_id: The id of the dataset to update, cannot be changed. |
| 95 | + name: The new name of the dataset. |
| 96 | + custom_fields: The new list of custom fields of the dataset. |
| 97 | +
|
| 98 | + Returns: |
| 99 | + The updated dataset. |
| 100 | + """ |
| 101 | + dataset_type = DatasetType( |
| 102 | + kind, _REQUIRED_FIELDS_PER_DATASET_KIND[kind] + [Field.from_dict(f) for f in custom_fields] |
| 103 | + ) |
| 104 | + req = UpdateDatasetRequest(id=uuid_to_uuid_message(dataset_id), name=name, type=dataset_type.to_message()) |
| 105 | + return Promise.resolve(self._dataset_service.UpdateDataset(req)).then(Dataset.from_message) |
| 106 | + |
| 107 | + def create_or_update_dataset( |
| 108 | + self, kind: DatasetKind, code_name: str, name: str, custom_fields: list[FieldDict] |
| 109 | + ) -> Promise[Dataset]: |
| 110 | + """Create a new dataset, or update it if it already exists. |
| 111 | +
|
| 112 | + Args: |
| 113 | + kind: The kind of the dataset. |
| 114 | + code_name: The code name of the dataset. |
| 115 | + name: The name of the dataset. |
| 116 | + custom_fields: The custom fields of the dataset |
| 117 | +
|
| 118 | + Returns: |
| 119 | + The created or updated dataset. |
| 120 | + """ |
| 121 | + return ( |
| 122 | + Promise.resolve(self._dataset_service.GetDataset(GetDatasetRequest(slug=code_name))) |
| 123 | + .then( |
| 124 | + did_fulfill=lambda dataset: self.update_dataset( |
| 125 | + kind, Dataset.from_message(dataset).id, name, custom_fields |
| 126 | + ), |
| 127 | + did_reject=lambda _: self.create_dataset(kind, code_name, name, custom_fields), |
| 128 | + ) |
| 129 | + .then(Dataset.from_message) |
| 130 | + ) |
| 131 | + |
85 | 132 | def list_datasets(self) -> Promise[ListDatasetsResponse]: |
86 | 133 | """List all datasets and dataset groups.""" |
87 | 134 | return Promise.resolve( |
|
0 commit comments