Skip to content

Commit 94657c7

Browse files
committed
Add Dataset.delete_{version,edition,distribution}
Add new methods `Dataset.delete_version`, `Dataset.delete_edition`, and `Dataset.delete_distribution` for deleting dataset versions, editions, and distributions respectively.
1 parent 4156b2e commit 94657c7

File tree

3 files changed

+179
-107
lines changed

3 files changed

+179
-107
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## ?.?.? - Unreleased
2+
3+
* New methods `Dataset.delete_version`, `Dataset.delete_edition`, and
4+
`Dataset.delete_distribution` for deleting dataset versions, editions, and
5+
distributions respectively.
6+
17
## 3.1.1 - 2024-04-11
28

39
* Removed dependency on the vulnerable (and seemingly abandoned) python-jose

okdata/sdk/data/dataset.py

Lines changed: 110 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,17 @@ def __init__(self, config=None, auth=None, env=None):
1212
self.__name__ = "dataset"
1313
super().__init__(config, auth, env)
1414

15+
def _mk_url(self, *parts):
16+
"""Return a dataset API URL consisting of `parts`.
17+
18+
Elements in `parts` are separated by slashes and prefixed by a base
19+
dataset API URL.
20+
"""
21+
return "/".join([self.config.get("datasetUrl"), *map(str, filter(None, parts))])
22+
1523
def create_dataset(self, data=None, retries=0):
16-
url = self.config.get("datasetUrl")
1724
log.info(f"SDK:Creating dataset with payload: {data}")
18-
result = self.post(url, data, retries=retries)
25+
result = self.post(self._mk_url(), data, retries=retries)
1926
body = result.json()
2027
log.info(f"Created dataset: {body['Id']}")
2128
return body
@@ -27,173 +34,191 @@ def _matches(self, dataset, pattern):
2734
)
2835

2936
def get_datasets(self, filter=None, retries=0):
30-
url = self.config.get("datasetUrl")
37+
url = self._mk_url()
3138
log.info(f"SDK:Get datasets from: {url}")
3239
datasets = self.get(url, retries=retries).json()
3340
if isinstance(filter, str):
3441
return [d for d in datasets if self._matches(d, filter)]
3542
return datasets
3643

37-
def get_dataset(self, datasetid, retries=0):
38-
datasetUrl = self.config.get("datasetUrl")
39-
url = f"{datasetUrl}/{datasetid}"
40-
log.info(f"SDK:Getting dataset: {datasetid} from: {url}")
44+
def get_dataset(self, dataset_id, retries=0):
45+
url = self._mk_url(dataset_id)
46+
log.info(f"SDK:Getting dataset: {dataset_id} from: {url}")
4147
return self.get(url, retries=retries).json()
4248

43-
def update_dataset(self, datasetid, data, partial=False, retries=0):
44-
datasetUrl = self.config.get("datasetUrl")
45-
url = f"{datasetUrl}/{datasetid}"
46-
log.info(f"SDK:Updating dataset: {datasetid} with payload: {data}")
49+
def update_dataset(self, dataset_id, data, partial=False, retries=0):
50+
url = self._mk_url(dataset_id)
51+
log.info(f"SDK:Updating dataset: {dataset_id} with payload: {data}")
4752
method = self.patch if partial else self.put
4853
response = method(url, data, retries=retries)
4954
body = response.json()
5055
log.info(f"Updated dataset: {body['Id']}")
5156
return body
5257

53-
def create_version(self, datasetid, data, retries=0):
54-
baseUrl = self.config.get("datasetUrl")
55-
url = f"{baseUrl}/{datasetid}/versions"
58+
def create_version(self, dataset_id, data, retries=0):
59+
url = self._mk_url(dataset_id, "versions")
5660
log.info(
57-
f"SDK:Creating version for: {datasetid} from: {url}, with payload: {data}"
61+
f"SDK:Creating version for: {dataset_id} from: {url}, with payload: {data}"
5862
)
5963
result = self.post(url, data, retries=retries)
6064

6165
body = result.json()
62-
datasetVersion = body["Id"].split("/")[1]
63-
log.info(f"SDK:Created dataset version: {datasetVersion}")
66+
version = body["Id"].split("/")[1]
67+
log.info(f"SDK:Created dataset version: {version}")
6468
return body
6569

