Allow defining todoist project for org rather than repo
This commit is contained in:
parent
a76a1299d3
commit
7cd7c4685c
4 changed files with 60 additions and 15 deletions
|
@ -4,11 +4,12 @@ from typing import Dict
|
||||||
from github import Issue
|
from github import Issue
|
||||||
|
|
||||||
from actioner.clients import github, todoist
|
from actioner.clients import github, todoist
|
||||||
|
from actioner.utils import get_todoist_project_from_repo
|
||||||
|
|
||||||
REPOS = {
|
REPOS = frozenset([
|
||||||
'srobo/tasks': 2190856871,
|
'srobo/tasks',
|
||||||
'srobo/core-team-minutes': 2190856871
|
'srobo/core-team-minutes'
|
||||||
}
|
])
|
||||||
|
|
||||||
LABEL_TO_STATUS = {
|
LABEL_TO_STATUS = {
|
||||||
'must have': 4,
|
'must have': 4,
|
||||||
|
@ -50,7 +51,8 @@ def todoist_assigned_issues():
|
||||||
me = github.get_user()
|
me = github.get_user()
|
||||||
todoist.projects.sync()
|
todoist.projects.sync()
|
||||||
todoist.items.sync()
|
todoist.items.sync()
|
||||||
for repo_name, project_id in REPOS.items():
|
for repo_name in REPOS:
|
||||||
|
project_id = get_todoist_project_from_repo(repo_name)
|
||||||
existing_tasks = {item['id']: item['content'] for item in todoist.state['items'] if item['project_id'] == project_id}
|
existing_tasks = {item['id']: item['content'] for item in todoist.state['items'] if item['project_id'] == project_id}
|
||||||
repo = github.get_repo(repo_name)
|
repo = github.get_repo(repo_name)
|
||||||
for issue in repo.get_issues(assignee=me.login, state='all'):
|
for issue in repo.get_issues(assignee=me.login, state='all'):
|
||||||
|
|
17
actioner/utils/__init__.py
Normal file
17
actioner/utils/__init__.py
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
from typing import Dict, Optional
|
||||||
|
|
||||||
|
GH_REPO_TO_TODOIST = {
|
||||||
|
} # type: Dict[str, int]
|
||||||
|
|
||||||
|
|
||||||
|
GH_ORG_TO_TODOIST = {
|
||||||
|
'srobo': 2190856871
|
||||||
|
} # type: Dict[str, int]
|
||||||
|
|
||||||
|
|
||||||
|
def get_todoist_project_from_repo(repo_name: str) -> Optional[int]:
|
||||||
|
repo_id = GH_REPO_TO_TODOIST.get(repo_name)
|
||||||
|
if repo_id is not None:
|
||||||
|
return repo_id
|
||||||
|
org = repo_name.split('/')[0]
|
||||||
|
return GH_ORG_TO_TODOIST.get(org)
|
|
@ -1,12 +1,12 @@
|
||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
|
|
||||||
from actioner.clients import github, todoist
|
|
||||||
from actioner.scheduler.todoist_assigned_issues import (
|
from actioner.scheduler.todoist_assigned_issues import (
|
||||||
REPOS,
|
REPOS,
|
||||||
get_existing_task,
|
get_existing_task,
|
||||||
get_issue_link,
|
get_issue_link,
|
||||||
issue_to_task_name,
|
issue_to_task_name,
|
||||||
)
|
)
|
||||||
|
from actioner.utils import get_todoist_project_from_repo
|
||||||
from tests import BaseTestCase
|
from tests import BaseTestCase
|
||||||
|
|
||||||
FakeIssue = namedtuple('FakeIssue', ['number', 'html_url', 'title'])
|
FakeIssue = namedtuple('FakeIssue', ['number', 'html_url', 'title'])
|
||||||
|
@ -29,15 +29,9 @@ class IssueTaskNameTestCase(BaseTestCase):
|
||||||
|
|
||||||
|
|
||||||
class ConfigurationTestCase(BaseTestCase):
|
class ConfigurationTestCase(BaseTestCase):
|
||||||
def test_repos_exist(self):
|
def test_repo_is_known(self):
|
||||||
for repo in REPOS.keys():
|
for repo in REPOS:
|
||||||
github.get_repo(repo)
|
self.assertIsNotNone(get_todoist_project_from_repo(repo))
|
||||||
|
|
||||||
def test_projects_exist(self):
|
|
||||||
todoist.projects.sync()
|
|
||||||
project_ids = {project['id'] for project in todoist.state['projects']}
|
|
||||||
for project_id in REPOS.values():
|
|
||||||
self.assertIn(project_id, project_ids)
|
|
||||||
|
|
||||||
|
|
||||||
class ExistingTaskTestCase(BaseTestCase):
|
class ExistingTaskTestCase(BaseTestCase):
|
||||||
|
|
32
tests/test_utils/test_init.py
Normal file
32
tests/test_utils/test_init.py
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
from actioner.clients import github, todoist
|
||||||
|
from actioner.utils import (
|
||||||
|
GH_ORG_TO_TODOIST,
|
||||||
|
GH_REPO_TO_TODOIST,
|
||||||
|
get_todoist_project_from_repo,
|
||||||
|
)
|
||||||
|
from tests import BaseTestCase
|
||||||
|
|
||||||
|
|
||||||
|
class TodoistProjectToRepoTestCase(BaseTestCase):
|
||||||
|
def test_repos_exist(self):
|
||||||
|
for repo_name in GH_REPO_TO_TODOIST.keys():
|
||||||
|
github.get_repo(repo_name)
|
||||||
|
|
||||||
|
def test_gets_correct_project(self):
|
||||||
|
for repo_name, project_id in GH_REPO_TO_TODOIST.items():
|
||||||
|
self.assertEqual(get_todoist_project_from_repo(repo_name), project_id)
|
||||||
|
|
||||||
|
def test_gets_correct_project_for_org(self):
|
||||||
|
for org_name, project_id in GH_ORG_TO_TODOIST.items():
|
||||||
|
self.assertEqual(get_todoist_project_from_repo("{}/test_repo".format(org_name)), project_id)
|
||||||
|
|
||||||
|
def test_organization_exists(self):
|
||||||
|
for org in GH_ORG_TO_TODOIST.keys():
|
||||||
|
github.get_organization(org)
|
||||||
|
|
||||||
|
def test_project_exists(self):
|
||||||
|
project_ids = set(GH_ORG_TO_TODOIST.values()).union(GH_REPO_TO_TODOIST.values())
|
||||||
|
todoist.projects.sync()
|
||||||
|
todoist_project_ids = {project['id'] for project in todoist.state['projects']}
|
||||||
|
for project in project_ids:
|
||||||
|
self.assertIn(project, todoist_project_ids)
|
Reference in a new issue