| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- import sys
- import time
- py3k = sys.version_info >= (3, 0)
- py33 = sys.version_info >= (3, 3)
- py26 = sys.version_info >= (2, 6)
- py25 = sys.version_info >= (2, 5)
- jython = sys.platform.startswith('java')
- win32 = sys.platform.startswith('win')
- pypy = hasattr(sys, 'pypy_version_info')
- if py3k:
- from io import StringIO
- import builtins as compat_builtins
- from urllib.parse import quote_plus, unquote_plus
- from html.entities import codepoint2name, name2codepoint
- string_types = str,
- binary_type = bytes
- text_type = str
- def u(s):
- return s
- def octal(lit):
- return eval("0o" + lit)
- else:
- import __builtin__ as compat_builtins
- try:
- from cStringIO import StringIO
- except:
- from StringIO import StringIO
- from urllib import quote_plus, unquote_plus
- from htmlentitydefs import codepoint2name, name2codepoint
- string_types = basestring,
- binary_type = str
- text_type = unicode
- def u(s):
- return unicode(s, "utf-8")
- def octal(lit):
- return eval("0" + lit)
- if py33:
- from importlib import machinery
- def load_module(module_id, path):
- return machinery.SourceFileLoader(module_id, path).load_module()
- else:
- import imp
- def load_module(module_id, path):
- fp = open(path, 'rb')
- try:
- return imp.load_source(module_id, path, fp)
- finally:
- fp.close()
- def exception_as():
- return sys.exc_info()[1]
- try:
- import threading
- if py3k:
- import _thread as thread
- else:
- import thread
- except ImportError:
- import dummy_threading as threading
- if py3k:
- import _dummy_thread as thread
- else:
- import dummy_thread as thread
- if win32 or jython:
- time_func = time.clock
- else:
- time_func = time.time
- try:
- from functools import partial
- except:
- def partial(func, *args, **keywords):
- def newfunc(*fargs, **fkeywords):
- newkeywords = keywords.copy()
- newkeywords.update(fkeywords)
- return func(*(args + fargs), **newkeywords)
- return newfunc
- if not py25:
- def all(iterable):
- for i in iterable:
- if not i:
- return False
- return True
- def exception_name(exc):
- try:
- return exc.__class__.__name__
- except AttributeError:
- return exc.__name__
- else:
- all = all
- def exception_name(exc):
- return exc.__class__.__name__
- try:
- from inspect import CO_VARKEYWORDS, CO_VARARGS
- def inspect_func_args(fn):
- if py3k:
- co = fn.__code__
- else:
- co = fn.func_code
- nargs = co.co_argcount
- names = co.co_varnames
- args = list(names[:nargs])
- varargs = None
- if co.co_flags & CO_VARARGS:
- varargs = co.co_varnames[nargs]
- nargs = nargs + 1
- varkw = None
- if co.co_flags & CO_VARKEYWORDS:
- varkw = co.co_varnames[nargs]
- if py3k:
- return args, varargs, varkw, fn.__defaults__
- else:
- return args, varargs, varkw, fn.func_defaults
- except ImportError:
- import inspect
- def inspect_func_args(fn):
- return inspect.getargspec(fn)
- if py3k:
- def callable(fn):
- return hasattr(fn, '__call__')
- else:
- callable = callable
- ################################################
- # cross-compatible metaclass implementation
- # Copyright (c) 2010-2012 Benjamin Peterson
- def with_metaclass(meta, base=object):
- """Create a base class with a metaclass."""
- return meta("%sBase" % meta.__name__, (base,), {})
- ################################################
|