Skip to content

Commit 6a9ce92

Browse files
committed
Merge pull request #60 from Kinto/get-endpoint-should-be-public
_get_endpoint should be part of the public.
2 parents eb1fe6d + 77f2a82 commit 6a9ce92

File tree

2 files changed

+75
-25
lines changed

2 files changed

+75
-25
lines changed

README.rst

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,25 @@ It is possible (but not recommended) to force this value in the clients:
267267
retry=10,
268268
retry_after=5)
269269
270+
271+
Generating endpoint paths
272+
-------------------------
273+
274+
You may want to generate some endpoint paths, you can use the
275+
get_endpoint utility to do so:
276+
277+
.. code-block:: python
278+
279+
client = Client(server_url='http://localhost:8888/v1',
280+
auth=('token', 'your-token'),
281+
bucket="payments",
282+
collection="receipts")
283+
print(client.get_endpoint("record",
284+
id="c6894b2c-1856-11e6-9415-3c970ede22b0"))
285+
286+
# '/buckets/payments/collections/receipts/records/c6894b2c-1856-11e6-9415-3c970ede22b0'
287+
288+
270289
Command-line scripts
271290
--------------------
272291

kinto_client/__init__.py

Lines changed: 56 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def clone(self, **kwargs):
7979
@contextmanager
8080
def batch(self, **kwargs):
8181
if self._server_settings is None:
82-
resp, _ = self.session.request("GET", self._get_endpoint('root'))
82+
resp, _ = self.session.request("GET", self.get_endpoint('root'))
8383
self._server_settings = resp['settings']
8484

8585
batch_max_requests = self._server_settings['batch_max_requests']
@@ -90,7 +90,18 @@ def batch(self, **kwargs):
9090
batch_session.send()
9191
batch_session.reset()
9292

