Mercurial > pybugzilla
annotate bugzilla.py @ 22:97b3eb038314
made bzpatch.py executable
author | Atul Varma <avarma@mozilla.com> |
---|---|
date | Tue, 13 Apr 2010 22:33:53 -0700 |
parents | f6efd07c8356 |
children | 96f841399b40 |
rev | line source |
---|---|
0 | 1 #! /usr/bin/env python |
2 | |
4 | 3 import os |
4 import sys | |
5
7745feb7ca9c
Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents:
4
diff
changeset
|
5 import base64 |
0 | 6 import httplib |
7 import urllib | |
5
7745feb7ca9c
Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents:
4
diff
changeset
|
8 import mimetypes |
9
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
9 import datetime |
0 | 10 from urlparse import urlparse |
4 | 11 from getpass import getpass |
0 | 12 |
13 try: | |
14 import json | |
15 except ImportError: | |
16 import simplejson as json | |
17 | |
4 | 18 DEFAULT_CONFIG = { |
19 'api_server': 'https://api-dev.bugzilla.mozilla.org/latest', | |
20 'server': 'https://bugzilla.mozilla.org' | |
21 } | |
22 | |
0 | 23 def json_request(method, url, query_args=None, body=None): |
24 if query_args is None: | |
25 query_args = {} | |
26 | |
27 headers = {'Accept': 'application/json', | |
28 'Content-Type': 'application/json'} | |
29 | |
30 urlparts = urlparse(url) | |
31 if urlparts.scheme == 'https': | |
32 connclass = httplib.HTTPSConnection | |
33 elif urlparts.scheme == 'http': | |
34 connclass = httplib.HTTPConnection | |
35 else: | |
36 raise ValueError('unknown scheme "%s"' % urlparts.scheme) | |
37 conn = connclass(urlparts.netloc) | |
38 path = urlparts.path | |
39 if query_args: | |
40 path += '?%s' % urllib.urlencode(query_args) | |
41 if body is not None: | |
42 body = json.dumps(body) | |
43 conn.request(method, path, body, headers) | |
44 response = conn.getresponse() | |
45 status, reason = response.status, response.reason | |
46 mimetype = response.msg.gettype() | |
47 data = response.read() | |
48 conn.close() | |
49 | |
50 if mimetype == 'application/json': | |
51 data = json.loads(data) | |
52 | |
53 return {'status': response.status, | |
54 'reason': response.reason, | |
55 'content_type': mimetype, | |
56 'body': data} | |
57 | |
3 | 58 def make_caching_json_request(cache, json_request=json_request): |
2 | 59 from hashlib import sha1 as hashfunc |
1
aca76355e4d8
Added make_caching_json_request() and .hgignore
Atul Varma <avarma@mozilla.com>
parents:
0
diff
changeset
|
60 |
aca76355e4d8
Added make_caching_json_request() and .hgignore
Atul Varma <avarma@mozilla.com>
parents:
0
diff
changeset
|
61 def caching_json_request(method, url, query_args=None, body=None): |
3 | 62 key = hashfunc(repr((method, url, query_args, body))).hexdigest() |
63 if not key in cache: | |
64 cache[key] = json_request(method=method, | |
65 url=url, | |
66 query_args=query_args, | |
67 body=body) | |
68 return cache[key] | |
1
aca76355e4d8
Added make_caching_json_request() and .hgignore
Atul Varma <avarma@mozilla.com>
parents:
0
diff
changeset
|
69 |
aca76355e4d8
Added make_caching_json_request() and .hgignore
Atul Varma <avarma@mozilla.com>
parents:
0
diff
changeset
|
70 return caching_json_request |
aca76355e4d8
Added make_caching_json_request() and .hgignore
Atul Varma <avarma@mozilla.com>
parents:
0
diff
changeset
|
71 |
3 | 72 class JsonBlobCache(object): |
73 def __init__(self, cachedir): | |
74 self.cachedir = cachedir | |
75 | |
76 def __pathforkey(self, key): | |
77 if not isinstance(key, basestring): | |
78 raise ValueError('key must be a string') | |
79 return os.path.join(self.cachedir, '%s.json' % key) | |
80 | |
81 def __getitem__(self, key): | |
82 if not key in self: | |
83 raise KeyError(key) | |
84 return json.loads(open(self.__pathforkey(key)).read()) | |
85 | |
86 def __setitem__(self, key, value): | |
87 open(self.__pathforkey(key), 'w').write(json.dumps(value)) | |
88 | |
89 def __contains__(self, key): | |
90 return os.path.exists(self.__pathforkey(key)) | |
91 | |
4 | 92 def getpass_or_die(prompt, getpass=getpass): |
93 try: | |
94 password = getpass(prompt) | |
95 except KeyboardInterrupt: | |
96 password = None | |
97 | |
98 if not password: | |
99 print "Aborted." | |
100 sys.exit(1) | |
101 | |
102 return password | |
103 | |
9
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
104 def load_config(filename=None, getpass=None): |
4 | 105 config = {} |
106 config.update(DEFAULT_CONFIG) | |
107 | |
108 if not filename: | |
109 filename = os.path.join('~', '.bugzilla-config.json') | |
110 filename = os.path.expanduser(filename) | |
111 if not os.path.exists(filename): | |
112 return config | |
113 | |
114 config.update(json.loads(open(filename).read())) | |
115 | |
116 if getpass and 'username' in config and 'password' not in config: | |
117 config['password'] = getpass('Enter password for %s: ' % | |
118 config['username']) | |
119 return config | |
120 | |
121 class BugzillaApi(object): | |
9
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
122 def __init__(self, config=None, jsonreq=None, |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
123 getpass=getpass_or_die): |
4 | 124 if config is None: |
11
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
125 config = load_config(getpass=getpass) |
4 | 126 |
127 if jsonreq is None: | |
128 if 'cache_dir' in config: | |
129 cache = JsonBlobCache(os.path.expanduser(config['cache_dir'])) | |
130 jsonreq = make_caching_json_request(cache) | |
131 else: | |
132 jsonreq = json_request | |
133 | |
134 self.config = config | |
135 self.__jsonreq = jsonreq | |
15
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
136 self.users = LazyMapping(self, User, keytype=unicode) |
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
137 self.bugs = LazyMapping(self, Bug, keytype=int) |
17
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
138 self.attachments = Attachments(self) |
5
7745feb7ca9c
Added BugzillaApi.post_attachment()
Atul Varma <avarma@mozilla.com>
parents:
4
diff
changeset
|
139 |
20
f6efd07c8356
Implemented 'bzpatch.py post'
Atul Varma <avarma@mozilla.com>
parents:
17
diff
changeset
|
140 @property |
f6efd07c8356
Implemented 'bzpatch.py post'
Atul Varma <avarma@mozilla.com>
parents:
17
diff
changeset
|
141 def current_user(self): |
f6efd07c8356
Implemented 'bzpatch.py post'
Atul Varma <avarma@mozilla.com>
parents:
17
diff
changeset
|
142 # TODO: Deal more gracefully w/ case where user isn't |
f6efd07c8356
Implemented 'bzpatch.py post'
Atul Varma <avarma@mozilla.com>
parents:
17
diff
changeset
|
143 # logged-in. |
f6efd07c8356
Implemented 'bzpatch.py post'
Atul Varma <avarma@mozilla.com>
parents:
17
diff
changeset
|
144 return self.users.get(self.config['username']) |
f6efd07c8356
Implemented 'bzpatch.py post'
Atul Varma <avarma@mozilla.com>
parents:
17
diff
changeset
|
145 |
4 | 146 def request(self, method, path, query_args=None, body=None): |
147 if query_args is None: | |
148 query_args = {} | |
149 | |
150 if 'username' in self.config and 'password' in self.config: | |
151 for name in ['username', 'password']: | |
152 query_args[name] = self.config[name] | |
153 | |
154 url = '%s%s' % (self.config['api_server'], path) | |
155 | |
156 response = self.__jsonreq(method=method, | |
157 url=url, | |
158 query_args=query_args, | |
159 body=body) | |
160 | |
161 if response['content_type'] == 'application/json': | |
162 json_response = response['body'] | |
163 if 'error' in json_response and json_response['error']: | |
164 raise BugzillaApiError(response) | |
165 return json_response | |
166 raise BugzillaApiError(response) | |
167 | |
168 class BugzillaApiError(Exception): | |
169 pass | |
0 | 170 |
9
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
171 def iso8601_to_datetime(timestamp): |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
172 """ |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
173 >>> iso8601_to_datetime('2010-04-11T19:16:59Z') |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
174 datetime.datetime(2010, 4, 11, 19, 16, 59) |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
175 """ |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
176 |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
177 return datetime.datetime.strptime(timestamp, |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
178 "%Y-%m-%dT%H:%M:%SZ") |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
179 |
10
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
180 class BugzillaObject(object): |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
181 __bzprops__ = {} |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
182 |
12
d8db9b733a12
added superclass constructor for BugzillaObject
Atul Varma <avarma@mozilla.com>
parents:
11
diff
changeset
|
183 def __init__(self, jsonobj, bzapi): |
d8db9b733a12
added superclass constructor for BugzillaObject
Atul Varma <avarma@mozilla.com>
parents:
11
diff
changeset
|
184 self._set_bzprops(jsonobj) |
d8db9b733a12
added superclass constructor for BugzillaObject
Atul Varma <avarma@mozilla.com>
parents:
11
diff
changeset
|
185 self.bzapi = bzapi |
d8db9b733a12
added superclass constructor for BugzillaObject
Atul Varma <avarma@mozilla.com>
parents:
11
diff
changeset
|
186 |
10
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
187 def _set_bzprops(self, jsonobj): |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
188 for name, proptype in self.__bzprops__.items(): |
15
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
189 if name not in jsonobj: |
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
190 raise KeyError("key '%s' not found in JSON " |
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
191 "%s object" % (name, |
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
192 self.__class__.__name__)) |
10
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
193 if proptype == bool: |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
194 if jsonobj[name] == '0': |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
195 setattr(self, name, False) |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
196 elif jsonobj[name] == '1': |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
197 setattr(self, name, True) |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
198 else: |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
199 raise ValueError('bad boolean value: %s' % |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
200 repr(jsonobj[name])) |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
201 elif proptype in [int, unicode, str]: |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
202 setattr(self, name, proptype(jsonobj[name])) |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
203 elif proptype == datetime.datetime: |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
204 setattr(self, name, |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
205 iso8601_to_datetime(jsonobj[name])) |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
206 else: |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
207 raise ValueError("bad proptype for '%s': %s" % |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
208 name, repr(proptype)) |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
209 |
14
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
210 class LazyMapping(object): |
15
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
211 def __init__(self, bzapi, klass, keytype): |
17
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
212 self.bzapi = bzapi |
14
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
213 self.__klass = klass |
15
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
214 self.__keytype = keytype |
14
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
215 self.__mapping = {} |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
216 |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
217 def get(self, name, jsonobj=None): |
15
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
218 name = self.__keytype(name) |
14
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
219 if name not in self.__mapping: |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
220 if jsonobj: |
17
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
221 obj = self.__klass(jsonobj, self.bzapi) |
14
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
222 else: |
17
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
223 obj = self.__klass.fetch(self.bzapi, name) |
15
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
224 self.__mapping[name] = obj |
14
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
225 |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
226 return self.__mapping[name] |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
227 |
17
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
228 class Attachments(LazyMapping): |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
229 def __init__(self, bzapi): |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
230 LazyMapping.__init__(self, bzapi, Attachment, int) |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
231 |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
232 def post(self, bug_id, contents, filename, description, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
233 content_type=None, is_patch=False, is_private=False, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
234 is_obsolete=False, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
235 guess_mime_type=mimetypes.guess_type): |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
236 """ |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
237 >>> jsonreq = Mock('jsonreq') |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
238 >>> jsonreq.mock_returns = { |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
239 ... "status": 201, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
240 ... "body": {"ref": "http://foo/latest/attachment/1"}, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
241 ... "reason": "Created", |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
242 ... "content_type": "application/json" |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
243 ... } |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
244 >>> bzapi = BugzillaApi(config=TEST_CFG_WITH_LOGIN, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
245 ... jsonreq=jsonreq) |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
246 >>> bzapi.attachments.post(bug_id=536619, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
247 ... contents="testing!", |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
248 ... filename="contents.txt", |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
249 ... description="test upload") |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
250 Called jsonreq( |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
251 body={'is_obsolete': False, 'flags': [], |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
252 'description': 'test upload', |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
253 'content_type': 'text/plain', 'encoding': 'base64', |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
254 'file_name': 'contents.txt', 'is_patch': False, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
255 'data': 'dGVzdGluZyE=', 'is_private': False, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
256 'size': 8}, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
257 method='POST', |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
258 query_args={'username': 'bar', 'password': 'baz'}, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
259 url='http://foo/latest/bug/536619/attachment') |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
260 {'ref': 'http://foo/latest/attachment/1'} |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
261 """ |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
262 |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
263 if content_type is None: |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
264 content_type = guess_mime_type(filename)[0] |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
265 if not content_type: |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
266 raise ValueError('could not guess content type for "%s"' % |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
267 filename) |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
268 |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
269 attachment = { |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
270 'data': base64.b64encode(contents), |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
271 'description': description, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
272 'encoding': 'base64', |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
273 'file_name': filename, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
274 'flags': [], |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
275 'is_obsolete': is_obsolete, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
276 'is_patch': is_patch, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
277 'is_private': is_private, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
278 'size': len(contents), |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
279 'content_type': content_type |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
280 } |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
281 |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
282 return self.bzapi.request('POST', '/bug/%d/attachment' % bug_id, |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
283 body=attachment) |
a6b33ad7db1d
Moved BugzillaApi.post_attachment() to BugzillaApi.attachments.post().
Atul Varma <avarma@mozilla.com>
parents:
15
diff
changeset
|
284 |
11
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
285 class User(BugzillaObject): |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
286 """ |
13
d5f43c3aeb29
made passing bzapi into constructors of User, Bug, Attachment objects mandatory
Atul Varma <avarma@mozilla.com>
parents:
12
diff
changeset
|
287 >>> u = User(TEST_USER, bzapi=None) |
11
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
288 >>> u.name |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
289 u'avarma@mozilla.com' |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
290 >>> u.real_name |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
291 u'Atul Varma [:atul]' |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
292 >>> u.email |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
293 u'avarma@mozilla.com' |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
294 |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
295 >>> bzapi = Mock('bzapi') |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
296 >>> bzapi.request.mock_returns = TEST_USER_SEARCH_RESULT |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
297 >>> u = User({'name': 'avarma@mozilla.com'}, bzapi) |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
298 >>> u.real_name |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
299 Called bzapi.request( |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
300 'GET', |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
301 '/user', |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
302 query_args={'match': u'avarma@mozilla.com'}) |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
303 u'Atul Varma [:atul]' |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
304 """ |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
305 |
20
f6efd07c8356
Implemented 'bzpatch.py post'
Atul Varma <avarma@mozilla.com>
parents:
17
diff
changeset
|
306 # TODO: This class currently assumes that the bzapi is |
f6efd07c8356
Implemented 'bzpatch.py post'
Atul Varma <avarma@mozilla.com>
parents:
17
diff
changeset
|
307 # authenticated (i.e., a user is logged-in). |
f6efd07c8356
Implemented 'bzpatch.py post'
Atul Varma <avarma@mozilla.com>
parents:
17
diff
changeset
|
308 |
11
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
309 __bzprops__ = { |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
310 'name': unicode |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
311 } |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
312 |
13
d5f43c3aeb29
made passing bzapi into constructors of User, Bug, Attachment objects mandatory
Atul Varma <avarma@mozilla.com>
parents:
12
diff
changeset
|
313 def __init__(self, jsonobj, bzapi): |
12
d8db9b733a12
added superclass constructor for BugzillaObject
Atul Varma <avarma@mozilla.com>
parents:
11
diff
changeset
|
314 BugzillaObject.__init__(self, jsonobj, bzapi) |
11
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
315 self.__email = jsonobj.get('email') |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
316 self.__real_name = jsonobj.get('real_name') |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
317 |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
318 def __fulfill(self): |
14
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
319 user = self.__get_user(self.bzapi, self.name) |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
320 self.__email = user['email'] |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
321 self.__real_name = user['real_name'] |
11
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
322 |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
323 @property |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
324 def email(self): |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
325 if self.__email is None: |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
326 self.__fulfill() |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
327 return self.__email |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
328 |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
329 @property |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
330 def real_name(self): |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
331 if self.__real_name is None: |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
332 self.__fulfill() |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
333 return self.__real_name |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
334 |
14
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
335 def __repr__(self): |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
336 return '<User %s>' % repr(self.name) |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
337 |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
338 @staticmethod |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
339 def __get_user(bzapi, name): |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
340 response = bzapi.request('GET', '/user', |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
341 query_args={'match': name}) |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
342 users = response['users'] |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
343 if len(users) > 1: |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
344 raise BugzillaApiError("more than one user found for " |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
345 "name '%s'" % name) |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
346 elif not users: |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
347 raise BugzillaApiError("no users found for " |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
348 "name '%s'" % name) |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
349 return users[0] |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
350 |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
351 @classmethod |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
352 def fetch(klass, bzapi, name): |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
353 """ |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
354 >>> bzapi = Mock('bzapi') |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
355 >>> bzapi.request.mock_returns = TEST_USER_SEARCH_RESULT |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
356 >>> User.fetch(bzapi, 'avarma@mozilla.com') |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
357 Called bzapi.request('GET', '/user', |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
358 query_args={'match': 'avarma@mozilla.com'}) |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
359 <User u'avarma@mozilla.com'> |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
360 """ |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
361 |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
362 return klass(klass.__get_user(bzapi, name), bzapi) |
0910577d08fa
Added LazyMapping and User.fetch
Atul Varma <avarma@mozilla.com>
parents:
13
diff
changeset
|
363 |
10
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
364 class Attachment(BugzillaObject): |
9
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
365 """ |
15
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
366 >>> bzapi = MockBugzillaApi() |
9
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
367 >>> bzapi.request.mock_returns = TEST_ATTACHMENT_WITH_DATA |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
368 >>> a = Attachment(TEST_ATTACHMENT_WITHOUT_DATA, bzapi) |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
369 >>> a.data |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
370 Called bzapi.request( |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
371 'GET', |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
372 '/attachment/438797', |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
373 query_args={'attachmentdata': '1'}) |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
374 'testing!' |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
375 """ |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
376 |
10
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
377 __bzprops__ = { |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
378 'id': int, |
11
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
379 'bug_id': int, |
10
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
380 'last_change_time': datetime.datetime, |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
381 'creation_time': datetime.datetime, |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
382 'description': unicode, |
11
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
383 'content_type': str, |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
384 'is_patch': bool, |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
385 'is_obsolete': bool |
10
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
386 } |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
387 |
15
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
388 def __init__(self, jsonobj, bzapi): |
12
d8db9b733a12
added superclass constructor for BugzillaObject
Atul Varma <avarma@mozilla.com>
parents:
11
diff
changeset
|
389 BugzillaObject.__init__(self, jsonobj, bzapi) |
9
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
390 if 'data' in jsonobj: |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
391 self.__data = self.__decode_data(jsonobj) |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
392 else: |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
393 self.__data = None |
15
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
394 self.attacher = self.bzapi.users.get(jsonobj['attacher']['name'], |
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
395 jsonobj['attacher']) |
11
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
396 |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
397 @property |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
398 def bug(self): |
15
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
399 return self.bzapi.bugs.get(self.bug_id) |
9
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
400 |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
401 @property |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
402 def data(self): |
11
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
403 if self.__data is None: |
9
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
404 jsonobj = self.__get_full_attachment(self.bzapi, self.id) |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
405 self.__data = self.__decode_data(jsonobj) |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
406 return self.__data |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
407 |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
408 def __decode_data(self, jsonobj): |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
409 if jsonobj['encoding'] != 'base64': |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
410 raise NotImplementedError("unrecognized encoding: %s" % |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
411 jsonobj['encoding']) |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
412 return base64.b64decode(jsonobj['data']) |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
413 |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
414 def __repr__(self): |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
415 return '<Attachment %d - %s>' % (self.id, repr(self.description)) |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
416 |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
417 @staticmethod |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
418 def __get_full_attachment(bzapi, attach_id): |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
419 return bzapi.request('GET', '/attachment/%d' % attach_id, |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
420 query_args={'attachmentdata': '1'}) |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
421 |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
422 @classmethod |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
423 def fetch(klass, bzapi, attach_id): |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
424 """ |
15
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
425 >>> bzapi = MockBugzillaApi() |
9
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
426 >>> bzapi.request.mock_returns = TEST_ATTACHMENT_WITH_DATA |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
427 >>> Attachment.fetch(bzapi, 438797) |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
428 Called bzapi.request( |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
429 'GET', |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
430 '/attachment/438797', |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
431 query_args={'attachmentdata': '1'}) |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
432 <Attachment 438797 - u'test upload'> |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
433 """ |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
434 |
11
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
435 return klass(klass.__get_full_attachment(bzapi, attach_id), |
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
436 bzapi) |
9
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
437 |
10
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
438 class Bug(BugzillaObject): |
9
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
439 """ |
15
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
440 >>> Bug(TEST_BUG, MockBugzillaApi()) |
9
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
441 <Bug 558680 - u'Here is a summary'> |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
442 """ |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
443 |
10
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
444 __bzprops__ = { |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
445 'id': int, |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
446 'summary': unicode |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
447 } |
b85bd0fc50e4
Added BugzillaObject superclass to make translating properties from JSON easier
Atul Varma <avarma@mozilla.com>
parents:
9
diff
changeset
|
448 |
13
d5f43c3aeb29
made passing bzapi into constructors of User, Bug, Attachment objects mandatory
Atul Varma <avarma@mozilla.com>
parents:
12
diff
changeset
|
449 def __init__(self, jsonobj, bzapi): |
12
d8db9b733a12
added superclass constructor for BugzillaObject
Atul Varma <avarma@mozilla.com>
parents:
11
diff
changeset
|
450 BugzillaObject.__init__(self, jsonobj, bzapi) |
15
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
451 self.attachments = [bzapi.attachments.get(attach['id'], attach) |
9
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
452 for attach in jsonobj['attachments']] |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
453 |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
454 def __repr__(self): |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
455 return '<Bug %d - %s>' % (self.id, repr(self.summary)) |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
456 |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
457 @classmethod |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
458 def fetch(klass, bzapi, bug_id): |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
459 """ |
15
798f8f33c418
added bzapi.users, bzapi.attachments, and bzapi.bugs as primary accessors of bugzilla information.
Atul Varma <avarma@mozilla.com>
parents:
14
diff
changeset
|
460 >>> bzapi = MockBugzillaApi() |
9
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
461 >>> bzapi.request.mock_returns = TEST_BUG |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
462 >>> Bug.fetch(bzapi, 558680) |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
463 Called bzapi.request('GET', '/bug/558680') |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
464 <Bug 558680 - u'Here is a summary'> |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
465 """ |
295c54288dd1
Added Bug and Attachment classes.
Atul Varma <avarma@mozilla.com>
parents:
6
diff
changeset
|
466 |
11
29efa19d959a
Added bzgetpatch.py and bugzilla.User class
Atul Varma <avarma@mozilla.com>
parents:
10
diff
changeset
|
467 return klass(bzapi.request('GET', '/bug/%d' % bug_id), bzapi) |