mirror of
https://github.com/frappe/gunicorn.git
synced 2026-01-14 11:09:11 +08:00
Deal fully with deprecated functions.
If possible use a function based on inspect.signature to calculate the arity. If inspect.signature is not available fall back to getargspec. The version based on inspect.signature looks like more code but is actually a subset of what inspect.getfullargspec does. html.escape is preferred over cgi.escape primarily because it defaults quote to True. For this reason pass quote=True to cgi.escape when used.
This commit is contained in:
parent
fc7c15abbd
commit
72dd0199d7
@ -262,3 +262,37 @@ if PY26:
|
|||||||
|
|
||||||
else:
|
else:
|
||||||
from gunicorn.six.moves.urllib.parse import urlsplit
|
from gunicorn.six.moves.urllib.parse import urlsplit
|
||||||
|
|
||||||
|
|
||||||
|
import inspect
|
||||||
|
|
||||||
|
if hasattr(inspect, 'signature'):
|
||||||
|
positionals = (
|
||||||
|
inspect.Parameter.POSITIONAL_ONLY,
|
||||||
|
inspect.Parameter.POSITIONAL_OR_KEYWORD,
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_arity(f):
|
||||||
|
sig = inspect.signature(f)
|
||||||
|
arity = 0
|
||||||
|
|
||||||
|
for param in sig.parameters.values():
|
||||||
|
if param.kind in positionals:
|
||||||
|
arity += 1
|
||||||
|
|
||||||
|
return arity
|
||||||
|
else:
|
||||||
|
def get_arity(f):
|
||||||
|
return len(inspect.getargspec(f)[0])
|
||||||
|
|
||||||
|
|
||||||
|
try:
|
||||||
|
import html
|
||||||
|
|
||||||
|
def html_escape(s):
|
||||||
|
return html.escape(s)
|
||||||
|
except ImportError:
|
||||||
|
import cgi
|
||||||
|
|
||||||
|
def html_escape(s):
|
||||||
|
return cgi.escape(s, quote=True)
|
||||||
|
|||||||
@ -426,7 +426,7 @@ def validate_callable(arity):
|
|||||||
"" % (obj_name, mod_name))
|
"" % (obj_name, mod_name))
|
||||||
if not six.callable(val):
|
if not six.callable(val):
|
||||||
raise TypeError("Value is not six.callable: %s" % val)
|
raise TypeError("Value is not six.callable: %s" % val)
|
||||||
if arity != -1 and arity != len(inspect.getargspec(val)[0]):
|
if arity != -1 and arity != _compat.get_arity(val):
|
||||||
raise TypeError("Value must have an arity of: %s" % arity)
|
raise TypeError("Value must have an arity of: %s" % arity)
|
||||||
return val
|
return val
|
||||||
return _validate_callable
|
return _validate_callable
|
||||||
@ -464,7 +464,7 @@ def validate_group(val):
|
|||||||
def validate_post_request(val):
|
def validate_post_request(val):
|
||||||
val = validate_callable(-1)(val)
|
val = validate_callable(-1)(val)
|
||||||
|
|
||||||
largs = len(inspect.getargspec(val)[0])
|
largs = _compat.get_arity(val)
|
||||||
if largs == 4:
|
if largs == 4:
|
||||||
return val
|
return val
|
||||||
elif largs == 3:
|
elif largs == 3:
|
||||||
|
|||||||
@ -20,9 +20,9 @@ import traceback
|
|||||||
import inspect
|
import inspect
|
||||||
import errno
|
import errno
|
||||||
import warnings
|
import warnings
|
||||||
import cgi
|
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from gunicorn import _compat
|
||||||
from gunicorn.errors import AppImportError
|
from gunicorn.errors import AppImportError
|
||||||
from gunicorn.six import text_type
|
from gunicorn.six import text_type
|
||||||
from gunicorn.workers import SUPPORTED_WORKERS
|
from gunicorn.workers import SUPPORTED_WORKERS
|
||||||
@ -329,7 +329,7 @@ def write_error(sock, status_int, reason, mesg):
|
|||||||
%(mesg)s
|
%(mesg)s
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
""") % {"reason": reason, "mesg": cgi.escape(mesg)}
|
""") % {"reason": reason, "mesg": _compat.html_escape(mesg)}
|
||||||
|
|
||||||
http = textwrap.dedent("""\
|
http = textwrap.dedent("""\
|
||||||
HTTP/1.1 %s %s\r
|
HTTP/1.1 %s %s\r
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user