diff --git a/readthedocs/api/v2/utils.py b/readthedocs/api/v2/utils.py index 98d83f9de60..ccf995d552f 100644 --- a/readthedocs/api/v2/utils.py +++ b/readthedocs/api/v2/utils.py @@ -37,8 +37,8 @@ def sync_versions_to_db(project, versions, type): :returns: set of versions' slug added """ old_version_values = project.versions.filter(type=type).values_list( - 'verbose_name', - 'identifier', + "verbose_name", + "identifier", ) old_versions = dict(old_version_values) @@ -48,8 +48,8 @@ def sync_versions_to_db(project, versions, type): has_user_stable = False has_user_latest = False for version in versions: - version_id = version['identifier'] - version_name = version['verbose_name'] + version_id = version.identifier + version_name = version.verbose_name if version_name == STABLE_VERBOSE_NAME: has_user_stable = True created_version, created = _set_or_create_version( @@ -90,7 +90,7 @@ def sync_versions_to_db(project, versions, type): ) log.info( - 'Re-syncing versions: version updated.', + "Re-syncing versions: version updated.", version_verbose_name=version_name, version_id=version_id, ) @@ -101,26 +101,22 @@ def sync_versions_to_db(project, versions, type): added.update(_create_versions(project, type, versions_to_create)) if not has_user_stable: - stable_version = ( - project.versions.filter(slug=STABLE, type=type).first() - ) + stable_version = project.versions.filter(slug=STABLE, type=type).first() if stable_version: # Put back the RTD's stable version stable_version.machine = True stable_version.save() if not has_user_latest: - latest_version = ( - project.versions.filter(slug=LATEST, type=type).first() - ) + latest_version = project.versions.filter(slug=LATEST, type=type).first() if latest_version: # Put back the RTD's latest version latest_version.machine = True latest_version.save() if added: log.info( - 'Re-syncing versions: versions added.', + "Re-syncing versions: versions added.", count=len(added), - versions=','.join(itertools.islice(added, 100)), + versions=",".join(itertools.islice(added, 100)), ) return added @@ -174,14 +170,8 @@ def _set_or_create_version(project, slug, version_id, verbose_name, type_): def _get_deleted_versions_qs(project, tags_data, branches_data): # We use verbose_name for tags # because several tags can point to the same identifier. - versions_tags = [ - version['verbose_name'] - for version in tags_data - ] - versions_branches = [ - version['identifier'] - for version in branches_data - ] + versions_tags = [version.verbose_name for version in tags_data] + versions_branches = [version.identifier for version in branches_data] to_delete_qs = ( project.versions(manager=INTERNAL) @@ -206,32 +196,28 @@ def delete_versions_from_db(project, tags_data, branches_data): :returns: The slug of the deleted versions from the database. """ - to_delete_qs = ( - _get_deleted_versions_qs( - project=project, - tags_data=tags_data, - branches_data=branches_data, - ) - .exclude(active=True) - ) + to_delete_qs = _get_deleted_versions_qs( + project=project, + tags_data=tags_data, + branches_data=branches_data, + ).exclude(active=True) _, deleted = to_delete_qs.delete() - versions_count = deleted.get('builds.Version', 0) + versions_count = deleted.get("builds.Version", 0) log.info( - 'Re-syncing versions: versions deleted.', project_slug=project.slug, count=versions_count, + "Re-syncing versions: versions deleted.", + project_slug=project.slug, + count=versions_count, ) def get_deleted_active_versions(project, tags_data, branches_data): """Return the slug of active versions that were deleted from the repository.""" - to_delete_qs = ( - _get_deleted_versions_qs( - project=project, - tags_data=tags_data, - branches_data=branches_data, - ) - .filter(active=True) - ) - return set(to_delete_qs.values_list('slug', flat=True)) + to_delete_qs = _get_deleted_versions_qs( + project=project, + tags_data=tags_data, + branches_data=branches_data, + ).filter(active=True) + return set(to_delete_qs.values_list("slug", flat=True)) def run_automation_rules(project, added_versions, deleted_active_versions): diff --git a/readthedocs/projects/tasks/mixins.py b/readthedocs/projects/tasks/mixins.py index 70b215788bb..b16a977698f 100644 --- a/readthedocs/projects/tasks/mixins.py +++ b/readthedocs/projects/tasks/mixins.py @@ -1,4 +1,5 @@ from collections import Counter +from dataclasses import dataclass import structlog @@ -12,6 +13,12 @@ log = structlog.get_logger(__name__) +@dataclass +class VersionData: + identifier: str + verbose_name: str + + class SyncRepositoryMixin: """Mixin that handles the VCS sync/update.""" @@ -50,6 +57,7 @@ def sync_versions(self, vcs_repository): ) tags = [] branches = [] + if vcs_repository.supports_lsremote: branches, tags = vcs_repository.lsremote( include_tags=sync_tags, @@ -64,21 +72,9 @@ def sync_versions(self, vcs_repository): if sync_branches: branches = vcs_repository.branches - tags_data = [ - { - "identifier": v.identifier, - "verbose_name": v.verbose_name, - } - for v in tags - ] - - branches_data = [ - { - "identifier": v.identifier, - "verbose_name": v.verbose_name, - } - for v in branches - ] + tags_data = [VersionData(v.identifer, v.verbose_name) for v in tags] + + branches_data = [VersionData(v.identifer, v.verbose_name) for v in branches] log.debug("Synchronizing versions.", branches=branches, tags=tags) @@ -101,11 +97,9 @@ def validate_duplicate_reserved_versions(self, tags_data, branches_data): ``latest`` or ``stable``. Raise a RepositoryError exception if there is a duplicated name. - :param data: Dict containing the versions from tags and branches + :param data: DataClass containing the versions from tags and branches """ - version_names = [ - version["verbose_name"] for version in tags_data + branches_data - ] + version_names = [version.verbose_name for version in tags_data + branches_data] counter = Counter(version_names) for reserved_name in [STABLE_VERBOSE_NAME, LATEST_VERBOSE_NAME]: if counter[reserved_name] > 1: diff --git a/readthedocs/rtd_tests/tests/test_sync_versions.py b/readthedocs/rtd_tests/tests/test_sync_versions.py index a7934726fac..b8d39ac609e 100644 --- a/readthedocs/rtd_tests/tests/test_sync_versions.py +++ b/readthedocs/rtd_tests/tests/test_sync_versions.py @@ -14,6 +14,7 @@ from readthedocs.builds.tasks import sync_versions_task from readthedocs.organizations.models import Organization, OrganizationOwner from readthedocs.projects.models import Project +from readthedocs.projects.tasks.mixins import VersionData @mock.patch("readthedocs.core.utils.trigger_build", mock.MagicMock()) @@ -58,14 +59,8 @@ def setUp(self): def test_proper_url_no_slash(self): branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, - { - "identifier": "origin/to_add", - "verbose_name": "to_add", - }, + VersionData("origin/master", "master"), + VersionData("origin/to_add", "to_add"), ] self.assertEqual( @@ -92,24 +87,12 @@ def test_new_tag_update_active(self): self.pip.update_stable_version() branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, - { - "identifier": "origin/to_add", - "verbose_name": "to_add", - }, + VersionData("origin/master", "master"), + VersionData("origin/to_add", "to_add"), ] tags_data = [ - { - "identifier": "0.9", - "verbose_name": "0.9", - }, - { - "identifier": "0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("0.9", "0.9"), + VersionData("0.8.3", "0.8.3"), ] sync_versions_task( @@ -137,24 +120,12 @@ def test_new_tag_dont_update_inactive(self): self.pip.update_stable_version() branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, - { - "identifier": "origin/to_add", - "verbose_name": "to_add", - }, + VersionData("origin/master", "master"), + VersionData("origin/to_add", "to_add"), ] tags_data = [ - { - "identifier": "0.9", - "verbose_name": "0.9", - }, - { - "identifier": "0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("0.9", "0.9"), + VersionData("0.8.3", "0.8.3"), ] sync_versions_task( @@ -193,10 +164,7 @@ def test_delete_version(self): self.pip.update_stable_version() branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), ] self.assertTrue( @@ -225,22 +193,10 @@ def test_update_stable_version_type(self): self.assertEqual(stable_version.type, TAG) branches_data = [ - { - "identifier": "master", - "verbose_name": "master", - }, - { - "identifier": "1.0", - "verbose_name": "1.0", - }, - { - "identifier": "1.1", - "verbose_name": "1.1", - }, - { - "identifier": "2.0", - "verbose_name": "2.0", - }, + VersionData("master", "master"), + VersionData("1.0", "1.0"), + VersionData("1.1", "1.1"), + VersionData("2.0", "2.0"), ] # Deactivate all other versions, so we only have branches for consideration @@ -269,16 +225,10 @@ def test_update_latest_version_type(self): self.assertEqual(latest_version.type, BRANCH) branches_data = [ - { - "identifier": "master", - "verbose_name": "master", - }, + VersionData("master", "master"), ] tags_data = [ - { - "identifier": "abc123", - "verbose_name": "latest", - } + VersionData("abc123", "latest"), ] # Latest is created as machine=False, and as a tag. @@ -314,14 +264,8 @@ def test_update_latest_version_type(self): sync_versions_task( self.pip.pk, branches_data=[ - { - "identifier": "master", - "verbose_name": "master", - }, - { - "identifier": "2.6", - "verbose_name": "2.6", - }, + VersionData("master", "master"), + VersionData("2.6", "2.6"), ], tags_data=[], ) @@ -335,16 +279,10 @@ def test_update_latest_version_type(self): sync_versions_task( self.pip.pk, branches_data=[ - { - "identifier": "master", - "verbose_name": "master", - }, + VersionData("master", "master"), ], tags_data=[ - { - "identifier": "abc123", - "verbose_name": "2.6", - } + VersionData("abc123", "2.6"), ], ) @@ -381,21 +319,12 @@ def test_machine_attr_when_user_define_stable_tag_and_delete_it(self): self.assertTrue(current_stable.machine) branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), ] tags_data = [ # User new stable - { - "identifier": "1abc2def3", - "verbose_name": "stable", - }, - { - "identifier": "0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("1abc2def3", "stable"), + VersionData("0.8.3", "0.8.3"), ] sync_versions_task( @@ -412,16 +341,11 @@ def test_machine_attr_when_user_define_stable_tag_and_delete_it(self): # Deleting the tag should return the RTD's stable branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), + VersionData("0.8.3", "0.8.3"), ] tags_data = [ - { - "identifier": "0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("0.8.3", "0.8.3"), ] sync_versions_task( @@ -453,21 +377,12 @@ def test_machine_attr_when_user_define_stable_tag_and_delete_it_new_project(self self.assertIsNone(current_stable) branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), ] tags_data = [ # User stable - { - "identifier": "1abc2def3", - "verbose_name": "stable", - }, - { - "identifier": "0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("1abc2def3", "stable"), + VersionData("0.8.3", "0.8.3"), ] sync_versions_task( @@ -488,16 +403,10 @@ def test_machine_attr_when_user_define_stable_tag_and_delete_it_new_project(self # Deleting the tag should return the RTD's stable branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), ] tags_data = [ - { - "identifier": "0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("0.8.3", "0.8.3"), ] sync_versions_task( @@ -544,19 +453,10 @@ def test_machine_attr_when_user_define_stable_branch_and_delete_it(self): self.assertTrue(current_stable.machine) branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), # User new stable - { - "identifier": "origin/stable", - "verbose_name": "stable", - }, - { - "identifier": "origin/0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("origin/stable", "stable"), + VersionData("origin/0.8.3", "0.8.3"), ] sync_versions_task( @@ -573,14 +473,8 @@ def test_machine_attr_when_user_define_stable_branch_and_delete_it(self): # Deleting the branch should return the RTD's stable branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, - { - "identifier": "origin/0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("origin/master", "master"), + VersionData("origin/0.8.3", "0.8.3"), ] sync_versions_task( @@ -612,19 +506,10 @@ def test_machine_attr_when_user_define_stable_branch_and_delete_it_new_project( self.assertIsNone(current_stable) branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), # User stable - { - "identifier": "origin/stable", - "verbose_name": "stable", - }, - { - "identifier": "origin/0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("origin/stable", "stable"), + VersionData("origin/0.8.3", "0.8.3"), ] sync_versions_task( @@ -645,14 +530,8 @@ def test_machine_attr_when_user_define_stable_branch_and_delete_it_new_project( # Deleting the branch should return the RTD's stable branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, - { - "identifier": "origin/0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("origin/master", "master"), + VersionData("origin/0.8.3", "0.8.3"), ] sync_versions_task( @@ -678,17 +557,11 @@ def test_machine_attr_when_user_define_latest_tag_and_delete_it(self): machine=True).""" branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), ] tags_data = [ # User new stable - { - "identifier": "1abc2def3", - "verbose_name": "latest", - }, + VersionData("1abc2def3", "latest"), ] sync_versions_task( @@ -706,10 +579,7 @@ def test_machine_attr_when_user_define_latest_tag_and_delete_it(self): # Deleting the tag should return the RTD's latest branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), ] sync_versions_task( @@ -734,15 +604,9 @@ def test_machine_attr_when_user_define_latest_branch_and_delete_it(self): machine=True). """ branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), # User new latest - { - "identifier": "origin/latest", - "verbose_name": "latest", - }, + VersionData("origin/latest", "latest"), ] sync_versions_task( @@ -760,10 +624,7 @@ def test_machine_attr_when_user_define_latest_branch_and_delete_it(self): # Deleting the branch should return the RTD's latest branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), ] sync_versions_task( @@ -782,16 +643,10 @@ def test_machine_attr_when_user_define_latest_branch_and_delete_it(self): def test_deletes_version_with_same_identifier(self): branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), ] tags_data = [ - { - "identifier": "1234", - "verbose_name": "one", - }, + VersionData("1234", "one"), ] sync_versions_task( @@ -808,20 +663,11 @@ def test_deletes_version_with_same_identifier(self): # We add a new tag with the same identifier branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), ] tags_data = [ - { - "identifier": "1234", - "verbose_name": "two", - }, - { - "identifier": "1234", - "verbose_name": "one", - }, + VersionData("1234", "two"), + VersionData("1234", "one"), ] sync_versions_task( @@ -838,16 +684,10 @@ def test_deletes_version_with_same_identifier(self): # We delete one version with identifier `1234` branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), ] tags_data = [ - { - "identifier": "1234", - "verbose_name": "one", - }, + VersionData("1234", "one"), ] sync_versions_task( @@ -880,17 +720,11 @@ def test_versions_with_same_verbose_name(self): type=TAG, ) branches_data = [ - { - "identifier": "v2", - "verbose_name": "v2", - }, + VersionData("v2", "v2"), ] tags_data = [ - { - # THe identifier has changed! - "identifier": "12345abc", - "verbose_name": "v2", - }, + # THe identifier has changed! + VersionData("12345abc", "v2"), ] sync_versions_task( @@ -925,24 +759,12 @@ def test_automation_rules_are_triggered_for_new_versions( ) branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, - { - "identifier": "origin/new_branch", - "verbose_name": "new_branch", - }, + VersionData("origin/master", "master"), + VersionData("origin/new_branch", "new_branch"), ] tags_data = [ - { - "identifier": "new_tag", - "verbose_name": "new_tag", - }, - { - "identifier": "0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("new_tag", "new_tag"), + VersionData("0.8.3", "0.8.3"), ] sync_versions_task( self.pip.pk, @@ -958,14 +780,8 @@ def test_automation_rules_are_triggered_for_new_versions( @mock.patch("readthedocs.builds.automation_actions.trigger_build", mock.MagicMock()) def test_automation_rule_activate_version(self): tags_data = [ - { - "identifier": "new_tag", - "verbose_name": "new_tag", - }, - { - "identifier": "0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("new_tag", "new_tag"), + VersionData("0.8.3", "0.8.3"), ] RegexAutomationRule.objects.create( project=self.pip, @@ -986,14 +802,8 @@ def test_automation_rule_activate_version(self): @mock.patch("readthedocs.builds.automation_actions.trigger_build", mock.MagicMock()) def test_automation_rule_set_default_version(self): tags_data = [ - { - "identifier": "new_tag", - "verbose_name": "new_tag", - }, - { - "identifier": "0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("new_tag", "new_tag"), + VersionData("0.8.3", "0.8.3"), ] RegexAutomationRule.objects.create( project=self.pip, @@ -1013,14 +823,8 @@ def test_automation_rule_set_default_version(self): def test_automation_rule_delete_version(self): tags_data = [ - { - "identifier": "new_tag", - "verbose_name": "new_tag", - }, - { - "identifier": "0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("new_tag", "new_tag"), + VersionData("0.8.3", "0.8.3"), ] version_slug = "0.8" RegexAutomationRule.objects.create( @@ -1042,14 +846,8 @@ def test_automation_rule_delete_version(self): def test_automation_rule_dont_delete_default_version(self): tags_data = [ - { - "identifier": "new_tag", - "verbose_name": "new_tag", - }, - { - "identifier": "0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("new_tag", "new_tag"), + VersionData("0.8.3", "0.8.3"), ] version_slug = "0.8" RegexAutomationRule.objects.create( @@ -1097,24 +895,12 @@ def setUp(self): def test_stable_versions(self): branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, - { - "identifier": "origin/to_add", - "verbose_name": "to_add", - }, + VersionData("origin/master", "master"), + VersionData("origin/to_add", "to_add"), ] tags_data = [ - { - "identifier": "0.9", - "verbose_name": "0.9", - }, - { - "identifier": "0.8", - "verbose_name": "0.8", - }, + VersionData("0.9", "0.9"), + VersionData("0.8", "0.8"), ] self.assertRaises( @@ -1133,11 +919,11 @@ def test_stable_versions(self): def test_pre_release_are_not_stable(self): tags_data = [ - {"identifier": "1.0a1", "verbose_name": "1.0a1"}, - {"identifier": "0.9", "verbose_name": "0.9"}, - {"identifier": "0.9b1", "verbose_name": "0.9b1"}, - {"identifier": "0.8", "verbose_name": "0.8"}, - {"identifier": "0.8rc2", "verbose_name": "0.8rc2"}, + VersionData("1.0a1", "1.0a1"), + VersionData("0.9", "0.9"), + VersionData("0.9b1", "0.9b1"), + VersionData("0.8", "0.8"), + VersionData("0.8rc2", "0.8rc2"), ] sync_versions_task( @@ -1151,8 +937,8 @@ def test_pre_release_are_not_stable(self): def test_post_releases_are_stable(self): tags_data = [ - {"identifier": "1.0", "verbose_name": "1.0"}, - {"identifier": "1.0.post1", "verbose_name": "1.0.post1"}, + VersionData("1.0", "1.0"), + VersionData("1.0.post1", "1.0.post1"), ] sync_versions_task( @@ -1168,10 +954,7 @@ def test_invalid_version_numbers_are_not_stable(self): self.pip.versions.all().delete() tags_data = [ - { - "identifier": "this.is.invalid", - "verbose_name": "this.is.invalid", - }, + VersionData("this.is.invalid", "this.is.invalid"), ] sync_versions_task( @@ -1182,14 +965,8 @@ def test_invalid_version_numbers_are_not_stable(self): self.assertFalse(Version.objects.filter(slug=STABLE).exists()) tags_data = [ - { - "identifier": "1.0", - "verbose_name": "1.0", - }, - { - "identifier": "this.is.invalid", - "verbose_name": "this.is.invalid", - }, + VersionData("1.0", "1.0"), + VersionData("this.is.invalid", "this.is.invalid"), ] sync_versions_task( @@ -1203,20 +980,11 @@ def test_invalid_version_numbers_are_not_stable(self): def test_update_stable_version(self): branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), ] tags_data = [ - { - "identifier": "0.9", - "verbose_name": "0.9", - }, - { - "identifier": "0.8", - "verbose_name": "0.8", - }, + VersionData("0.9", "0.9"), + VersionData("0.8", "0.8"), ] self.pip.update_stable_version() @@ -1231,10 +999,7 @@ def test_update_stable_version(self): self.assertEqual(version_stable.identifier, "0.9") tags_data = [ - { - "identifier": "1.0.0", - "verbose_name": "1.0.0", - }, + VersionData("1.0.0", "1.0.0"), ] sync_versions_task( @@ -1248,10 +1013,7 @@ def test_update_stable_version(self): self.assertEqual(version_stable.identifier, "1.0.0") tags_data = [ - { - "identifier": "0.7", - "verbose_name": "0.7", - }, + VersionData("0.7", "0.7"), ] sync_versions_task( @@ -1266,16 +1028,10 @@ def test_update_stable_version(self): def test_update_inactive_stable_version(self): branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), ] tags_data = [ - { - "identifier": "0.9", - "verbose_name": "0.9", - }, + VersionData("0.9", "0.9"), ] self.pip.update_stable_version() @@ -1291,10 +1047,7 @@ def test_update_inactive_stable_version(self): version_stable.save() tags_data.append( - { - "identifier": "1.0.0", - "verbose_name": "1.0.0", - } + VersionData("1.0.0", "1.0.0"), ) sync_versions_task( @@ -1312,12 +1065,12 @@ def test_update_inactive_stable_version(self): def test_stable_version_tags_over_branches(self): branches_data = [ # 2.0 development - {"identifier": "origin/2.0", "verbose_name": "2.0"}, - {"identifier": "origin/0.9.1rc1", "verbose_name": "0.9.1rc1"}, + VersionData("origin/2.0", "2.0"), + VersionData("origin/0.9.1rc1", "0.9.1rc1"), ] tags_data = [ - {"identifier": "1.0rc1", "verbose_name": "1.0rc1"}, - {"identifier": "0.9", "verbose_name": "0.9"}, + VersionData("1.0rc1", "1.0rc1"), + VersionData("0.9", "0.9"), ] self.pip.update_stable_version() @@ -1334,10 +1087,7 @@ def test_stable_version_tags_over_branches(self): self.assertEqual(version_stable.identifier, "0.9") tags_data.append( - { - "identifier": "1.0", - "verbose_name": "1.0", - } + VersionData("1.0", "1.0"), ) sync_versions_task( @@ -1353,12 +1103,12 @@ def test_stable_version_tags_over_branches(self): def test_stable_version_same_id_tag_branch(self): branches_data = [ # old 1.0 development branch - {"identifier": "origin/1.0", "verbose_name": "1.0"}, + VersionData("origin/1.0", "1.0"), ] tags_data = [ # tagged 1.0 final version - {"identifier": "1.0", "verbose_name": "1.0"}, - {"identifier": "0.9", "verbose_name": "0.9"}, + VersionData("1.0", "1.0"), + VersionData("0.9", "0.9"), ] self.pip.update_stable_version() @@ -1375,7 +1125,7 @@ def test_stable_version_same_id_tag_branch(self): def test_unicode(self): tags_data = [ - {"identifier": "foo-£", "verbose_name": "foo-£"}, + VersionData("foo-£", "foo-£"), ] sync_versions_task( @@ -1404,25 +1154,13 @@ def test_user_defined_stable_version_tag_with_tags(self): ) branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), ] tags_data = [ # A new user-defined stable tag - { - "identifier": "1abc2def3", - "verbose_name": "stable", - }, - { - "identifier": "0.9", - "verbose_name": "0.9", - }, - { - "identifier": "0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("1abc2def3", "stable"), + VersionData("0.9", "0.9"), + VersionData("0.8.3", "0.8.3"), ] sync_versions_task( @@ -1489,25 +1227,12 @@ def test_user_defined_stable_version_branch_with_tags(self): self.pip.update_stable_version() branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, - # A new user-defined stable branch - { - "identifier": "origin/stable", - "verbose_name": "stable", - }, + VersionData("origin/master", "master"), + VersionData("origin/stable", "stable"), ] tags_data = [ - { - "identifier": "0.9", - "verbose_name": "0.9", - }, - { - "identifier": "0.8.3", - "verbose_name": "0.8.3", - }, + VersionData("0.9", "0.9"), + VersionData("0.8.3", "0.8.3"), ] sync_versions_task( @@ -1593,17 +1318,11 @@ def test_user_defined_latest_version_tag(self): # as a BRANCH, then here we will have a # ``latest_a`` version. branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), ] tags_data = [ # A new user-defined latest tag - { - "identifier": "1abc2def3", - "verbose_name": "latest", - }, + VersionData("1abc2def3", "latest"), ] sync_versions_task( @@ -1648,15 +1367,9 @@ def test_user_defined_latest_version_tag(self): def test_user_defined_latest_version_branch(self): branches_data = [ - { - "identifier": "origin/master", - "verbose_name": "master", - }, + VersionData("origin/master", "master"), # A new user-defined latest branch - { - "identifier": "origin/latest", - "verbose_name": "latest", - }, + VersionData("origin/latest", "latest"), ] sync_versions_task(