2019-06-23 09:44:27 +00:00
|
|
|
#!/bin/env python
|
|
|
|
|
|
|
|
import argparse
|
|
|
|
import logging
|
|
|
|
import pytea
|
|
|
|
import sys
|
|
|
|
import json
|
|
|
|
import configparser
|
|
|
|
import marshmallow.validate
|
2019-08-07 17:38:56 +00:00
|
|
|
import re
|
2019-06-23 09:44:27 +00:00
|
|
|
|
|
|
|
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
|
2019-08-07 17:38:56 +00:00
|
|
|
from jira import JIRA
|
2019-06-23 09:44:27 +00:00
|
|
|
|
|
|
|
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
|
|
|
|
|
2019-08-07 17:38:56 +00:00
|
|
|
|
|
|
|
|
2019-06-23 09:44:27 +00:00
|
|
|
# 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']:
|
2019-08-07 17:43:42 +00:00
|
|
|
logger.info("Scanning ... "+ config['auth']['gitea_url'] + giteaProject)
|
2019-06-23 09:44:27 +00:00
|
|
|
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)
|
2019-08-07 17:43:42 +00:00
|
|
|
task.add_note(config['auth']['gitea_url']+giteaProject+"/issues/"+str(issue.number))
|
2019-06-23 09:44:27 +00:00
|
|
|
|
|
|
|
|
2019-08-07 17:43:42 +00:00
|
|
|
|