latest version
This commit is contained in:
Regular → Executable
+9
-10
@@ -52,7 +52,7 @@ Automatic conversion
|
||||
--------------------
|
||||
|
||||
An included script called `futurize
|
||||
<http://python-future.org/automatic_conversion.html>`_ aids in converting
|
||||
<https://python-future.org/automatic_conversion.html>`_ aids in converting
|
||||
code (from either Python 2 or Python 3) to code compatible with both
|
||||
platforms. It is similar to ``python-modernize`` but goes further in
|
||||
providing Python 3 compatibility through the use of the backported types
|
||||
@@ -62,21 +62,20 @@ and builtin functions in ``future``.
|
||||
Documentation
|
||||
-------------
|
||||
|
||||
See: http://python-future.org
|
||||
See: https://python-future.org
|
||||
|
||||
|
||||
Credits
|
||||
-------
|
||||
|
||||
:Author: Ed Schofield, Jordan M. Adler, et al
|
||||
:Sponsor: Python Charmers Pty Ltd, Australia, and Python Charmers Pte
|
||||
Ltd, Singapore. http://pythoncharmers.com
|
||||
:Others: See docs/credits.rst or http://python-future.org/credits.html
|
||||
:Sponsor: Python Charmers: https://pythoncharmers.com
|
||||
:Others: See docs/credits.rst or https://python-future.org/credits.html
|
||||
|
||||
|
||||
Licensing
|
||||
---------
|
||||
Copyright 2013-2019 Python Charmers Pty Ltd, Australia.
|
||||
Copyright 2013-2024 Python Charmers, Australia.
|
||||
The software is distributed under an MIT licence. See LICENSE.txt.
|
||||
|
||||
"""
|
||||
@@ -84,10 +83,10 @@ The software is distributed under an MIT licence. See LICENSE.txt.
|
||||
__title__ = 'future'
|
||||
__author__ = 'Ed Schofield'
|
||||
__license__ = 'MIT'
|
||||
__copyright__ = 'Copyright 2013-2019 Python Charmers Pty Ltd'
|
||||
__ver_major__ = 0
|
||||
__ver_minor__ = 18
|
||||
__ver_patch__ = 2
|
||||
__copyright__ = 'Copyright 2013-2024 Python Charmers (https://pythoncharmers.com)'
|
||||
__ver_major__ = 1
|
||||
__ver_minor__ = 0
|
||||
__ver_patch__ = 0
|
||||
__ver_sub__ = ''
|
||||
__version__ = "%d.%d.%d%s" % (__ver_major__, __ver_minor__,
|
||||
__ver_patch__, __ver_sub__)
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
+1
-1
@@ -689,7 +689,7 @@ class date(object):
|
||||
|
||||
@classmethod
|
||||
def fromordinal(cls, n):
|
||||
"""Contruct a date from a proleptic Gregorian ordinal.
|
||||
"""Construct a date from a proleptic Gregorian ordinal.
|
||||
|
||||
January 1 of year 1 is day 1. Only the year, month and day are
|
||||
non-zero in the result.
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
+1
-1
@@ -2867,7 +2867,7 @@ def parse_content_type_header(value):
|
||||
_find_mime_parameters(ctype, value)
|
||||
return ctype
|
||||
ctype.append(token)
|
||||
# XXX: If we really want to follow the formal grammer we should make
|
||||
# XXX: If we really want to follow the formal grammar we should make
|
||||
# mantype and subtype specialized TokenLists here. Probably not worth it.
|
||||
if not value or value[0] != '/':
|
||||
ctype.defects.append(errors.InvalidHeaderDefect(
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+2
-2
@@ -26,7 +26,7 @@ class Parser(object):
|
||||
textual representation of the message.
|
||||
|
||||
The string must be formatted as a block of RFC 2822 headers and header
|
||||
continuation lines, optionally preceeded by a `Unix-from' header. The
|
||||
continuation lines, optionally preceded by a `Unix-from' header. The
|
||||
header block is terminated either by the end of the string or by a
|
||||
blank line.
|
||||
|
||||
@@ -92,7 +92,7 @@ class BytesParser(object):
|
||||
textual representation of the message.
|
||||
|
||||
The input must be formatted as a block of RFC 2822 headers and header
|
||||
continuation lines, optionally preceeded by a `Unix-from' header. The
|
||||
continuation lines, optionally preceded by a `Unix-from' header. The
|
||||
header block is terminated either by the end of the input or by a
|
||||
blank line.
|
||||
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+13
-7
@@ -225,10 +225,14 @@ LOOSE_HTTP_DATE_RE = re.compile(
|
||||
(?::(\d\d))? # optional seconds
|
||||
)? # optional clock
|
||||
\s*
|
||||
([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+)? # timezone
|
||||
(?:
|
||||
([-+]?\d{2,4}|(?![APap][Mm]\b)[A-Za-z]+) # timezone
|
||||
\s*
|
||||
(?:\(\w+\))? # ASCII representation of timezone in parens.
|
||||
\s*$""", re.X | re.ASCII)
|
||||
)?
|
||||
(?:
|
||||
\(\w+\) # ASCII representation of timezone in parens.
|
||||
\s*
|
||||
)?$""", re.X | re.ASCII)
|
||||
def http2time(text):
|
||||
"""Returns time in seconds since epoch of time represented by a string.
|
||||
|
||||
@@ -298,9 +302,11 @@ ISO_DATE_RE = re.compile(
|
||||
(?::?(\d\d(?:\.\d*)?))? # optional seconds (and fractional)
|
||||
)? # optional clock
|
||||
\s*
|
||||
([-+]?\d\d?:?(:?\d\d)?
|
||||
|Z|z)? # timezone (Z is "zero meridian", i.e. GMT)
|
||||
\s*$""", re.X | re. ASCII)
|
||||
(?:
|
||||
([-+]?\d\d?:?(:?\d\d)?
|
||||
|Z|z) # timezone (Z is "zero meridian", i.e. GMT)
|
||||
\s*
|
||||
)?$""", re.X | re. ASCII)
|
||||
def iso2time(text):
|
||||
"""
|
||||
As for http2time, but parses the ISO 8601 formats:
|
||||
@@ -1845,7 +1851,7 @@ def lwp_cookie_str(cookie):
|
||||
class LWPCookieJar(FileCookieJar):
|
||||
"""
|
||||
The LWPCookieJar saves a sequence of "Set-Cookie3" lines.
|
||||
"Set-Cookie3" is the format used by the libwww-perl libary, not known
|
||||
"Set-Cookie3" is the format used by the libwww-perl library, not known
|
||||
to be compatible with any browser, but which is easy to read and
|
||||
doesn't lose information about RFC 2965 cookies.
|
||||
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
+14
@@ -46,6 +46,16 @@ def ceil(x):
|
||||
|
||||
from itertools import islice
|
||||
|
||||
if PY26:
|
||||
# itertools.count in Py 2.6 doesn't accept a step parameter
|
||||
def count(start=0, step=1):
|
||||
while True:
|
||||
yield start
|
||||
start += step
|
||||
else:
|
||||
from itertools import count
|
||||
|
||||
|
||||
if PY3:
|
||||
try:
|
||||
from _thread import get_ident
|
||||
@@ -85,6 +95,10 @@ def recursive_repr(fillvalue='...'):
|
||||
return decorating_function
|
||||
|
||||
|
||||
# OrderedDict Shim from Raymond Hettinger, python core dev
|
||||
# http://code.activestate.com/recipes/576693-ordered-dictionary-for-py24/
|
||||
# here to support version 2.6.
|
||||
|
||||
################################################################################
|
||||
### OrderedDict
|
||||
################################################################################
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
-32
@@ -28,7 +28,6 @@ import importlib
|
||||
# import collections.abc # not present on Py2.7
|
||||
import re
|
||||
import subprocess
|
||||
import imp
|
||||
import time
|
||||
try:
|
||||
import sysconfig
|
||||
@@ -341,37 +340,6 @@ def rmtree(path):
|
||||
if error.errno != errno.ENOENT:
|
||||
raise
|
||||
|
||||
def make_legacy_pyc(source):
|
||||
"""Move a PEP 3147 pyc/pyo file to its legacy pyc/pyo location.
|
||||
|
||||
The choice of .pyc or .pyo extension is done based on the __debug__ flag
|
||||
value.
|
||||
|
||||
:param source: The file system path to the source file. The source file
|
||||
does not need to exist, however the PEP 3147 pyc file must exist.
|
||||
:return: The file system path to the legacy pyc file.
|
||||
"""
|
||||
pyc_file = imp.cache_from_source(source)
|
||||
up_one = os.path.dirname(os.path.abspath(source))
|
||||
legacy_pyc = os.path.join(up_one, source + ('c' if __debug__ else 'o'))
|
||||
os.rename(pyc_file, legacy_pyc)
|
||||
return legacy_pyc
|
||||
|
||||
def forget(modname):
|
||||
"""'Forget' a module was ever imported.
|
||||
|
||||
This removes the module from sys.modules and deletes any PEP 3147 or
|
||||
legacy .pyc and .pyo files.
|
||||
"""
|
||||
unload(modname)
|
||||
for dirname in sys.path:
|
||||
source = os.path.join(dirname, modname + '.py')
|
||||
# It doesn't matter if they exist or not, unlink all possible
|
||||
# combinations of PEP 3147 and legacy pyc and pyo files.
|
||||
unlink(source + 'c')
|
||||
unlink(source + 'o')
|
||||
unlink(imp.cache_from_source(source, debug_override=True))
|
||||
unlink(imp.cache_from_source(source, debug_override=False))
|
||||
|
||||
# On some platforms, should not run gui test even if it is allowed
|
||||
# in `use_resources'.
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+1
-11
@@ -2498,17 +2498,7 @@ def _proxy_bypass_macosx_sysconf(host, proxy_settings):
|
||||
|
||||
|
||||
if sys.platform == 'darwin':
|
||||
try:
|
||||
from _scproxy import _get_proxy_settings, _get_proxies
|
||||
except Exception as e:
|
||||
from platformcode import logger
|
||||
logger.error(str(e))
|
||||
|
||||
def _get_proxy_settings():
|
||||
return {}
|
||||
|
||||
def _get_proxies():
|
||||
return {}
|
||||
from _scproxy import _get_proxy_settings, _get_proxies
|
||||
|
||||
def proxy_bypass_macosx_sysconf(host):
|
||||
proxy_settings = _get_proxy_settings()
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+5
-4
@@ -134,10 +134,11 @@ from __future__ import (absolute_import, division, print_function,
|
||||
from future.builtins import bytes, dict, int, range, str
|
||||
|
||||
import base64
|
||||
# Py2.7 compatibility hack
|
||||
base64.encodebytes = base64.encodestring
|
||||
base64.decodebytes = base64.decodestring
|
||||
import sys
|
||||
if sys.version_info < (3, 9):
|
||||
# Py2.7 compatibility hack
|
||||
base64.encodebytes = base64.encodestring
|
||||
base64.decodebytes = base64.decodestring
|
||||
import time
|
||||
from datetime import datetime
|
||||
from future.backports.http import client as http_client
|
||||
@@ -1251,7 +1252,7 @@ class Transport(object):
|
||||
# Send HTTP request.
|
||||
#
|
||||
# @param host Host descriptor (URL or (URL, x509 info) tuple).
|
||||
# @param handler Targer RPC handler (a path relative to host)
|
||||
# @param handler Target RPC handler (a path relative to host)
|
||||
# @param request_body The XML-RPC request body
|
||||
# @param debug Enable debugging if debug is true.
|
||||
# @return An HTTPConnection.
|
||||
|
||||
Regular → Executable
Regular → Executable
+1
-1
@@ -2,7 +2,7 @@
|
||||
A module that brings in equivalents of the new and modified Python 3
|
||||
builtins into Py2. Has no effect on Py3.
|
||||
|
||||
See the docs `here <http://python-future.org/what-else.html>`_
|
||||
See the docs `here <https://python-future.org/what-else.html>`_
|
||||
(``docs/what-else.rst``) for more information.
|
||||
|
||||
"""
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
+4
-4
@@ -32,10 +32,10 @@ def newround(number, ndigits=None):
|
||||
|
||||
exponent = Decimal('10') ** (-ndigits)
|
||||
|
||||
if PYPY:
|
||||
# Work around issue #24: round() breaks on PyPy with NumPy's types
|
||||
if 'numpy' in repr(type(number)):
|
||||
number = float(number)
|
||||
# Work around issue #24: round() breaks on PyPy with NumPy's types
|
||||
# Also breaks on CPython with NumPy's specialized int types like uint64
|
||||
if 'numpy' in repr(type(number)):
|
||||
number = float(number)
|
||||
|
||||
if isinstance(number, Decimal):
|
||||
d = number
|
||||
|
||||
Regular → Executable
+35
-36
@@ -60,44 +60,15 @@ def newsuper(typ=_SENTINEL, type_or_obj=_SENTINEL, framedepth=1):
|
||||
raise RuntimeError('super() used in a function with no args')
|
||||
|
||||
try:
|
||||
# Get the MRO so we can crawl it.
|
||||
mro = type_or_obj.__mro__
|
||||
except (AttributeError, RuntimeError): # see issue #160
|
||||
typ = find_owner(type_or_obj, f.f_code)
|
||||
except (AttributeError, RuntimeError, TypeError):
|
||||
# see issues #160, #267
|
||||
try:
|
||||
mro = type_or_obj.__class__.__mro__
|
||||
typ = find_owner(type_or_obj.__class__, f.f_code)
|
||||
except AttributeError:
|
||||
raise RuntimeError('super() used with a non-newstyle class')
|
||||
|
||||
# A ``for...else`` block? Yes! It's odd, but useful.
|
||||
# If unfamiliar with for...else, see:
|
||||
#
|
||||
# http://psung.blogspot.com/2007/12/for-else-in-python.html
|
||||
for typ in mro:
|
||||
# Find the class that owns the currently-executing method.
|
||||
for meth in typ.__dict__.values():
|
||||
# Drill down through any wrappers to the underlying func.
|
||||
# This handles e.g. classmethod() and staticmethod().
|
||||
try:
|
||||
while not isinstance(meth,FunctionType):
|
||||
if isinstance(meth, property):
|
||||
# Calling __get__ on the property will invoke
|
||||
# user code which might throw exceptions or have
|
||||
# side effects
|
||||
meth = meth.fget
|
||||
else:
|
||||
try:
|
||||
meth = meth.__func__
|
||||
except AttributeError:
|
||||
meth = meth.__get__(type_or_obj, typ)
|
||||
except (AttributeError, TypeError):
|
||||
continue
|
||||
if meth.func_code is f.f_code:
|
||||
break # Aha! Found you.
|
||||
else:
|
||||
continue # Not found! Move onto the next class in MRO.
|
||||
break # Found! Break out of the search loop.
|
||||
else:
|
||||
raise RuntimeError('super() called outside a method')
|
||||
raise RuntimeError('super() used with an old-style class')
|
||||
except TypeError:
|
||||
raise RuntimeError('super() called outside a method')
|
||||
|
||||
# Dispatch to builtin super().
|
||||
if type_or_obj is not _SENTINEL:
|
||||
@@ -105,6 +76,34 @@ def newsuper(typ=_SENTINEL, type_or_obj=_SENTINEL, framedepth=1):
|
||||
return _builtin_super(typ)
|
||||
|
||||
|
||||
def find_owner(cls, code):
|
||||
'''Find the class that owns the currently-executing method.
|
||||
'''
|
||||
for typ in cls.__mro__:
|
||||
for meth in typ.__dict__.values():
|
||||
# Drill down through any wrappers to the underlying func.
|
||||
# This handles e.g. classmethod() and staticmethod().
|
||||
try:
|
||||
while not isinstance(meth,FunctionType):
|
||||
if isinstance(meth, property):
|
||||
# Calling __get__ on the property will invoke
|
||||
# user code which might throw exceptions or have
|
||||
# side effects
|
||||
meth = meth.fget
|
||||
else:
|
||||
try:
|
||||
meth = meth.__func__
|
||||
except AttributeError:
|
||||
meth = meth.__get__(cls, typ)
|
||||
except (AttributeError, TypeError):
|
||||
continue
|
||||
if meth.func_code is code:
|
||||
return typ # Aha! Found you.
|
||||
# Not found! Move onto the next class in MRO.
|
||||
|
||||
raise TypeError
|
||||
|
||||
|
||||
def superm(*args, **kwds):
|
||||
f = sys._getframe(1)
|
||||
nm = f.f_code.co_name
|
||||
|
||||
Regular → Executable
Regular → Executable
+8
-3
@@ -1,8 +1,13 @@
|
||||
from __future__ import absolute_import
|
||||
from future.utils import PY3
|
||||
from future.utils import PY3, PY39_PLUS
|
||||
|
||||
if PY3:
|
||||
from _dummy_thread import *
|
||||
|
||||
if PY39_PLUS:
|
||||
# _dummy_thread and dummy_threading modules were both deprecated in
|
||||
# Python 3.7 and removed in Python 3.9
|
||||
from _thread import *
|
||||
elif PY3:
|
||||
from _dummy_thread import *
|
||||
else:
|
||||
__future_module__ = True
|
||||
from dummy_thread import *
|
||||
|
||||
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Regular → Executable
Executable
+7
@@ -0,0 +1,7 @@
|
||||
from __future__ import absolute_import
|
||||
from future.utils import PY3
|
||||
|
||||
from multiprocessing import *
|
||||
if not PY3:
|
||||
__future_module__ = True
|
||||
from multiprocessing.queues import SimpleQueue
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user