Add some APIs around subtask

still not finished
This commit is contained in:
2024-02-06 17:25:36 +01:00
parent fea5ba866d
commit f5ec682767
2 changed files with 107 additions and 7 deletions
+63 -1
View File
@@ -6,7 +6,6 @@ from ActiveCollabAPI import AC_USER_AGENT, AC_API_VERSION
class ACClient: class ACClient:
base_url = None base_url = None
account = None account = None
token = None token = None
@@ -29,14 +28,77 @@ class ACClient:
return requests.get(self.base_url + '/' + url, return requests.get(self.base_url + '/' + url,
headers=self.headers()) headers=self.headers())
def _delete(self, url):
return requests.delete(self.base_url + '/' + url,
headers=self.headers())
def _post(self, url, data): def _post(self, url, data):
return requests.post( return requests.post(
self.base_url + '/' + url, self.base_url + '/' + url,
headers=self.headers(), headers=self.headers(),
data=json.dumps(data)) 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): def get_info(self):
return self._get('info') return self._get('info')
def get_projects(self): def get_projects(self):
return self._get('projects') 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))
+44 -6
View File
@@ -1,4 +1,5 @@
import configparser import configparser
import copy
import logging import logging
from pprint import pprint 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. # the only thing missing will be the response.body which is not logged.
from http.client import HTTPConnection from http.client import HTTPConnection
HTTPConnection.debuglevel = 1 HTTPConnection.debuglevel = 1
logging.basicConfig() # you need to initialize logging, otherwise you will not see anything from requests 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 # 1. you need to login to get a session and a list of accounts
auth = ACAuthenticator() auth = ACAuthenticator()
session = auth.login(username, password) session = auth.login(username, password)
pprint(session) # pprint(session)
user = session['user'] user = session['user']
# use first account # use first account
account = auth.find_account(account_name) account = auth.find_account(account_name)
@@ -42,8 +42,46 @@ if __name__ == "__main__":
# 3. now you can query the API # 3. now you can query the API
ac = ACClient(account, token) ac = ACClient(account, token)
res = ac.get_projects()
pprint(res.json())
res = ac.get_info() # get a list of all projects
pprint(res.json()) # 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())