Skip to content

Commit b6c73be

Browse files
martynbristowstanislavulrych
authored andcommitted
General Fixes
Signed-off-by: Martyn Bristow <[email protected]>
1 parent e357969 commit b6c73be

File tree

4 files changed

+41
-63
lines changed

4 files changed

+41
-63
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
/tempo_api_python_client.egg-info
2+
/dist
3+
/build

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ for i in worklogs:
4040
There are also functions to retrieve `user` and `team`-specific worklogs.
4141

4242

43+
## Code Format
44+
45+
- Flake8: `flake8 --max-line-length=120 tempoapiclient/*`
46+
47+
- Pylint: `pylint --max-line-length=120 tempoapiclient`
48+
4349
## Contributing
4450

4551
Contribution is welcome. See [CONTRIBUTING.md](CONTRIBUTING.md) for more details.

tempoapiclient/client.py

Lines changed: 24 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
from .rest_client import RestAPIClient
1919

20+
2021
class Tempo(RestAPIClient):
2122
"""
2223
Basic Client for accessing Tempo Rest API as provided by api.tempo.io.
@@ -32,15 +33,16 @@ def _resolve_date(self, value):
3233
return value.date()
3334
if isinstance(value, date):
3435
return value
35-
36+
3637
parsed = datetime.strptime(value, r"%Y-%m-%d").date()
3738

3839
return parsed
3940

4041
def get(self, path, data=None, flags=None, params=None, headers=None, not_json_response=None, trailing=None):
4142
path_absolute = super().url_joiner(self._base_url, path)
42-
resp = super().get(path_absolute, data=data, flags=flags, params=params, headers=headers, not_json_response=not_json_response, trailing=trailing)
43-
43+
resp = super().get(path_absolute, data=data, flags=flags, params=params, headers=headers,
44+
not_json_response=not_json_response, trailing=trailing)
45+
4446
# single item returned
4547
if 'results' not in resp:
4648
return resp
@@ -52,7 +54,7 @@ def get(self, path, data=None, flags=None, params=None, headers=None, not_json_r
5254
while 'next' in resp.get('metadata'):
5355
resp = super().get(resp.get('metadata').get('next'))
5456
results.extend(resp['results'])
55-
57+
5658
return results
5759

5860
# Accounts
@@ -63,34 +65,25 @@ def get_accounts(self):
6365
"""
6466
return self.get("/accounts")
6567

66-
67-
# Account - Categories
68-
68+
# Account - Categories
6969
def get_account_categories(self):
7070
"""
7171
Retrieves existing account categories.
7272
"""
7373
return self.get("/account-categories")
7474

75-
76-
# Account - Category - Types
77-
75+
# Account - Category - Types
7876
def get_account_category_types(self):
79-
8077
"""
8178
Retrieves all periods for a given date range as a list.
8279
"""
8380
return self.get("/account-category-types")
8481

85-
# Account - Links
86-
82+
# Account - Links
8783
## TBD
8884

89-
90-
# Customers
91-
85+
# Customers
9286
def get_customers(self, key=None):
93-
9487
"""
9588
Retrieves all customers or customer.
9689
:param key: Return customer for ```key```.
@@ -101,22 +94,18 @@ def get_customers(self, key=None):
10194
url += f"/{key}"
10295
return self.get(url)
10396

104-
105-
# Plans
106-
97+
# Plans
10798
def get_plans(self, dateFrom, dateTo, assigneeType=None, planItemType=None, updatedFrom=None, id=None, userId=None):
108-
10999
"""
110100
Retrieves plans or plan.
111-
:param dateFrom:
101+
:param dateFrom:
112102
:param dateTo:
113103
:param assigneeType:
114104
:param planItemType:
115105
:param updatedFrom:
116106
:param id: Plan id
117107
:param userId: ```AccountId``` for user in Tempo
118108
"""
119-
120109
params = {
121110
"from": self._resolve_date(dateFrom).isoformat(),
122111
"to": self._resolve_date(dateTo).isoformat(),
@@ -129,27 +118,21 @@ def get_plans(self, dateFrom, dateTo, assigneeType=None, planItemType=None, upda
129118
params['planItemType'] = planItemType
130119
if updatedFrom:
131120
params['updatedFrom'] = self._resolve_date(updatedFrom).isoformat()
132-
121+
133122
url = "/plans"
134123
if id:
135124
url += f"/{id}"
136125
elif userId:
137126
url += f"/plans/user/{userId}"
138127
return self.get(url, params=params)
139128

140-
141-
# Programs
142-
129+
# Programs
143130
## TBD
144131

145-
146-
# Roles
147-
132+
# Roles
148133
## TBD
149134

150-
151-
# Teams
152-
135+
# Teams
153136
def get_teams(self, teamId=None):
154137
"""
155138
Returns teams information.
@@ -171,13 +154,10 @@ def get_team_members(self, teamId):
171154
url = f"/teams/{teamId}/members"
172155
return self.get(url)
173156

174-
# Team - Links
175-
176-
## TBD
177-
178-
179-
# Team - Memberships
157+
# Team - Links
158+
## TBD
180159

