Syntaxic sugar

This commit is contained in:
Maël Kervella 2018-05-25 15:35:16 +00:00
parent d5c23edff9
commit 6616f87b09

View file

@ -174,44 +174,68 @@ class Re2oAPIClient:
endpoint=endpoints.get_endpoint_for(name, **kwargs)
)
def _list_for(self, obj_name, max_results=None, params={}, **kwargs):
if not 'page_size' in params.keys():
params['page_size'] = 'all'
response = self.get(
self.get_url_for('%s-list' % obj_name, **kwargs),
params=params
)
results = response['results']
while response['next'] is not None and \
(max_results is None or len(results) < max_results):
response = self.get(response['next'])
results += response['results']
return results[:max_results] if max_results else results
def _count_for(self, obj_name, params={}, **kwargs):
if not 'page_size' in params.keys():
params['page_size'] = 1
return self.get(
self.get_url_for('%s-list' % obj_name, **kwargs),
params=params
)['count']
def _view_for(self, obj_name, params={}, **kwargs):
return self.get(
self.get_url_for('%s-details' % obj_name, **kwargs),
params=params
)
def __getattr__(self, item):
if item.startswith('list_'):
def f(max_results=None, params={}, **kwargs):
if not 'page_size' in params.keys():
params['page_size'] = 'all'
response = self.get(
self.get_url_for('%s-list' % item[len('list_'):], **kwargs),
params=params
)
results = response['results']
while response['next'] is not None and \
(max_results is None or len(results) < max_results):
response = self.get(response['next'])
results += response['results']
return results[:max_results] if max_results else results
return f
return lambda *args, **kwargs: self._list_for(
item[len('list_'):],
*args,
**kwargs
)
elif item.startswith('count_'):
def f(params={}, **kwargs):
if not 'page_size' in params.keys():
params['page_size'] = 1
return self.get(
self.get_url_for('%s-list' % item[len('count_'):], **kwargs),
params=params
)['count']
return f
return lambda *args, **kwargs: self._count_for(
item[len('count_'):],
*args,
**kwargs
)
elif item.startswith('view_'):
return lambda *args, **kwargs: self._view_for(
item[len('view_'):],
*args,
**kwargs
)
def f(params={}, **kwargs):
return self.get(
self.get_url_for('%s-details' % item[len('view_'):], **kwargs),
params=params
)
return f
else:
raise AttributeError(item)
def __dir__(self):
ret = ['use_tls', 'token_file', 'hostname', 'token',
'need_renew_token', 'get_token', 'get', 'post', 'get_url_for']
for name in endpoints.get_names():
if name.endswith('-list'):
ret.append('list_%s' % name[:-len('-list')])
ret.append('count_%s' % name[:-len('-list')])
elif name.endswith('-details'):
ret.append('view_%s' % name[:-len('-details')])
return ret