Skip to content

Commit 3f38bfd

Browse files
Support for retrieving single ticket from space by its number
1 parent 7e626e3 commit 3f38bfd

File tree

1 file changed

+22
-4
lines changed

1 file changed

+22
-4
lines changed

assembla/api.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ def spaces(self, extra_params=None):
3939
"""
4040
return self._get_json(Space, extra_params=extra_params)
4141

42-
def _get_json(self, model, space=None, rel_path=None, extra_params=None, get_all=None):
42+
def _get_json(self, model, space=None, rel_path=None, extra_params=None,
43+
get_all=None, get_single=False):
4344
"""
4445
Base level method for fetching data from the API
4546
"""
@@ -80,8 +81,16 @@ def _get_json(self, model, space=None, rel_path=None, extra_params=None, get_all
8081
self.cache[url] = response
8182

8283
if response.status_code == 200: # OK
83-
results = []
8484
json_response = response.json()
85+
86+
if get_single:
87+
instance = model(data=json_response)
88+
instance.api = self
89+
if space:
90+
instance.space = space
91+
return instance
92+
93+
results = []
8594
for obj in json_response:
8695
instance = model(data=obj)
8796
instance.api = self
@@ -101,7 +110,7 @@ def _get_json(self, model, space=None, rel_path=None, extra_params=None, get_all
101110
results = results + self._get_json(model, space, rel_path, extra_params, get_all=get_all)
102111
return results
103112
elif response.status_code == 204: # No Content
104-
return []
113+
return None if get_single else []
105114
else: # Most likely a 404 Not Found
106115
raise Exception(
107116
'Code {0} returned from `{1}`. Response text: "{2}".'.format(
@@ -320,12 +329,21 @@ def tickets(self, extra_params=None):
320329
get_all=True, # Retrieve all tickets in the space
321330
)
322331

332+
def ticket(self, n):
333+
return self.api._get_json(
334+
Ticket,
335+
space=self,
336+
rel_path=self._build_rel_path('tickets/{}'.format(n)),
337+
extra_params={},
338+
get_single=True,
339+
)
340+
323341
@assembla_filter
324342
def milestones(self, extra_params=None):
325343
"""
326344
All Milestones in this Space
327345
"""
328-
346+
329347
# Default params
330348
params = {
331349
'per_page': settings.MAX_PER_PAGE,

0 commit comments

Comments
 (0)