Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-CherryPy for openSUSE:Factory checked in at 2022-08-03 21:16:29 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-CherryPy (Old) and /work/SRC/openSUSE:Factory/.python-CherryPy.new.1533 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-CherryPy" Wed Aug 3 21:16:29 2022 rev:31 rq:992333 version:18.8.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-CherryPy/python-CherryPy.changes 2021-10-25 15:17:13.045667530 +0200 +++ /work/SRC/openSUSE:Factory/.python-CherryPy.new.1533/python-CherryPy.changes 2022-08-03 21:16:37.863431527 +0200 @@ -1,0 +2,13 @@ +Tue Aug 2 11:32:54 UTC 2022 - Otto Hollmann <otto.hollm...@suse.com> + +- Update to 18.8.0 + * Dangerous characters received in a host header encoded using RFC 2047 are + now elided by default. Currently, dangerous characters are defined as CR + and LF. The original value is still available as + cherrypy.request.headers['Host'].raw if needed. +- Changes from v18.7.0 + * Drop support for Python 3.5. + * Fixed compatibility on Python 3.11. +- Fix URL in spec file: cherrypy.org -> cherrypy.dev + +------------------------------------------------------------------- Old: ---- CherryPy-18.6.1.tar.gz New: ---- CherryPy-18.8.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-CherryPy.spec ++++++ --- /var/tmp/diff_new_pack.nF9FUl/_old 2022-08-03 21:16:38.415432976 +0200 +++ /var/tmp/diff_new_pack.nF9FUl/_new 2022-08-03 21:16:38.419432987 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-CherryPy # -# Copyright (c) 2021 SUSE LLC +# Copyright (c) 2022 SUSE LLC # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -25,11 +25,11 @@ %define skip_python2 1 %{?!python_module:%define python_module() python-%{**} python3-%{**}} Name: python-CherryPy -Version: 18.6.1 +Version: 18.8.0 Release: 0 Summary: Object-Oriented HTTP framework License: BSD-3-Clause -URL: http://www.cherrypy.org +URL: https://www.cherrypy.dev Source: https://files.pythonhosted.org/packages/source/C/CherryPy/CherryPy-%{version}.tar.gz BuildRequires: %{python_module setuptools_scm} BuildRequires: %{python_module setuptools} @@ -45,7 +45,7 @@ BuildRequires: alts %else Requires(post): update-alternatives -Requires(postun): update-alternatives +Requires(postun):update-alternatives %endif Recommends: python-Routes >= 2.3.1 Recommends: python-flup ++++++ CherryPy-18.6.1.tar.gz -> CherryPy-18.8.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/.appveyor.yml new/CherryPy-18.8.0/.appveyor.yml --- old/CherryPy-18.6.1/.appveyor.yml 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/.appveyor.yml 2022-07-17 21:43:48.000000000 +0200 @@ -2,7 +2,6 @@ matrix: - PYTHON: "C:\\Python37-x64" - PYTHON: "C:\\Python36-x64" - - PYTHON: "C:\\Python35-x64" init: - "chcp 65001" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/.circleci/config.yml new/CherryPy-18.8.0/.circleci/config.yml --- old/CherryPy-18.6.1/.circleci/config.yml 2021-03-23 01:12:07.000000000 +0100 +++ new/CherryPy-18.8.0/.circleci/config.yml 2022-07-17 21:43:48.000000000 +0200 @@ -15,17 +15,17 @@ ' >> $BASH_ENV - run: |- - for py_ver in 3.7.0 3.6.4 3.5.4 pypy3.5-6.0.0 + for py_ver in 3.7.0 3.6.4 do pyenv install "$py_ver" & done wait - - run: pyenv global 3.7.0 3.6.4 3.5.4 pypy3.5-6.0.0 + - run: pyenv global 3.7.0 3.6.4 - run: python3 -m pip install --upgrade pip wheel - run: python3 -m pip install tox tox-pyenv - checkout - - run: tox -e py35,py36,py37 -- -p no:sugar # , pypy3 + - run: tox -e py36,py37 -- -p no:sugar - store_test_results: path: .test-results - store_artifacts: @@ -38,7 +38,7 @@ steps: - checkout - run: pip install tox - - run: tox -e py35,py36,py37 + - run: tox -e py36,py37 - store_test_results: path: .test-results - store_artifacts: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/.github/CONTRIBUTING.rst new/CherryPy-18.8.0/.github/CONTRIBUTING.rst --- old/CherryPy-18.6.1/.github/CONTRIBUTING.rst 2019-02-28 17:09:17.000000000 +0100 +++ new/CherryPy-18.8.0/.github/CONTRIBUTING.rst 2022-06-22 02:20:54.000000000 +0200 @@ -28,5 +28,5 @@ Also ---- -See `Contributing <https://docs.cherrypy.org/en/latest/contribute.html>`_ in +See `Contributing <https://docs.cherrypy.dev/en/latest/contribute.html>`_ in the docs. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/.github/SUPPORT.rst new/CherryPy-18.8.0/.github/SUPPORT.rst --- old/CherryPy-18.6.1/.github/SUPPORT.rst 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/.github/SUPPORT.rst 2022-06-22 02:20:54.000000000 +0200 @@ -9,7 +9,7 @@ ----------------- If you have a question and cannot find an answer for it in issues or the -the `documentation <http://docs.cherrypy.org/en/latest/>`__, `please +the `documentation <http://docs.cherrypy.dev/en/latest/>`__, `please create an issue <https://github.com/cherrypy/cherrypy/issues/new>`__. Questions and their answers have great value for the community, and a diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/.github/patchback.yml new/CherryPy-18.8.0/.github/patchback.yml --- old/CherryPy-18.6.1/.github/patchback.yml 1970-01-01 01:00:00.000000000 +0100 +++ new/CherryPy-18.8.0/.github/patchback.yml 2022-06-22 02:20:54.000000000 +0200 @@ -0,0 +1,5 @@ +--- +backport_branch_prefix: patchback/backports/ +backport_label_prefix: backport- +target_branch_prefix: maint/ +... diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/.pre-commit-config.yaml new/CherryPy-18.8.0/.pre-commit-config.yaml --- old/CherryPy-18.6.1/.pre-commit-config.yaml 2019-11-03 15:14:38.000000000 +0100 +++ new/CherryPy-18.8.0/.pre-commit-config.yaml 2022-07-17 22:36:36.000000000 +0200 @@ -1,5 +1,5 @@ repos: -- repo: git://github.com/pre-commit/pre-commit-hooks +- repo: https://github.com/pre-commit/pre-commit-hooks.git rev: v1.1.1 hooks: - id: trailing-whitespace @@ -28,7 +28,7 @@ exclude: cherrypy/test/test.pem - id: requirements-txt-fixer -- repo: git://github.com/chewse/pre-commit-mirrors-pydocstyle +- repo: https://github.com/chewse/pre-commit-mirrors-pydocstyle.git rev: v2.1.1 hooks: - id: pydocstyle @@ -50,12 +50,21 @@ test|tutorial ) -- repo: git://github.com/Lucas-C/pre-commit-hooks - rev: v1.1.1 +- repo: https://github.com/Lucas-C/pre-commit-hooks.git + rev: v1.1.12 hooks: - id: remove-tabs -- repo: git://github.com/Lucas-C/pre-commit-hooks-lxml - rev: v1.0.2 +- repo: https://github.com/Lucas-C/pre-commit-hooks-lxml.git + rev: v1.1.0 hooks: - id: forbid-html-img-without-alt-text + +- repo: https://github.com/adrienverge/yamllint.git + rev: v1.27.1 + hooks: + - id: yamllint + files: \.(yaml|yml)$ + types: [file, yaml] + args: + - --strict diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/.readthedocs.yml new/CherryPy-18.8.0/.readthedocs.yml --- old/CherryPy-18.6.1/.readthedocs.yml 2019-02-28 17:09:17.000000000 +0100 +++ new/CherryPy-18.8.0/.readthedocs.yml 2022-07-17 22:36:36.000000000 +0200 @@ -3,6 +3,6 @@ python: version: 3.6 extra_requirements: - - docs - - testing + - docs + - testing pip_install: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/.travis.yml new/CherryPy-18.8.0/.travis.yml --- old/CherryPy-18.6.1/.travis.yml 2021-03-23 01:12:07.000000000 +0100 +++ new/CherryPy-18.8.0/.travis.yml 2022-06-22 02:20:54.000000000 +0200 @@ -73,15 +73,9 @@ python: 3.9 after_failure: skip python: -- 3.5 - 3.7-dev -- &pypy3 pypy3.5-5.10.0 jobs: fast_finish: true - allow_failures: - # TODO: fix tests - - python: *pypy3 - - env: TOXENV=pre-commit-pep257 include: - <<: *lint_python_base env: TOXENV=pre-commit @@ -105,12 +99,6 @@ - <<: *pure_python_base_priority python: nightly - <<: *osx_python_base - python: 3.5 - env: - - PYTHON_VERSION=3.5.5 - - *env_pyenv - - *env_path - - <<: *osx_python_base python: *mainstream_python env: - PYTHON_VERSION=3.6.5 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/.yamllint new/CherryPy-18.8.0/.yamllint --- old/CherryPy-18.6.1/.yamllint 2021-03-23 01:12:07.000000000 +0100 +++ new/CherryPy-18.8.0/.yamllint 2022-07-17 22:36:36.000000000 +0200 @@ -1,2 +1,4 @@ -indentation: - indent-sequences: false +rules: + indentation: + level: error + indent-sequences: false diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/CHANGES.rst new/CherryPy-18.8.0/CHANGES.rst --- old/CherryPy-18.6.1/CHANGES.rst 2021-07-04 00:29:29.000000000 +0200 +++ new/CherryPy-18.8.0/CHANGES.rst 2022-07-17 22:36:36.000000000 +0200 @@ -1,3 +1,18 @@ +v18.8.0 +------- + +* :issue:`1974`: Dangerous characters received in a host header + encoded using RFC 2047 are now elided by default. Currently, + dangerous characters are defined as CR and LF. The original + value is still available as ``cherrypy.request.headers['Host'].raw`` + if needed. + +v18.7.0 +------- + +* :pr:`1923`: Drop support for Python 3.5. +* :pr:`1945`: Fixed compatibility on Python 3.11. + v18.6.1 ------- diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/CherryPy.egg-info/PKG-INFO new/CherryPy-18.8.0/CherryPy.egg-info/PKG-INFO --- old/CherryPy-18.6.1/CherryPy.egg-info/PKG-INFO 2021-07-04 00:33:32.000000000 +0200 +++ new/CherryPy-18.8.0/CherryPy.egg-info/PKG-INFO 2022-07-17 22:39:51.000000000 +0200 @@ -1,19 +1,17 @@ Metadata-Version: 2.1 Name: CherryPy -Version: 18.6.1 +Version: 18.8.0 Summary: Object-Oriented HTTP framework -Home-page: https://www.cherrypy.org +Home-page: https://www.cherrypy.dev Author: CherryPy Team -Author-email: t...@cherrypy.org -License: UNKNOWN +Author-email: t...@cherrypy.dev Project-URL: CI: AppVeyor, https://ci.appveyor.com/project/cherrypy/cherrypy Project-URL: CI: Travis, https://travis-ci.org/cherrypy/cherrypy Project-URL: CI: Circle, https://circleci.com/gh/cherrypy/cherrypy -Project-URL: Docs: RTD, https://docs.cherrypy.org +Project-URL: Docs: RTD, https://docs.cherrypy.dev Project-URL: GitHub: issues, https://github.com/cherrypy/cherrypy/issues Project-URL: GitHub: repo, https://github.com/cherrypy/cherrypy Project-URL: Tidelift: funding, https://tidelift.com/subscription/pkg/pypi-cherrypy?utm_source=pypi-cherrypy&utm_medium=referral&utm_campaign=pypi -Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Web Environment Classifier: Intended Audience :: Developers @@ -23,10 +21,6 @@ Classifier: License :: OSI Approved :: BSD License Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: Implementation Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: Jython @@ -38,7 +32,7 @@ Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Server Classifier: Topic :: Software Development :: Libraries :: Application Frameworks -Requires-Python: >=3.5 +Requires-Python: >=3.6 Provides-Extra: docs Provides-Extra: json Provides-Extra: routes_dispatcher @@ -48,6 +42,10 @@ Provides-Extra: xcgi License-File: LICENSE.md +.. image:: https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner-direct.svg + :target: https://github.com/vshymanskyy/StandWithUkraine/blob/main/docs/README.md + :alt: SWUbanner + .. image:: https://img.shields.io/pypi/v/cherrypy.svg :target: https://pypi.org/project/cherrypy @@ -64,7 +62,7 @@ .. image:: https://readthedocs.org/projects/cherrypy/badge/?version=latest - :target: https://docs.cherrypy.org/en/latest/?badge=latest + :target: https://docs.cherrypy.dev/en/latest/?badge=latest .. image:: https://img.shields.io/badge/StackOverflow-CherryPy-blue.svg :target: https://stackoverflow.com/questions/tagged/cheroot+or+cherrypy @@ -101,7 +99,7 @@ :target: https://codecov.io/gh/cherrypy/cherrypy :alt: codecov -Welcome to the GitHub repository of `CherryPy <https://cherrypy.org/>`_! +Welcome to the GitHub repository of `CherryPy <https://cherrypy.dev>`_! CherryPy is a pythonic, object-oriented HTTP framework. @@ -134,7 +132,7 @@ While CherryPy is one of the easiest and most intuitive frameworks out there, the prerequisite for understanding the `CherryPy -documentation <https://docs.cherrypy.org/en/latest/>`_ is that you have +documentation <https://docs.cherrypy.dev>`_ is that you have a general understanding of Python and web development. Additionally: @@ -145,7 +143,7 @@ If the docs are insufficient to address your needs, the CherryPy community has several `avenues for support -<https://docs.cherrypy.org/en/latest/support.html>`_. +<https://docs.cherrypy.dev/en/latest/support.html>`_. For Enterprise -------------- @@ -162,8 +160,6 @@ ------------ Please follow the `contribution guidelines -<https://docs.cherrypy.org/en/latest/contribute.html>`_. +<https://docs.cherrypy.dev/en/latest/contribute.html>`_. And by all means, absorb the `Zen of CherryPy <https://github.com/cherrypy/cherrypy/wiki/The-Zen-of-CherryPy>`_. - - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/CherryPy.egg-info/SOURCES.txt new/CherryPy-18.8.0/CherryPy.egg-info/SOURCES.txt --- old/CherryPy-18.6.1/CherryPy.egg-info/SOURCES.txt 2021-07-04 00:33:32.000000000 +0200 +++ new/CherryPy-18.8.0/CherryPy.egg-info/SOURCES.txt 2022-07-17 22:39:51.000000000 +0200 @@ -25,6 +25,7 @@ .github/PULL_REQUEST_TEMPLATE.md .github/SUPPORT.rst .github/config.yml +.github/patchback.yml .test-results/pytest/.gitignore CherryPy.egg-info/PKG-INFO CherryPy.egg-info/SOURCES.txt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/CherryPy.egg-info/entry_points.txt new/CherryPy-18.8.0/CherryPy.egg-info/entry_points.txt --- old/CherryPy-18.6.1/CherryPy.egg-info/entry_points.txt 2021-07-04 00:33:32.000000000 +0200 +++ new/CherryPy-18.8.0/CherryPy.egg-info/entry_points.txt 2022-07-17 22:39:51.000000000 +0200 @@ -1,3 +1,2 @@ [console_scripts] cherryd = cherrypy.__main__:run - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/LICENSE.md new/CherryPy-18.8.0/LICENSE.md --- old/CherryPy-18.6.1/LICENSE.md 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/LICENSE.md 2022-07-17 21:43:48.000000000 +0200 @@ -1,4 +1,4 @@ -Copyright ?? 2004-2019, CherryPy Team (t...@cherrypy.org) +Copyright ?? 2004-2019, CherryPy Team (t...@cherrypy.dev) All rights reserved. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/PKG-INFO new/CherryPy-18.8.0/PKG-INFO --- old/CherryPy-18.6.1/PKG-INFO 2021-07-04 00:33:32.356855900 +0200 +++ new/CherryPy-18.8.0/PKG-INFO 2022-07-17 22:39:51.372314200 +0200 @@ -1,19 +1,17 @@ Metadata-Version: 2.1 Name: CherryPy -Version: 18.6.1 +Version: 18.8.0 Summary: Object-Oriented HTTP framework -Home-page: https://www.cherrypy.org +Home-page: https://www.cherrypy.dev Author: CherryPy Team -Author-email: t...@cherrypy.org -License: UNKNOWN +Author-email: t...@cherrypy.dev Project-URL: CI: AppVeyor, https://ci.appveyor.com/project/cherrypy/cherrypy Project-URL: CI: Travis, https://travis-ci.org/cherrypy/cherrypy Project-URL: CI: Circle, https://circleci.com/gh/cherrypy/cherrypy -Project-URL: Docs: RTD, https://docs.cherrypy.org +Project-URL: Docs: RTD, https://docs.cherrypy.dev Project-URL: GitHub: issues, https://github.com/cherrypy/cherrypy/issues Project-URL: GitHub: repo, https://github.com/cherrypy/cherrypy Project-URL: Tidelift: funding, https://tidelift.com/subscription/pkg/pypi-cherrypy?utm_source=pypi-cherrypy&utm_medium=referral&utm_campaign=pypi -Platform: UNKNOWN Classifier: Development Status :: 5 - Production/Stable Classifier: Environment :: Web Environment Classifier: Intended Audience :: Developers @@ -23,10 +21,6 @@ Classifier: License :: OSI Approved :: BSD License Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 -Classifier: Programming Language :: Python :: 3.5 -Classifier: Programming Language :: Python :: 3.6 -Classifier: Programming Language :: Python :: 3.7 -Classifier: Programming Language :: Python :: 3.8 Classifier: Programming Language :: Python :: Implementation Classifier: Programming Language :: Python :: Implementation :: CPython Classifier: Programming Language :: Python :: Implementation :: Jython @@ -38,7 +32,7 @@ Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Server Classifier: Topic :: Software Development :: Libraries :: Application Frameworks -Requires-Python: >=3.5 +Requires-Python: >=3.6 Provides-Extra: docs Provides-Extra: json Provides-Extra: routes_dispatcher @@ -48,6 +42,10 @@ Provides-Extra: xcgi License-File: LICENSE.md +.. image:: https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner-direct.svg + :target: https://github.com/vshymanskyy/StandWithUkraine/blob/main/docs/README.md + :alt: SWUbanner + .. image:: https://img.shields.io/pypi/v/cherrypy.svg :target: https://pypi.org/project/cherrypy @@ -64,7 +62,7 @@ .. image:: https://readthedocs.org/projects/cherrypy/badge/?version=latest - :target: https://docs.cherrypy.org/en/latest/?badge=latest + :target: https://docs.cherrypy.dev/en/latest/?badge=latest .. image:: https://img.shields.io/badge/StackOverflow-CherryPy-blue.svg :target: https://stackoverflow.com/questions/tagged/cheroot+or+cherrypy @@ -101,7 +99,7 @@ :target: https://codecov.io/gh/cherrypy/cherrypy :alt: codecov -Welcome to the GitHub repository of `CherryPy <https://cherrypy.org/>`_! +Welcome to the GitHub repository of `CherryPy <https://cherrypy.dev>`_! CherryPy is a pythonic, object-oriented HTTP framework. @@ -134,7 +132,7 @@ While CherryPy is one of the easiest and most intuitive frameworks out there, the prerequisite for understanding the `CherryPy -documentation <https://docs.cherrypy.org/en/latest/>`_ is that you have +documentation <https://docs.cherrypy.dev>`_ is that you have a general understanding of Python and web development. Additionally: @@ -145,7 +143,7 @@ If the docs are insufficient to address your needs, the CherryPy community has several `avenues for support -<https://docs.cherrypy.org/en/latest/support.html>`_. +<https://docs.cherrypy.dev/en/latest/support.html>`_. For Enterprise -------------- @@ -162,8 +160,6 @@ ------------ Please follow the `contribution guidelines -<https://docs.cherrypy.org/en/latest/contribute.html>`_. +<https://docs.cherrypy.dev/en/latest/contribute.html>`_. And by all means, absorb the `Zen of CherryPy <https://github.com/cherrypy/cherrypy/wiki/The-Zen-of-CherryPy>`_. - - diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/README.rst new/CherryPy-18.8.0/README.rst --- old/CherryPy-18.6.1/README.rst 2021-07-03 23:52:38.000000000 +0200 +++ new/CherryPy-18.8.0/README.rst 2022-07-17 21:43:48.000000000 +0200 @@ -1,3 +1,7 @@ +.. image:: https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner-direct.svg + :target: https://github.com/vshymanskyy/StandWithUkraine/blob/main/docs/README.md + :alt: SWUbanner + .. image:: https://img.shields.io/pypi/v/cherrypy.svg :target: https://pypi.org/project/cherrypy @@ -14,7 +18,7 @@ .. image:: https://readthedocs.org/projects/cherrypy/badge/?version=latest - :target: https://docs.cherrypy.org/en/latest/?badge=latest + :target: https://docs.cherrypy.dev/en/latest/?badge=latest .. image:: https://img.shields.io/badge/StackOverflow-CherryPy-blue.svg :target: https://stackoverflow.com/questions/tagged/cheroot+or+cherrypy @@ -51,7 +55,7 @@ :target: https://codecov.io/gh/cherrypy/cherrypy :alt: codecov -Welcome to the GitHub repository of `CherryPy <https://cherrypy.org/>`_! +Welcome to the GitHub repository of `CherryPy <https://cherrypy.dev>`_! CherryPy is a pythonic, object-oriented HTTP framework. @@ -84,7 +88,7 @@ While CherryPy is one of the easiest and most intuitive frameworks out there, the prerequisite for understanding the `CherryPy -documentation <https://docs.cherrypy.org/en/latest/>`_ is that you have +documentation <https://docs.cherrypy.dev>`_ is that you have a general understanding of Python and web development. Additionally: @@ -95,7 +99,7 @@ If the docs are insufficient to address your needs, the CherryPy community has several `avenues for support -<https://docs.cherrypy.org/en/latest/support.html>`_. +<https://docs.cherrypy.dev/en/latest/support.html>`_. For Enterprise -------------- @@ -112,6 +116,6 @@ ------------ Please follow the `contribution guidelines -<https://docs.cherrypy.org/en/latest/contribute.html>`_. +<https://docs.cherrypy.dev/en/latest/contribute.html>`_. And by all means, absorb the `Zen of CherryPy <https://github.com/cherrypy/cherrypy/wiki/The-Zen-of-CherryPy>`_. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/_cpdispatch.py new/CherryPy-18.8.0/cherrypy/_cpdispatch.py --- old/CherryPy-18.6.1/cherrypy/_cpdispatch.py 2019-03-26 22:05:39.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/_cpdispatch.py 2022-07-17 21:43:48.000000000 +0200 @@ -206,12 +206,8 @@ def test_callable_spec(callable, args, kwargs): # noqa: F811 return None else: - getargspec = inspect.getargspec - # Python 3 requires using getfullargspec if - # keyword-only arguments are present - if hasattr(inspect, 'getfullargspec'): - def getargspec(callable): - return inspect.getfullargspec(callable)[:4] + def getargspec(callable): + return inspect.getfullargspec(callable)[:4] class LateParamPageHandler(PageHandler): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/_cperror.py new/CherryPy-18.8.0/cherrypy/_cperror.py --- old/CherryPy-18.6.1/cherrypy/_cperror.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/_cperror.py 2022-07-17 21:43:48.000000000 +0200 @@ -466,7 +466,7 @@ <pre id="traceback">%(traceback)s</pre> <div id="powered_by"> <span> - Powered by <a href="http://www.cherrypy.org">CherryPy %(version)s</a> + Powered by <a href="http://www.cherrypy.dev">CherryPy %(version)s</a> </span> </div> </body> @@ -532,7 +532,8 @@ return result else: # Load the template from this path. - template = io.open(error_page, newline='').read() + with io.open(error_page, newline='') as f: + template = f.read() except Exception: e = _format_exception(*_exc_info())[-1] m = kwargs['message'] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/_cpmodpy.py new/CherryPy-18.8.0/cherrypy/_cpmodpy.py --- old/CherryPy-18.6.1/cherrypy/_cpmodpy.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/_cpmodpy.py 2022-07-17 21:43:48.000000000 +0200 @@ -339,11 +339,8 @@ } mpconf = os.path.join(os.path.dirname(__file__), 'cpmodpy.conf') - f = open(mpconf, 'wb') - try: + with open(mpconf, 'wb') as f: f.write(conf_data) - finally: - f.close() response = read_process(self.apache_path, '-k start -f %s' % mpconf) self.ready = True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/_cprequest.py new/CherryPy-18.8.0/cherrypy/_cprequest.py --- old/CherryPy-18.6.1/cherrypy/_cprequest.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/_cprequest.py 2022-07-17 22:36:36.000000000 +0200 @@ -169,7 +169,7 @@ def response_namespace(k, v): """Attach response attributes declared in config.""" # Provides config entries to set default response headers - # http://cherrypy.org/ticket/889 + # http://cherrypy.dev/ticket/889 if k[:8] == 'headers.': cherrypy.serving.response.headers[k.split('.', 1)[1]] = v else: @@ -252,7 +252,7 @@ The query component of the Request-URI, a string of information to be interpreted by the resource. The query portion of a URI follows the path component, and is separated by a '?'. For example, the URI - 'http://www.cherrypy.org/wiki?a=3&b=4' has the query component, + 'http://www.cherrypy.dev/wiki?a=3&b=4' has the query component, 'a=3&b=4'.""" query_string_encoding = 'utf8' @@ -742,6 +742,9 @@ if self.protocol >= (1, 1): msg = "HTTP/1.1 requires a 'Host' request header." raise cherrypy.HTTPError(400, msg) + else: + headers['Host'] = httputil.SanitizedHost(dict.get(headers, 'Host')) + host = dict.get(headers, 'Host') if not host: host = self.local.name or self.local.ip diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/lib/auth_digest.py new/CherryPy-18.8.0/cherrypy/lib/auth_digest.py --- old/CherryPy-18.6.1/cherrypy/lib/auth_digest.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/lib/auth_digest.py 2022-07-17 21:43:48.000000000 +0200 @@ -101,13 +101,12 @@ """ def get_ha1(realm, username): result = None - f = open(filename, 'r') - for line in f: - u, r, ha1 = line.rstrip().split(':') - if u == username and r == realm: - result = ha1 - break - f.close() + with open(filename, 'r') as f: + for line in f: + u, r, ha1 = line.rstrip().split(':') + if u == username and r == realm: + result = ha1 + break return result return get_ha1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/lib/covercp.py new/CherryPy-18.8.0/cherrypy/lib/covercp.py --- old/CherryPy-18.6.1/cherrypy/lib/covercp.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/lib/covercp.py 2022-07-17 21:43:48.000000000 +0200 @@ -334,9 +334,10 @@ yield '</body></html>' def annotated_file(self, filename, statements, excluded, missing): - source = open(filename, 'r') + with open(filename, 'r') as source: + lines = source.readlines() buffer = [] - for lineno, line in enumerate(source.readlines()): + for lineno, line in enumerate(lines): lineno += 1 line = line.strip('\n\r') empty_the_buffer = True diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/lib/httputil.py new/CherryPy-18.8.0/cherrypy/lib/httputil.py --- old/CherryPy-18.6.1/cherrypy/lib/httputil.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/lib/httputil.py 2022-07-17 22:36:36.000000000 +0200 @@ -516,3 +516,33 @@ def __repr__(self): return 'httputil.Host(%r, %r, %r)' % (self.ip, self.port, self.name) + + +class SanitizedHost(str): + r""" + Wraps a raw host header received from the network in + a sanitized version that elides dangerous characters. + + >>> SanitizedHost('foo\nbar') + 'foobar' + >>> SanitizedHost('foo\nbar').raw + 'foo\nbar' + + A SanitizedInstance is only returned if sanitization was performed. + + >>> isinstance(SanitizedHost('foobar'), SanitizedHost) + False + """ + dangerous = re.compile(r'[\n\r]') + + def __new__(cls, raw): + sanitized = cls._sanitize(raw) + if sanitized == raw: + return raw + instance = super().__new__(cls, sanitized) + instance.raw = raw + return instance + + @classmethod + def _sanitize(cls, raw): + return cls.dangerous.sub('', raw) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/lib/reprconf.py new/CherryPy-18.8.0/cherrypy/lib/reprconf.py --- old/CherryPy-18.6.1/cherrypy/lib/reprconf.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/lib/reprconf.py 2022-07-17 21:43:48.000000000 +0200 @@ -163,11 +163,8 @@ # fp = open(filename) # except IOError: # continue - fp = open(filename) - try: + with open(filename) as fp: self._read(fp, filename) - finally: - fp.close() def as_dict(self, raw=False, vars=None): """Convert an INI file to a dictionary""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/lib/sessions.py new/CherryPy-18.8.0/cherrypy/lib/sessions.py --- old/CherryPy-18.6.1/cherrypy/lib/sessions.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/lib/sessions.py 2022-07-17 21:43:48.000000000 +0200 @@ -516,11 +516,8 @@ if path is None: path = self._get_file_path() try: - f = open(path, 'rb') - try: + with open(path, 'rb') as f: return pickle.load(f) - finally: - f.close() except (IOError, EOFError): e = sys.exc_info()[1] if self.debug: @@ -531,11 +528,8 @@ def _save(self, expiration_time): assert self.locked, ('The session was saved without being locked. ' "Check your tools' priority levels.") - f = open(self._get_file_path(), 'wb') - try: + with open(self._get_file_path(), 'wb') as f: pickle.dump((self._data, expiration_time), f, self.pickle_protocol) - finally: - f.close() def _delete(self): assert self.locked, ('The session deletion without being locked. ' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/process/plugins.py new/CherryPy-18.8.0/cherrypy/process/plugins.py --- old/CherryPy-18.6.1/cherrypy/process/plugins.py 2021-07-03 23:52:38.000000000 +0200 +++ new/CherryPy-18.8.0/cherrypy/process/plugins.py 2022-07-17 21:43:48.000000000 +0200 @@ -436,7 +436,8 @@ if self.finalized: self.bus.log('PID %r already written to %r.' % (pid, self.pidfile)) else: - open(self.pidfile, 'wb').write(ntob('%s\n' % pid, 'utf8')) + with open(self.pidfile, 'wb') as f: + f.write(ntob('%s\n' % pid, 'utf8')) self.bus.log('PID %r written to %r.' % (pid, self.pidfile)) self.finalized = True start.priority = 70 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/test/helper.py new/CherryPy-18.8.0/cherrypy/test/helper.py --- old/CherryPy-18.6.1/cherrypy/test/helper.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/test/helper.py 2022-07-17 21:43:48.000000000 +0200 @@ -505,7 +505,8 @@ def get_pid(self): if self.daemonize: - return int(open(self.pid_file, 'rb').read()) + with open(self.pid_file, 'rb') as f: + return int(f.read()) return self._proc.pid def join(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/test/logtest.py new/CherryPy-18.8.0/cherrypy/test/logtest.py --- old/CherryPy-18.6.1/cherrypy/test/logtest.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/test/logtest.py 2022-07-17 21:43:48.000000000 +0200 @@ -97,7 +97,8 @@ def emptyLog(self): """Overwrite self.logfile with 0 bytes.""" - open(self.logfile, 'wb').write('') + with open(self.logfile, 'wb') as f: + f.write('') def markLog(self, key=None): """Insert a marker line into the log and set self.lastmarker.""" @@ -105,10 +106,11 @@ key = str(time.time()) self.lastmarker = key - open(self.logfile, 'ab+').write( - b'%s%s\n' - % (self.markerPrefix, key.encode('utf-8')) - ) + with open(self.logfile, 'ab+') as f: + f.write( + b'%s%s\n' + % (self.markerPrefix, key.encode('utf-8')) + ) def _read_marked_region(self, marker=None): """Return lines from self.logfile in the marked region. @@ -122,20 +124,23 @@ logfile = self.logfile marker = marker or self.lastmarker if marker is None: - return open(logfile, 'rb').readlines() + with open(logfile, 'rb') as f: + return f.readlines() if isinstance(marker, str): marker = marker.encode('utf-8') data = [] in_region = False - for line in open(logfile, 'rb'): - if in_region: - if line.startswith(self.markerPrefix) and marker not in line: - break - else: - data.append(line) - elif marker in line: - in_region = True + with open(logfile, 'rb') as f: + for line in f: + if in_region: + if (line.startswith(self.markerPrefix) + and marker not in line): + break + else: + data.append(line) + elif marker in line: + in_region = True return data def assertInLog(self, line, marker=None): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/test/modfastcgi.py new/CherryPy-18.8.0/cherrypy/test/modfastcgi.py --- old/CherryPy-18.6.1/cherrypy/test/modfastcgi.py 2019-02-28 17:09:17.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/test/modfastcgi.py 2022-07-17 21:43:48.000000000 +0200 @@ -14,7 +14,7 @@ 1. Apache processes Range headers automatically; CherryPy's truncated output is then truncated again by Apache. See test_core.testRanges. - This was worked around in http://www.cherrypy.org/changeset/1319. + This was worked around in http://www.cherrypy.dev/changeset/1319. 2. Apache does not allow custom HTTP methods like CONNECT as per the spec. See test_core.testHTTPMethods. 3. Max request header and body settings do not work with Apache. @@ -112,15 +112,12 @@ fcgiconf = os.path.join(curdir, fcgiconf) # Write the Apache conf file. - f = open(fcgiconf, 'wb') - try: + with open(fcgiconf, 'wb') as f: server = repr(os.path.join(curdir, 'fastcgi.pyc'))[1:-1] output = self.template % {'port': self.port, 'root': curdir, 'server': server} output = output.replace('\r\n', '\n') f.write(output) - finally: - f.close() result = read_process(APACHE_PATH, '-k start -f %s' % fcgiconf) if result: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/test/modfcgid.py new/CherryPy-18.8.0/cherrypy/test/modfcgid.py --- old/CherryPy-18.6.1/cherrypy/test/modfcgid.py 2019-02-28 17:09:17.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/test/modfcgid.py 2022-07-17 21:43:48.000000000 +0200 @@ -14,7 +14,7 @@ 1. Apache processes Range headers automatically; CherryPy's truncated output is then truncated again by Apache. See test_core.testRanges. - This was worked around in http://www.cherrypy.org/changeset/1319. + This was worked around in http://www.cherrypy.dev/changeset/1319. 2. Apache does not allow custom HTTP methods like CONNECT as per the spec. See test_core.testHTTPMethods. 3. Max request header and body settings do not work with Apache. @@ -101,15 +101,12 @@ fcgiconf = os.path.join(curdir, fcgiconf) # Write the Apache conf file. - f = open(fcgiconf, 'wb') - try: + with open(fcgiconf, 'wb') as f: server = repr(os.path.join(curdir, 'fastcgi.pyc'))[1:-1] output = self.template % {'port': self.port, 'root': curdir, 'server': server} output = ntob(output.replace('\r\n', '\n')) f.write(output) - finally: - f.close() result = read_process(APACHE_PATH, '-k start -f %s' % fcgiconf) if result: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/test/modpy.py new/CherryPy-18.8.0/cherrypy/test/modpy.py --- old/CherryPy-18.6.1/cherrypy/test/modpy.py 2019-02-28 17:09:17.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/test/modpy.py 2022-07-17 21:43:48.000000000 +0200 @@ -15,7 +15,7 @@ 1. Apache processes Range headers automatically; CherryPy's truncated output is then truncated again by Apache. See test_core.testRanges. - This was worked around in http://www.cherrypy.org/changeset/1319. + This was worked around in http://www.cherrypy.dev/changeset/1319. 2. Apache does not allow custom HTTP methods like CONNECT as per the spec. See test_core.testHTTPMethods. 3. Max request header and body settings do not work with Apache. @@ -107,13 +107,10 @@ if not os.path.isabs(mpconf): mpconf = os.path.join(curdir, mpconf) - f = open(mpconf, 'wb') - try: + with open(mpconf, 'wb') as f: f.write(self.template % {'port': self.port, 'modulename': modulename, 'host': self.host}) - finally: - f.close() result = read_process(APACHE_PATH, '-k start -f %s' % mpconf) if result: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/test/modwsgi.py new/CherryPy-18.8.0/cherrypy/test/modwsgi.py --- old/CherryPy-18.6.1/cherrypy/test/modwsgi.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/test/modwsgi.py 2022-07-17 21:43:48.000000000 +0200 @@ -11,7 +11,7 @@ 1. Apache processes Range headers automatically; CherryPy's truncated output is then truncated again by Apache. See test_core.testRanges. - This was worked around in http://www.cherrypy.org/changeset/1319. + This was worked around in http://www.cherrypy.dev/changeset/1319. 2. Apache does not allow custom HTTP methods like CONNECT as per the spec. See test_core.testHTTPMethods. 3. Max request header and body settings do not work with Apache. @@ -109,14 +109,11 @@ if not os.path.isabs(mpconf): mpconf = os.path.join(curdir, mpconf) - f = open(mpconf, 'wb') - try: + with open(mpconf, 'wb') as f: output = (self.template % {'port': self.port, 'testmod': modulename, 'curdir': curdir}) f.write(output) - finally: - f.close() result = read_process(APACHE_PATH, '-k start -f %s' % mpconf) if result: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/test/test_auth_basic.py new/CherryPy-18.8.0/cherrypy/test/test_auth_basic.py --- old/CherryPy-18.6.1/cherrypy/test/test_auth_basic.py 2019-02-28 17:09:17.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/test/test_auth_basic.py 2022-07-17 21:43:48.000000000 +0200 @@ -1,4 +1,4 @@ -# This file is part of CherryPy <http://www.cherrypy.org/> +# This file is part of CherryPy <http://www.cherrypy.dev/> # -*- coding: utf-8 -*- # vim:ts=4:sw=4:expandtab:fileencoding=utf-8 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/test/test_auth_digest.py new/CherryPy-18.8.0/cherrypy/test/test_auth_digest.py --- old/CherryPy-18.6.1/cherrypy/test/test_auth_digest.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/test/test_auth_digest.py 2022-07-17 21:43:48.000000000 +0200 @@ -1,4 +1,4 @@ -# This file is part of CherryPy <http://www.cherrypy.org/> +# This file is part of CherryPy <http://www.cherrypy.dev/> # -*- coding: utf-8 -*- # vim:ts=4:sw=4:expandtab:fileencoding=utf-8 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/test/test_core.py new/CherryPy-18.8.0/cherrypy/test/test_core.py --- old/CherryPy-18.6.1/cherrypy/test/test_core.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/test/test_core.py 2022-07-17 21:43:48.000000000 +0200 @@ -586,9 +586,8 @@ def testFavicon(self): # favicon.ico is served by staticfile. icofilename = os.path.join(localDir, '../favicon.ico') - icofile = open(icofilename, 'rb') - data = icofile.read() - icofile.close() + with open(icofilename, 'rb') as icofile: + data = icofile.read() self.getPage('/favicon.ico') self.assertBody(data) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/test/test_encoding.py new/CherryPy-18.8.0/cherrypy/test/test_encoding.py --- old/CherryPy-18.6.1/cherrypy/test/test_encoding.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/test/test_encoding.py 2022-07-17 21:43:48.000000000 +0200 @@ -46,7 +46,7 @@ # any part which is unicode (even ascii), the response # should not fail. cherrypy.response.cookie['candy'] = 'bar' - cherrypy.response.cookie['candy']['domain'] = 'cherrypy.org' + cherrypy.response.cookie['candy']['domain'] = 'cherrypy.dev' cherrypy.response.headers[ 'Some-Header'] = 'My d\xc3\xb6g has fleas' cherrypy.response.headers[ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/test/test_logging.py new/CherryPy-18.8.0/cherrypy/test/test_logging.py --- old/CherryPy-18.6.1/cherrypy/test/test_logging.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/test/test_logging.py 2022-07-17 21:43:48.000000000 +0200 @@ -113,7 +113,7 @@ resp = requests.get( 'http://%s:%s/as_string' % (host, port), headers={ - 'Referer': 'http://www.cherrypy.org/', + 'Referer': 'http://www.cherrypy.dev/', 'User-Agent': 'Mozilla/5.0', }, ) @@ -135,7 +135,7 @@ log_tracker.assertLog( -1, '] "GET /as_string HTTP/1.1" 200 %s ' - '"http://www.cherrypy.org/" "Mozilla/5.0"' + '"http://www.cherrypy.dev/" "Mozilla/5.0"' % content_length, ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/test/test_request_obj.py new/CherryPy-18.8.0/cherrypy/test/test_request_obj.py --- old/CherryPy-18.6.1/cherrypy/test/test_request_obj.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/test/test_request_obj.py 2022-07-17 22:36:36.000000000 +0200 @@ -342,7 +342,7 @@ self.assertBody('/pathinfo/foo/bar') def testAbsoluteURIPathInfo(self): - # http://cherrypy.org/ticket/1061 + # http://cherrypy.dev/ticket/1061 self.getPage('http://localhost/pathinfo/foo/bar') self.assertBody('/pathinfo/foo/bar') @@ -375,10 +375,10 @@ # Make sure that encoded = and & get parsed correctly self.getPage( - '/params/code?url=http%3A//cherrypy.org/index%3Fa%3D1%26b%3D2') + '/params/code?url=http%3A//cherrypy.dev/index%3Fa%3D1%26b%3D2') self.assertBody('args: %s kwargs: %s' % (('code',), - [('url', ntou('http://cherrypy.org/index?a=1&b=2'))])) + [('url', ntou('http://cherrypy.dev/index?a=1&b=2'))])) # Test coordinates sent by <img ismap> self.getPage('/params/ismap?223,114') @@ -756,6 +756,16 @@ headers=[('Content-type', 'application/json')]) self.assertBody('application/json') + def test_dangerous_host(self): + """ + Dangerous characters like newlines should be elided. + Ref #1974. + """ + # foo\nbar + encoded = '=?iso-8859-1?q?foo=0Abar?=' + self.getPage('/headers/Host', headers=[('Host', encoded)]) + self.assertBody('foobar') + def test_basic_HTTPMethods(self): helper.webtest.methods_with_bodies = ('POST', 'PUT', 'PROPFIND', 'PATCH') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/test/test_states.py new/CherryPy-18.8.0/cherrypy/test/test_states.py --- old/CherryPy-18.6.1/cherrypy/test/test_states.py 2021-03-23 01:12:07.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/test/test_states.py 2022-07-17 21:43:48.000000000 +0200 @@ -424,11 +424,12 @@ p.join() # Assert the old handler ran. - log_lines = list(open(p.error_log, 'rb')) - assert any( - line.endswith(b'I am an old SIGTERM handler.\n') - for line in log_lines - ) + with open(p.error_log, 'rb') as f: + log_lines = list(f) + assert any( + line.endswith(b'I am an old SIGTERM handler.\n') + for line in log_lines + ) def test_safe_wait_INADDR_ANY(): # pylint: disable=invalid-name diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/test/test_tutorials.py new/CherryPy-18.8.0/cherrypy/test/test_tutorials.py --- old/CherryPy-18.6.1/cherrypy/test/test_tutorials.py 2019-11-28 17:56:28.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/test/test_tutorials.py 2022-07-17 21:43:48.000000000 +0200 @@ -78,7 +78,7 @@ <ul> <li><a href="http://del.icio.us">del.icio.us</a></li> - <li><a href="http://www.cherrypy.org">CherryPy</a></li> + <li><a href="http://www.cherrypy.dev">CherryPy</a></li> </ul> <p>[<a href="../">Return to links page</a>]</p>''' @@ -166,7 +166,7 @@ self.assertHeader('Content-Disposition', # Make sure the filename is quoted. 'attachment; filename="pdf_file.pdf"') - self.assertEqual(len(self.body), 85698) + self.assertEqual(len(self.body), 11961) def test10HTTPErrors(self): self.setup_tutorial('tut10_http_errors', 'HTTPErrorDemo') Binary files old/CherryPy-18.6.1/cherrypy/tutorial/pdf_file.pdf and new/CherryPy-18.8.0/cherrypy/tutorial/pdf_file.pdf differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/cherrypy/tutorial/tut04_complex_site.py new/CherryPy-18.8.0/cherrypy/tutorial/tut04_complex_site.py --- old/CherryPy-18.6.1/cherrypy/tutorial/tut04_complex_site.py 2019-02-28 17:09:17.000000000 +0100 +++ new/CherryPy-18.8.0/cherrypy/tutorial/tut04_complex_site.py 2022-07-17 21:43:48.000000000 +0200 @@ -53,7 +53,7 @@ <ul> <li> - <a href="http://www.cherrypy.org">The CherryPy Homepage</a> + <a href="http://www.cherrypy.dev">The CherryPy Homepage</a> </li> <li> <a href="http://www.python.org">The Python Homepage</a> @@ -77,7 +77,7 @@ <ul> <li><a href="http://del.icio.us">del.icio.us</a></li> - <li><a href="http://www.cherrypy.org">CherryPy</a></li> + <li><a href="http://www.cherrypy.dev">CherryPy</a></li> </ul> <p>[<a href="../">Return to links page</a>]</p>''' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/docs/conf.py new/CherryPy-18.8.0/docs/conf.py --- old/CherryPy-18.6.1/docs/conf.py 2021-03-23 01:12:07.000000000 +0100 +++ new/CherryPy-18.8.0/docs/conf.py 2022-07-17 21:43:48.000000000 +0200 @@ -106,7 +106,7 @@ intersphinx_mapping = { 'python': ('https://docs.python.org/3', None), - 'cheroot': ('https://cheroot.cherrypy.org/en/latest/', None), + 'cheroot': ('https://cheroot.cherrypy.dev/en/latest/', None), 'pytest-docs': ('https://docs.pytest.org/en/latest/', None), } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/docs/contribute.rst new/CherryPy-18.8.0/docs/contribute.rst --- old/CherryPy-18.6.1/docs/contribute.rst 2019-02-28 17:09:17.000000000 +0100 +++ new/CherryPy-18.8.0/docs/contribute.rst 2022-06-22 02:20:54.000000000 +0200 @@ -6,7 +6,7 @@ in and add their best contribution to the project. How can you contribute? Well, first search the `docs -<https://docs.cherrypy.org>`_ and the `project page +<https://docs.cherrypy.dev>`_ and the `project page <https://github.com/cherrypy/cherrypy>`_ to see if someone has already reported your issue. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/docs/index.rst new/CherryPy-18.8.0/docs/index.rst --- old/CherryPy-18.6.1/docs/index.rst 2021-03-23 01:12:07.000000000 +0100 +++ new/CherryPy-18.8.0/docs/index.rst 2022-07-17 21:43:48.000000000 +0200 @@ -26,7 +26,7 @@ pkg/modules -`CherryPy <http://www.cherrypy.org>`_ is a pythonic, object-oriented web framework. +`CherryPy <http://www.cherrypy.dev>`_ is a pythonic, object-oriented web framework. CherryPy allows developers to build web applications in much the same way they would build any other object-oriented Python program. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/man/cherryd.1 new/CherryPy-18.8.0/man/cherryd.1 --- old/CherryPy-18.6.1/man/cherryd.1 2019-02-28 17:09:17.000000000 +0100 +++ new/CherryPy-18.8.0/man/cherryd.1 2022-06-22 02:20:54.000000000 +0200 @@ -253,7 +253,7 @@ fumanchu .nf -cherrypy.org +cherrypy.dev .fi .SH COPYRIGHT diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/pytest.ini new/CherryPy-18.8.0/pytest.ini --- old/CherryPy-18.6.1/pytest.ini 2021-03-23 01:12:07.000000000 +0100 +++ new/CherryPy-18.8.0/pytest.ini 2022-07-17 21:43:48.000000000 +0200 @@ -1,64 +1,83 @@ [pytest] addopts = - # `pytest-xdist`: - #--numprocesses=auto + # FIXME: Enable this once the test suite has no race conditions + # `pytest-xdist`: + # --numprocesses=auto + + # `pytest-mon`: + # Useful for live testing with `pytest-watch` during development: + #--testmon + + # Show 10 slowest invocations: + --durations=10 + + # A bit of verbosity doesn't hurt: + -v + + # Report all the things == -rxXs: + -ra + + # Show values of the local vars in errors: + --showlocals + + # Autocollect and invoke the doctests from all modules: + # https://docs.pytest.org/en/stable/doctest.html + --doctest-modules + + # Dump the test results in junit format: + --junitxml=.test-results/pytest/results.xml + + # `pytest-cov`: + # `pytest-cov`, "-p" preloads the module early: + -p pytest_cov + --no-cov-on-fail + --cov=cherrypy + --cov-branch + --cov-report=term-missing:skip-covered + --cov-report=html:.tox/tmp/test-results/pytest/cov/ + --cov-report=xml + # --cov-report xml:.test-results/pytest/cov.xml # alternatively move it here + --cov-context=test + --cov-config=.coveragerc - # `pytest-mon`: - # useful for live testing with `pytest-watch` during development: - #--testmon - - # show 10 slowest invocations: - --durations=10 - - # a bit of verbosity doesn't hurt: - -v - - # report all the things == -rxXs: - -ra - - # show values of the local vars in errors: - --showlocals - - # autocollect and invoke the doctests from all modules: - --doctest-modules - - # dump the test results in junit format: - --junitxml=.test-results/pytest/results.xml - - # `pytest-cov`: - --cov=cherrypy - --cov-report term-missing:skip-covered - --cov-report xml - # --cov-report xml:.test-results/pytest/cov.xml # alternatively move it here doctest_optionflags = ALLOW_UNICODE ELLIPSIS + filterwarnings = - error + error + + # pytest>=6.2.0 under Python 3.8: + # Ref: https://docs.pytest.org/en/stable/usage.html#unraisable + # Ref: https://github.com/pytest-dev/pytest/issues/5299 + ignore:Exception ignored in. <socket.socket fd=-1, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=6>:pytest.PytestUnraisableExceptionWarning:_pytest.unraisableexception + ignore:Exception ignored in. <_io.FileIO .closed.>:pytest.PytestUnraisableExceptionWarning:_pytest.unraisableexception + + ignore:Use cheroot.test.webtest:DeprecationWarning + ignore:This method will be removed in future versions.*:DeprecationWarning + ignore:Unable to verify that the server is bound on:UserWarning + ignore:Not importing directory .*.tox/py35/lib/python3.5/site-packages/(zc|repoze).* missing __init__:ImportWarning + # ref: https://github.com/mhammond/pywin32/issues/1256#issuecomment-527972824 : + ignore:the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses:DeprecationWarning + ignore:the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses:PendingDeprecationWarning - # pytest>=6.2.0 under Python 3.8: - # Ref: https://docs.pytest.org/en/stable/usage.html#unraisable - # Ref: https://github.com/pytest-dev/pytest/issues/5299 - ignore:Exception ignored in. <socket.socket fd=-1, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=6>:pytest.PytestUnraisableExceptionWarning:_pytest.unraisableexception - ignore:Exception ignored in. <_io.FileIO .closed.>:pytest.PytestUnraisableExceptionWarning:_pytest.unraisableexception - - ignore:Use cheroot.test.webtest:DeprecationWarning - ignore:This method will be removed in future versions.*:DeprecationWarning - ignore:Unable to verify that the server is bound on:UserWarning - ignore:Not importing directory .*.tox/py35/lib/python3.5/site-packages/(zc|repoze).* missing __init__:ImportWarning - # ref: https://github.com/mhammond/pywin32/issues/1256#issuecomment-527972824 : - ignore:the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses:DeprecationWarning - ignore:the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses:PendingDeprecationWarning junit_duration_report = call junit_family = xunit2 junit_suite_name = cherrypy_test_suite + +# A mapping of markers to their descriptions allowed in strict mode: +markers = + minversion = 5.3.5 + +# Optimize pytest's lookup by restricting potentially deep dir tree scan: norecursedirs = - build - cherrypy.egg-info - dist - docs - .cache - .eggs - .git - .github - .tox + build + cherrypy.egg-info + dist + docs + .cache + .eggs + .git + .github + .tox + testpaths = cherrypy/test/ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/CherryPy-18.6.1/setup.py new/CherryPy-18.8.0/setup.py --- old/CherryPy-18.6.1/setup.py 2021-07-04 00:28:41.000000000 +0200 +++ new/CherryPy-18.8.0/setup.py 2022-07-17 21:59:36.000000000 +0200 @@ -14,7 +14,7 @@ use_scm_version=True, description='Object-Oriented HTTP framework', author='CherryPy Team', - author_email='t...@cherrypy.org', + author_email='t...@cherrypy.dev', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Web Environment', @@ -25,10 +25,6 @@ 'License :: OSI Approved :: BSD License', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: Implementation', 'Programming Language :: Python :: Implementation :: CPython', 'Programming Language :: Python :: Implementation :: Jython', @@ -41,12 +37,12 @@ 'Topic :: Internet :: WWW/HTTP :: WSGI :: Server', 'Topic :: Software Development :: Libraries :: Application Frameworks', ], - url='https://www.cherrypy.org', + url='https://www.cherrypy.dev', project_urls={ 'CI: AppVeyor': 'https://ci.appveyor.com/project/{}'.format(repo_slug), 'CI: Travis': 'https://travis-ci.org/{}'.format(repo_slug), 'CI: Circle': 'https://circleci.com/gh/{}'.format(repo_slug), - 'Docs: RTD': 'https://docs.cherrypy.org', + 'Docs: RTD': 'https://docs.cherrypy.dev', 'GitHub: issues': '{}/issues'.format(repo_url), 'GitHub: repo': repo_url, 'Tidelift: funding': @@ -101,7 +97,7 @@ 'memcached_session': ['python-memcached>=1.58'], 'xcgi': ['flup'], - # https://docs.cherrypy.org/en/latest/advanced.html?highlight=windows#windows-console-events + # https://docs.cherrypy.dev/en/latest/advanced.html?highlight=windows#windows-console-events ':sys_platform == "win32" and implementation_name == "cpython"' # pywin32 disabled while a build is unavailable. Ref #1920. ' and python_version < "3.10"': [ @@ -111,7 +107,7 @@ setup_requires=[ 'setuptools_scm', ], - python_requires='>=3.5', + python_requires='>=3.6', )