FogBugz » FogBugzPy A Python wrapper for the FogBugz API Read More
Clone URL:  
Pushed to one repository · View In Graph Contained in 0.9.1, 0.9.2, and 0.9.3

* Added .hgignore
* Fixed exception exception

* Added README.txt

Changeset 01d7b6e898bf

Parent 3f812d376aa5

by Profile picture of User 10Tyler G. Hicks-Wright <tghw@fogcreek.com>

Changes to 3 files · Browse files at 01d7b6e898bf Showing diff from parent 3f812d376aa5 Diff from another changeset...

Change 1 of 1 Show Entire File .hgignore Stacked
 
 
 
 
1
2
@@ -1,0 +1,2 @@
+syntax: glob +*.pyc
Change 1 of 1 Show Entire File README.txt Stacked
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
@@ -1,0 +1,33 @@
+Python FogBugz API Wrapper + +This Python API is simply a wrapper around the FogBugz API, with some help from Leonard Richardson's BeautifulSoup (http://www.crummy.com/software/BeautifulSoup/) and the magic of Python's __getattr__(). + +A quick example: + +>>> from fogbugz import FogBugz +>>> fb = FogBugz("http://example.fogbugz.com/") # URL is to your FogBugz install +>>> fb.logon("logon@example.com", "password") +>>> resp = fb.search(q="assignedto:tyler") # All calls take named parameters, per the API +>>> resp # Responses are BeautifulSoup objects of the response XML +<response><cases count="2"><case ixbug="1" operations="edit,assign,resolve,email,remind"></case><case ixbug="2" operations="edit,spam,assign,resolve,reply,forward,remind"></case></cases></response> +>>> for case in resp.cases.childGenerator(): # One way to access the cases +... print case['ixbug'] +... +1 +2 +>>> for case in resp.findAll('case'): +... print case['operations'] +... +edit,assign,resolve,email,remind +edit,spam,assign,resolve,reply,forward,remind +>>> resp = fb.edit(ixbug=1, sEvent="Edit from the API") +>>> resp +<response><case ixbug="1" operations="edit,assign,resolve,email,remind"></case></response> + +For more info on the API +http://our.fogbugz.com/help/topics/advanced/API.html + +Known Issues: +* File uploading is currently unsupported for both cases and emails. + +Much of the API has not been thoroughly tested. Please assign bugs to Tyler Hicks-Wright. \ No newline at end of file
Change 1 of 2 Show Entire File fogbugz.py Stacked
 
 
1
2
3
4
5
6
7
8
9
 
10
11
12
13
14
 
15
16
17
 
54
55
56
57
58
59
 
60
61
 
62
63
 
64
65
66
67
68
69
70
 
71
72
73
 
1
2
3
4
5
6
 
 
 
 
7
8
9
10
11
 
12
13
14
15
 
52
53
54
 
 
 
55
56
 
57
58
 
59
60
61
62
 
 
 
 
63
64
65
66
@@ -1,17 +1,15 @@
+import urllib  import urllib2    from BeautifulSoup import BeautifulSoup    class FogBugzAPIError(Exception): - def __init__(self, response): - self.response = response - self.message = response.error.string - self.error_code = int(response.error['code']) + pass    class FogBugzLogonError(FogBugzAPIError):   pass   -class FogBugzConnectionError(Exception): +class FogBugzConnectionError(FogBugzAPIError):   pass    class FogBugz: @@ -54,20 +52,15 @@
  self._token = None     def __makerequest(self, cmd, **kwargs): - data = 'cmd=%s' % (cmd,) - for k in kwargs.keys(): - data += '&%s=%s' % (k, kwargs[k],) + kwargs["cmd"] = cmd   if self._token: - data += '&token=%s' % (self._token,) + kwargs["token"] = self._token   try: - response = BeautifulSoup(self._opener.open(self._url+data)).response + response = BeautifulSoup(self._opener.open(self._url+urllib.urlencode(kwargs))).response   except urllib2.URLError, e:   raise FogBugzConnectionError(e)   if response.error: - print response - raise FogBugzAPIError(response) - # TODO: Remove print for Release - print response + raise FogBugzAPIError('Error Code %s: %s' % (response.error['code'], response.error.string,))   return response     def __getattr__(self, name):