mirror of
https://github.com/gentoo-mirror/gentoo.git
synced 2026-09-24 04:59:14 -07:00
dev-python/cherrypy: Remove old
Signed-off-by: Michał Górny <mgorny@gentoo.org>
This commit is contained in:
@@ -1,3 +1 @@
|
||||
DIST CherryPy-18.6.1.tar.gz 692730 BLAKE2B 44cef7ed54a090df396691001b794bf13be2c61003bf80b63223e3a42914ce50fcfe43c06626fb881105e3ed6fbf587df7024bbf7cfde00a8263c432f4cc7ae4 SHA512 186a0992a443e1ffc1a2924b3351dcb0e6cc6c88b39ac32330d6365fe1b0a35c2008a3a18e1a57f61ffd1901ea6134333bb6288024d8ffbb1fd8e8dcd3145007
|
||||
DIST CherryPy-18.7.0.tar.gz 621794 BLAKE2B d60cd21d0b0bacbb18bcaeb525be143c3639f462978e9835e5c77ba8ce732a3af4662e4c37e2d20e1ad19760900775dee4a3cd98db53e70a19611d30c8329bce SHA512 321771a3e3cda16090bfb7a79c297defd67655ba5453e440e09e85fec41cba850544bebac7203206c95e38d79b3bce22368ea19c0fb1fbedbb00d76a4ab59c8b
|
||||
DIST CherryPy-18.8.0.tar.gz 622679 BLAKE2B 673f9a103a901161ee801656fa37fa0a4fcd2d9276a5231e48c1663264eb7f922d5d862018995a345a8485252416fa0229da49b8d265288efce2dccd37d79ff8 SHA512 abacc995c1757b8d0171d57eb59b6e5931c46019d8f0f43479e334bb4f58b61a27541d9d0997d665f81905bc3c89e42d40d8e5a6e3a5f9bf251bc9089ceb5249
|
||||
|
||||
@@ -1,78 +0,0 @@
|
||||
# Copyright 1999-2022 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
DISTUTILS_USE_PEP517=setuptools
|
||||
PYTHON_COMPAT=( python3_{8..11} pypy3 )
|
||||
|
||||
inherit distutils-r1
|
||||
|
||||
MY_PN="CherryPy"
|
||||
MY_P=${MY_PN}-${PV}
|
||||
DESCRIPTION="CherryPy is a pythonic, object-oriented HTTP framework"
|
||||
HOMEPAGE="
|
||||
https://cherrypy.dev/
|
||||
https://github.com/cherrypy/cherrypy/
|
||||
https://pypi.org/project/CherryPy/
|
||||
"
|
||||
SRC_URI="mirror://pypi/${MY_PN::1}/${MY_PN}/${MY_P}.tar.gz"
|
||||
S=${WORKDIR}/${MY_P}
|
||||
|
||||
LICENSE="BSD"
|
||||
SLOT="0"
|
||||
KEYWORDS="amd64 arm arm64 ppc ~ppc64 ~riscv x86"
|
||||
IUSE="ssl test"
|
||||
|
||||
RDEPEND="
|
||||
>=dev-python/cheroot-8.2.1[${PYTHON_USEDEP}]
|
||||
>=dev-python/portend-2.1.1[${PYTHON_USEDEP}]
|
||||
dev-python/more-itertools[${PYTHON_USEDEP}]
|
||||
dev-python/zc-lockfile[${PYTHON_USEDEP}]
|
||||
dev-python/jaraco-collections[${PYTHON_USEDEP}]
|
||||
ssl? (
|
||||
dev-python/pyopenssl[${PYTHON_USEDEP}]
|
||||
)
|
||||
"
|
||||
BDEPEND="
|
||||
dev-python/setuptools_scm[${PYTHON_USEDEP}]
|
||||
test? (
|
||||
dev-python/routes[${PYTHON_USEDEP}]
|
||||
dev-python/simplejson[${PYTHON_USEDEP}]
|
||||
dev-python/objgraph[${PYTHON_USEDEP}]
|
||||
dev-python/path-py[${PYTHON_USEDEP}]
|
||||
dev-python/requests-toolbelt[${PYTHON_USEDEP}]
|
||||
dev-python/pytest-services[${PYTHON_USEDEP}]
|
||||
)
|
||||
"
|
||||
|
||||
distutils_enable_tests pytest
|
||||
|
||||
python_prepare_all() {
|
||||
local PATCHES=(
|
||||
# https://github.com/cherrypy/cherrypy/pull/1946
|
||||
"${FILESDIR}"/${P}-close-files.patch
|
||||
"${FILESDIR}"/${P}-py311.patch
|
||||
)
|
||||
|
||||
sed -r -e '/(pytest-sugar|pytest-cov)/ d' \
|
||||
-i setup.py || die
|
||||
|
||||
sed -r -e 's:--cov-report[[:space:]]+[[:graph:]]+::g' \
|
||||
-e 's:--cov[[:graph:]]+::g' \
|
||||
-e 's:--doctest[[:graph:]]+::g' \
|
||||
-i pytest.ini || die
|
||||
|
||||
distutils-r1_python_prepare_all
|
||||
}
|
||||
|
||||
python_test() {
|
||||
local EPYTEST_DESELECT=()
|
||||
[[ ${EPYTHON} == python3.11 ]] && EPYTEST_DESELECT+=(
|
||||
# broken by changes in traceback output
|
||||
cherrypy/test/test_request_obj.py::RequestObjectTests::testErrorHandling
|
||||
cherrypy/test/test_tools.py::ToolTests::testHookErrors
|
||||
)
|
||||
|
||||
epytest
|
||||
}
|
||||
@@ -1,69 +0,0 @@
|
||||
# Copyright 1999-2022 Gentoo Authors
|
||||
# Distributed under the terms of the GNU General Public License v2
|
||||
|
||||
EAPI=8
|
||||
|
||||
DISTUTILS_USE_PEP517=setuptools
|
||||
PYTHON_COMPAT=( python3_{8..11} pypy3 )
|
||||
|
||||
inherit distutils-r1
|
||||
|
||||
MY_PN="CherryPy"
|
||||
MY_P=${MY_PN}-${PV}
|
||||
DESCRIPTION="CherryPy is a pythonic, object-oriented HTTP framework"
|
||||
HOMEPAGE="
|
||||
https://cherrypy.dev/
|
||||
https://github.com/cherrypy/cherrypy/
|
||||
https://pypi.org/project/CherryPy/
|
||||
"
|
||||
SRC_URI="mirror://pypi/${MY_PN::1}/${MY_PN}/${MY_P}.tar.gz"
|
||||
S=${WORKDIR}/${MY_P}
|
||||
|
||||
LICENSE="BSD"
|
||||
SLOT="0"
|
||||
KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~x86"
|
||||
IUSE="ssl test"
|
||||
|
||||
RDEPEND="
|
||||
>=dev-python/cheroot-8.2.1[${PYTHON_USEDEP}]
|
||||
>=dev-python/portend-2.1.1[${PYTHON_USEDEP}]
|
||||
dev-python/more-itertools[${PYTHON_USEDEP}]
|
||||
dev-python/zc-lockfile[${PYTHON_USEDEP}]
|
||||
dev-python/jaraco-collections[${PYTHON_USEDEP}]
|
||||
ssl? (
|
||||
dev-python/pyopenssl[${PYTHON_USEDEP}]
|
||||
)
|
||||
"
|
||||
BDEPEND="
|
||||
dev-python/setuptools_scm[${PYTHON_USEDEP}]
|
||||
test? (
|
||||
dev-python/routes[${PYTHON_USEDEP}]
|
||||
dev-python/simplejson[${PYTHON_USEDEP}]
|
||||
dev-python/objgraph[${PYTHON_USEDEP}]
|
||||
dev-python/path-py[${PYTHON_USEDEP}]
|
||||
dev-python/requests-toolbelt[${PYTHON_USEDEP}]
|
||||
dev-python/pytest-services[${PYTHON_USEDEP}]
|
||||
)
|
||||
"
|
||||
|
||||
distutils_enable_tests pytest
|
||||
|
||||
python_prepare_all() {
|
||||
sed -i -e '/cov/d' pytest.ini || die
|
||||
# upstream has been using xfail to mark flaky tests, then added
|
||||
# xfail_strict... not a good idea
|
||||
sed -i -e '/xfail_strict/d' pytest.ini || die
|
||||
|
||||
distutils-r1_python_prepare_all
|
||||
}
|
||||
|
||||
python_test() {
|
||||
local EPYTEST_DESELECT=()
|
||||
[[ ${EPYTHON} == python3.11 ]] && EPYTEST_DESELECT+=(
|
||||
# broken by changes in traceback output
|
||||
cherrypy/test/test_request_obj.py::RequestObjectTests::testErrorHandling
|
||||
cherrypy/test/test_tools.py::ToolTests::testHookErrors
|
||||
)
|
||||
|
||||
epytest
|
||||
}
|
||||
@@ -1,416 +0,0 @@
|
||||
From 94a2cc036203c6da55174ef3b105c0c875bbc79f Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Micha=C5=82=20G=C3=B3rny?= <mgorny@gentoo.org>
|
||||
Date: Mon, 31 Jan 2022 22:25:34 +0100
|
||||
Subject: [PATCH] Use context managers to close files properly and fix tests on
|
||||
PyPy
|
||||
|
||||
Use context managers (`with`) to ensure that all open files are closed
|
||||
correctly. This resolves resource leaks and test failures with PyPy3.7.
|
||||
|
||||
The code prior to this change used four approaches for closing files:
|
||||
|
||||
1. Using a context manager (`with` clause).
|
||||
|
||||
2. Using a try/finally clause.
|
||||
|
||||
3. Closing the file in the same scope (unreliable: file object can leak
|
||||
on exception).
|
||||
|
||||
4. Not closing open files at all.
|
||||
|
||||
The last point is a real problem for PyPy since it does not GC
|
||||
unreachable objects as aggressively as CPython does. While leaving
|
||||
a function scope on CPython causes the file objects private to it to
|
||||
be destroyed (and therefore closed), in PyPy they can stay dangling
|
||||
for some time. When combines with buffered writes, this means that
|
||||
writes can still remain pending after returning from function.
|
||||
|
||||
Using a context manager is a simple, consistent way to ensure that
|
||||
the file object is closed once it is no longer needed. In turn, this
|
||||
guarantees that all pending writes will be performed upon function
|
||||
return and the code won't be hiting race conditions between writing
|
||||
a file and reading it afterwards.
|
||||
---
|
||||
cherrypy/_cperror.py | 3 ++-
|
||||
cherrypy/_cpmodpy.py | 5 +----
|
||||
cherrypy/lib/auth_digest.py | 13 ++++++------
|
||||
cherrypy/lib/covercp.py | 40 ++++++++++++++++++------------------
|
||||
cherrypy/lib/reprconf.py | 5 +----
|
||||
cherrypy/lib/sessions.py | 10 ++-------
|
||||
cherrypy/process/plugins.py | 3 ++-
|
||||
cherrypy/test/helper.py | 3 ++-
|
||||
cherrypy/test/logtest.py | 33 ++++++++++++++++-------------
|
||||
cherrypy/test/modfastcgi.py | 5 +----
|
||||
cherrypy/test/modfcgid.py | 5 +----
|
||||
cherrypy/test/modpy.py | 5 +----
|
||||
cherrypy/test/modwsgi.py | 5 +----
|
||||
cherrypy/test/test_core.py | 5 ++---
|
||||
cherrypy/test/test_states.py | 11 +++++-----
|
||||
15 files changed, 67 insertions(+), 84 deletions(-)
|
||||
|
||||
diff --git a/cherrypy/_cperror.py b/cherrypy/_cperror.py
|
||||
index 4e727682..ebf1dcf6 100644
|
||||
--- a/cherrypy/_cperror.py
|
||||
+++ b/cherrypy/_cperror.py
|
||||
@@ -532,7 +532,8 @@ def get_error_page(status, **kwargs):
|
||||
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 --git a/cherrypy/_cpmodpy.py b/cherrypy/_cpmodpy.py
|
||||
index 0e608c48..a08f0ed9 100644
|
||||
--- a/cherrypy/_cpmodpy.py
|
||||
+++ b/cherrypy/_cpmodpy.py
|
||||
@@ -339,11 +339,8 @@ LoadModule python_module modules/mod_python.so
|
||||
}
|
||||
|
||||
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 --git a/cherrypy/lib/auth_digest.py b/cherrypy/lib/auth_digest.py
|
||||
index fbb5df64..981e9a5d 100644
|
||||
--- a/cherrypy/lib/auth_digest.py
|
||||
+++ b/cherrypy/lib/auth_digest.py
|
||||
@@ -101,13 +101,12 @@ def get_ha1_file_htdigest(filename):
|
||||
"""
|
||||
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 --git a/cherrypy/lib/covercp.py b/cherrypy/lib/covercp.py
|
||||
index 3e219713..005fafa5 100644
|
||||
--- a/cherrypy/lib/covercp.py
|
||||
+++ b/cherrypy/lib/covercp.py
|
||||
@@ -334,26 +334,26 @@ class CoverStats(object):
|
||||
yield '</body></html>'
|
||||
|
||||
def annotated_file(self, filename, statements, excluded, missing):
|
||||
- source = open(filename, 'r')
|
||||
- buffer = []
|
||||
- for lineno, line in enumerate(source.readlines()):
|
||||
- lineno += 1
|
||||
- line = line.strip('\n\r')
|
||||
- empty_the_buffer = True
|
||||
- if lineno in excluded:
|
||||
- template = TEMPLATE_LOC_EXCLUDED
|
||||
- elif lineno in missing:
|
||||
- template = TEMPLATE_LOC_NOT_COVERED
|
||||
- elif lineno in statements:
|
||||
- template = TEMPLATE_LOC_COVERED
|
||||
- else:
|
||||
- empty_the_buffer = False
|
||||
- buffer.append((lineno, line))
|
||||
- if empty_the_buffer:
|
||||
- for lno, pastline in buffer:
|
||||
- yield template % (lno, cgi.escape(pastline))
|
||||
- buffer = []
|
||||
- yield template % (lineno, cgi.escape(line))
|
||||
+ with open(filename, 'r') as source:
|
||||
+ buffer = []
|
||||
+ for lineno, line in enumerate(source.readlines()):
|
||||
+ lineno += 1
|
||||
+ line = line.strip('\n\r')
|
||||
+ empty_the_buffer = True
|
||||
+ if lineno in excluded:
|
||||
+ template = TEMPLATE_LOC_EXCLUDED
|
||||
+ elif lineno in missing:
|
||||
+ template = TEMPLATE_LOC_NOT_COVERED
|
||||
+ elif lineno in statements:
|
||||
+ template = TEMPLATE_LOC_COVERED
|
||||
+ else:
|
||||
+ empty_the_buffer = False
|
||||
+ buffer.append((lineno, line))
|
||||
+ if empty_the_buffer:
|
||||
+ for lno, pastline in buffer:
|
||||
+ yield template % (lno, cgi.escape(pastline))
|
||||
+ buffer = []
|
||||
+ yield template % (lineno, cgi.escape(line))
|
||||
|
||||
@cherrypy.expose
|
||||
def report(self, name):
|
||||
diff --git a/cherrypy/lib/reprconf.py b/cherrypy/lib/reprconf.py
|
||||
index 3976652e..76381d7b 100644
|
||||
--- a/cherrypy/lib/reprconf.py
|
||||
+++ b/cherrypy/lib/reprconf.py
|
||||
@@ -163,11 +163,8 @@ class Parser(configparser.ConfigParser):
|
||||
# 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 --git a/cherrypy/lib/sessions.py b/cherrypy/lib/sessions.py
|
||||
index 5b3328f2..0f56a4fa 100644
|
||||
--- a/cherrypy/lib/sessions.py
|
||||
+++ b/cherrypy/lib/sessions.py
|
||||
@@ -516,11 +516,8 @@ class FileSession(Session):
|
||||
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 @@ class FileSession(Session):
|
||||
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 --git a/cherrypy/process/plugins.py b/cherrypy/process/plugins.py
|
||||
index 2a9952de..e96fb1ce 100644
|
||||
--- a/cherrypy/process/plugins.py
|
||||
+++ b/cherrypy/process/plugins.py
|
||||
@@ -436,7 +436,8 @@ class PIDFile(SimplePlugin):
|
||||
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 --git a/cherrypy/test/helper.py b/cherrypy/test/helper.py
|
||||
index c1ca4535..cae49533 100644
|
||||
--- a/cherrypy/test/helper.py
|
||||
+++ b/cherrypy/test/helper.py
|
||||
@@ -505,7 +505,8 @@ server.ssl_private_key: r'%s'
|
||||
|
||||
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 --git a/cherrypy/test/logtest.py b/cherrypy/test/logtest.py
|
||||
index 344be987..112bdc25 100644
|
||||
--- a/cherrypy/test/logtest.py
|
||||
+++ b/cherrypy/test/logtest.py
|
||||
@@ -97,7 +97,8 @@ class LogCase(object):
|
||||
|
||||
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 @@ class LogCase(object):
|
||||
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 @@ class LogCase(object):
|
||||
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 --git a/cherrypy/test/modfastcgi.py b/cherrypy/test/modfastcgi.py
|
||||
index 79ec3d18..0c6d01e2 100644
|
||||
--- a/cherrypy/test/modfastcgi.py
|
||||
+++ b/cherrypy/test/modfastcgi.py
|
||||
@@ -112,15 +112,12 @@ class ModFCGISupervisor(helper.LocalWSGISupervisor):
|
||||
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 --git a/cherrypy/test/modfcgid.py b/cherrypy/test/modfcgid.py
|
||||
index d101bd67..ea373004 100644
|
||||
--- a/cherrypy/test/modfcgid.py
|
||||
+++ b/cherrypy/test/modfcgid.py
|
||||
@@ -101,15 +101,12 @@ class ModFCGISupervisor(helper.LocalSupervisor):
|
||||
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 --git a/cherrypy/test/modpy.py b/cherrypy/test/modpy.py
|
||||
index 7c288d2c..024453e9 100644
|
||||
--- a/cherrypy/test/modpy.py
|
||||
+++ b/cherrypy/test/modpy.py
|
||||
@@ -107,13 +107,10 @@ class ModPythonSupervisor(helper.Supervisor):
|
||||
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 --git a/cherrypy/test/modwsgi.py b/cherrypy/test/modwsgi.py
|
||||
index da7d240b..24c72684 100644
|
||||
--- a/cherrypy/test/modwsgi.py
|
||||
+++ b/cherrypy/test/modwsgi.py
|
||||
@@ -109,14 +109,11 @@ class ModWSGISupervisor(helper.Supervisor):
|
||||
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 --git a/cherrypy/test/test_core.py b/cherrypy/test/test_core.py
|
||||
index 6fde3a97..42460b3f 100644
|
||||
--- a/cherrypy/test/test_core.py
|
||||
+++ b/cherrypy/test/test_core.py
|
||||
@@ -586,9 +586,8 @@ class CoreRequestHandlingTest(helper.CPWebCase):
|
||||
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 --git a/cherrypy/test/test_states.py b/cherrypy/test/test_states.py
|
||||
index 28dd6510..d59a4d87 100644
|
||||
--- a/cherrypy/test/test_states.py
|
||||
+++ b/cherrypy/test/test_states.py
|
||||
@@ -424,11 +424,12 @@ test_case_name: "test_signal_handler_unsubscribe"
|
||||
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
|
||||
--
|
||||
2.35.1
|
||||
|
||||
@@ -1,32 +0,0 @@
|
||||
From 8245a74aa4e090c40445535a9ce3997ed9904798 Mon Sep 17 00:00:00 2001
|
||||
From: Dominic Davis-Foster <dominic@davis-foster.co.uk>
|
||||
Date: Fri, 28 Jan 2022 23:11:52 +0000
|
||||
Subject: [PATCH] Switch from inspect.getargspec to inspect.getfullargspec
|
||||
|
||||
inspect.getargspec has been deprecated since 3.0
|
||||
---
|
||||
cherrypy/_cpdispatch.py | 8 ++------
|
||||
1 file changed, 2 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/cherrypy/_cpdispatch.py b/cherrypy/_cpdispatch.py
|
||||
index 83eb79cb..5c506e99 100644
|
||||
--- a/cherrypy/_cpdispatch.py
|
||||
+++ b/cherrypy/_cpdispatch.py
|
||||
@@ -206,12 +206,8 @@ except ImportError:
|
||||
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):
|
||||
--
|
||||
2.35.1
|
||||
|
||||
Reference in New Issue
Block a user