160+
# Team - Memberships
181161
def get_team_memberships(self, membershipId):
182162
"""
183163
Returns members.
@@ -238,7 +218,6 @@ def get_timesheet_approvals(self, dateFrom=None, dateTo=None, userId=None, teamI
238218
:param userId:
239219
:param teamId:
240220
"""
241-
242221
params = {}
243222
if dateFrom:
244223
params["from"] = self._resolve_date(dateFrom).isoformat()
@@ -252,8 +231,7 @@ def get_timesheet_approvals(self, dateFrom=None, dateTo=None, userId=None, teamI
252231
url += f"/team/{teamId}"
253232
return self.get(url, params=params)
254233

255-
# User Schedule
256-
234+
# User Schedule
257235
def get_user_schedule(self, dateFrom, dateTo, userId=None):
258236
"""
259237
Returns user schedule.
@@ -271,19 +249,14 @@ def get_user_schedule(self, dateFrom, dateTo, userId=None):
271249
url += f"/{userId}"
272250
return self.get(url, params=params)
273251

274-
275-
# Work Attributes
276-
252+
# Work Attributes
277253
def get_work_attributes(self):
278254
"""
279255
Returns worklog attributes.
280256
"""
281-
282257
return self.get("/work-attributes")
283258

284-
285-
# Workload Schemes
286-
259+
# Workload Schemes
287260
def get_workload_schemes(self, id=None):
288261
url = f"/workload-schemes"
289262
if id:
@@ -300,7 +273,8 @@ def get_holiday_schemes(self, holidaySchemeId=None):
300273

301274
# Worklogs
302275

303-
def get_worklogs(self, dateFrom, dateTo, updatedFrom=None, worklogId=None, jiraWorklogId=None, jiraFilterId=None, accountKey=None, projectKey=None, teamId=None, accountId=None, issueId=None):
276+
def get_worklogs(self, dateFrom, dateTo, updatedFrom=None, worklogId=None, jiraWorklogId=None, jiraFilterId=None,
277+
accountKey=None, projectKey=None, teamId=None, accountId=None, issueId=None):
304278
"""
305279
Returns worklogs for particular parameters.
306280
:param dateFrom:

tempoapiclient/rest_client.py

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@
77

88
log = logging.getLogger()
99

10+
1011
class RestAPIClient(object):
1112
default_headers = {'Content-Type': 'application/json', 'Accept': 'application/json'}
1213
response = None
1314

1415
def __init__(self, url="", auth_token=None, timeout=None, verify_ssl=None, proxies=None, advanced_mode=None):
15-
1616
self._url = url
1717
self._auth_token = auth_token
1818
self._timeout = timeout
@@ -21,7 +21,7 @@ def __init__(self, url="", auth_token=None, timeout=None, verify_ssl=None, proxi
2121
self._advanced_mode = advanced_mode
2222
self._session = requests.Session()
2323
self._update_header("Authorization", "Bearer {}".format(auth_token))
24-
24+
2525
def __enter__(self):
2626
return self
2727

@@ -41,7 +41,7 @@ def _response_handler(self, response):
4141

4242
if self._advanced_mode:
4343
return response
44-
44+
4545
try:
4646
# If the response was successful, no Exception will be raised
4747
response.raise_for_status()
@@ -57,7 +57,7 @@ def _response_handler(self, response):
5757
@staticmethod
5858
def url_joiner(url, path, trailing=None):
5959
url_link = path
60-
if url:
60+
if url:
6161
url_link = '/'.join(s.strip('/') for s in [url, path])
6262
if trailing:
6363
url_link += '/'
@@ -67,7 +67,7 @@ def close(self):
6767
return self._session.close()
6868

6969
def _request(self, method='GET', path='/', data=None, json=None, flags=None, params=None, headers=None,
70-
files=None, trailing=None):
70+
files=None, trailing=None):
7171
"""
7272
7373
:param method:
@@ -92,7 +92,6 @@ def _request(self, method='GET', path='/', data=None, json=None, flags=None, par
9292
if files is None:
9393
data = None if not data else dumps(data)
9494
json_dump = None if not json else dumps(json)
95-
9695

9796
headers = headers or self.default_headers
9897
response = self._session.request(
@@ -123,30 +122,26 @@ def get(self, path, data=None, flags=None, params=None, headers=None, not_json_r
123122
:param trailing: OPTIONAL: for wrap slash symbol in the end of string
124123
:return:
125124
"""
126-
127125
response = self._request('GET', path=path, flags=flags, params=params, data=data, headers=headers,
128-
trailing=trailing)
126+
trailing=trailing)
129127

130128
return self._response_handler(response)
131129

132130
def post(self, path, data=None, json=None, headers=None, files=None, params=None, trailing=None):
133131
response = self._request('POST', path=path, data=data, json=json, headers=headers, files=files, params=params,
134-
trailing=trailing)
135-
132+
trailing=trailing)
136133
return self._response_handler(response)
137134

138135
def put(self, path, data=None, headers=None, files=None, trailing=None, params=None):
139136
response = self._request('PUT', path=path, data=data, headers=headers, files=files, params=params,
140-
trailing=trailing)
137+
trailing=trailing)
141138
return self._response_handler(response)
142139

143-
144140
def delete(self, path, data=None, headers=None, params=None, trailing=None):
145141
"""
146142
Deletes resources at given paths.
147143
:rtype: dict
148144
:return: Empty dictionary to have consistent interface.
149145
"""
150146
response = self._request('DELETE', path=path, data=data, headers=headers, params=params, trailing=trailing)
151-
152147
return self._response_handler(response)

0 commit comments

Comments
 (0)