Mercurial > bzapi
changeset 13:942f278a9fff
refactored some stuff, added tests
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Wed, 23 Dec 2009 20:38:57 -0800 |
parents | 4c4a2aba5383 |
children | 3ebc043d9ff7 |
files | bzapi.py test.py |
diffstat | 2 files changed, 46 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/bzapi.py Wed Dec 23 20:05:07 2009 -0800 +++ b/bzapi.py Wed Dec 23 20:38:57 2009 -0800 @@ -6,6 +6,20 @@ import pymongo import simplejson as json +def open_url(url, headers, query_args=None, urllib2=urllib2): + if query_args: + full_url = "%s?%s" % (url, urllib.urlencode(query_args)) + else: + full_url = url + + logging.debug('retrieving %s' % full_url) + request = urllib2.Request(full_url) + + for name, value in headers.items(): + request.add_header(name, value) + + return urllib2.urlopen(request) + def normalize_bug(bug): for name in ['last_change_time', 'creation_time']: bug[name] = datetime_from_iso(bug[name]) @@ -135,16 +149,13 @@ self._validate_component(params['product'], params.get('component')) - full_url = "%s%s?%s" % (self.base_url, - url, - urllib.urlencode(params)) - - logging.debug('retrieving %s' % full_url) - request = self._urllib2.Request(full_url) - request.add_header('Accept', 'application/json') - request.add_header('Content-Type', 'application/json') - - response = self._urllib2.urlopen(request) + response = open_url( + url=self.base_url + url, + query_args=params, + headers={'Accept': 'application/json', + 'Content-Type': 'application/json'}, + urllib2=self._urllib2 + ) # TODO: instead of 'now', we'd like to use the 'Date' # HTTP header, but it's actually completely wrong in
--- a/test.py Wed Dec 23 20:05:07 2009 -0800 +++ b/test.py Wed Dec 23 20:38:57 2009 -0800 @@ -26,7 +26,9 @@ return FakeRequest(url) def set_url(self, url, response): - self._responses[url] = json.dumps(response) + if not isinstance(response, basestring): + response = json.dumps(response) + self._responses[url] = response def urlopen(self, request): return StringIO.StringIO(self._responses[request.url]) @@ -47,9 +49,30 @@ date = bzapi.datetime_from_rfc1123('Wed, 23 Dec 2009 20:42:59 GMT') self.assertEqual(str(date), '2009-12-23 20:42:59') + def test_open_url_works_without_query_args(self): + urllib2 = FakeUrllib2() + urllib2.set_url('http://foo/', 'boo') + self.assertEqual( + bzapi.open_url(url='http://foo/', + headers={'Content-Type': 'text/plain'}, + urllib2=urllib2).read(), + 'boo' + ) + + def test_open_url_works_with_query_args(self): + urllib2 = FakeUrllib2() + urllib2.set_url('http://foo/?blah=hi+there', 'meh') + self.assertEqual( + bzapi.open_url(url='http://foo/', + query_args={'blah': 'hi there'}, + headers={'Content-Type': 'text/plain'}, + urllib2=urllib2).read(), + 'meh' + ) + def _get_basic_fake_api(self): urllib2 = FakeUrllib2() - urllib2.set_url('http://foo/latest/configuration?', FAKE_CONFIG) + urllib2.set_url('http://foo/latest/configuration', FAKE_CONFIG) api = bzapi.BugzillaApi('http://foo/latest', FakeCollection(), urllib2=urllib2)