annotate bugzilla.py @ 7:7a04d148ead6

Added tests
author Atul Varma <avarma@mozilla.com>
date Tue, 13 Apr 2010 11:31:13 -0700
parents 548a4fe96851
children 295c54288dd1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
1 #! /usr/bin/env python
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
2
4
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
3 import os
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
4 import sys
5
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
5 import base64
0
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
6 import httplib
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
7 import urllib
5
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
8 import mimetypes
0
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
9 from urlparse import urlparse
4
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
10 from getpass import getpass
0
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
11
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
12 try:
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
13 import json
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
14 except ImportError:
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
15 import simplejson as json
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
16
4
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
17 DEFAULT_CONFIG = {
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
18 'api_server': 'https://api-dev.bugzilla.mozilla.org/latest',
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
19 'server': 'https://bugzilla.mozilla.org'
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
20 }
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
21
0
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
22 def json_request(method, url, query_args=None, body=None):
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
23 if query_args is None:
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
24 query_args = {}
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
25
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
26 headers = {'Accept': 'application/json',
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
27 'Content-Type': 'application/json'}
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
28
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
29 urlparts = urlparse(url)
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
30 if urlparts.scheme == 'https':
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
31 connclass = httplib.HTTPSConnection
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
32 elif urlparts.scheme == 'http':
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
33 connclass = httplib.HTTPConnection
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
34 else:
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
35 raise ValueError('unknown scheme "%s"' % urlparts.scheme)
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
36 conn = connclass(urlparts.netloc)
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
37 path = urlparts.path
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
38 if query_args:
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
39 path += '?%s' % urllib.urlencode(query_args)
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
40 if body is not None:
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
41 body = json.dumps(body)
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
42 conn.request(method, path, body, headers)
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
43 response = conn.getresponse()
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
44 status, reason = response.status, response.reason
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
45 mimetype = response.msg.gettype()
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
46 data = response.read()
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
47 conn.close()
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
48
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
49 if mimetype == 'application/json':
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
50 data = json.loads(data)
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
51
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
52 return {'status': response.status,
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
53 'reason': response.reason,
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
54 'content_type': mimetype,
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
55 'body': data}
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
56
3
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
57 def make_caching_json_request(cache, json_request=json_request):
2
04f5ad537f36 use sha1 instead of sha512
Atul Varma <avarma@mozilla.com>
parents: 1
diff changeset
58 from hashlib import sha1 as hashfunc
1
aca76355e4d8 Added make_caching_json_request() and .hgignore
Atul Varma <avarma@mozilla.com>
parents: 0
diff changeset
59
aca76355e4d8 Added make_caching_json_request() and .hgignore
Atul Varma <avarma@mozilla.com>
parents: 0
diff changeset
60 def caching_json_request(method, url, query_args=None, body=None):
3
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
61 key = hashfunc(repr((method, url, query_args, body))).hexdigest()
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
62 if not key in cache:
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
63 cache[key] = json_request(method=method,
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
64 url=url,
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
65 query_args=query_args,
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
66 body=body)
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
67 return cache[key]
1
aca76355e4d8 Added make_caching_json_request() and .hgignore
Atul Varma <avarma@mozilla.com>
parents: 0
diff changeset
68
aca76355e4d8 Added make_caching_json_request() and .hgignore
Atul Varma <avarma@mozilla.com>
parents: 0
diff changeset
69 return caching_json_request
aca76355e4d8 Added make_caching_json_request() and .hgignore
Atul Varma <avarma@mozilla.com>
parents: 0
diff changeset
70
3
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
71 class JsonBlobCache(object):
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
72 def __init__(self, cachedir):
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
73 self.cachedir = cachedir
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
74
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
75 def __pathforkey(self, key):
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
76 if not isinstance(key, basestring):
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
77 raise ValueError('key must be a string')
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
78 return os.path.join(self.cachedir, '%s.json' % key)
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
79
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
80 def __getitem__(self, key):
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
81 if not key in self:
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
82 raise KeyError(key)
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
83 return json.loads(open(self.__pathforkey(key)).read())
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
84
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
85 def __setitem__(self, key, value):
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
86 open(self.__pathforkey(key), 'w').write(json.dumps(value))
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
87
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
88 def __contains__(self, key):
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
89 return os.path.exists(self.__pathforkey(key))
85016bf54034 Added JsonBlobCache class
Atul Varma <avarma@mozilla.com>
parents: 2
diff changeset
90
4
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
91 def getpass_or_die(prompt, getpass=getpass):
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
92 try:
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
93 password = getpass(prompt)
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
94 except KeyboardInterrupt:
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
95 password = None
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
96
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
97 if not password:
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
98 print "Aborted."
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
99 sys.exit(1)
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
100
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
101 return password
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
102
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
103 def load_config(filename=None, getpass=getpass_or_die):
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
104 config = {}
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
105 config.update(DEFAULT_CONFIG)
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
106
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
107 if not filename:
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
108 filename = os.path.join('~', '.bugzilla-config.json')
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
109 filename = os.path.expanduser(filename)
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
110 if not os.path.exists(filename):
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
111 return config
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
112
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
113 config.update(json.loads(open(filename).read()))
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
114
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
115 if getpass and 'username' in config and 'password' not in config:
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
116 config['password'] = getpass('Enter password for %s: ' %
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
117 config['username'])
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
118 return config
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
119
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
120 class BugzillaApi(object):
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
121 def __init__(self, config=None, jsonreq=None):
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
122 if config is None:
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
123 config = load_config()
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
124
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
125 if jsonreq is None:
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
126 if 'cache_dir' in config:
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
127 cache = JsonBlobCache(os.path.expanduser(config['cache_dir']))
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
128 jsonreq = make_caching_json_request(cache)
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
129 else:
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
130 jsonreq = json_request
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
131
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
132 self.config = config
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
133 self.__jsonreq = jsonreq
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
134
5
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
135 def post_attachment(self, bug_id, contents, filename, description,
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
136 content_type=None, is_patch=False, is_private=False,
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
137 is_obsolete=False,
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
138 guess_mime_type=mimetypes.guess_type):
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
139 if content_type is None:
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
140 content_type = guess_mime_type(filename)[0]
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
141 if not content_type:
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
142 raise ValueError('could not guess content type for "%s"' %
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
143 filename)
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
144
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
145 attachment = {
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
146 'data': base64.b64encode(contents),
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
147 'description': description,
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
148 'encoding': 'base64',
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
149 'file_name': filename,
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
150 'flags': [],
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
151 'is_obsolete': is_obsolete,
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
152 'is_patch': is_patch,
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
153 'is_private': is_private,
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
154 'size': len(contents),
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
155 'content_type': content_type
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
156 }
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
157
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
158 return self.request('POST', '/bug/%d/attachment' % bug_id,
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
159 body=attachment)
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
160
4
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
161 def request(self, method, path, query_args=None, body=None):
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
162 if query_args is None:
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
163 query_args = {}
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
164
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
165 if 'username' in self.config and 'password' in self.config:
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
166 for name in ['username', 'password']:
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
167 query_args[name] = self.config[name]
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
168
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
169 url = '%s%s' % (self.config['api_server'], path)
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
170
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
171 response = self.__jsonreq(method=method,
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
172 url=url,
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
173 query_args=query_args,
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
174 body=body)
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
175
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
176 if response['content_type'] == 'application/json':
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
177 json_response = response['body']
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
178 if 'error' in json_response and json_response['error']:
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
179 raise BugzillaApiError(response)
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
180 return json_response
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
181 raise BugzillaApiError(response)
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
182
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
183 class BugzillaApiError(Exception):
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
184 pass
0
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
185
349a78c460e2 Origination.
Atul Varma <avarma@mozilla.com>
parents:
diff changeset
186 if __name__ == '__main__':
4
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
187 bzapi = BugzillaApi()
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
188 print bzapi.request('GET', '/attachment/436897',
4e31f7aeb1b8 Made BugzillaAPI
Atul Varma <avarma@mozilla.com>
parents: 3
diff changeset
189 query_args={'attachmentdata': 1})
5
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
190 #bzapi.post_attachment(bug_id=536619,
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
191 # contents="testing!",
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
192 # filename="contents.txt",
7745feb7ca9c Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents: 4
diff changeset
193 # description="test upload")