diff --git a/atlassian/VERSION b/atlassian/VERSION index 850e74240..63e799cf4 100644 --- a/atlassian/VERSION +++ b/atlassian/VERSION @@ -1 +1 @@ -1.14.0 +1.14.1 diff --git a/atlassian/bitbucket.py b/atlassian/bitbucket.py index 9e32f1a08..71a8a5d69 100644 --- a/atlassian/bitbucket.py +++ b/atlassian/bitbucket.py @@ -553,7 +553,7 @@ def delete_branch(self, project, repository, name, end_point): data = {"name": str(name), "endPoint": str(end_point)} return self.delete(url, data=data) - def get_pull_requests(self, project, repository, state='OPEN', order='newest', limit=100, start=0): + def get_pull_requests(self, project, repository, state='OPEN', order='newest', limit=100, start=0, at=None): """ Get pull requests :param project: @@ -576,6 +576,8 @@ def get_pull_requests(self, project, repository, state='OPEN', order='newest', l params['start'] = start if order: params['order'] = order + if at: + params['at'] = at response = self.get(url, params=params) if 'values' not in response: return [] diff --git a/atlassian/confluence.py b/atlassian/confluence.py index 3631d25f0..56ecf567d 100644 --- a/atlassian/confluence.py +++ b/atlassian/confluence.py @@ -1276,7 +1276,7 @@ def team_calendar_events(self, sub_calendar_id, start, end, user_time_zone_id=No if start: params['start'] = start if end: - params['start'] = end + params['end'] = end return self.get(url, params=params) def get_mobile_parameters(self, username): @@ -1305,3 +1305,17 @@ def avatar_set_default_for_user(self, user_key): """ url = 'rest/user-profile/1.0/{}/avatar/default'.format(user_key) return self.get(url) + + def add_user_to_group(self, username, group_name): + """ + Add given user to a group + + :param username: str + :param group_name: str + :return: Current state of the group + """ + url = 'rest/api/2/group/user' + params = {'groupname': group_name} + data = {'name': username} + + return self.post(url, params=params, data=data) diff --git a/atlassian/jira.py b/atlassian/jira.py index 8bf71d706..0dbb8ae73 100644 --- a/atlassian/jira.py +++ b/atlassian/jira.py @@ -1045,7 +1045,7 @@ def set_issue_status_by_transition_id(self, issue_key, transition_id): def get_issue_status(self, issue_key): url = 'rest/api/2/issue/{issue_key}?fields=status'.format(issue_key=issue_key) - return (self.get(url) or {}).get('fields').get('status').get('name') + return (((self.get(url) or {}).get('fields') or {}).get('status') or {}).get('name') or {} def get_issue_status_id(self, issue_key): url = 'rest/api/2/issue/{issue_key}?fields=status'.format(issue_key=issue_key) @@ -1657,6 +1657,17 @@ def tempo_workload_scheme_get_members(self, scheme_id): url = 'rest/tempo-core/1/workloadscheme/users/{}'.format(scheme_id) return self.get(url) + def tempo_workload_scheme_set_member(self, scheme_id, member): + """ + Provide a workload scheme members + :param member: user name of user + :param scheme_id: + :return: + """ + url = 'rest/tempo-core/1/workloadscheme/user/{}'.format(member) + data = {'id': scheme_id} + return self.put(url, data=data) + def tempo_timesheets_get_configuration(self): """ Provide the configs of timesheets @@ -1712,12 +1723,12 @@ def tempo_timesheets_get_worklogs(self, date_from=None, date_to=None, username=N def tempo_timesheets_write_worklog(self, worker, started, time_spend_in_seconds, issue_id, comment=None): """ - - :param comment: + Log work for user :param worker: :param started: :param time_spend_in_seconds: :param issue_id: + :param comment: :return: """ data = {"worker": worker, @@ -1729,6 +1740,20 @@ def tempo_timesheets_write_worklog(self, worker, started, time_spend_in_seconds, url = 'rest/tempo-timesheets/4/worklogs/' return self.post(url, data=data) + def tempo_timesheets_approval_worklog_report(self, user_key, period_start_date): + """ + Return timesheets for approval + :param user_key: + :param period_start_date: + :return: + """ + url = "rest/tempo-timesheets/4/timesheet-approval/current" + params = {} + if period_start_date: + params['periodStartDate'] = period_start_date + if user_key: + params['userKey'] = user_key + def tempo_timesheets_get_required_times(self, from_date, to_date, user_name): """ Provide time how much should work @@ -1774,6 +1799,13 @@ def tempo_get_default_link_to_project(self, project_id): url = 'rest/tempo-accounts/1/link/project/{}/default/'.format(project_id) return self.get(url) + def tempo_teams_get_all_teams(self, expand=None): + url = "rest/tempo-teams/2/team" + params = {} + if expand: + params['expand'] = expand + return self.get(url, params=params) + def tempo_teams_add_member(self, team_id, member_key): """ Add team member @@ -1781,12 +1813,37 @@ def tempo_teams_add_member(self, team_id, member_key): :param member_key: :return: """ - url = 'rest/tempo-teams/2/team/{}/member/'.format(team_id) - data = {"member": {"key": member_key, "type": "USER"}, + data = {"member": {"key": str(member_key), "type": "USER"}, "membership": { "availability": "100", "role": {"id": 1} }} + return self.tempo_teams_add_member_raw(team_id, member_data=data) + + def tempo_teams_add_membership(self, team_id, member_id): + """ + Add team member + :param team_id: + :param member_id: + :return: + """ + data = {"teamMemberId": member_id, + "teamId": team_id, + "availability": "100", + "role": {"id": 1} + } + url = "rest/tempo-teams/2/team/{}/member/{}/membership".format(team_id, member_id) + return self.post(url, data=data) + + def tempo_teams_add_member_raw(self, team_id, member_data): + """ + Add team member + :param team_id: + :param member_data: + :return: + """ + url = 'rest/tempo-teams/2/team/{}/member/'.format(team_id) + data = member_data return self.post(url, data=data) def tempo_teams_get_members(self, team_id):