Hello community, here is the log from the commit of package python-openqa_review for openSUSE:Factory checked in at 2017-12-21 11:29:01 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-openqa_review (Old) and /work/SRC/openSUSE:Factory/.python-openqa_review.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-openqa_review" Thu Dec 21 11:29:01 2017 rev:18 rq:558732 version:1.8.2 Changes: -------- --- /work/SRC/openSUSE:Factory/python-openqa_review/python-openqa_review.changes 2017-10-13 14:15:59.900464217 +0200 +++ /work/SRC/openSUSE:Factory/.python-openqa_review.new/python-openqa_review.changes 2017-12-21 11:29:03.936362594 +0100 @@ -1,0 +2,28 @@ +Wed Dec 20 08:13:24 UTC 2017 - ok...@suse.com + +- Update to version 1.8.2: + * browser: Status code is not always available on error + * setup.py: Correct name of tests_require + * Project is no production stable + * Only require separate configparser for python2 + * Fix require of configparser for python3 + +------------------------------------------------------------------- +Sun Dec 17 13:38:22 UTC 2017 - ok...@suse.com + +- Provide singlespec file with update-alternatives including self-test + * Better multibuild-evaluation with valid syntax allowing local use of + '-M test' + * Complete runtime requirements including "python-setuptools" + * Complete set of scripts for both python2 and python3 + * Package self-test for all repositories and python2/python3 + +------------------------------------------------------------------- +Sat Dec 16 11:54:53 UTC 2017 - ok...@suse.com + +- Update to version 1.8.0: + * Provide job references in failed soft-fail parsing + * Add review wrapper script for 'functional' group on openqa.suse.de + * Handle disconnects by remote end on API get gracefully + +------------------------------------------------------------------- Old: ---- python-openqa_review-1.7.5.tar.gz New: ---- _multibuild python-openqa_review-1.8.2.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-openqa_review.spec ++++++ --- /var/tmp/diff_new_pack.HG50pL/_old 2017-12-21 11:29:04.476336265 +0100 +++ /var/tmp/diff_new_pack.HG50pL/_new 2017-12-21 11:29:04.480336070 +0100 @@ -1,5 +1,5 @@ # -# spec file for package python-openqa_review +# spec file for package python # # Copyright (c) 2017 SUSE LINUX GmbH, Nuernberg, Germany. # @@ -16,52 +16,110 @@ # +# Define just "test" as a package in _multibuild file to distinguish test +# instructions here +%if "@BUILD_FLAVOR@" == "" +%bcond_with test +%else +%bcond_without test +%endif + +%{?!python_module:%define python_module() python-%{**} python3-%{**}} %define short_name openqa_review -Name: python-%{short_name} -Version: 1.7.5 +%define binaries openqa-review openqa-review-daily-email openqa-review-sles-ha tumblesle-release +%define oldpython python +Name: python-%{short_name}%{?name_ext} +Version: 1.8.2 Release: 0 Summary: A review helper script for openQA License: MIT Group: Development/Languages/Python -Source: https://github.com/okurz/%{short_name}/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz +Source: https://github.com/okurz/%{short_name}/archive/%{version}.tar.gz#/python-%{short_name}-%{version}.tar.gz Url: https://github.com/okurz/%{short_name} -BuildRoot: %{_tmppath}/%{name}-%{version}-build -BuildRequires: python-setuptools -Requires: python-PyYAML -Requires: python-beautifulsoup4 -Requires: python-certifi -Requires: python-configparser +BuildRequires: python-rpm-macros +%if %{with test} +BuildRequires: %{oldpython}-%{short_name} +%else +BuildRequires: %{python_module setuptools} +BuildRequires: fdupes # workaround because of python-configparser not providing the '__init__.py' # file within site-packages/backports +%if "%{python_flavor}" == "python2" Requires: python-backports.ssl_match_hostname +Requires: python-configparser +%endif +Requires: python-PyYAML +Requires: python-beautifulsoup4 +Requires: python-certifi Requires: python-future Requires: python-humanfriendly Requires: python-pika Requires: python-requests Requires: python-setuptools Requires: python-sortedcontainers +Requires(post): update-alternatives +Requires(preun): update-alternatives +%endif +BuildRoot: %{_tmppath}/%{name}-%{version}-build BuildArch: noarch +%ifpython2 +Obsoletes: %{oldpython}-%{short_name} < %{version} +%endif + +%python_subpackages + %description A review helper script for openQA. For more details look into the README file. %prep +%if %{with test} +# workaround to prevent post/install failing assuming this file for whatever +# reason +touch %{_sourcedir}/%{short_name} +%else %setup -q -n %{short_name}-%{version} +# delete shebang of files not in executable path +find %{short_name}/ -name '*.py' -print0 | xargs -0 sed -i '1s/#!.*$//' +%endif %build -python setup.py build +%if %{with test} +openqa-review --help +tumblesle-release --help +%else +%python_build +%endif +%if %{with test} +%else %install -python setup.py install --prefix=%{_prefix} --root=%{buildroot} +%python_install rm %{buildroot}/%{python_sitelib}/version.* -%files +for i in %{binaries}; do + %python_clone -a %{buildroot}%{_bindir}/$i +done +%fdupes %{buildroot}%{_prefix} + +%post +%{python_install_alternative %{binaries}} + +%preun +%python_uninstall_alternative openqa-review + +%files %{python_files} %defattr(-,root,root,-) %doc LICENSE README.md %{python_sitelib} -%attr(755, -, -) %{_bindir}/openqa-review -%attr(755, -, -) %{_bindir}/openqa-review-sles-ha -%attr(755, -, -) %{_bindir}/openqa-review-daily-email -%attr(755, -, -) %{_bindir}/tumblesle-release +%python_alternative %{_bindir}/openqa-review +%python_alternative %{_bindir}/openqa-review-sles-ha +%python_alternative %{_bindir}/openqa-review-daily-email +%python_alternative %{_bindir}/tumblesle-release + +%else +# disable debug packages in package test to prevent error about missing files +%define debug_package %{nil} +%endif %changelog ++++++ _multibuild ++++++ <multibuild> <package>test</package> </multibuild> ++++++ _service ++++++ --- /var/tmp/diff_new_pack.HG50pL/_old 2017-12-21 11:29:04.536333340 +0100 +++ /var/tmp/diff_new_pack.HG50pL/_new 2017-12-21 11:29:04.536333340 +0100 @@ -1,7 +1,7 @@ <services> <service name="tar_scm" mode="disabled"> <param name="filename">python-openqa_review</param> - <param name="versionformat">@PARENT_TAG@</param> + <param name="versionformat">@PARENT_TAG@+@TAG_OFFSET@.%h</param> <param name="url">git://github.com/okurz/openqa_review.git</param> <param name="scm">git</param> <param name="revision">master</param> ++++++ python-openqa_review-1.7.5.tar.gz -> python-openqa_review-1.8.2.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openqa_review-1.7.5/bin/openqa-review-functional new/openqa_review-1.8.2/bin/openqa-review-functional --- old/openqa_review-1.7.5/bin/openqa-review-functional 1970-01-01 01:00:00.000000000 +0100 +++ new/openqa_review-1.8.2/bin/openqa-review-functional 2017-12-20 08:57:27.000000000 +0100 @@ -0,0 +1,4 @@ +#!/bin/sh -e +cmd="${cmd:-"openqa-review"}" +args="--host http://openqa.suse.de --against-reviewed last -vvvv -s -n -T --bugrefs --no-empty-sections --include-softfails --query-issue-status $@" +$cmd -j 'SLE.*/ Functional' $args | tee $(date +%F)_functional.md diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openqa_review-1.7.5/openqa_review/browser.py new/openqa_review-1.8.2/openqa_review/browser.py --- old/openqa_review-1.7.5/openqa_review/browser.py 2017-09-19 08:02:36.000000000 +0200 +++ new/openqa_review-1.8.2/openqa_review/browser.py 2017-12-20 08:57:27.000000000 +0100 @@ -99,21 +99,7 @@ content = json.loads(raw) if as_json else raw else: # pragma: no cover absolute_url = url if not url.startswith('/') else urljoin(str(self.root_url), str(url)) - for i in range(1, 7): - r = requests.get(absolute_url, auth=self.auth) - if r.status_code == 502: - log.info("Request to %s failed with status code 502, retrying try %s" % (absolute_url, i)) - continue - if r.status_code != 200: - msg = "Request to %s was not successful, status code: %s" % (absolute_url, r.status_code) - log.info(msg) - raise DownloadError(msg) - break - else: - msg = "Request to %s was not successful after multiple retries, giving up. Status code: %s" % (absolute_url, r.status_code) - log.warn(msg) - raise DownloadError(msg) - content = r.json() if as_json else r.content.decode('utf8') + content = self._get(absolute_url, as_json=as_json) raw = json.dumps(content) if as_json else content if self.save: log.info("Saving content instead from URL %s from filename %s" % (url, filename)) @@ -121,6 +107,28 @@ self.cache[url] = raw return content + def _get(self, url, as_json=False): # pragma: no cover + for i in range(1, 7): + try: + r = requests.get(url, auth=self.auth) + except requests.exceptions.ConnectionError: + log.info("Connection error encountered accessing %s, retrying try %s" % (url, i)) + continue + if r.status_code == 502: + log.info("Request to %s failed with status code 502, retrying try %s" % (url, i)) + continue + if r.status_code != 200: + msg = "Request to %s was not successful, status code: %s" % (url, r.status_code) + log.info(msg) + raise DownloadError(msg) + break + else: + msg = "Request to %s was not successful after multiple retries, giving up" % url + log.warn(msg) + raise DownloadError(msg) + content = r.json() if as_json else r.content.decode('utf8') + return content + def json_rpc_get(self, url, method, params, cache=True): """Execute JSON RPC GET request.""" absolute_url = url if not url.startswith('/') else urljoin('http://dummy/', str(url)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openqa_review-1.7.5/openqa_review/openqa_review.py new/openqa_review-1.8.2/openqa_review/openqa_review.py --- old/openqa_review-1.7.5/openqa_review/openqa_review.py 2017-09-19 08:02:36.000000000 +0200 +++ new/openqa_review-1.8.2/openqa_review/openqa_review.py 2017-12-20 08:57:27.000000000 +0100 @@ -837,11 +837,13 @@ log.debug('Evaluating potential workaround needle \'%s\'' % field['needle']) match = re.search('([a-z]{3})#?([0-9]+)-[0-9]+', field['needle']) if not match: # pragma: no cover - log.warn('Found workaround needle without bugref that could be understood, looking for a better bugref (if any)') + log.warn('Found workaround needle without bugref that could be understood, looking for a better bugref (if any) for \'%s\'' % + result_item['href']) continue return match.group(1) + '#' + match.group(2) else: # pragma: no cover - log.error('Could not find any soft failure reference within details, workaround needle without bugref that could be understood') + log.error('Could not find any soft failure reference within details of soft-failed job \'%s\'. Could be deleted workaround needle?.' % + absolute_url(self.root_url, result_item)) def __str__(self): """Return as markdown.""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/openqa_review-1.7.5/setup.py new/openqa_review-1.8.2/setup.py --- old/openqa_review-1.7.5/setup.py 2017-09-19 08:02:36.000000000 +0200 +++ new/openqa_review-1.8.2/setup.py 2017-12-20 08:57:27.000000000 +0100 @@ -1,4 +1,5 @@ import os +import sys from subprocess import check_output from setuptools import setup @@ -23,22 +24,26 @@ version_msg = "# Do not edit this file, pipeline versioning is governed by git tags" open(version_py, 'w').write(version_msg + os.linesep + "__version__ = '" + str(version_git) + "'\n") +install_requires = [ + "beautifulsoup4", + "future", + "sortedcontainers", + "humanfriendly", + "requests", + "PyYAML", + "pika", + "certifi", +] + +# there is also a new version 'configparser2' to resolve the name ambuigity but that package might not be available everywhere +if sys.version_info < (3, 0): + install_requires += ["configparser"] + setup( name="openqa_review", version="{ver}".format(ver=version_git), - install_requires=[ - "beautifulsoup4", - # there is also a new version 'configparser2' to resolve the name ambuigity but that package might not be available everywhere - "configparser", - "future", - "sortedcontainers", - "humanfriendly", - "requests", - "PyYAML", - "pika", - "certifi", - ], - test_require=[ + install_requires=install_requires, + tests_require=[ "pytest-mock", ], author="Oliver kurz", @@ -51,7 +56,7 @@ py_modules=['version'], long_description=open(os.path.join(os.path.dirname(__file__), 'README.md')).read(), classifiers=[ - "Development Status :: 3 - Alpha", + "Development Status :: 5 - Production/Stable", "Topic :: Utilities", "License :: OSI Approved :: MIT License", ],