66-
def get_versions(self, datasetid, retries=0):
67-
datasetUrl = self.config.get("datasetUrl")
68-
url = f"{datasetUrl}/{datasetid}/versions"
69-
log.info(f"SDK:Getting all dataset version for: {datasetid} from: {url}")
70+
def get_versions(self, dataset_id, retries=0):
71+
url = self._mk_url(dataset_id, "versions")
72+
log.info(f"SDK:Getting all dataset version for: {dataset_id} from: {url}")
7073
return self.get(url, retries=retries).json()
7174

72-
def get_latest_version(self, datasetid, retries=0):
73-
datasetUrl = self.config.get("datasetUrl")
74-
url = f"{datasetUrl}/{datasetid}/versions/latest"
75-
log.info(f"SDK:Getting latest dataset version for: {datasetid} from: {url}")
75+
def get_latest_version(self, dataset_id, retries=0):
76+
url = self._mk_url(dataset_id, "versions", "latest")
77+
log.info(f"SDK:Getting latest dataset version for: {dataset_id} from: {url}")
7678
return self.get(url, retries=retries).json()
7779

78-
def update_version(self, datasetid, versionid, data, retries=0):
79-
baseUrl = self.config.get("datasetUrl")
80-
url = f"{baseUrl}/{datasetid}/versions/{versionid}"
80+
def update_version(self, dataset_id, version, data, retries=0):
81+
url = self._mk_url(dataset_id, "versions", version)
8182
log.info(
82-
f"SDK:Updating version {versionid} for: {datasetid} from: {url}, with payload: {data}"
83+
f"SDK:Updating version {version} for: {dataset_id} from: {url}, with payload: {data}"
8384
)
8485
result = self.put(url, data, retries=retries)
8586
body = result.json()
86-
datasetVersion = body["Id"].split("/")[1]
87-
log.info(f"SDK:Updated dataset version: {datasetVersion} on {datasetid}")
87+
version_ = body["Id"].split("/")[1]
88+
log.info(f"SDK:Updated dataset version: {version_} on {dataset_id}")
8889
return body
8990

90-
def create_edition(self, datasetid, versionid, data, retries=0):
91-
baseUrl = self.config.get("datasetUrl")
92-
url = f"{baseUrl}/{datasetid}/versions/{versionid}/editions"
91+
def delete_version(self, dataset_id, version, cascade=False, retries=0):
92+
url = self._mk_url(
93+
dataset_id, "versions", version, "?cascade=true" if cascade else ""
94+
)
95+
log.info(f"SDK:Deleting version {version} for: {dataset_id} from: {url}")
96+
self.delete(url, retries=retries)
97+
log.info(f"SDK:Deleted dataset version: {version} on {dataset_id}")
98+
99+
def create_edition(self, dataset_id, version, data, retries=0):
100+
url = self._mk_url(dataset_id, "versions", version, "editions")
93101
log.info(
94-
f"SDK:Creating dataset edition for: {datasetid} from: {url} with payload: {data}"
102+
f"SDK:Creating dataset edition for: {dataset_id} from: {url} with payload: {data}"
95103
)
96104
result = self.post(url, data, retries=retries)
97105
log.info(f"SDK:API reported back: {result.json()}")
98106
body = result.json()
99-
editionid = body["Id"].split("/")[2]
100-
log.info(f"SDK:Created dataset edition: {editionid} on {datasetid}/{versionid}")
107+
edition = body["Id"].split("/")[2]
108+
log.info(f"SDK:Created dataset edition: {edition} on {dataset_id}/{version}")
101109
return body
102110

103-
def auto_create_edition(self, datasetid, versionid):
111+
def auto_create_edition(self, dataset_id, version):
104112
"""Create an automatically named edition for the given dataset version.
105113
106114
Return the name of the newly created edition.
107115
"""
108116
data = {
109117
"edition": datetime.now().astimezone().replace(microsecond=0).isoformat(),
110-
"description": f"Auto-created edition for {datasetid}/{versionid}",
118+
"description": f"Auto-created edition for {dataset_id}/{version}",
111119
}
112-
log.info(f"Creating new edition for {datasetid}/{versionid} with data: {data}")
113-
edition = self.create_edition(datasetid, versionid, data)
120+
log.info(f"Creating new edition for {dataset_id}/{version} with data: {data}")
121+
edition = self.create_edition(dataset_id, version, data)
114122
log.info(f"Created edition: {edition}")
115123
return edition
116124

