commit fe4cf08221c517b5b36f44d5629068c12f69e45a Author: Aleksander Cynarski Date: Sun Jun 23 11:44:27 2019 +0200 move gitea issues to todoist diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2fa7ce7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +config.ini diff --git a/config.ini-dist b/config.ini-dist new file mode 100644 index 0000000..318f9dc --- /dev/null +++ b/config.ini-dist @@ -0,0 +1,14 @@ +[auth] +gitea_url = https://git.cynarski.pl +gitea_token = +todoist_login = +todoist_pass = + +[gitea_projects] +sCRM/apiServer = sCRM +sCRM/apiClient = sCRM +Apartamenty/apiServer = Apartamenty +Apartamenty/apiWebClient = Apartamenty +Apartamenty/NukiSDK = Apartamenty +Apartamenty/BaseDocker = Apartamenty + diff --git a/todoist.py b/todoist.py new file mode 100755 index 0000000..3b2e50d --- /dev/null +++ b/todoist.py @@ -0,0 +1,77 @@ +#!/bin/env python + +import argparse +import logging +import pytea +import sys +import json +import configparser +import marshmallow.validate + +from dataclasses import field +from marshmallow_dataclass import dataclass +from typing import List, Optional +from pytodoist import todoist +from pprint import pprint +from types import SimpleNamespace as Namespace + +config = configparser.ConfigParser() +config.read('./config.ini') +logging.basicConfig(stream=sys.stderr, level=logging.INFO, format='%(asctime)s %(levelname)s %(filename)s: %(message)s') +logger = logging.getLogger("todoist-im") + +@dataclass +class GiteaUser: + avatar_url: str + full_name: str + id: int + is_admin: bool + language: str + login: str + username: str + +@dataclass +class GiteaIssue: + id: int + number: int + assignee: Optional[GiteaUser] + body: str + user: Optional[GiteaUser] + title: str + url: str + +# args = parser.parse_args() +# print(args.accumulate(args.integers)) + +gitea = pytea.API(config['auth']['gitea_url'], token=config['auth']['gitea_token']) +todo = todoist.login(config['auth']['todoist_login'], config['auth']['todoist_pass']) + +userJson = gitea.get("/user").json() +user, _ = GiteaUser.Schema().load(userJson) + +for giteaProject in config['gitea_projects']: + logger.info("Scanning ... https://git.cynarski.pl/" + giteaProject) + totdoistProject = config['gitea_projects'][giteaProject] + issuesJson = json.loads(gitea.get("/repos/"+giteaProject.strip()+"/issues" , params={"state": "open", "page": 0}).text) + todoProject = todo.get_project(totdoistProject) + tasks = todoProject.get_tasks() + + for issueJson in issuesJson: + addTask = True + issue, _ = GiteaIssue.Schema().load(issueJson) + + for task in tasks: + if issue.title == task.content: + logger.info("Task exists in todoist ... %r", issue.title) + addTask = False + + + if addTask: + pprint(addTask) + pprint(issue.title) + logger.info("Adding ... %r", issue.title) + task = todoProject.add_task(issue.title) + task.add_note("https://git.cynarski.pl/"+giteaProject+"/issues/"+str(issue.number)) + + + \ No newline at end of file