add support for reading tc repos list

Change-Id: Id4a73826f6fa8cbf543a1d36bbf8d5e4ea679e5c
Signed-off-by: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
Doug Hellmann 2018-10-12 14:09:27 -04:00
parent ec79ff40a6
commit d13b599558
2 changed files with 41 additions and 5 deletions
openstack_governance

@ -20,6 +20,7 @@ from openstack_governance import yamlutils
import requests
PROJECTS_LIST = "http://git.openstack.org/cgit/openstack/governance/plain/reference/projects.yaml" # noqa
TC_LIST = "http://git.openstack.org/cgit/openstack/governance/plain/reference/technical-committee-repos.yaml" # noqa
def get_tags_for_deliverable(team_data, team, name):
@ -83,16 +84,26 @@ class Repository(object):
class Governance(object):
def __init__(self, team_data):
def __init__(self, team_data, tc_data):
self._team_data = team_data
self._tc_data = tc_data
team_data['Technical Committee'] = {
'deliverables': {
repo['repo'].partition('/')[-1]: {'repos': [repo['repo']]}
for repo in tc_data['Technical Committee']
}
}
self._teams = [Team(n, i) for n, i in self._team_data.items()]
@classmethod
def from_urls(cls,
team_url=PROJECTS_LIST):
team_url=PROJECTS_LIST,
tc_url=TC_LIST):
r = requests.get(team_url)
team_data = yamlutils.loads(r.text)
return cls(team_data)
r = requests.get(tc_url)
tc_data = yamlutils.loads(r.text)
return cls(team_data, tc_data)
def get_repo_owner(self, repo_name):
"""Return the name of the team that owns the repository.

@ -56,14 +56,23 @@ Release Management:
- openstack-dev/specs-cookiecutter
"""
_tc_data_yaml = """
---
# List of repositories owned by the technical committee
Technical Committee:
- repo: openstack/governance
- repo: openstack/project-team-guide
"""
TEAM_DATA = yamlutils.loads(_team_data_yaml)
TC_DATA = yamlutils.loads(_tc_data_yaml)
class TestGetRepoOwner(base.BaseTestCase):
def setUp(self):
super().setUp()
self.gov = governance.Governance(TEAM_DATA)
self.gov = governance.Governance(TEAM_DATA, TC_DATA)
def test_repo_exists(self):
owner = self.gov.get_repo_owner(
@ -71,6 +80,12 @@ class TestGetRepoOwner(base.BaseTestCase):
)
self.assertEqual('Release Management', owner)
def test_repo_exists_tc(self):
owner = self.gov.get_repo_owner(
'openstack/governance',
)
self.assertEqual('Technical Committee', owner)
def test_no_such_repo(self):
self.assertRaises(
ValueError,
@ -83,7 +98,7 @@ class TestGetRepositories(base.BaseTestCase):
def setUp(self):
super().setUp()
self.gov = governance.Governance(TEAM_DATA)
self.gov = governance.Governance(TEAM_DATA, TC_DATA)
def test_by_team(self):
repos = self.gov.get_repositories(
@ -99,6 +114,16 @@ class TestGetRepositories(base.BaseTestCase):
sorted(r.name for r in repos),
)
def test_by_team_tc(self):
repos = self.gov.get_repositories(
team_name='Technical Committee',
)
self.assertEqual(
sorted(['openstack/governance',
'openstack/project-team-guide']),
sorted(r.name for r in repos),
)
def test_by_deliverable(self):
repos = self.gov.get_repositories(
deliverable_name='release-tools',