117-
def get_editions(self, datasetid, versionid, retries=0):
118-
datasetUrl = self.config.get("datasetUrl")
119-
url = f"{datasetUrl}/{datasetid}/versions/{versionid}/editions"
125+
def get_editions(self, dataset_id, version, retries=0):
126+
url = self._mk_url(dataset_id, "versions", version, "editions")
120127
log.info(
121-
f"SDK:Getting version editions for: {datasetid}/{versionid} from: {url}"
128+
f"SDK:Getting version editions for: {dataset_id}/{version} from: {url}"
122129
)
123130
return self.get(url, retries=retries).json()
124131

125-
def get_edition(self, datasetid, versionid, editionid, retries=0):
126-
datasetUrl = self.config.get("datasetUrl")
127-
url = f"{datasetUrl}/{datasetid}/versions/{versionid}/editions/{editionid}"
128-
log.info(
129-
f"SDK:Getting version edition for: {datasetid}/{versionid} from: {url}"
130-
)
132+
def get_edition(self, dataset_id, version, edition, retries=0):
133+
url = self._mk_url(dataset_id, "versions", version, "editions", edition)
134+
log.info(f"SDK:Getting version edition for: {dataset_id}/{version} from: {url}")
131135
return self.get(url, retries=retries).json()
132136

133-
def get_latest_edition(self, datasetid, versionid, retries=0):
134-
datasetUrl = self.config.get("datasetUrl")
135-
url = f"{datasetUrl}/{datasetid}/versions/{versionid}/editions/latest"
137+
def get_latest_edition(self, dataset_id, version, retries=0):
138+
url = self._mk_url(dataset_id, "versions", version, "editions", "latest")
136139
log.info(
137-
f"SDK:Getting latest dataset version edition for: {datasetid}/{versionid} from: {url}"
140+
f"SDK:Getting latest dataset version edition for: {dataset_id}/{version} from: {url}"
138141
)
139142
return self.get(url, retries=retries).json()
140143

141-
def update_edition(self, datasetid, versionid, editionid, data, retries=0):
142-
baseUrl = self.config.get("datasetUrl")
143-
url = f"{baseUrl}/{datasetid}/versions/{versionid}/editions/{editionid}"
144+
def update_edition(self, dataset_id, version, edition, data, retries=0):
145+
url = self._mk_url(dataset_id, "versions", version, "editions", edition)
144146
log.info(
145-
f"SDK:Updating dataset edition {editionid} for: {datasetid} from: {url} with payload: {data}"
147+
f"SDK:Updating dataset edition {edition} for: {dataset_id} from: {url} with payload: {data}"
146148
)
147149
result = self.put(url, data, retries=retries)
148150
body = result.json()
149-
editionid = body["Id"].split("/")[2]
150-
log.info(f"SDK:Updated dataset edition: {editionid} on {datasetid}/{versionid}")
151+
edition_ = body["Id"].split("/")[2]
152+
log.info(f"SDK:Updated dataset edition: {edition_} on {dataset_id}/{version}")
151153
return body
152154

153-
def get_distributions(self, datasetid, versionid, editionid, retries=0):
154-
datasetUrl = self.config.get("datasetUrl")
155-
url = f"{datasetUrl}/{datasetid}/versions/{versionid}/editions/{editionid}/distributions"
155+
def delete_edition(self, dataset_id, version, edition, cascade=False, retries=0):
156+
url = self._mk_url(
157+
dataset_id,
158+
"versions",
159+
version,
160+
"editions",
161+
edition,
162+
"?cascade=true" if cascade else "",
163+
)
164+
log.info(f"SDK:Deleting edition {edition} for: {dataset_id} from: {url}")
165+
self.delete(url, retries=retries)
166+
log.info(f"SDK:Deleted dataset edition: {edition} on {dataset_id}/{version}")
167+
168+
def get_distributions(self, dataset_id, version, edition, retries=0):
169+
url = self._mk_url(
170+
dataset_id, "versions", version, "editions", edition, "distributions"
171+
)
156172
log.info(
157-
f"SDK:Getting distributions for: {datasetid}/{versionid}/{editionid} from: {url}"
173+
f"SDK:Getting distributions for: {dataset_id}/{version}/{edition} from: {url}"
158174
)
159175
return self.get(url, retries=retries).json()
160176

