archive
/
todoist-github
Archived
1
Fork 0
This repository has been archived on 2023-03-26. You can view files and clone it, but cannot push or open issues or pull requests.
todoist-github/todoist_github/utils/todoist.py

62 lines
1.9 KiB
Python

import os
from itertools import chain
from github.Issue import Issue
from . import get_github_task
SUB_PROJECT_NAMES = ["Tasks", "GitHub"]
def get_issue_link(issue_or_pr) -> str:
return "[#{id}]({url})".format(id=issue_or_pr.number, url=issue_or_pr.html_url)
def issue_to_task_name(issue: Issue) -> str:
return get_issue_link(issue) + ": " + issue.title
def pr_to_task_name(pr) -> str:
return f"Review {get_issue_link(pr)} : {pr.title}"
def is_task_completed(task):
return task.data.get("checked", 0)
def get_relevant_todoist_tasks(todoist):
todoist.items.sync()
tasks = {}
for task in todoist.items.all():
github_task = get_github_task(task["content"])
if github_task:
tasks[github_task] = task
return tasks
def get_project_for_issue(issue: Issue, todoist_projects: dict):
repo_name = issue.repository.full_name.split("/")[1]
search_terms = [
issue.repository.full_name.split("/")[0],
]
if issue.repository.organization:
search_terms.insert(0, issue.repository.organization.name)
elif issue.repository.owner:
search_terms.insert(0, issue.repository.owner.login)
search_terms.insert(0, issue.repository.owner.name)
search_terms.append(repo_name) # Always be at the end, as it's the least specific
for search_term in search_terms:
if search_term.lower() in todoist_projects:
found_project = todoist_projects[search_term.lower()]
for project in todoist_projects.values():
if project["parent_id"] != found_project["id"]:
continue
for sub_project_name in chain(SUB_PROJECT_NAMES, [repo_name]):
if project["name"].lower() == sub_project_name.lower():
return project
return found_project
return todoist_projects.get(
os.environ.get("DEFAULT_TODOIST_PROJECT_NAME", "").lower()
)