mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-08-19 21:03:21 -07:00
Add future 0.18.2
This commit is contained in:
parent
08c8ee0774
commit
fa97d3f88d
210 changed files with 43159 additions and 0 deletions
29
lib/past/types/__init__.py
Normal file
29
lib/past/types/__init__.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
"""
|
||||
Forward-ports of types from Python 2 for use with Python 3:
|
||||
|
||||
- ``basestring``: equivalent to ``(str, bytes)`` in ``isinstance`` checks
|
||||
- ``dict``: with list-producing .keys() etc. methods
|
||||
- ``str``: bytes-like, but iterating over them doesn't product integers
|
||||
- ``long``: alias of Py3 int with ``L`` suffix in the ``repr``
|
||||
- ``unicode``: alias of Py3 str with ``u`` prefix in the ``repr``
|
||||
|
||||
"""
|
||||
|
||||
from past import utils
|
||||
|
||||
if utils.PY2:
|
||||
import __builtin__
|
||||
basestring = __builtin__.basestring
|
||||
dict = __builtin__.dict
|
||||
str = __builtin__.str
|
||||
long = __builtin__.long
|
||||
unicode = __builtin__.unicode
|
||||
__all__ = []
|
||||
else:
|
||||
from .basestring import basestring
|
||||
from .olddict import olddict
|
||||
from .oldstr import oldstr
|
||||
long = int
|
||||
unicode = str
|
||||
# from .unicode import unicode
|
||||
__all__ = ['basestring', 'olddict', 'oldstr', 'long', 'unicode']
|
39
lib/past/types/basestring.py
Normal file
39
lib/past/types/basestring.py
Normal file
|
@ -0,0 +1,39 @@
|
|||
"""
|
||||
An implementation of the basestring type for Python 3
|
||||
|
||||
Example use:
|
||||
|
||||
>>> s = b'abc'
|
||||
>>> assert isinstance(s, basestring)
|
||||
>>> from past.types import str as oldstr
|
||||
>>> s2 = oldstr(b'abc')
|
||||
>>> assert isinstance(s2, basestring)
|
||||
|
||||
"""
|
||||
|
||||
import sys
|
||||
|
||||
from past.utils import with_metaclass, PY2
|
||||
|
||||
if PY2:
|
||||
str = unicode
|
||||
|
||||
ver = sys.version_info[:2]
|
||||
|
||||
|
||||
class BaseBaseString(type):
|
||||
def __instancecheck__(cls, instance):
|
||||
return isinstance(instance, (bytes, str))
|
||||
|
||||
def __subclasshook__(cls, thing):
|
||||
# TODO: What should go here?
|
||||
raise NotImplemented
|
||||
|
||||
|
||||
class basestring(with_metaclass(BaseBaseString)):
|
||||
"""
|
||||
A minimal backport of the Python 2 basestring type to Py3
|
||||
"""
|
||||
|
||||
|
||||
__all__ = ['basestring']
|
96
lib/past/types/olddict.py
Normal file
96
lib/past/types/olddict.py
Normal file
|
@ -0,0 +1,96 @@
|
|||
"""
|
||||
A dict subclass for Python 3 that behaves like Python 2's dict
|
||||
|
||||
Example use:
|
||||
|
||||
>>> from past.builtins import dict
|
||||
>>> d1 = dict() # instead of {} for an empty dict
|
||||
>>> d2 = dict(key1='value1', key2='value2')
|
||||
|
||||
The keys, values and items methods now return lists on Python 3.x and there are
|
||||
methods for iterkeys, itervalues, iteritems, and viewkeys etc.
|
||||
|
||||
>>> for d in (d1, d2):
|
||||
... assert isinstance(d.keys(), list)
|
||||
... assert isinstance(d.values(), list)
|
||||
... assert isinstance(d.items(), list)
|
||||
"""
|
||||
|
||||
import sys
|
||||
|
||||
from past.utils import with_metaclass
|
||||
|
||||
|
||||
_builtin_dict = dict
|
||||
ver = sys.version_info[:2]
|
||||
|
||||
|
||||
class BaseOldDict(type):
|
||||
def __instancecheck__(cls, instance):
|
||||
return isinstance(instance, _builtin_dict)
|
||||
|
||||
|
||||
class olddict(with_metaclass(BaseOldDict, _builtin_dict)):
|
||||
"""
|
||||
A backport of the Python 3 dict object to Py2
|
||||
"""
|
||||
iterkeys = _builtin_dict.keys
|
||||
viewkeys = _builtin_dict.keys
|
||||
|
||||
def keys(self):
|
||||
return list(super(olddict, self).keys())
|
||||
|
||||
itervalues = _builtin_dict.values
|
||||
viewvalues = _builtin_dict.values
|
||||
|
||||
def values(self):
|
||||
return list(super(olddict, self).values())
|
||||
|
||||
iteritems = _builtin_dict.items
|
||||
viewitems = _builtin_dict.items
|
||||
|
||||
def items(self):
|
||||
return list(super(olddict, self).items())
|
||||
|
||||
def has_key(self, k):
|
||||
"""
|
||||
D.has_key(k) -> True if D has a key k, else False
|
||||
"""
|
||||
return k in self
|
||||
|
||||
# def __new__(cls, *args, **kwargs):
|
||||
# """
|
||||
# dict() -> new empty dictionary
|
||||
# dict(mapping) -> new dictionary initialized from a mapping object's
|
||||
# (key, value) pairs
|
||||
# dict(iterable) -> new dictionary initialized as if via:
|
||||
# d = {}
|
||||
# for k, v in iterable:
|
||||
# d[k] = v
|
||||
# dict(**kwargs) -> new dictionary initialized with the name=value pairs
|
||||
# in the keyword argument list. For example: dict(one=1, two=2)
|
||||
|
||||
# """
|
||||
#
|
||||
# if len(args) == 0:
|
||||
# return super(olddict, cls).__new__(cls)
|
||||
# # Was: elif isinstance(args[0], newbytes):
|
||||
# # We use type() instead of the above because we're redefining
|
||||
# # this to be True for all unicode string subclasses. Warning:
|
||||
# # This may render newstr un-subclassable.
|
||||
# elif type(args[0]) == olddict:
|
||||
# return args[0]
|
||||
# # elif isinstance(args[0], _builtin_dict):
|
||||
# # value = args[0]
|
||||
# else:
|
||||
# value = args[0]
|
||||
# return super(olddict, cls).__new__(cls, value)
|
||||
|
||||
def __native__(self):
|
||||
"""
|
||||
Hook for the past.utils.native() function
|
||||
"""
|
||||
return super(oldbytes, self)
|
||||
|
||||
|
||||
__all__ = ['olddict']
|
135
lib/past/types/oldstr.py
Normal file
135
lib/past/types/oldstr.py
Normal file
|
@ -0,0 +1,135 @@
|
|||
"""
|
||||
Pure-Python implementation of a Python 2-like str object for Python 3.
|
||||
"""
|
||||
|
||||
from numbers import Integral
|
||||
|
||||
from past.utils import PY2, with_metaclass
|
||||
|
||||
if PY2:
|
||||
from collections import Iterable
|
||||
else:
|
||||
from collections.abc import Iterable
|
||||
|
||||
_builtin_bytes = bytes
|
||||
|
||||
|
||||
class BaseOldStr(type):
|
||||
def __instancecheck__(cls, instance):
|
||||
return isinstance(instance, _builtin_bytes)
|
||||
|
||||
|
||||
def unescape(s):
|
||||
"""
|
||||
Interprets strings with escape sequences
|
||||
|
||||
Example:
|
||||
>>> s = unescape(r'abc\\def') # i.e. 'abc\\\\def'
|
||||
>>> print(s)
|
||||
'abc\def'
|
||||
>>> s2 = unescape('abc\\ndef')
|
||||
>>> len(s2)
|
||||
8
|
||||
>>> print(s2)
|
||||
abc
|
||||
def
|
||||
"""
|
||||
return s.encode().decode('unicode_escape')
|
||||
|
||||
|
||||
class oldstr(with_metaclass(BaseOldStr, _builtin_bytes)):
|
||||
"""
|
||||
A forward port of the Python 2 8-bit string object to Py3
|
||||
"""
|
||||
# Python 2 strings have no __iter__ method:
|
||||
@property
|
||||
def __iter__(self):
|
||||
raise AttributeError
|
||||
|
||||
def __dir__(self):
|
||||
return [thing for thing in dir(_builtin_bytes) if thing != '__iter__']
|
||||
|
||||
# def __new__(cls, *args, **kwargs):
|
||||
# """
|
||||
# From the Py3 bytes docstring:
|
||||
|
||||
# bytes(iterable_of_ints) -> bytes
|
||||
# bytes(string, encoding[, errors]) -> bytes
|
||||
# bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer
|
||||
# bytes(int) -> bytes object of size given by the parameter initialized with null bytes
|
||||
# bytes() -> empty bytes object
|
||||
#
|
||||
# Construct an immutable array of bytes from:
|
||||
# - an iterable yielding integers in range(256)
|
||||
# - a text string encoded using the specified encoding
|
||||
# - any object implementing the buffer API.
|
||||
# - an integer
|
||||
# """
|
||||
#
|
||||
# if len(args) == 0:
|
||||
# return super(newbytes, cls).__new__(cls)
|
||||
# # Was: elif isinstance(args[0], newbytes):
|
||||
# # We use type() instead of the above because we're redefining
|
||||
# # this to be True for all unicode string subclasses. Warning:
|
||||
# # This may render newstr un-subclassable.
|
||||
# elif type(args[0]) == newbytes:
|
||||
# return args[0]
|
||||
# elif isinstance(args[0], _builtin_bytes):
|
||||
# value = args[0]
|
||||
# elif isinstance(args[0], unicode):
|
||||
# if 'encoding' not in kwargs:
|
||||
# raise TypeError('unicode string argument without an encoding')
|
||||
# ###
|
||||
# # Was: value = args[0].encode(**kwargs)
|
||||
# # Python 2.6 string encode() method doesn't take kwargs:
|
||||
# # Use this instead:
|
||||
# newargs = [kwargs['encoding']]
|
||||
# if 'errors' in kwargs:
|
||||
# newargs.append(kwargs['errors'])
|
||||
# value = args[0].encode(*newargs)
|
||||
# ###
|
||||
# elif isinstance(args[0], Iterable):
|
||||
# if len(args[0]) == 0:
|
||||
# # What is this?
|
||||
# raise ValueError('unknown argument type')
|
||||
# elif len(args[0]) > 0 and isinstance(args[0][0], Integral):
|
||||
# # It's a list of integers
|
||||
# value = b''.join([chr(x) for x in args[0]])
|
||||
# else:
|
||||
# raise ValueError('item cannot be interpreted as an integer')
|
||||
# elif isinstance(args[0], Integral):
|
||||
# if args[0] < 0:
|
||||
# raise ValueError('negative count')
|
||||
# value = b'\x00' * args[0]
|
||||
# else:
|
||||
# value = args[0]
|
||||
# return super(newbytes, cls).__new__(cls, value)
|
||||
|
||||
def __repr__(self):
|
||||
s = super(oldstr, self).__repr__() # e.g. b'abc' on Py3, b'abc' on Py3
|
||||
return s[1:]
|
||||
|
||||
def __str__(self):
|
||||
s = super(oldstr, self).__str__() # e.g. "b'abc'" or "b'abc\\ndef'
|
||||
# TODO: fix this:
|
||||
assert s[:2] == "b'" and s[-1] == "'"
|
||||
return unescape(s[2:-1]) # e.g. 'abc' or 'abc\ndef'
|
||||
|
||||
def __getitem__(self, y):
|
||||
if isinstance(y, Integral):
|
||||
return super(oldstr, self).__getitem__(slice(y, y+1))
|
||||
else:
|
||||
return super(oldstr, self).__getitem__(y)
|
||||
|
||||
def __getslice__(self, *args):
|
||||
return self.__getitem__(slice(*args))
|
||||
|
||||
def __contains__(self, key):
|
||||
if isinstance(key, int):
|
||||
return False
|
||||
|
||||
def __native__(self):
|
||||
return bytes(self)
|
||||
|
||||
|
||||
__all__ = ['oldstr']
|
Loading…
Add table
Add a link
Reference in a new issue