def get_versions(cls, project): """ Method called to retrieve all the versions (that can be found) of the projects provided, project that relies on the backend of this plugin. :arg Project project: a :class:`anitya.db.models.Project` object whose backend corresponds to the current plugin. :return: a list of all the possible releases found :return type: list :raise AnityaPluginException: a :class:`anitya.lib.exceptions.AnityaPluginException` exception when the versions cannot be retrieved correctly """ url = cls.get_version_url(project) try: req = cls.call_url(url, insecure=project.insecure) except Exception as err: raise AnityaPluginException( 'Could not call : "%s" of "%s", with error: %s' % (url, project.name, str(err))) versions = None if not isinstance(req, six.string_types): req = req.text try: regex = REGEX % {"name": project.name.replace("+", r"\+")} versions = get_versions_by_regex_for_text(req, url, regex, project) except AnityaPluginException: versions = get_versions_by_regex_for_text(req, url, DEFAULT_REGEX, project) return versions
def get_versions(cls, project): """ Method called to retrieve all the versions (that can be found) of the projects provided, project that relies on the backend of this plugin. :arg Project project: a :class:`model.Project` object whose backend corresponds to the current plugin. :return: a list of all the possible releases found :return type: list :raise AnityaPluginException: a :class:`anitya.lib.exceptions.AnityaPluginException` exception when the versions cannot be retrieved correctly """ url = project.version_url try: req = cls.call_url(url) except Exception: raise AnityaPluginException('Could not call : "%s" of "%s"' % (url, project.name)) versions = None if not isinstance(req, six.string_types): req = req.text try: regex = REGEX % {"name": project.name.replace("+", "\+")} versions = get_versions_by_regex_for_text(req, url, regex, project) except AnityaPluginException: versions = get_versions_by_regex_for_text(req, url, DEFAULT_REGEX, project) return versions
def get_versions(cls, project): """ Method called to retrieve all the versions (that can be found) of the projects provided, project that relies on the backend of this plugin. :arg Project project: a :class:`anitya.db.models.Project` object whose backend corresponds to the current plugin. :return: a list of all the possible releases found :return type: list :raise AnityaPluginException: a :class:`anitya.lib.exceptions.AnityaPluginException` exception when the versions cannot be retrieved correctly """ url = cls.get_version_url(project) try: req = cls.call_url(url) except Exception: # pragma: no cover raise AnityaPluginException('Could not call : "%s" of "%s"' % (url, project.name)) versions = None try: regex = REGEX % {"name": project.name} versions = get_versions_by_regex_for_text(req.text, url, regex, project) except AnityaPluginException: versions = get_versions_by_regex_for_text(req.text, url, DEFAULT_REGEX, project) return versions
def get_versions(cls, project): ''' Method called to retrieve all the versions (that can be found) of the projects provided, project that relies on the backend of this plugin. :arg Project project: a :class:`model.Project` object whose backend corresponds to the current plugin. :return: a list of all the possible releases found :return type: list :raise AnityaPluginException: a :class:`anitya.lib.exceptions.AnityaPluginException` exception when the versions cannot be retrieved correctly ''' url = project.version_url try: req = cls.call_url(url) except Exception: raise AnityaPluginException( 'Could not call : "%s" of "%s"' % (url, project.name)) versions = None if not isinstance(req, six.string_types): req = req.text try: regex = REGEX % {'name': project.name.replace('+', '\+')} versions = get_versions_by_regex_for_text( req, url, regex, project) except AnityaPluginException: versions = get_versions_by_regex_for_text( req, url, DEFAULT_REGEX, project) return versions
def get_versions(cls, project): """ Method called to retrieve all the versions (that can be found) of the projects provided, project that relies on the backend of this plugin. :arg Project project: a :class:`anitya.db.models.Project` object whose backend corresponds to the current plugin. :return: a list of all the possible releases found :return type: list :raise AnityaPluginException: a :class:`anitya.lib.exceptions.AnityaPluginException` exception when the versions cannot be retrieved correctly """ url = cls.get_version_url(project) try: req = cls.call_url(url) except Exception: # pragma: no cover raise AnityaPluginException( 'Could not call : "%s" of "%s"' % (url, project.name) ) versions = None try: regex = REGEX % {"name": project.name} versions = get_versions_by_regex_for_text(req.text, url, regex, project) except AnityaPluginException: versions = get_versions_by_regex_for_text( req.text, url, DEFAULT_REGEX, project ) return versions
def test_get_versions_by_regex_for_text(self): """Assert finding versions with a simple regex in text works""" text = """ some release: 0.0.1 some other release: 0.0.2 The best release: 1.0.0 """ regex = r"\d\.\d\.\d" mock_project = mock.Mock(version_prefix="", version_filter=None) versions = backends.get_versions_by_regex_for_text( text, "url", regex, mock_project) self.assertEqual(sorted(["0.0.1", "0.0.2", "1.0.0"]), sorted(versions))
def test_get_versions_by_regex_for_text(self): """Assert finding versions with a simple regex in text works""" text = """ some release: 0.0.1 some other release: 0.0.2 The best release: 1.0.0 """ regex = r'\d\.\d\.\d' mock_project = mock.Mock(version_prefix='') versions = backends.get_versions_by_regex_for_text( text, 'url', regex, mock_project) self.assertEqual(sorted(['0.0.1', '0.0.2', '1.0.0']), sorted(versions))
def test_get_versions_by_regex_for_text_prefix(self): """Assert prefixes are stripped from regex matches""" text = """ some release: v0.0.1 some other release: v0.0.2 The best release: v1.0.0 """ regex = r'v\d\.\d\.\d' mock_project = mock.Mock(version_prefix='v') versions = backends.get_versions_by_regex_for_text( text, 'url', regex, mock_project) self.assertEqual(sorted(['0.0.1', '0.0.2', '1.0.0']), sorted(versions))
def test_get_versions_by_regex_for_text(self): """Assert finding versions with a simple regex in text works""" text = """ some release: 0.0.1 some other release: 0.0.2 The best release: 1.0.0 """ regex = r'\d\.\d\.\d' mock_project = mock.Mock(version_prefix='') versions = backends.get_versions_by_regex_for_text( text, 'url', regex, mock_project) self.assertEqual(sorted(['0.0.1', '0.0.2', '1.0.0']), sorted(versions))
def test_get_versions_by_regex_for_text_prefix(self): """Assert prefixes are stripped from regex matches""" text = """ some release: v0.0.1 some other release: v0.0.2 The best release: v1.0.0 """ regex = r'v\d\.\d\.\d' mock_project = mock.Mock(version_prefix='v') versions = backends.get_versions_by_regex_for_text( text, 'url', regex, mock_project) self.assertEqual(sorted(['0.0.1', '0.0.2', '1.0.0']), sorted(versions))
def test_get_versions_by_regex_for_text_slice_prefix(self): """Assert prefixes are sliced rather than lstripped""" text = """ some release: version-v0.0.1-dev some other release: version-v0.0.2-dev The best release: version-v1.0.0 """ regex = r'[\w]*-v\d\.\d\.\d-?[\w]*' mock_project = mock.Mock(version_prefix='version-') versions = backends.get_versions_by_regex_for_text( text, 'url', regex, mock_project) self.assertEqual( sorted(['v0.0.1-dev', 'v0.0.2-dev', 'v1.0.0']), sorted(versions))
def test_get_versions_by_regex_for_text_slice_prefix(self): """Assert prefixes are sliced rather than lstripped""" text = """ some release: version-v0.0.1-dev some other release: version-v0.0.2-dev The best release: version-v1.0.0 """ regex = r'[\w]*-v\d\.\d\.\d-?[\w]*' mock_project = mock.Mock(version_prefix='version-') versions = backends.get_versions_by_regex_for_text( text, 'url', regex, mock_project) self.assertEqual(sorted(['v0.0.1-dev', 'v0.0.2-dev', 'v1.0.0']), sorted(versions))
def test_debian_regex_without_orig(self): """Assert Debian tarballs without the ".orig" string work""" tarball_names = """ Some Header libgnupg-interface-perl_0.45.tar.gz libgnupg-interface-perl_0.46.tar.gz """ versions = get_versions_by_regex_for_text( tarball_names, 'http://example.com', backend.DEBIAN_REGEX % {'name': 'libgnupg-interface-perl'}, models.Project.get(self.session, 3)) self.assertEqual(sorted(['0.45', '0.46']), sorted(versions))
def test_get_versions_by_regex_for_text(self): """Assert finding versions with a simple regex in text works""" text = """ some release: 0.0.1 some other release: 0.0.2 The best release: 1.0.0 """ regex = r"\d\.\d\.\d" mock_project = mock.Mock(version_prefix="") versions = backends.get_versions_by_regex_for_text( text, "url", regex, mock_project ) self.assertEqual(sorted(["0.0.1", "0.0.2", "1.0.0"]), sorted(versions))
def test_get_versions_by_regex_for_text_tuples(self): """Assert regex that result in tuples are joined into a string""" text = """ some release: 0.0.1 some other release: 0.0.2 The best release: 1.0.0 """ regex = r"(\d)\.(\d)\.(\d)" mock_project = mock.Mock(version_prefix="", version_filter=None) versions = backends.get_versions_by_regex_for_text( text, "url", regex, mock_project) self.assertEqual(sorted(["0.0.1", "0.0.2", "1.0.0"]), sorted(versions)) # Demonstrate that the regex does result in an iterable self.assertEqual(3, len(re.findall(regex, "0.0.1")[0]))
def test_get_versions_by_regex_for_text_tuples(self): """Assert regex that result in tuples are joined into a string""" text = """ some release: 0.0.1 some other release: 0.0.2 The best release: 1.0.0 """ regex = r'(\d)\.(\d)\.(\d)' mock_project = mock.Mock(version_prefix='') versions = backends.get_versions_by_regex_for_text( text, 'url', regex, mock_project) self.assertEqual(sorted(['0.0.1', '0.0.2', '1.0.0']), sorted(versions)) # Demonstrate that the regex does result in an iterable self.assertEqual(3, len(re.findall(regex, '0.0.1')[0]))
def test_get_versions_by_regex_for_text_tuples(self): """Assert regex that result in tuples are joined into a string""" text = """ some release: 0.0.1 some other release: 0.0.2 The best release: 1.0.0 """ regex = r'(\d)\.(\d)\.(\d)' mock_project = mock.Mock(version_prefix='') versions = backends.get_versions_by_regex_for_text( text, 'url', regex, mock_project) self.assertEqual(sorted(['0.0.1', '0.0.2', '1.0.0']), sorted(versions)) # Demonstrate that the regex does result in an iterable self.assertEqual(3, len(re.findall(regex, '0.0.1')[0]))
def test_debian_regex_without_orig(self): """Assert Debian tarballs without the ".orig" string work""" tarball_names = """ Some Header libgnupg-interface-perl_0.45.tar.gz libgnupg-interface-perl_0.46.tar.gz """ versions = get_versions_by_regex_for_text( tarball_names, 'http://example.com', backend.DEBIAN_REGEX % {'name': 'libgnupg-interface-perl'}, model.Project.get(self.session, 3) ) self.assertEqual(sorted(['0.45', '0.46']), sorted(versions))
def test_debian_regex_with_orig(self): """Assert Debian tarballs have the ".orig" string removed""" tarball_names = """ Some Header libgnupg-interface-perl_0.45.orig.tar.gz libgnupg-interface-perl_0.46.orig.tar.gz """ versions = get_versions_by_regex_for_text( tarball_names, "https://example.com", backend.DEBIAN_REGEX % {"name": "libgnupg-interface-perl"}, models.Project.get(self.session, 3), ) self.assertEqual(sorted(["0.45", "0.46"]), sorted(versions))
def test_debian_regex_without_orig(self): """Assert Debian tarballs without the ".orig" string work""" tarball_names = """ Some Header libgnupg-interface-perl_0.45.tar.gz libgnupg-interface-perl_0.46.tar.gz """ versions = get_versions_by_regex_for_text( tarball_names, "https://example.com", backend.DEBIAN_REGEX % {"name": "libgnupg-interface-perl"}, models.Project.get(self.session, 3), ) self.assertEqual(sorted(["0.45", "0.46"]), sorted(versions))