Hello community, here is the log from the commit of package python-jaraco.stream for openSUSE:Leap:15.2 checked in at 2020-04-20 12:55:55 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Leap:15.2/python-jaraco.stream (Old) and /work/SRC/openSUSE:Leap:15.2/.python-jaraco.stream.new.2738 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-jaraco.stream" Mon Apr 20 12:55:55 2020 rev:2 rq:795745 version:3.0.0 Changes: -------- --- /work/SRC/openSUSE:Leap:15.2/python-jaraco.stream/python-jaraco.stream.changes 2020-03-27 16:48:20.655941084 +0100 +++ /work/SRC/openSUSE:Leap:15.2/.python-jaraco.stream.new.2738/python-jaraco.stream.changes 2020-04-20 12:56:20.108808176 +0200 @@ -1,0 +2,7 @@ +Mon Mar 9 15:39:06 UTC 2020 - Marketa Calabkova <mcalabk...@suse.com> + +- Update to 3.0.0 + * Drop support for Python 3.5 and earlier (including Python 2). + * Adopt black for code style and other updates from jaraco/skeleton. + +------------------------------------------------------------------- Old: ---- jaraco.stream-2.0.tar.gz New: ---- jaraco.stream-3.0.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-jaraco.stream.spec ++++++ --- /var/tmp/diff_new_pack.biyJ9k/_old 2020-04-20 12:56:20.456808722 +0200 +++ /var/tmp/diff_new_pack.biyJ9k/_new 2020-04-20 12:56:20.460808728 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-jaraco.stream # -# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany. +# Copyright (c) 2020 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -18,8 +18,9 @@ %define _name jaraco.stream %{?!python_module:%define python_module() python-%{**} python3-%{**}} +%define skip_python2 1 Name: python-jaraco.stream -Version: 2.0 +Version: 3.0.0 Release: 0 Summary: Routines for dealing with data streams License: MIT @@ -31,12 +32,10 @@ BuildRequires: python-rpm-macros Requires: python-jaraco.base >= 6.1 Requires: python-more-itertools -Requires: python-six BuildArch: noarch # SECTION test requirements BuildRequires: %{python_module more-itertools} BuildRequires: %{python_module pytest} -BuildRequires: %{python_module six} # /SECTION # SECTION documentation requirements BuildRequires: %{python_module Sphinx} @@ -52,7 +51,6 @@ %package -n %{name}-doc Summary: Documentation files for %{name} -Requires: %{name} = %{version} Provides: %{python_module jaraco.stream-doc = %{version}} %description -n %{name}-doc @@ -61,6 +59,7 @@ %prep %setup -q -n %{_name}-%{version} sed -i 's/--flake8//' pytest.ini +sed -i 's/--black --cov//' pytest.ini rm -rf jaraco.stream.egg-info %build @@ -76,10 +75,7 @@ } %check -%{python_expand cp jaraco/stream/somefile.json.gz build/lib/jaraco/stream/ -py.test-%{$python_bin_suffix} \ - --ignore=_build.python3 --ignore _build.python2 -} +%pytest %files %{python_files} %license LICENSE ++++++ jaraco.stream-2.0.tar.gz -> jaraco.stream-3.0.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/.coveragerc new/jaraco.stream-3.0.0/.coveragerc --- old/jaraco.stream-2.0/.coveragerc 1970-01-01 01:00:00.000000000 +0100 +++ new/jaraco.stream-3.0.0/.coveragerc 2019-12-13 04:09:09.000000000 +0100 @@ -0,0 +1,5 @@ +[run] +omit = .tox/* + +[report] +show_missing = True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/.flake8 new/jaraco.stream-3.0.0/.flake8 --- old/jaraco.stream-2.0/.flake8 2019-01-01 17:59:06.000000000 +0100 +++ new/jaraco.stream-3.0.0/.flake8 2019-12-13 04:09:09.000000000 +0100 @@ -1,8 +1,9 @@ [flake8] +max-line-length = 88 ignore = - # Allow tabs for indentation - W191 # W503 violates spec https://github.com/PyCQA/pycodestyle/issues/513 W503 # W504 has issues https://github.com/OCA/maintainer-quality-tools/issues/545 W504 + # Black creates whitespace before colon + E203 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/.pre-commit-config.yaml new/jaraco.stream-3.0.0/.pre-commit-config.yaml --- old/jaraco.stream-2.0/.pre-commit-config.yaml 1970-01-01 01:00:00.000000000 +0100 +++ new/jaraco.stream-3.0.0/.pre-commit-config.yaml 2019-12-13 04:09:09.000000000 +0100 @@ -0,0 +1,5 @@ +repos: +- repo: https://github.com/psf/black + rev: 19.3b0 + hooks: + - id: black diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/.travis.yml new/jaraco.stream-3.0.0/.travis.yml --- old/jaraco.stream-2.0/.travis.yml 2019-01-01 17:59:06.000000000 +0100 +++ new/jaraco.stream-3.0.0/.travis.yml 2019-12-13 04:09:09.000000000 +0100 @@ -1,11 +1,9 @@ dist: xenial -sudo: false language: python python: -- 2.7 - 3.6 -- &latest_py3 3.7 +- &latest_py3 3.8 jobs: fast_finish: true @@ -14,11 +12,6 @@ if: tag IS present python: *latest_py3 before_script: skip - env: - - TWINE_USERNAME=jaraco - # TWINE_PASSWORD - - secure: UZKlpfzRDiqH86g/lXKTU/AT3BhJuWIipiQzSf3iqwqpTAM5neHeoIgif8wpA/fyoi/FJbAXt/2hoepG5oAsz0bfnPl8X/Dj3HK0fyMoQHR/s+Hf7i6zg1fUEhAaLsRolC9LxBUN4qBfCb6s+lR0sll0F4FVI7BQGP5GD3h1a0J9G+cT0NeeaQo6tBwWdl1T+tAxDQ8ZNGQJPd613XbOEofb9N9jtKxhYC4EpB8lctHrqCg+ZoJUyZ5MU4yHBI5kGvzIIGsp54FPWKTKU2k9FqqcNexRjrvEdE9JqPFIjkLTQzlo8w9YjbLfXLnUp/Wo5XJJoGwdHCkhgGbw0/ofjJTKNLc2vkMztAIsXqqCk3AkCo2waChfMkvrFmKLjv740l/xgY3QC7hQMlYTnuys54Vj6bqQOEjKJex3GiT/QaWoR69AXgRZW70Q74OAOqUBoWiDLb3rHuWjC7lvh1npAKC1lEi4oFfKzqSlB7Id7l6rhsFyhiOj/W4oB0qOalJuOj9qAEebH40r2U8+d91pMWL2rY6kWuS64UCAt0dpUQ2uE+z/vy1PP8zxVvteis0nIHqPjcC5VubfvSA2t1RSXdaZtW6AO9CAR9qnfv4m6mF4BrocfHIiHXL5FP6L+qd8pftCT3NKIUZc9Soove3CHlYnKk1TEHhi+TrlWiQvTPA= - - TOX_TESTENV_PASSENV="TWINE_USERNAME TWINE_PASSWORD" script: tox -e release cache: pip diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/CHANGES.rst new/jaraco.stream-3.0.0/CHANGES.rst --- old/jaraco.stream-2.0/CHANGES.rst 2019-01-01 17:59:06.000000000 +0100 +++ new/jaraco.stream-3.0.0/CHANGES.rst 2019-12-13 04:09:09.000000000 +0100 @@ -1,3 +1,10 @@ +v3.0.0 +====== + +Drop support for Python 3.5 and earlier (including Python 2). + +Adopt black for code style and other updates from jaraco/skeleton. + 2.0 === diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/PKG-INFO new/jaraco.stream-3.0.0/PKG-INFO --- old/jaraco.stream-2.0/PKG-INFO 2019-01-01 17:59:23.000000000 +0100 +++ new/jaraco.stream-3.0.0/PKG-INFO 2019-12-13 04:09:35.923948500 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: jaraco.stream -Version: 2.0 +Version: 3.0.0 Summary: routines for dealing with data streams Home-page: https://github.com/jaraco/jaraco.stream Author: Jason R. Coombs @@ -14,6 +14,10 @@ .. image:: https://img.shields.io/travis/jaraco/jaraco.stream/master.svg :target: https://travis-ci.org/jaraco/jaraco.stream + .. image:: https://img.shields.io/badge/code%20style-black-000000.svg + :target: https://github.com/psf/black + :alt: Code style: Black + .. .. image:: https://img.shields.io/appveyor/ci/jaraco/jaraco.stream/master.svg .. :target: https://ci.appveyor.com/project/jaraco/jaraco.stream/branch/master @@ -27,8 +31,7 @@ Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License -Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 -Requires-Python: >=2.7 -Provides-Extra: docs +Requires-Python: >=3.6 Provides-Extra: testing +Provides-Extra: docs diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/README.rst new/jaraco.stream-3.0.0/README.rst --- old/jaraco.stream-2.0/README.rst 2019-01-01 17:59:06.000000000 +0100 +++ new/jaraco.stream-3.0.0/README.rst 2019-12-13 04:09:09.000000000 +0100 @@ -6,6 +6,10 @@ .. image:: https://img.shields.io/travis/jaraco/jaraco.stream/master.svg :target: https://travis-ci.org/jaraco/jaraco.stream +.. image:: https://img.shields.io/badge/code%20style-black-000000.svg + :target: https://github.com/psf/black + :alt: Code style: Black + .. .. image:: https://img.shields.io/appveyor/ci/jaraco/jaraco.stream/master.svg .. :target: https://ci.appveyor.com/project/jaraco/jaraco.stream/branch/master diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/appveyor.yml new/jaraco.stream-3.0.0/appveyor.yml --- old/jaraco.stream-2.0/appveyor.yml 2019-01-01 17:59:06.000000000 +0100 +++ new/jaraco.stream-3.0.0/appveyor.yml 2019-12-13 04:09:09.000000000 +0100 @@ -4,7 +4,7 @@ matrix: - PYTHON: "C:\\Python36-x64" - - PYTHON: "C:\\Python27-x64" + - PYTHON: "C:\\Python38-x64" install: # symlink python from a directory with a space @@ -18,7 +18,7 @@ - '%LOCALAPPDATA%\pip\Cache' test_script: - - "python -m pip install tox tox-venv" + - "python -m pip install -U tox tox-venv virtualenv" - "tox" version: '{build}' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/docs/conf.py new/jaraco.stream-3.0.0/docs/conf.py --- old/jaraco.stream-2.0/docs/conf.py 2019-01-01 17:59:06.000000000 +0100 +++ new/jaraco.stream-3.0.0/docs/conf.py 2019-12-13 04:09:09.000000000 +0100 @@ -1,25 +1,25 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -extensions = ["sphinx.ext.autodoc", "jaraco.packaging.sphinx", "rst.linker"] +extensions = ['sphinx.ext.autodoc', 'jaraco.packaging.sphinx', 'rst.linker'] master_doc = "index" link_files = { - "../CHANGES.rst": dict( - using=dict(GH="https://github.com"), + '../CHANGES.rst': dict( + using=dict(GH='https://github.com'), replace=[ dict( - pattern=r"(Issue #|\B#)(?P<issue>\d+)", - url="{package_url}/issues/{issue}", + pattern=r'(Issue #|\B#)(?P<issue>\d+)', + url='{package_url}/issues/{issue}', ), dict( - pattern=r"^(?m)((?P<scm_version>v?\d+(\.\d+){1,2}))\n[-=]+\n", - with_scm="{text}\n{rev[timestamp]:%d %b %Y}\n", + pattern=r'^(?m)((?P<scm_version>v?\d+(\.\d+){1,2}))\n[-=]+\n', + with_scm='{text}\n{rev[timestamp]:%d %b %Y}\n', ), dict( - pattern=r"PEP[- ](?P<pep_number>\d+)", - url="https://www.python.org/dev/peps/pep-{pep_number:0>4}/", + pattern=r'PEP[- ](?P<pep_number>\d+)', + url='https://www.python.org/dev/peps/pep-{pep_number:0>4}/', ), ], ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/jaraco/stream/__init__.py new/jaraco.stream-3.0.0/jaraco/stream/__init__.py --- old/jaraco.stream-2.0/jaraco/stream/__init__.py 2019-01-01 17:59:06.000000000 +0100 +++ new/jaraco.stream-3.0.0/jaraco/stream/__init__.py 2019-12-13 04:09:09.000000000 +0100 @@ -1,22 +1,21 @@ -from __future__ import unicode_literals - import sys -class Tee(object): - """ - Copy the standard output to a file, but continue to write it to - stdout. - """ - def __init__(self, name, mode): - self.file = open(name, mode) - self.stdout = sys.stdout - sys.stdout = self +class Tee: + """ + Copy the standard output to a file, but continue to write it to + stdout. + """ + + def __init__(self, name, mode): + self.file = open(name, mode) + self.stdout = sys.stdout + sys.stdout = self - def __del__(self): - sys.stdout = self.stdout - self.file.close() + def __del__(self): + sys.stdout = self.stdout + self.file.close() - def write(self, data): - self.file.write(data) - self.stdout.write(data) + def write(self, data): + self.file.write(data) + self.stdout.write(data) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/jaraco/stream/buffer.py new/jaraco.stream-3.0.0/jaraco/stream/buffer.py --- old/jaraco.stream-2.0/jaraco/stream/buffer.py 2019-01-01 17:59:06.000000000 +0100 +++ new/jaraco.stream-3.0.0/jaraco/stream/buffer.py 2019-12-13 04:09:09.000000000 +0100 @@ -1,7 +1,3 @@ -# coding: utf-8 - -from __future__ import unicode_literals, absolute_import - import re import textwrap import logging @@ -10,7 +6,7 @@ log = logging.getLogger(__name__) -class LineBuffer(object): +class LineBuffer: r""" Buffer bytes read in from a connection and serve complete lines back. @@ -105,10 +101,12 @@ self.handle_exception() def handle_exception(self): - msg = textwrap.dedent(""" + msg = textwrap.dedent( + """ Unknown encoding encountered. See 'Decoding Input' in https://pypi.python.org/pypi/irc for details. - """) + """ + ) log.warning(msg) raise diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/jaraco/stream/gzip.py new/jaraco.stream-3.0.0/jaraco/stream/gzip.py --- old/jaraco.stream-2.0/jaraco/stream/gzip.py 2019-01-01 17:59:06.000000000 +0100 +++ new/jaraco.stream-3.0.0/jaraco/stream/gzip.py 2019-12-13 04:09:09.000000000 +0100 @@ -6,14 +6,12 @@ import zlib import itertools -import six - from more_itertools.more import peekable from . import buffer -def read_chunks(stream, block_size=2**10): +def read_chunks(stream, block_size=2 ** 10): """ Given a byte stream with reader, yield chunks of block_size until the stream is consusmed. @@ -25,7 +23,7 @@ yield chunk -def _load_stream_py3(dc, chunks): +def load_stream(dc, chunks): """ Given a decompression stream and chunks, yield chunks of decompressed data until the compression window ends. @@ -35,28 +33,13 @@ yield res -def _load_stream_py2(dc, chunks): - while True: - res = dc.decompress(dc.unconsumed_tail + next(chunks)) - if not res: - break - yield res - - -load_stream = [_load_stream_py2, _load_stream_py3][six.PY3] -load_stream.__doc__ = _load_stream_py3.__doc__ - - def load_streams(chunks): """ Given a gzipped stream of data, yield streams of decompressed data. """ chunks = peekable(chunks) while chunks: - if six.PY3: - dc = zlib.decompressobj(wbits=zlib.MAX_WBITS | 16) - else: - dc = zlib.decompressobj(zlib.MAX_WBITS | 16) + dc = zlib.decompressobj(wbits=zlib.MAX_WBITS | 16) yield load_stream(dc, chunks) if dc.unused_data: chunks = peekable(itertools.chain((dc.unused_data,), chunks)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/jaraco/stream/test_gzip.py new/jaraco.stream-3.0.0/jaraco/stream/test_gzip.py --- old/jaraco.stream-2.0/jaraco/stream/test_gzip.py 2019-01-01 17:59:06.000000000 +0100 +++ new/jaraco.stream-3.0.0/jaraco/stream/test_gzip.py 2019-12-13 04:09:09.000000000 +0100 @@ -1,7 +1,7 @@ import json import threading - -from six.moves import urllib, map, BaseHTTPServer +import http.server +import urllib.request import pkg_resources import pytest @@ -12,62 +12,62 @@ @pytest.fixture def gzipped_json(): - """ - A gzipped json doc created by gzipping this file: - [ - {"id": 1, "data": "foo"}, - {"id": 2, "data": "bar"} - ] - """ - strm = pkg_resources.resource_stream('jaraco.stream', 'somefile.json.gz') - return strm.read() + """ + A gzipped json doc created by gzipping this file: + [ + {"id": 1, "data": "foo"}, + {"id": 2, "data": "bar"} + ] + """ + strm = pkg_resources.resource_stream('jaraco.stream', 'somefile.json.gz') + return strm.read() @pytest.yield_fixture def gzip_server(gzipped_json): - class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler): - def do_GET(s): - s.send_response(200) - s.send_header("Content-type", "application/octet-stream") - s.end_headers() - s.wfile.write(gzipped_json) - - host = '' - port = 8080 - addr = host, port - httpd = BaseHTTPServer.HTTPServer(addr, MyHandler) - url = 'http://localhost:{port}/'.format(**locals()) - try: - threading.Thread(target=httpd.serve_forever).start() - yield url - finally: - httpd.shutdown() - httpd.server_close() + class MyHandler(http.server.BaseHTTPRequestHandler): + def do_GET(s): + s.send_response(200) + s.send_header("Content-type", "application/octet-stream") + s.end_headers() + s.wfile.write(gzipped_json) + + host = '' + port = 8080 + addr = host, port + httpd = http.server.HTTPServer(addr, MyHandler) + url = 'http://localhost:{port}/'.format(**locals()) + try: + threading.Thread(target=httpd.serve_forever).start() + yield url + finally: + httpd.shutdown() + httpd.server_close() @pytest.fixture def gzip_stream(gzip_server): - return urllib.request.urlopen(gzip_server) + return urllib.request.urlopen(gzip_server) def test_lines_from_stream(gzip_stream): - chunks = gzip.read_chunks(gzip_stream) - streams = gzip.load_streams(chunks) - lines = flatten(map(gzip.lines_from_stream, streams)) - first_line = next(lines) - assert first_line == '[' - second_line = next(lines) - result = json.loads(second_line.rstrip('\n,')) - assert isinstance(result, dict) - assert 'id' in result + chunks = gzip.read_chunks(gzip_stream) + streams = gzip.load_streams(chunks) + lines = flatten(map(gzip.lines_from_stream, streams)) + first_line = next(lines) + assert first_line == '[' + second_line = next(lines) + result = json.loads(second_line.rstrip('\n,')) + assert isinstance(result, dict) + assert 'id' in result def test_lines_completes(gzip_stream): - """ - When reading lines from a gzip stream, the operation should complete - when the stream is exhausted. - """ - chunks = gzip.read_chunks(gzip_stream) - streams = gzip.load_streams(chunks) - lines = flatten(map(gzip.lines_from_stream, streams)) - consume(lines) + """ + When reading lines from a gzip stream, the operation should complete + when the stream is exhausted. + """ + chunks = gzip.read_chunks(gzip_stream) + streams = gzip.load_streams(chunks) + lines = flatten(map(gzip.lines_from_stream, streams)) + consume(lines) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/jaraco.stream.egg-info/PKG-INFO new/jaraco.stream-3.0.0/jaraco.stream.egg-info/PKG-INFO --- old/jaraco.stream-2.0/jaraco.stream.egg-info/PKG-INFO 2019-01-01 17:59:23.000000000 +0100 +++ new/jaraco.stream-3.0.0/jaraco.stream.egg-info/PKG-INFO 2019-12-13 04:09:35.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: jaraco.stream -Version: 2.0 +Version: 3.0.0 Summary: routines for dealing with data streams Home-page: https://github.com/jaraco/jaraco.stream Author: Jason R. Coombs @@ -14,6 +14,10 @@ .. image:: https://img.shields.io/travis/jaraco/jaraco.stream/master.svg :target: https://travis-ci.org/jaraco/jaraco.stream + .. image:: https://img.shields.io/badge/code%20style-black-000000.svg + :target: https://github.com/psf/black + :alt: Code style: Black + .. .. image:: https://img.shields.io/appveyor/ci/jaraco/jaraco.stream/master.svg .. :target: https://ci.appveyor.com/project/jaraco/jaraco.stream/branch/master @@ -27,8 +31,7 @@ Classifier: Development Status :: 5 - Production/Stable Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: MIT License -Classifier: Programming Language :: Python :: 2.7 Classifier: Programming Language :: Python :: 3 -Requires-Python: >=2.7 -Provides-Extra: docs +Requires-Python: >=3.6 Provides-Extra: testing +Provides-Extra: docs diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/jaraco.stream.egg-info/SOURCES.txt new/jaraco.stream-3.0.0/jaraco.stream.egg-info/SOURCES.txt --- old/jaraco.stream-2.0/jaraco.stream.egg-info/SOURCES.txt 2019-01-01 17:59:23.000000000 +0100 +++ new/jaraco.stream-3.0.0/jaraco.stream.egg-info/SOURCES.txt 2019-12-13 04:09:35.000000000 +0100 @@ -1,4 +1,6 @@ +.coveragerc .flake8 +.pre-commit-config.yaml .readthedocs.yml .travis.yml CHANGES.rst diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/jaraco.stream.egg-info/requires.txt new/jaraco.stream-3.0.0/jaraco.stream.egg-info/requires.txt --- old/jaraco.stream-2.0/jaraco.stream.egg-info/requires.txt 2019-01-01 17:59:23.000000000 +0100 +++ new/jaraco.stream-3.0.0/jaraco.stream.egg-info/requires.txt 2019-12-13 04:09:35.000000000 +0100 @@ -1,4 +1,3 @@ -six [docs] sphinx @@ -7,6 +6,8 @@ [testing] pytest!=3.7.3,>=3.5 -pytest-checkdocs +pytest-checkdocs>=1.2.3 pytest-flake8 +pytest-black-multipy +pytest-cov more_itertools diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/pyproject.toml new/jaraco.stream-3.0.0/pyproject.toml --- old/jaraco.stream-2.0/pyproject.toml 2019-01-01 17:59:06.000000000 +0100 +++ new/jaraco.stream-3.0.0/pyproject.toml 2019-12-13 04:09:09.000000000 +0100 @@ -1,3 +1,6 @@ [build-system] requires = ["setuptools>=34.4", "wheel", "setuptools_scm>=1.15"] build-backend = "setuptools.build_meta" + +[tool.black] +skip-string-normalization = true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/pytest.ini new/jaraco.stream-3.0.0/pytest.ini --- old/jaraco.stream-2.0/pytest.ini 2019-01-01 17:59:06.000000000 +0100 +++ new/jaraco.stream-3.0.0/pytest.ini 2019-12-13 04:09:09.000000000 +0100 @@ -1,11 +1,5 @@ [pytest] norecursedirs=dist build .tox .eggs -addopts=--doctest-modules --flake8 +addopts=--doctest-modules --flake8 --black --cov doctest_optionflags=ALLOW_UNICODE ELLIPSIS filterwarnings= - ignore:Possible nested set::pycodestyle:113 - ignore:Using or importing the ABCs::flake8:410 - # workaround for https://sourceforge.net/p/docutils/bugs/348/ - ignore:'U' mode is deprecated::docutils.io - # workaround for https://gitlab.com/pycqa/flake8/issues/275 - ignore:You passed a bytestring as `filenames`.::flake8 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/setup.cfg new/jaraco.stream-3.0.0/setup.cfg --- old/jaraco.stream-2.0/setup.cfg 2019-01-01 17:59:23.000000000 +0100 +++ new/jaraco.stream-3.0.0/setup.cfg 2019-12-13 04:09:35.923948500 +0100 @@ -13,22 +13,22 @@ Development Status :: 5 - Production/Stable Intended Audience :: Developers License :: OSI Approved :: MIT License - Programming Language :: Python :: 2.7 Programming Language :: Python :: 3 [options] packages = find: include_package_data = true -python_requires = >=2.7 +python_requires = >=3.6 install_requires = - six setup_requires = setuptools_scm >= 1.15.0 [options.extras_require] testing = pytest >= 3.5, !=3.7.3 - pytest-checkdocs + pytest-checkdocs >= 1.2.3 pytest-flake8 + pytest-black-multipy + pytest-cov more_itertools docs = diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/skeleton.md new/jaraco.stream-3.0.0/skeleton.md --- old/jaraco.stream-2.0/skeleton.md 2019-01-01 17:59:06.000000000 +0100 +++ new/jaraco.stream-3.0.0/skeleton.md 2019-12-13 04:09:09.000000000 +0100 @@ -10,6 +10,8 @@ The primary advantage to using an SCM for maintaining these techniques is that those tools help facilitate the merge between the template and its adopting projects. +Another advantage to using an SCM-managed approach is that tools like GitHub recognize that a change in the skeleton is the _same change_ across all projects that merge with that skeleton. Without the ancestry, with a traditional copy/paste approach, a [commit like this](https://github.com/jaraco/skeleton/commit/12eed1326e1bc26ce256e7b3f8cd8d3a5beab2d5) would produce notifications in the upstream project issue for each and every application, but because it's centralized, GitHub provides just the one notification when the change is added to the skeleton. + # Usage ## new projects @@ -48,7 +50,8 @@ - setuptools declarative configuration using setup.cfg - tox for running tests - A README.rst as reStructuredText with some popular badges, but with readthedocs and appveyor badges commented out -- A CHANGES.rst file intended for publishing release notes about the project. +- A CHANGES.rst file intended for publishing release notes about the project +- Use of [black](https://black.readthedocs.io/en/stable/) for code formatting (disabled on unsupported Python 3.5 and earlier) ## Packaging Conventions @@ -82,7 +85,7 @@ Other environments (invoked with `tox -e {name}`) supplied include: - - a `build-docs` environment to build the documentation + - a `docs` environment to build the documentation - a `release` environment to publish the package to PyPI A pytest.ini is included to define common options around running tests. In particular: @@ -95,18 +98,12 @@ Relies a .flake8 file to correct some default behaviors: -- allow tabs for indentation (legacy for jaraco projects) -- disable mutually incompatible rules W503 and W504. +- disable mutually incompatible rules W503 and W504 +- support for black format ## Continuous Integration -The project is pre-configured to run tests in [Travis-CI](https://travis-ci.org) (.travis.yml). Any new project must be enabled either through their web site or with the `travis enable` command. In addition to running tests, an additional deploy stage is configured to automatically release tagged commits. The username and password for PyPI must be configured for each project using the `travis` command and only after the travis project is created. As releases are cut with [twine](https://pypi.org/project/twine), the two values are supplied through the `TWINE_USERNAME` and `TWINE_PASSWORD`. To configure the latter as a secret, run the following command: - -``` -echo "TWINE_PASSWORD={password}" | travis encrypt -``` - -Or disable it in the CI definition and configure it through the web UI. +The project is pre-configured to run tests in [Travis-CI](https://travis-ci.org) (.travis.yml). Any new project must be enabled either through their web site or with the `travis enable` command. Features include: - test against Python 2 and 3 @@ -115,12 +112,26 @@ Also provided is a minimal template for running under Appveyor (Windows). +### Continuous Deployments + +In addition to running tests, an additional deploy stage is configured to automatically release tagged commits to PyPI using [API tokens](https://pypi.org/help/#apitoken). The release process expects an authorized token to be configured with Travis as the TWINE_PASSWORD environment variable. After the Travis project is created, configure the token through the web UI or with a command like the following (bash syntax): + +``` +TWINE_PASSWORD={token} travis env copy TWINE_PASSWORD +``` + ## Building Documentation -Documentation is automatically built by [Read the Docs](https://readthedocs.org) when the project is registered with it, by way of the .readthedocs.yml file. To test the docs build manually, a tox env may be invoked as `tox -e build-docs`. Both techniques rely on the dependencies declared in `setup.cfg/options.extras_require.docs`. +Documentation is automatically built by [Read the Docs](https://readthedocs.org) when the project is registered with it, by way of the .readthedocs.yml file. To test the docs build manually, a tox env may be invoked as `tox -e docs`. Both techniques rely on the dependencies declared in `setup.cfg/options.extras_require.docs`. In addition to building the sphinx docs scaffolded in `docs/`, the docs build a `history.html` file that first injects release dates and hyperlinks into the CHANGES.rst before incorporating it as history in the docs. ## Cutting releases By default, tagged commits are released through the continuous integration deploy stage. + +Releases may also be cut manually by invoking the tox environment `release` with the PyPI token set as the TWINE_PASSWORD: + +``` +TWINE_PASSWORD={token} tox -e release +``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jaraco.stream-2.0/tox.ini new/jaraco.stream-3.0.0/tox.ini --- old/jaraco.stream-2.0/tox.ini 2019-01-01 17:59:06.000000000 +0100 +++ new/jaraco.stream-3.0.0/tox.ini 2019-12-13 04:09:09.000000000 +0100 @@ -1,30 +1,41 @@ [tox] envlist = python -minversion = 2.4 +minversion = 3.2 +# https://github.com/jaraco/skeleton/issues/6 +tox_pip_extensions_ext_venv_update = true +# Ensure that a late version of pip is used even on tox-venv. +requires = + tox-pip-version>=0.0.6 + tox-venv + [testenv] deps = setuptools>=31.0.1 +pip_version = pip commands = pytest {posargs} usedevelop = True extras = testing -[testenv:build-docs] +[testenv:docs] extras = - docs - testing + docs + testing changedir = docs commands = - python -m sphinx . {toxinidir}/build/html + python -m sphinx . {toxinidir}/build/html [testenv:release] skip_install = True deps = pep517>=0.5 - # workaround for https://github.com/pypa/twine/issues/423 - git+https://github.com/pypa/twine - path.py + twine[keyring]>=1.13 + path +passenv = + TWINE_PASSWORD +setenv = + TWINE_USERNAME = {env:TWINE_USERNAME:__token__} commands = python -c "import path; path.Path('dist').rmtree_p()" python -m pep517.build .