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 <[email protected]>
+
+- 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: [email protected]
-License: UNKNOWN
+Author-email: [email protected]
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 ([email protected])
+Copyright ?? 2004-2019, CherryPy Team ([email protected])
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: [email protected]
-License: UNKNOWN
+Author-email: [email protected]
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='[email protected]',
+ author_email='[email protected]',
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',
)