Syntaxic sugar
This commit is contained in:
parent
d5c23edff9
commit
6616f87b09
1 changed files with 55 additions and 31 deletions
|
@ -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_'):
|
||||
|
||||
def f(params={}, **kwargs):
|
||||
return self.get(
|
||||
self.get_url_for('%s-details' % item[len('view_'):], **kwargs),
|
||||
params=params
|
||||
)
|
||||
return f
|
||||
return lambda *args, **kwargs: self._view_for(
|
||||
item[len('view_'):],
|
||||
*args,
|
||||
**kwargs
|
||||
)
|
||||
|
||||
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
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue