55
66from ..hubstorage .collectionsrt import Collection as _Collection
77
8- from .proxy import _Proxy , proxy_methods , wrap_kwargs , format_iter_filters
8+ from .proxy import _Proxy , _DownloadableProxyMixin , format_iter_filters
99from .utils import update_kwargs
1010
1111
12- class Collections (_Proxy ):
12+ class Collections (_Proxy , _DownloadableProxyMixin ):
1313 """Access to project collections.
1414
1515 Not a public constructor: use :class:`~scrapinghub.client.projects.Project`
@@ -144,42 +144,6 @@ class Collection(object):
144144 def __init__ (self , client , collections , type_ , name ):
145145 self ._client = client
146146 self ._origin = _Collection (type_ , name , collections ._origin )
147- proxy_methods (self ._origin , self , [
148- 'create_writer' , 'count' ,
149- ('iter' , 'iter_values' ),
150- ('iter_raw_json' , 'iter_json' ),
151- ])
152- # simplified version of _Proxy._wrap_iter_methods logic
153- # to provide better support for filter param in iter methods
154- for method in ['iter' , 'iter_raw_json' ]:
155- wrapped = wrap_kwargs (getattr (self , method ), format_iter_filters )
156- setattr (self , method , wrapped )
157-
158- def list (self , key = None , prefix = None , prefixcount = None , startts = None ,
159- endts = None , requests_params = None , ** params ):
160- """Convenient shortcut to list iter results.
161-
162- Please note that :meth:`list` method can use a lot of memory and for a
163- large amount of logs it's recommended to iterate through it
164- via :meth:`iter` method (all params and available filters are same for
165- both methods).
166-
167- :param key: a string key or a list of keys to filter with.
168- :param prefix: a string prefix to filter items.
169- :param prefixcount: maximum number of values to return per prefix.
170- :param startts: UNIX timestamp at which to begin results.
171- :param endts: UNIX timestamp at which to end results.
172- :param requests_params: (optional) a dict with optional requests params.
173- :param \*\*params: (optional) additional query params for the request.
174- :return: a list of items where each item is represented with a dict.
175- :rtype: :class:`list[dict]`
176- """
177- # FIXME there should be similar docstrings for iter/iter_raw_json
178- # but as we proxy them as-is, it's not in place, should be improved
179- update_kwargs (params , key = key , prefix = prefix , prefixcount = prefixcount ,
180- startts = startts , endts = endts ,
181- requests_params = requests_params )
182- return list (self .iter (requests_params = None , ** params ))
183147
184148 def get (self , key , ** params ):
185149 """Get item from collection by key.
@@ -215,6 +179,28 @@ def delete(self, keys):
215179 "object providing string keys" )
216180 self ._origin .delete (keys )
217181
182+ def count (self , * args , ** kwargs ):
183+ return self ._origin ._collections .count (
184+ self ._origin .coltype , self ._origin .colname , * args , ** kwargs )
185+
186+ def iter (self , key = None , prefix = None , prefixcount = None , startts = None ,
187+ endts = None , requests_params = None , ** params ):
188+ update_kwargs (params , key = key , prefix = prefix , prefixcount = prefixcount ,
189+ startts = startts , endts = endts ,
190+ requests_params = requests_params )
191+ params = format_iter_filters (params )
192+ return self ._origin ._collections .iter_values (
193+ self ._origin .coltype , self ._origin .colname , ** params )
194+
195+ def iter_raw_json (self , key = None , prefix = None , prefixcount = None ,
196+ startts = None , endts = None , requests_params = None , ** params ):
197+ update_kwargs (params , key = key , prefix = prefix , prefixcount = prefixcount ,
198+ startts = startts , endts = endts ,
199+ requests_params = requests_params )
200+ params = format_iter_filters (params )
201+ return self ._origin ._collections .iter_json (
202+ self ._origin .coltype , self ._origin .colname , ** params )
203+
218204 def iter_raw_msgpack (self , key = None , prefix = None , prefixcount = None ,
219205 startts = None , endts = None , requests_params = None ,
220206 ** params ):
@@ -234,5 +220,33 @@ def iter_raw_msgpack(self, key=None, prefix=None, prefixcount=None,
234220 update_kwargs (params , key = key , prefix = prefix , prefixcount = prefixcount ,
235221 startts = startts , endts = endts ,
236222 requests_params = requests_params )
223+ params = format_iter_filters (params )
237224 return self ._origin ._collections .iter_msgpack (
238225 self ._origin .coltype , self ._origin .colname , ** params )
226+
227+ def list (self , key = None , prefix = None , prefixcount = None , startts = None ,
228+ endts = None , requests_params = None , ** params ):
229+ """Convenient shortcut to list iter results.
230+
231+ Please note that :meth:`list` method can use a lot of memory and for a
232+ large amount of logs it's recommended to iterate through it
233+ via :meth:`iter` method (all params and available filters are same for
234+ both methods).
235+
236+ :param key: a string key or a list of keys to filter with.
237+ :param prefix: a string prefix to filter items.
238+ :param prefixcount: maximum number of values to return per prefix.
239+ :param startts: UNIX timestamp at which to begin results.
240+ :param endts: UNIX timestamp at which to end results.
241+ :param requests_params: (optional) a dict with optional requests params.
242+ :param \*\*params: (optional) additional query params for the request.
243+ :return: a list of items where each item is represented with a dict.
244+ :rtype: :class:`list[dict]`
245+ """
246+ update_kwargs (params , key = key , prefix = prefix , prefixcount = prefixcount ,
247+ startts = startts , endts = endts )
248+ return list (self .iter (requests_params = requests_params , ** params ))
249+
250+ def create_writer (self , ** kwargs ):
251+ return self ._origin ._collections .create_writer (
252+ self ._origin .coltype , self ._origin .colname , ** kwargs )
0 commit comments