Mercurial > pybugzilla
view bugzilla @ 1:aca76355e4d8
Added make_caching_json_request() and .hgignore
author | Atul Varma <avarma@mozilla.com> |
---|---|
date | Mon, 12 Apr 2010 23:41:13 -0700 |
parents | 349a78c460e2 |
children | 04f5ad537f36 |
line wrap: on
line source
#! /usr/bin/env python import httplib import urllib from urlparse import urlparse try: import json except ImportError: import simplejson as json def json_request(method, url, query_args=None, body=None): if query_args is None: query_args = {} headers = {'Accept': 'application/json', 'Content-Type': 'application/json'} urlparts = urlparse(url) if urlparts.scheme == 'https': connclass = httplib.HTTPSConnection elif urlparts.scheme == 'http': connclass = httplib.HTTPConnection else: raise ValueError('unknown scheme "%s"' % urlparts.scheme) conn = connclass(urlparts.netloc) path = urlparts.path if query_args: path += '?%s' % urllib.urlencode(query_args) if body is not None: body = json.dumps(body) conn.request(method, path, body, headers) response = conn.getresponse() status, reason = response.status, response.reason mimetype = response.msg.gettype() data = response.read() conn.close() if mimetype == 'application/json': data = json.loads(data) return {'status': response.status, 'reason': response.reason, 'content_type': mimetype, 'body': data} def make_caching_json_request(cachedir, json_request=json_request): from hashlib import sha512 as hashfunc def caching_json_request(method, url, query_args=None, body=None): key = repr((method, url, query_args, body)) hashfile = '%s.json' % hashfunc(key).hexdigest() hashpath = os.path.join(cachedir, hashfile) if not os.path.exists(hashpath): response = json_request(method=method, url=url, query_args=query_args, body=body) open(hashpath, 'w').write(json.dumps(response)) return json.loads(open(hashpath, 'r').read()) return caching_json_request def main(config, json_request=json_request): print json_request('GET', '%s/attachment/436897' % config['api_server'], query_args={'attachmentdata': 1}) if __name__ == '__main__': import os import sys mypath = __import__('__main__').__file__ mydir = os.path.dirname(mypath) configfile = os.path.join(mydir, 'bugzilla-config.json') config = json.loads(open(configfile).read()) if 'username' in config and 'password' not in config: from getpass import getpass try: config['password'] = getpass('Enter password for %s: ' % config['username']) except KeyboardInterrupt: config['password'] = None if not config['password']: print "Aborted." sys.exit(1) cachedir = os.path.join(mydir, 'cache') main(config=config, json_request=make_caching_json_request(cachedir))