@@ -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