From f5ec68276712be0d0351249c71d64a2f69d617fa Mon Sep 17 00:00:00 2001 From: Carsten Schabacker Date: Tue, 6 Feb 2024 17:25:36 +0100 Subject: [PATCH] Add some APIs around subtask still not finished --- ActiveCollabAPI/ACClient.py | 64 ++++++++++++++++++++++++++++++++++++- main.py | 50 +++++++++++++++++++++++++---- 2 files changed, 107 insertions(+), 7 deletions(-) diff --git a/ActiveCollabAPI/ACClient.py b/ActiveCollabAPI/ACClient.py index a55c0c5..f3298fc 100644 --- a/ActiveCollabAPI/ACClient.py +++ b/ActiveCollabAPI/ACClient.py @@ -6,7 +6,6 @@ from ActiveCollabAPI import AC_USER_AGENT, AC_API_VERSION class ACClient: - base_url = None account = None token = None @@ -29,14 +28,77 @@ class ACClient: return requests.get(self.base_url + '/' + url, headers=self.headers()) + def _delete(self, url): + return requests.delete(self.base_url + '/' + url, + headers=self.headers()) + def _post(self, url, data): return requests.post( self.base_url + '/' + url, headers=self.headers(), data=json.dumps(data)) + def _put(self, url, data): + return requests.put( + self.base_url + '/' + url, + headers=self.headers(), + data=json.dumps(data)) + def get_info(self): return self._get('info') def get_projects(self): return self._get('projects') + + def get_project_task(self, project_id, task_id): + return self._get('projects/%d/tasks/%s' % (project_id, task_id)) + + def update_sub_task(self, subtask): + """ + NOT TESTED! + """ + project_id = subtask['project_id'] + task_id = subtask['task_id'] + subtask_id = subtask['id'] + data = { + 'single': subtask + } + return self._put('projects/%d/tasks/%s/subtasks/%s' % + (project_id, task_id, subtask_id), + data=data) + + def delete_subtask(self, subtask): + project_id = subtask['project_id'] + task_id = subtask['task_id'] + subtask_id = subtask['id'] + return self._delete('projects/%d/tasks/%s/subtasks/%s' % + (project_id, task_id, subtask_id)) + + def create_subtask(self, subtask): + project_id = subtask['project_id'] + task_id = subtask['task_id'] + return self._post('projects/%d/tasks/%s/subtasks' % + (project_id, task_id), + data=subtask) + + def unassign_all_sub_task(self, task): + for subtask in task['subtasks']: + self.unassign_sub_task(subtask) + + def unassign_sub_task(self, subtask): + return self.assign_sub_task(subtask, '') + + def assign_sub_task(self, subtask, user_id: [int, str]): + project_id = subtask['project_id'] + task_id = subtask['task_id'] + subtask_id = subtask['id'] + data = { + 'assignee_id': user_id + } + return self._put('projects/%d/tasks/%s/subtasks/%s' % + (project_id, task_id, subtask_id), + data=data) + + def get_project_task_subtask(self, project_id, task_id, subtask_id): + return self._get('projects/%d/tasks/%s/subtasks/%s' % + (project_id, task_id, subtask_id)) diff --git a/main.py b/main.py index daf2add..05d5a22 100644 --- a/main.py +++ b/main.py @@ -1,4 +1,5 @@ import configparser +import copy import logging from pprint import pprint @@ -11,7 +12,6 @@ from ActiveCollabAPI.ACTokenAuthenticator import ACTokenAuthenticator # the only thing missing will be the response.body which is not logged. from http.client import HTTPConnection - HTTPConnection.debuglevel = 1 logging.basicConfig() # you need to initialize logging, otherwise you will not see anything from requests @@ -31,7 +31,7 @@ if __name__ == "__main__": # 1. you need to login to get a session and a list of accounts auth = ACAuthenticator() session = auth.login(username, password) - pprint(session) + # pprint(session) user = session['user'] # use first account account = auth.find_account(account_name) @@ -42,8 +42,46 @@ if __name__ == "__main__": # 3. now you can query the API ac = ACClient(account, token) - res = ac.get_projects() - pprint(res.json()) - res = ac.get_info() - pprint(res.json()) \ No newline at end of file + # get a list of all projects + # res = ac.get_projects() + # pprint(res.json()) + + # get task with sub tasks + # https://app.activecollab.com/416910/projects/310/tasks/6274 + project_id = 310 + task_id = 6274 + task_res = ac.get_project_task(project_id, task_id) + pprint(task_res.json()) + task = task_res.json() + # res = ac.unassign_all_sub_task(task) + + # create a new subtask for the task without assignment + # subtask = { + # "task_id": task_id, + # "project_id": project_id, + # "assignee_id": "", + # "body": "test qqq" + # } + # res = ac.create_subtask(subtask) + # pprint(res.json()) + + # # unassign a single subtask + # subtask_id = 12203 + # subtask_res = ac.get_project_task_subtask(project_id, task_id, subtask_id) + # # pprint(subtask_res.json()) + # subtask = subtask_res.json()['single'] + # res = ac.unassign_sub_task(subtask) + # pprint(res.json()) + + # delete a subtask + # subtask = { + # "task_id": task_id, + # "project_id": project_id, + # "id": 13764 + # } + # res = ac.delete_subtask(subtask) + # pprint(res.json()) + + # res = ac.get_info() + # pprint(res.json())