93-
def _get_endpoint(self, name, bucket=None, collection=None, id=None):
93+
def get_endpoint(self, name, bucket=None, collection=None, id=None):
94+
"""Return the endpoint with named parameters.
95+
96+
Please always use the method as if it was defined like this:
97+
98+
get_endpoint(self, name, *,
99+
bucket=None, collection=None, id=None)
100+
101+
Meaning that bucket, collection and id should always be
102+
named parameters.
103+
104+
"""
94105
kwargs = {
95106
'bucket': bucket or self._bucket_name,
96107
'collection': collection or self._collection_name,
@@ -151,7 +162,7 @@ def _create_if_not_exists(self, resource, **kwargs):
151162
# Server Info
152163

153164
def server_info(self):
154-
endpoint = self._get_endpoint('root')
165+
endpoint = self.get_endpoint('root')
155166
resp, _ = self.session.request('get', endpoint)
156167
return resp
157168

@@ -166,15 +177,15 @@ def create_bucket(self, bucket=None, data=None, permissions=None,
166177
permissions=permissions,
167178
safe=safe)
168179
headers = DO_NOT_OVERWRITE if safe else None
169-
endpoint = self._get_endpoint('bucket', bucket)
180+
endpoint = self.get_endpoint('bucket', bucket=bucket)
170181
resp, _ = self.session.request('put', endpoint, data=data,
171182
permissions=permissions,
172183
headers=headers)
173184
return resp
174185

175186
def update_bucket(self, bucket=None, data=None, permissions=None,
176187
safe=True, if_match=None, method='put'):
177-
endpoint = self._get_endpoint('bucket', bucket)
188+
endpoint = self.get_endpoint('bucket', bucket=bucket)
178189
headers = self._get_cache_headers(safe, data, if_match)
179190
resp, _ = self.session.request(method, endpoint, data=data,
180191
permissions=permissions,
@@ -186,33 +197,33 @@ def patch_bucket(self, *args, **kwargs):
186197
return self.update_bucket(*args, **kwargs)
187198

188199
def get_buckets(self):
189-
endpoint = self._get_endpoint('buckets')
200+
endpoint = self.get_endpoint('buckets')
190201
return self._paginated(endpoint)
191202

192203
def get_bucket(self, bucket=None):
193-
endpoint = self._get_endpoint('bucket', bucket)
204+
endpoint = self.get_endpoint('bucket', bucket=bucket)
194205
try:
195206
resp, _ = self.session.request('get', endpoint)
196207
except KintoException as e:
197208
raise BucketNotFound(bucket or self._bucket_name, e)
198209
return resp
199210

200211
def delete_bucket(self, bucket=None, safe=True, if_match=None):
201-
endpoint = self._get_endpoint('bucket', bucket)
212+
endpoint = self.get_endpoint('bucket', bucket=bucket)
202213
headers = self._get_cache_headers(safe, if_match=if_match)
203214
resp, _ = self.session.request('delete', endpoint, headers=headers)
204215
return resp['data']
205216

206217
def delete_buckets(self, safe=True, if_match=None):
207-
endpoint = self._get_endpoint('buckets')
218+
endpoint = self.get_endpoint('buckets')
208219
headers = self._get_cache_headers(safe, if_match=if_match)
209220
resp, _ = self.session.request('delete', endpoint, headers=headers)
210221
return resp['data']
211222

212223
# Collections
213224

214225
def get_collections(self, bucket=None):
215-
endpoint = self._get_endpoint('collections', bucket)
226+
endpoint = self.get_endpoint('collections', bucket=bucket)
216227
return self._paginated(endpoint)
217228

218229
def create_collection(self, collection=None, bucket=None,
@@ -226,7 +237,9 @@ def create_collection(self, collection=None, bucket=None,
226237
permissions=permissions,
227238
safe=safe)
228239
headers = DO_NOT_OVERWRITE if safe else None
229-
endpoint = self._get_endpoint('collection', bucket, collection)
240+
endpoint = self.get_endpoint('collection',
241+
bucket=bucket,
242+
collection=collection)
230243
try:
231244
resp, _ = self.session.request('put', endpoint, data=data,
232245
permissions=permissions,
@@ -238,12 +251,15 @@ def create_collection(self, collection=None, bucket=None,
238251
"this collection.")
239252
e = KintoException(msg, e)
240253
raise e
254+
241255
return resp
242256

243257
def update_collection(self, data=None, collection=None, bucket=None,
244258
permissions=None, method='put',
245259
safe=True, if_match=None):
246-
endpoint = self._get_endpoint('collection', bucket, collection)
260+
endpoint = self.get_endpoint('collection',
261+
bucket=bucket,
262+
collection=collection)
247263
headers = self._get_cache_headers(safe, data, if_match)
248264
resp, _ = self.session.request(method, endpoint, data=data,
249265
permissions=permissions,
@@ -255,19 +271,23 @@ def patch_collection(self, *args, **kwargs):
255271
return self.update_collection(*args, **kwargs)
256272

257273
def get_collection(self, collection=None, bucket=None):
258-
endpoint = self._get_endpoint('collection', bucket, collection)
274+
endpoint = self.get_endpoint('collection',
275+
bucket=bucket,
276+
collection=collection)
259277
resp, _ = self.session.request('get', endpoint)
260278
return resp
261279

262280
def delete_collection(self, collection=None, bucket=None,
263281
safe=True, if_match=None):
264-
endpoint = self._get_endpoint('collection', bucket, collection)
282+
endpoint = self.get_endpoint('collection',
283+
bucket=bucket,
284+
collection=collection)
265285
headers = self._get_cache_headers(safe, if_match=if_match)
266286
resp, _ = self.session.request('delete', endpoint, headers=headers)
267287
return resp['data']
268288

269289
def delete_collections(self, bucket=None, safe=True, if_match=None):
270-
endpoint = self._get_endpoint('collections', bucket)
290+
endpoint = self.get_endpoint('collections', bucket=bucket)
271291
headers = self._get_cache_headers(safe, if_match=if_match)
272292
resp, _ = self.session.request('delete', endpoint, headers=headers)
273293
return resp['data']
@@ -276,12 +296,15 @@ def delete_collections(self, bucket=None, safe=True, if_match=None):
276296

277297
def get_records(self, collection=None, bucket=None, **kwargs):
278298
"""Returns all the records"""
279-
# XXX Add filter and sorting.
280-
endpoint = self._get_endpoint('records', bucket, collection)
299+
endpoint = self.get_endpoint('records',
300+
bucket=bucket,
301+
collection=collection)
281302
return self._paginated(endpoint, **kwargs)
282303

283304
def get_record(self, id, collection=None, bucket=None):
284-
endpoint = self._get_endpoint('record', bucket, collection, id)
305+
endpoint = self.get_endpoint('record', id=id,
306+
bucket=bucket,
307+
collection=collection)
285308
resp, _ = self.session.request('get', endpoint)
286309
return resp
287310

@@ -299,7 +322,9 @@ def create_record(self, data, id=None, collection=None, permissions=None,
299322
# Make sure that no record already exists with this id.
300323
headers = DO_NOT_OVERWRITE if safe else None
301324

302-
endpoint = self._get_endpoint('record', bucket, collection, id)
325+
endpoint = self.get_endpoint('record', id=id,
326+
bucket=bucket,
327+
collection=collection)
303328
try:
304329
resp, _ = self.session.request('put', endpoint, data=data,
305330
permissions=permissions,
@@ -320,7 +345,9 @@ def update_record(self, data, id=None, collection=None, permissions=None,
320345
id = id or data.get('id')
321346
if id is None:
322347
raise KeyError('Unable to update a record, need an id.')
323-
endpoint = self._get_endpoint('record', bucket, collection, id)
348+
endpoint = self.get_endpoint('record', id=id,
349+
bucket=bucket,
350+
collection=collection)
324351
headers = self._get_cache_headers(safe, data, if_match)
325352
resp, _ = self.session.request(method, endpoint, data=data,
326353
headers=headers,
@@ -333,23 +360,27 @@ def patch_record(self, *args, **kwargs):
333360

334361
def delete_record(self, id, collection=None, bucket=None,
335362
safe=True, if_match=None):
336-
endpoint = self._get_endpoint('record', bucket, collection, id)
363+
endpoint = self.get_endpoint('record', id=id,
364+
bucket=bucket,
365+
collection=collection)
337366
headers = self._get_cache_headers(safe, if_match=if_match)
338367
resp, _ = self.session.request('delete', endpoint, headers=headers)
339368
return resp['data']
340369

341370
def delete_records(self, collection=None, bucket=None,
342371
safe=True, if_match=None):
343-
endpoint = self._get_endpoint('records', bucket, collection)
372+
endpoint = self.get_endpoint('records',
373+
bucket=bucket,
374+
collection=collection)
344375
headers = self._get_cache_headers(safe, if_match=if_match)
345376
resp, _ = self.session.request('delete', endpoint, headers=headers)
346377
return resp['data']
347378

348379
def __repr__(self):
349-
endpoint = self._get_endpoint(
380+
endpoint = self.get_endpoint(
350381
'collection',
351-
self._bucket_name,
352-
self._collection_name
382+
bucket=self._bucket_name,
383+
collection=self._collection_name
353384
)
354385
absolute_endpoint = utils.urljoin(self.session.server_url, endpoint)
355386
return "<KintoClient %s>" % absolute_endpoint

0 commit comments

Comments
 (0)