161-
def get_distribution(
162-
self, datasetid, versionid, editionid, distributionid, retries=0
163-
):
164-
datasetUrl = self.config.get("datasetUrl")
165-
url = f"{datasetUrl}/{datasetid}/versions/{versionid}/editions/{editionid}/distributions/{distributionid}"
177+
def get_distribution(self, dataset_id, version, edition, dist, retries=0):
178+
url = self._mk_url(
179+
dataset_id, "versions", version, "editions", edition, "distributions", dist
180+
)
166181
log.info(
167-
f"SDK:Getting distribution for: {datasetid}/{versionid}/{editionid} from: {url}"
182+
f"SDK:Getting distribution for: {dataset_id}/{version}/{edition} from: {url}"
168183
)
169184
return self.get(url, retries=retries).json()
170185

171-
def create_distribution(self, datasetid, versionid, editionid, data, retries=0):
172-
datasetUrl = self.config.get("datasetUrl")
173-
url = f"{datasetUrl}/{datasetid}/versions/{versionid}/editions/{editionid}/distributions"
186+
def create_distribution(self, dataset_id, version, edition, data, retries=0):
187+
url = self._mk_url(
188+
dataset_id, "versions", version, "editions", edition, "distributions"
189+
)
174190
log.info(
175-
f"SDK:Creating dataset distribution for: {datasetid} from: {url} with payload: {data}"
191+
f"SDK:Creating dataset distribution for: {dataset_id} from: {url} with payload: {data}"
176192
)
177193
result = self.post(url, data, retries=retries)
178194
body = result.json()
179-
distributionid = body["Id"].split("/")[3]
195+
dist = body["Id"].split("/")[3]
180196
log.info(
181-
f"SDK:Created dataset distribution: {distributionid} on {datasetid}/{versionid}/{editionid}"
197+
f"SDK:Created dataset distribution: {dist} on {dataset_id}/{version}/{edition}"
182198
)
183199
return body
184200

185-
def update_distribution(
186-
self, datasetid, versionid, editionid, distributionid, data, retries=0
187-
):
188-
datasetUrl = self.config.get("datasetUrl")
189-
url = f"{datasetUrl}/{datasetid}/versions/{versionid}/editions/{editionid}/distributions/{distributionid}"
201+
def update_distribution(self, dataset_id, version, edition, dist, data, retries=0):
202+
url = self._mk_url(
203+
dataset_id, "versions", version, "editions", edition, "distributions", dist
204+
)
190205
log.info(
191-
f"SDK:Updating distribution {distributionid} for: {datasetid} from: {url} with payload: {data}"
206+
f"SDK:Updating distribution {dist} for: {dataset_id} from: {url} with payload: {data}"
192207
)
193208
result = self.put(url, data, retries=retries)
194209
body = result.json()
195-
distributionid = body["Id"].split("/")[3]
210+
dist_ = body["Id"].split("/")[3]
196211
log.info(
197-
f"SDK:Updated dataset distribution: {distributionid} on {datasetid}/{versionid}/{editionid}"
212+
f"SDK:Updated dataset distribution: {dist_} on {dataset_id}/{version}/{edition}"
198213
)
199214
return body
215+
216+
def delete_distribution(self, dataset_id, version, edition, dist, retries=0):
217+
url = self._mk_url(
218+
dataset_id, "versions", version, "editions", edition, "distributions", dist
219+
)
220+
log.info(f"SDK:Deleting distribution {dist} for: {dataset_id} from: {url}")
221+
self.delete(url, retries=retries)
222+
log.info(
223+
f"SDK:Deleted dataset distribution: {dist} on {dataset_id}/{version}/{edition}"
224+
)

0 commit comments

Comments
 (0)