Implemented Subtask List & create

Example shell script see "create-subtasks.sh"

NOT FINISHED!
This commit is contained in:
2024-02-29 16:13:43 +00:00
parent 88fb3107ce
commit b9b823df1f
7 changed files with 157 additions and 44 deletions
+2 -1
View File
@@ -1,4 +1,5 @@
config.ini
.venv/
__pycache__/
config-mira.ini
/config-mira.ini
/config-mira.json
+5 -4
View File
@@ -4,6 +4,7 @@ import requests
from ActiveCollabAPI import AC_USER_AGENT, AC_API_VERSION
from ActiveCollabAPI.AcAccount import AcAccount
from ActiveCollabAPI.AcSubtask import AcSubtask
from ActiveCollabAPI.AcToken import AcToken
@@ -92,12 +93,12 @@ class ACClient:
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']
def create_subtask(self, subtask: AcSubtask):
project_id = subtask.project_id
task_id = subtask.task_id
return self._post('projects/%d/tasks/%s/subtasks' %
(project_id, task_id),
data=subtask)
data=subtask.to_dict())
# find subtask with matching body
def find_subtask_with_body(self, task, body, is_completed=False):
+46
View File
@@ -0,0 +1,46 @@
import dataclasses
import json
from dataclasses import dataclass
@dataclass
class AcSubtask:
task_id: int
project_id: int
name: str = None
body: str = None
assignee_id: int = 0
delegated_by_id: int = 0
created_on: int = None
created_by_id: int = None
created_by_name: str = None
created_by_email: str = None
url_path: str = ""
id: int = 0
due_on: int = 0
fake_assignee_name: str = None
fake_assignee_email: str = None
class_: str = "Subtask"
completed_by_id: int = 0
is_completed: bool = False
is_trashed: bool = False
trashed_on: int = 0
trashed_by_id: int = 0
updated_on: int = 0
position: int = 0
completed_on: int = 0
def to_dict(self):
d = dataclasses.asdict(self)
d["class"] = d["class_"]
del d["class_"]
return d
def to_json(self):
return json.dumps(self.to_dict())
def subtask_from_json(json_obj: dict) -> AcSubtask:
json_obj["class_"] = json_obj["class"]
del json_obj["class"]
return AcSubtask(**json_obj)
+16 -3
View File
@@ -1,4 +1,5 @@
from dataclasses import dataclass
from pprint import pprint
from ActiveCollabAPI import AC_API_VERSION
from ActiveCollabAPI.ACAuthenticator import ACAuthenticator
@@ -8,13 +9,12 @@ from ActiveCollabAPI.AcAccount import AcAccount, account_from_json
from ActiveCollabAPI.AcLoginResponse import AcLoginResponse
from ActiveCollabAPI.AcProject import AcProject, project_from_json
from ActiveCollabAPI.AcSession import AcSession
from ActiveCollabAPI.AcSubtask import AcSubtask, subtask_from_json
from ActiveCollabAPI.AcToken import AcToken
from ActiveCollabAPI.AcUser import AcUser
class ActiveCollab:
base_url: str = ""
session: AcSession = None
@@ -58,7 +58,7 @@ class ActiveCollab:
res = client.get_info()
return res.json()
def get_projects(self):
def get_projects(self) -> list[AcProject]:
client = ACClient(self.session.cur_account, self.session.token)
res = client.get_projects()
if res.status_code != 200:
@@ -66,3 +66,16 @@ class ActiveCollab:
res_data = res.json()
projects = list(map(lambda p: project_from_json(p), res_data))
return projects
def get_subtasks(self, project_id: int, task_id: int) -> list[AcSubtask]:
client = ACClient(self.session.cur_account, self.session.token)
res = client.get_project_task(project_id, task_id)
res_data = res.json()
subtasks = list(map(lambda sub: subtask_from_json(sub), res_data["subtasks"]))
return subtasks
def create_subtask(self, subtask: AcSubtask):
client = ACClient(self.session.cur_account, self.session.token)
res = client.create_subtask(subtask)
res_data = res.json()
return res_data
+7
View File
@@ -0,0 +1,7 @@
#!/bin/bash
while IFS= read -r TEXT
do
python3 main.py -c ./config-mira.json subtask create --project 310 --task 6253 --body "$TEXT"
done
+26
View File
@@ -2,6 +2,7 @@ import argparse
import json
from pprint import pprint
from ActiveCollabAPI.AcSubtask import AcSubtask
from ActiveCollabAPI.ActiveCollab import ActiveCollab
@@ -16,6 +17,8 @@ def run(args, config):
output = run_account(ac, args)
if args.object == "project":
output = run_project(ac, args, output)
if args.object == "subtask":
output = run_subtask(ac, args)
return output
@@ -30,6 +33,21 @@ def run_project(ac, args, output):
return output
def run_subtask(ac, args):
pprint(args)
output = None
if args.command == "list":
output = list(map(lambda sub: sub.to_dict(), ac.get_subtasks(args.project, args.task)))
if args.command == "create":
subtask = AcSubtask(
project_id=args.project,
task_id=args.task,
body=args.body
)
output = ac.create_subtask(subtask)
return output
def run_info(ac, args):
output = ac.get_info()
return output
@@ -73,6 +91,14 @@ def main():
parser_project.set_defaults(object='project')
parser_project.add_argument('command', choices=["list"], help='what to do with the account help')
# subtask
parser_subtask = subparsers.add_parser('subtask', help='subtask help')
parser_subtask.set_defaults(object='subtask')
parser_subtask.add_argument('command', choices=["list", "create"], help='what to do with the account help')
parser_subtask.add_argument('--project', type=int, required=True)
parser_subtask.add_argument('--task', type=int, required=True)
parser_subtask.add_argument('--body', type=str)
args = parser.parse_args()
config = load_config(args)
+55 -36
View File
@@ -1,36 +1,55 @@
S3 Bucket "320dev-public" is archived
S3 Bucket "320east-acm2-archive" is archived
S3 Bucket "assets-prodeuall1-320east" is archived
S3 Bucket "assets-sdds-01-320east" is archived
S3 Bucket "backups-mattermost" is archived
S3 Bucket "bucket.noc.320east.io" is archived
S3 Bucket "lcmx-master-320east" is archived
S3 Bucket "lcmx-prodeuall1-320east" is archived
S3 Bucket "shop320-backups" is archived
S3 Bucket "320dev-public" is deleted
S3 Bucket "320east-acm2-archive" is deleted
S3 Bucket "assets-prodeuall1-320east" is deleted
S3 Bucket "assets-sdds-01-320east" is deleted
S3 Bucket "backups-mattermost" is deleted
S3 Bucket "backups-prodeuall1-320east" is deleted
S3 Bucket "bigdataioav-idev0052-prodeuall1-320east" is deleted
S3 Bucket "bucket.noc.320east.io" is deleted
S3 Bucket "lcmx-master-320east" is deleted
S3 Bucket "lcmx-prodeuall1-320east" is deleted
S3 Bucket "shop320-backups" is deleted
Cloudfront Distribution "E7R0HGAKU10KT - Production d1w1tdkpk45r2q.cloudfront.net sdds.homeok.io assets-sdds-01-320east.s3.eu-west-1.amazonaws.com" is removed
Cloudfront Distribution "E1YAR9WILYEAOR - Production d283m0l3zuk2cl.cloudfront.net bucket.noc.320east.io.s3.eu-west-1.amazonaws.com" is removed
Cloudfront Distribution "E2HUPIVJFDUSWF - Production dvfi2qvbg5wxw.cloudfront.net www.pds.companyok.io, pds.companyok.io assets-pds-companyok.s3.amazonaws.com" is removed
Cloudfront Distribution "E2Q6TWJX3L3TRS - Production d3gvb7cyihtwwp.cloudfront.net s3-h38-lcm.320east.net.s3.amazonaws.com" is removed
Cloudfront Distribution "E215TJ62TWJBBU - Production d2aseehijcy5it.cloudfront.net assets-sdds.s3.amazonaws.com" is removed
IAM User "320east-ansible" is removed
IAM User "backup" is removed
IAM User "cs" is removed
IAM User "docker-registry" is removed
IAM User "io-bigdataioav-prod320" is removed
IAM User "lcm-h38-prod Active" is removed
IAM User "mattermost-backup" is removed
IAM Usergroup "admin" is removed
IAM Usergroup "ansible" is removed
IAM Usergroup "backup" is removed
IAM Usergroup "lcm" is removed
PDF Export for Space '320EAST Human Resources (HR)' done
PDF Export for Space '320EAST Legal' done
PDF Export for Space '320EAST Management (MGT)' done
PDF Export for Space '320EAST Management (MGT) Leaders' done
PDF Export for Space '320EAST Marketing (MKTG)' done
PDF Export for Space '320EAST Office Management (OM)' done
PDF Export for Space '320EAST Partner Management (PARMGT)' done
PDF Export for Space '320EAST Procurement & Supply (PROSU)' done
PDF Export for Space '320EAST Program Management (PROGMGT)' done
PDF Export for Space '320EAST PROSU Risk Management (PROR)' done
PDF Export for Space '320EAST Research & Development (TELA)' done
PDF Export for Space '320EAST Sales & Business Development (HOKOCOKO)' done
PDF Export for Space 'ak.320east.de' done
PDF Export for Space 'Antonio Sciara' done
PDF Export for Space 'Atlassian 320EAST' done
PDF Export for Space 'calvin.chen.ngstb.com' done
PDF Export for Space 'catherine.tang.tv2next.com' done
PDF Export for Space 'cs.320east.de' done
PDF Export for Space 'dp.320east.de' done
PDF Export for Space 'Emilia Biche' done
PDF Export for Space 'ewe.320east.de' done
PDF Export for Space 'hansen.he.tv2next.com' done
PDF Export for Space 'hap.320east.de' done
PDF Export for Space 'hs.320east.de' done
PDF Export for Space 'jl.320east.de' done
PDF Export for Space 'jle.320east.de' done
PDF Export for Space 'Kaumudi Deshmukh' done
PDF Export for Space 'ks.320east.de' done
PDF Export for Space 'll.320east.de' done
PDF Export for Space 'Myrthe Günther' done
PDF Export for Space 'Pooja Naringrekar' done
PDF Export for Space 'rain.chen.tv2next.com' done
PDF Export for Space 'Robert Uhlmann' done
PDF Export for Space 'sa.320east.de' done
PDF Export for Space 'silke.heim.awpartner.de' done
PDF Export for Space 'tgr.320east.de' done
PDF Export for Space 'thomas.link.awpartner.de' done
PDF Export for Space 'thomas.wei.ngstb.com' done
PDF Export for Space 'tig.320east.de' done
PDF Export for Space 'tiz.320east.de' done
PDF Export for Space 'TNC320 Readme' done
PDF Export for Space 'TNC Accounting (AFI)' done
PDF Export for Space 'TNC Board' done
PDF Export for Space 'TNC Business Unit sprint:bricks' done
PDF Export for Space 'TNC Human Resources (HR)' done
PDF Export for Space 'TNC Marketing (MKTG)' done
PDF Export for Space 'TNC Office Management (OM)' done
PDF Export for Space 'TNC Product Development (PD)' done
PDF Export for Space 'TNC Public' done
PDF Export for Space 'TNC Purchase' done
PDF Export for Space 'TNC Quality Assurance (QA)' done
PDF Export for Space 'TNC Sales' done
PDF Export for Space 'ts.320east.de' done
PDF Export for Space 'zh.320east.de' done
PDF Export for Space 'zhengyi.tv2next.com' done