add python3.6 modules

This commit is contained in:
j 2017-10-13 14:49:49 +02:00
commit e9dacd2bf3
228 changed files with 10923 additions and 6804 deletions

View file

@ -1,15 +1,17 @@
import sys
import imp
import marshal
from imp import PKG_DIRECTORY, PY_COMPILED, PY_SOURCE, PY_FROZEN
from distutils.version import StrictVersion
from imp import PKG_DIRECTORY, PY_COMPILED, PY_SOURCE, PY_FROZEN
from .py33compat import Bytecode
from setuptools.extern import six
__all__ = [
'Require', 'find_module', 'get_module_constant', 'extract_constant'
]
class Require:
"""A prerequisite to building or installing a distribution"""
@ -30,7 +32,7 @@ class Require:
def full_name(self):
"""Return full package/distribution name, w/version"""
if self.requested_version is not None:
return '%s-%s' % (self.name,self.requested_version)
return '%s-%s' % (self.name, self.requested_version)
return self.name
def version_ok(self, version):
@ -39,7 +41,6 @@ class Require:
str(version) != "unknown" and version >= self.requested_version
def get_version(self, paths=None, default="unknown"):
"""Get version number of installed module, 'None', or 'default'
Search 'paths' for module. If not found, return 'None'. If found,
@ -52,8 +53,9 @@ class Require:
if self.attribute is None:
try:
f,p,i = find_module(self.module,paths)
if f: f.close()
f, p, i = find_module(self.module, paths)
if f:
f.close()
return default
except ImportError:
return None
@ -77,40 +79,6 @@ class Require:
return self.version_ok(version)
def _iter_code(code):
"""Yield '(op,arg)' pair for each operation in code object 'code'"""
from array import array
from dis import HAVE_ARGUMENT, EXTENDED_ARG
bytes = array('b',code.co_code)
eof = len(code.co_code)
ptr = 0
extended_arg = 0
while ptr<eof:
op = bytes[ptr]
if op>=HAVE_ARGUMENT:
arg = bytes[ptr+1] + bytes[ptr+2]*256 + extended_arg
ptr += 3
if op==EXTENDED_ARG:
long_type = six.integer_types[-1]
extended_arg = arg * long_type(65536)
continue
else:
arg = None
ptr += 1
yield op,arg
def find_module(module, paths=None):
"""Just like 'imp.find_module()', but with package support"""
@ -118,20 +86,19 @@ def find_module(module, paths=None):
while parts:
part = parts.pop(0)
f, path, (suffix,mode,kind) = info = imp.find_module(part, paths)
f, path, (suffix, mode, kind) = info = imp.find_module(part, paths)
if kind==PKG_DIRECTORY:
if kind == PKG_DIRECTORY:
parts = parts or ['__init__']
paths = [path]
elif parts:
raise ImportError("Can't find %r in %s" % (parts,module))
raise ImportError("Can't find %r in %s" % (parts, module))
return info
def get_module_constant(module, symbol, default=-1, paths=None):
"""Find 'module' by searching 'paths', and extract 'symbol'
Return 'None' if 'module' does not exist on 'paths', or it does not define
@ -145,12 +112,12 @@ def get_module_constant(module, symbol, default=-1, paths=None):
return None
try:
if kind==PY_COMPILED:
f.read(8) # skip magic & date
if kind == PY_COMPILED:
f.read(8) # skip magic & date
code = marshal.load(f)
elif kind==PY_FROZEN:
elif kind == PY_FROZEN:
code = imp.get_frozen_object(module)
elif kind==PY_SOURCE:
elif kind == PY_SOURCE:
code = compile(f.read(), path, 'exec')
else:
# Not something we can parse; we'll have to import it. :(
@ -177,9 +144,8 @@ def extract_constant(code, symbol, default=-1):
only 'STORE_NAME' and 'STORE_GLOBAL' opcodes are checked, and 'symbol'
must be present in 'code.co_names'.
"""
if symbol not in code.co_names:
# name's not there, can't possibly be an assigment
# name's not there, can't possibly be an assignment
return None
name_idx = list(code.co_names).index(symbol)
@ -190,11 +156,13 @@ def extract_constant(code, symbol, default=-1):
const = default
for op, arg in _iter_code(code):
for byte_code in Bytecode(code):
op = byte_code.opcode
arg = byte_code.arg
if op==LOAD_CONST:
if op == LOAD_CONST:
const = code.co_consts[arg]
elif arg==name_idx and (op==STORE_NAME or op==STORE_GLOBAL):
elif arg == name_idx and (op == STORE_NAME or op == STORE_GLOBAL):
return const
else:
const = default
@ -214,4 +182,5 @@ def _update_globals():
del globals()[name]
__all__.remove(name)
_update_globals()