Skip to content

Commit 5f56658

Browse files
Rewriting most of the getters into a new form (braking backwards compatibilty).
1 parent a682d64 commit 5f56658

File tree

1 file changed

+169
-70
lines changed

1 file changed

+169
-70
lines changed

tempoapiclient/client.py

Lines changed: 169 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -70,40 +70,170 @@ def _single(self, url, **params):
7070
response = requests.get(url, params=params, headers=headers)
7171
response.raise_for_status()
7272
data = response.json()
73-
yield data
73+
return data
74+
75+
76+
# Accounts
7477

7578
def get_accounts(self):
7679
"""
7780
Retrieve existing accounts as a dictionary.
7881
"""
7982
return { x["key"]: x for x in self._list("/accounts") }
8083

84+
85+
# Account - Categories
86+
8187
def get_account_categories(self):
8288
"""
8389
Retrieve existing account categories as a dictionary.
8490
"""
8591
return { x["key"]: x for x in self._list("/account-categories") }
8692

93+
94+
# Account - Category - Types
95+
8796
def get_account_category_types(self):
97+
8898
"""
8999
Retrieve all periods for a given date range as a list.
90100
"""
91101
return self._list("/account-category-types")
92102

93-
def get_periods(self, date_from, date_to):
103+
# Account - Links
104+
105+
## TBD
106+
107+
108+
# Customers
109+
110+
## TBD
111+
112+
113+
# Plans
114+
115+
## TBD
116+
117+
118+
# Programs
119+
120+
## TBD
121+
122+
123+
# Roles
124+
125+
## TBD
126+
127+
128+
# Teams
129+
130+
def get_teams(self, teamId=None):
131+
"""
132+
Returns ```teams```.
133+
"""
134+
135+
url = f"/teams"
136+
if (teamId):
137+
url += f"/{teamId}"
138+
139+
return self._single(url)
140+
141+
def get_team_members(self, teamId):
142+
"""
143+
Returns members for particular ```team```.
144+
"""
145+
146+
url = f"/teams/{teamId}/members"
147+
return self._single(url)
148+
149+
# Team - Links
150+
151+
## TBD
152+
153+
154+
# Team - Memberships
155+
156+
def get_team_memberships(self, membershipId):
157+
"""
158+
Returns members for particular ```team membershipId```.
159+
"""
160+
161+
url = f"/team-memberships/{membershipId}"
162+
return self._single(url)
163+
164+
def get_account_team_membership(self, teamId, accountId):
165+
"""
166+
Returns the active team membership of a specific ```accountId``` in a specific ```teamId```.
167+
"""
168+
169+
url = f"/teams/{teamId}/members/{accountId}"
170+
return self._list(url)
171+
172+
def get_account_team_memberships(self, teamId, accountId):
173+
"""
174+
Returns all team memberships of a specific ```accountId``` in a specific ```teamId```.
175+
"""
176+
177+
url = f"/teams/{teamId}/members/{accountId}/memberships"
178+
return self._list(url)
179+
180+
# Periods
181+
182+
def get_periods(self, dateFrom, dateTo):
94183
"""
95184
Retrieve periods as a list.
96185
"""
97186
params = {
98-
"from": self._resolve_date(date_from).isoformat(),
99-
"to": self._resolve_date(date_to).isoformat()
187+
"from": self._resolve_date(dateFrom).isoformat(),
188+
"to": self._resolve_date(dateTo).isoformat()
100189
}
101190

102-
return self._list("/periods", **params)
191+
return self._single("/periods", **params)
192+
193+
# Timesheet Approvals
194+
195+
def get_timesheet_approvals_waiting(self):
196+
url = f"/timesheet-approvals/waiting"
197+
params = { "limit": self.MAX_RESULTS }
198+
return self._list(url, **params)
199+
200+
def get_timesheet_approvals(self, dateFrom=None, dateTo=None, userId=None, teamId=None):
201+
params = {}
202+
if dateFrom:
203+
params["from"] = self._resolve_date(dateFrom).isoformat()
204+
if dateTo:
205+
params["to"] = self._resolve_date(dateTo).isoformat()
206+
207+
url = f"/timesheet-approvals"
208+
if userId:
209+
url += f"/user/{userId}"
210+
elif teamId:
211+
url += f"/team/{teamId}"
212+
return self._single(url, **params)
213+
214+
# User Schedule
215+
216+
def get_user_schedule(self, dateFrom, dateTo, userId=None):
217+
"""
218+
Returns user schedule inside ```dateFrom``` and ```dateTo```,
219+
for particular ```userId```.
220+
"""
221+
params = {
222+
"from": self._resolve_date(dateFrom).isoformat(),
223+
"to": self._resolve_date(dateTo).isoformat(),
224+
"limit": self.MAX_RESULTS
225+
}
226+
url = "/user-schedule"
227+
if userId:
228+
url += f"/{userId}"
229+
return self._list(url, **params)
230+
231+
232+
# Work Attributes
103233

