def test_prefer_final(self): # Can order the distributions using prefer_final fb10 = ReleaseInfo("FooBar", "1.0") # final distribution fb11a = ReleaseInfo("FooBar", "1.1a1") # alpha fb12a = ReleaseInfo("FooBar", "1.2a1") # alpha fb12b = ReleaseInfo("FooBar", "1.2b1") # beta dists = ReleasesList("FooBar", [fb10, fb11a, fb12a, fb12b]) dists.sort_releases(prefer_final=True) self.assertEqual(fb10, dists[0]) dists.sort_releases(prefer_final=False) self.assertEqual(fb12b, dists[0])
def test_filter(self): # Test we filter the distributions the right way, using version # predicate match method releases = ReleasesList('FooBar', ( ReleaseInfo("FooBar", "1.1"), ReleaseInfo("FooBar", "1.1.1"), ReleaseInfo("FooBar", "1.2"), ReleaseInfo("FooBar", "1.2.1"), )) filtered = releases.filter(VersionPredicate("FooBar (<1.2)")) self.assertNotIn(releases[2], filtered) self.assertNotIn(releases[3], filtered) self.assertIn(releases[0], filtered) self.assertIn(releases[1], filtered)
def test_append(self): # When adding a new item to the list, the behavior is to test if # a release with the same name and version number already exists, # and if so, to add a new distribution for it. If the distribution type # is already defined too, add url informations to the existing DistInfo # object. releases = ReleasesList("FooBar", [ ReleaseInfo("FooBar", "1.1", url="external_url", dist_type="sdist"), ]) self.assertEqual(1, len(releases)) releases.add_release(release=ReleaseInfo("FooBar", "1.1", url="internal_url", is_external=False, dist_type="sdist")) self.assertEqual(1, len(releases)) self.assertEqual(2, len(releases[0]['sdist'].urls)) releases.add_release( release=ReleaseInfo("FooBar", "1.1.1", dist_type="sdist")) self.assertEqual(2, len(releases)) # when adding a distribution whith a different type, a new distribution # has to be added. releases.add_release( release=ReleaseInfo("FooBar", "1.1.1", dist_type="bdist")) self.assertEqual(2, len(releases)) self.assertEqual(2, len(releases[1].dists))
def _register_release(self, release=None, release_info={}): """Register a new release. Both a release or a dict of release_info can be provided, the preferred way (eg. the quicker) is the dict one. Return the list of existing releases for the given project. """ # Check if the project already has a list of releases (refering to # the project name). If not, create a new release list. # Then, add the release to the list. if release: name = release.name else: name = release_info['name'] if name.lower() not in self._projects: self._projects[name.lower()] = ReleasesList(name, index=self._index) if release: self._projects[name.lower()].add_release(release=release) else: name = release_info.pop('name') version = release_info.pop('version') dist_type = release_info.pop('dist_type') self._projects[name.lower()].add_release(version, dist_type, **release_info) return self._projects[name.lower()]
def test_prefer_source(self): # Ordering supports prefer_source fb_source = Dist("FooBar", "1.0", type="source") fb_binary = Dist("FooBar", "1.0", type="binary") fb2_binary = Dist("FooBar", "2.0", type="binary") dists = ReleasesList([fb_binary, fb_source]) dists.sort_distributions(prefer_source=True) self.assertEqual(fb_source, dists[0]) dists.sort_distributions(prefer_source=False) self.assertEqual(fb_binary, dists[0]) dists.append(fb2_binary) dists.sort_distributions(prefer_source=True) self.assertEqual(fb2_binary, dists[0])
def test_append(self): # When adding a new item to the list, the behavior is to test if # a release with the same name and version number already exists, # and if so, to add a new distribution for it. If the distribution type # is already defined too, add url informations to the existing DistInfo # object. releases = ReleasesList("FooBar", [ ReleaseInfo("FooBar", "1.1", url="external_url", dist_type="sdist"), ]) self.assertEqual(1, len(releases)) releases.add_release(release=ReleaseInfo("FooBar", "1.1", url="internal_url", is_external=False, dist_type="sdist")) self.assertEqual(1, len(releases)) self.assertEqual(2, len(releases[0]['sdist'].urls)) releases.add_release(release=ReleaseInfo("FooBar", "1.1.1", dist_type="sdist")) self.assertEqual(2, len(releases)) # when adding a distribution whith a different type, a new distribution # has to be added. releases.add_release(release=ReleaseInfo("FooBar", "1.1.1", dist_type="bdist")) self.assertEqual(2, len(releases)) self.assertEqual(2, len(releases[1].dists))
def test_get_last(self): dists = ReleasesList('Foo') self.assertEqual(dists.get_last('Foo 1.0'), None)
def _get_project(self, project_name): """Return an project instance, create it if necessary""" return self._projects.setdefault( project_name.lower(), ReleasesList(project_name, index=self._index))