| Index: rietveld.py
|
| diff --git a/rietveld.py b/rietveld.py
|
| index 0b88eb0eb746ba898d97991f43b5e1b00460ee1a..d13173b3218cf31cdb21fe096f4b7702161814e2 100644
|
| --- a/rietveld.py
|
| +++ b/rietveld.py
|
| @@ -242,6 +242,64 @@ class Rietveld(object):
|
| ('xsrf_token', self.xsrf_token()),
|
| (flag, value)])
|
|
|
| + def search(
|
| + self,
|
| + owner=None, reviewer=None,
|
| + base=None,
|
| + closed=None, private=None, commit=None,
|
| + created_before=None, created_after=None,
|
| + modified_before=None, modified_after=None,
|
| + per_request=None, keys_only=False,
|
| + with_messages=False):
|
| + """Yields search results."""
|
| + # These are expected to be strings.
|
| + string_keys = {
|
| + 'owner': owner,
|
| + 'reviewer': reviewer,
|
| + 'base': base,
|
| + 'created_before': created_before,
|
| + 'created_after': created_after,
|
| + 'modified_before': modified_before,
|
| + 'modified_after': modified_after,
|
| + }
|
| + # These are either None, False or True.
|
| + three_state_keys = {
|
| + 'closed': closed,
|
| + 'private': private,
|
| + 'commit': commit,
|
| + }
|
| +
|
| + url = '/search?format=json'
|
| + # Sort the keys mainly to ease testing.
|
| + for key in sorted(string_keys):
|
| + value = string_keys[key]
|
| + if value:
|
| + url += '&%s=%s' % (key, urllib2.quote(value))
|
| + for key in sorted(three_state_keys):
|
| + value = three_state_keys[key]
|
| + if value is not None:
|
| + url += '&%s=%d' % (key, int(value) + 1)
|
| +
|
| + if keys_only:
|
| + url += '&keys_only=True'
|
| + if with_messages:
|
| + url += '&with_messages=True'
|
| + if per_request:
|
| + url += '&limit=%d' % per_request
|
| +
|
| + cursor = ''
|
| + while True:
|
| + output = self.get(url + cursor)
|
| + if output.startswith('<'):
|
| + # It's an error message. Return as no result.
|
| + break
|
| + data = json.loads(output) or {}
|
| + if not data.get('results'):
|
| + break
|
| + for i in data['results']:
|
| + yield i
|
| + cursor = '&cursor=%s' % data['cursor']
|
| +
|
| def get(self, request_path, **kwargs):
|
| kwargs.setdefault('payload', None)
|
| return self._send(request_path, **kwargs)
|
|
|