104234
def get_work_attributes(self):
105235
"""
106-
Returns worklog attributes inside ```date_from``` and ```date_to```,
236+
Returns worklog attributes inside ```dateFrom``` and ```dateTo```,
107237
for particular ```user```, adding work attributes if ```add_work_attributes```.
108238
"""
109239
return { x["key"]: x for x in self._list("/work-attributes") }
@@ -130,78 +260,47 @@ def add_worklog_attributes(self, worklogs):
130260

131261
yield worklog
132262

133-
def get_all_worklogs(self, date_from, date_to):
134-
date_from = self._resolve_date(date_from).isoformat()
135-
date_to = self._resolve_date(date_to).isoformat()
136-
url = f"/worklogs"
137-
params = { "from": date_from, "to": date_to, "limit": self.MAX_RESULTS }
138-
return self._list(url, **params)
139-
140-
def get_user_worklogs(self, date_from, date_to, userid):
141-
"""
142-
Returns worklogs inside ```date_from``` and ```date_to```,
143-
for particular ```user```.
144-
"""
145-
146-
date_from = self._resolve_date(date_from).isoformat()
147-
date_to = self._resolve_date(date_to).isoformat()
148-
url = f"/worklogs/user/{userid}"
149-
params = { "from": date_from, "to": date_to, "limit": self.MAX_RESULTS }
150-
return self._list(url, **params)
263+
# Workload Schemes
151264

152-
def get_team_worklogs(self, date_from, date_to, teamid):
153-
"""
154-
Returns worklogs inside ```date_from``` and ```date_to```,
155-
for particular ```team```.
156-
"""
265+
## TBD
157266

158-
date_from = self._resolve_date(date_from).isoformat()
159-
date_to = self._resolve_date(date_to).isoformat()
160-
url = f"/worklogs/team/{teamid}"
161-
params = { "from": date_from, "to": date_to, "limit": self.MAX_RESULTS }
162-
return self._list(url, **params)
267+
# Holiday Schemes
163268

164-
def get_team_members(self, teamid):
165-
"""
166-
Returns members for particular ```team```.
167-
"""
168-
169-
url = f"/teams/{teamid}/members"
269+
def get_holiday_schemes(self, holidaySchemeId=None):
270+
url = f"/holiday-schemes"
271+
if holidaySchemeId:
272+
url += f"/{holidaySchemeId}/holidays"
170273
return self._list(url)
171274

172-
def get_team_memberships(self, membershipid):
173-
"""
174-
Returns members for particular ```team membership id```.
175-
"""
176-
177-
url = f"/team-memberships/{membershipid}"
178-
return self._single(url)
275+
# Worklogs
179276

180-
def get_account_team_membership(self, teamid, accountid):
277+
def get_worklogs(self, dateFrom, dateTo, worklogId=None, jiraWorklogId=None, jiraFilterId=None, accountKey=None, projectKey=None, teamId=None, accountId=None, issue=None):
181278
"""
182-
Returns the active team membership of a specific ```accountid``` in a specific ```teamid```.
279+
Returns worklogs inside ```dateFrom``` and ```dateTo```,
280+
for particular parameter: ```worklogId```, ```jiraWorklogId```, ```jiraFilterId```, ```accountKey```, ```projectKey```, ```teamId```, ```accountId```, ```issue```.
183281
"""
184282

185-
url = f"/teams/{teamid}/members/{accountid}"
186-
return self._single(url)
187-
188-
def get_account_team_memberships(self, teamid, accountid):
189-
"""
190-
Returns all team memberships of a specific ```accountid``` in a specific ```teamid```.
191-
"""
192-
193-
url = f"/teams/{teamid}/members/{accountid}/memberships"
194-
return self._list(url)
283+
params = {
284+
"from": self._resolve_date(dateFrom).isoformat(),
285+
"to": self._resolve_date(dateTo).isoformat(),
286+
"limit": self.MAX_RESULTS
287+
}
288+
url = f"/worklogs"
289+
if worklogId:
290+
url += f"/{worklogId}"
291+
elif jiraWorklogId:
292+
url += f"/jira/{jiraWorklogId}"
293+
elif jiraFilterId:
294+
url += f"/jira/filter/{jiraFilterId}"
295+
elif accountKey:
296+
url += f"/account/{accountKey}"
297+
elif projectKey:
298+
url += f"/project/{projectKey}"
299+
elif teamId:
300+
url += f"/team/{teamId}"
301+
elif accountId:
302+
url += f"/user/{accountId}"
303+
elif issue:
304+
url += f"/issue/{issue}"
195305

196-
def get_user_schedule(self, date_from, date_to, user=None):
197-
"""
198-
Returns user schedule inside ```date_from``` and ```date_to```,
199-
for particular ```user```.
200-
"""
201-
date_from = self._resolve_date(date_from).isoformat()
202-
date_to = self._resolve_date(date_to).isoformat()
203-
url = "/user-schedule"
204-
if user is not None:
205-
url += "/{}".format(user)
206-
params = { "from": date_from, "to": date_to, "limit": self.MAX_RESULTS }
207306
return self._list(url, **params)

0 commit comments

Comments
 (0)