manually adapt few imports
This commit is contained in:
@@ -1 +0,0 @@
|
||||
127.0.0.1 2 1464635785
|
||||
|
||||
@@ -10,6 +10,13 @@ if PY2:
|
||||
import cPickle as pickle
|
||||
from cStringIO import StringIO
|
||||
import copy_reg as copyreg
|
||||
from HTMLParser import HTMLParser
|
||||
import urlparse
|
||||
from htmlentitydefs import entitydefs, name2codepoint
|
||||
import __builtin__ as builtin
|
||||
import thread
|
||||
import Cookie
|
||||
import urllib2
|
||||
reduce = reduce
|
||||
hashlib_md5 = hashlib.md5
|
||||
iterkeys = lambda d: d.iterkeys()
|
||||
@@ -20,6 +27,10 @@ if PY2:
|
||||
text_type = unicode
|
||||
basestring = basestring
|
||||
xrange = xrange
|
||||
long = long
|
||||
unichr = unichr
|
||||
unicodeT = unicode
|
||||
from string import maketrans
|
||||
|
||||
def implements_iterator(cls):
|
||||
cls.next = cls.__next__
|
||||
@@ -49,6 +60,13 @@ else:
|
||||
from io import StringIO
|
||||
import copyreg
|
||||
from functools import reduce
|
||||
from html.parser import HTMLParser
|
||||
from http import cookies as Cookie
|
||||
from urllib import parse as urlparse
|
||||
from urllib import request as urllib2
|
||||
from html.entities import entitydefs, name2codepoint
|
||||
import builtins as builtin
|
||||
import _thread as thread
|
||||
hashlib_md5 = lambda s: hashlib.md5(bytes(s, 'utf8'))
|
||||
iterkeys = lambda d: iter(d.keys())
|
||||
itervalues = lambda d: iter(d.values())
|
||||
@@ -58,6 +76,10 @@ else:
|
||||
text_type = str
|
||||
basestring = str
|
||||
xrange = range
|
||||
long = int
|
||||
unichr = chr
|
||||
unicodeT = str
|
||||
maketrans = str.maketrans
|
||||
|
||||
implements_iterator = _identity
|
||||
implements_bool = _identity
|
||||
|
||||
+1
-5
@@ -20,7 +20,6 @@ caching will be provided by the GAE memcache
|
||||
(see gluon.contrib.gae_memcache)
|
||||
"""
|
||||
import time
|
||||
import thread
|
||||
import os
|
||||
import gc
|
||||
import sys
|
||||
@@ -41,10 +40,7 @@ try:
|
||||
except ImportError:
|
||||
have_settings = False
|
||||
|
||||
try:
|
||||
import cPickle as pickle
|
||||
except:
|
||||
import pickle
|
||||
from gluon._compat import pickle, thread
|
||||
|
||||
try:
|
||||
import psutil
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ Note:
|
||||
"""
|
||||
|
||||
from os import stat
|
||||
import thread
|
||||
from ._compat import thread
|
||||
from gluon.fileutils import read_file
|
||||
|
||||
cfs = {} # for speed-up
|
||||
|
||||
+4
-4
@@ -18,7 +18,7 @@ import fnmatch
|
||||
import os
|
||||
import copy
|
||||
import random
|
||||
import __builtin__
|
||||
from gluon._compat import builtin
|
||||
from gluon.storage import Storage, List
|
||||
from gluon.template import parse_template
|
||||
from gluon.restricted import restricted, compile2
|
||||
@@ -43,7 +43,7 @@ import types
|
||||
from functools import reduce
|
||||
logger = logging.getLogger("web2py")
|
||||
from gluon import rewrite
|
||||
from custom_import import custom_import_install
|
||||
from gluon.custom_import import custom_import_install
|
||||
|
||||
try:
|
||||
import py_compile
|
||||
@@ -117,7 +117,7 @@ class mybuiltin(object):
|
||||
#__builtins__
|
||||
def __getitem__(self, key):
|
||||
try:
|
||||
return getattr(__builtin__, key)
|
||||
return getattr(builtin, key)
|
||||
except AttributeError:
|
||||
raise KeyError(key)
|
||||
|
||||
@@ -431,7 +431,7 @@ def build_environment(request, response, session, store_current=True):
|
||||
elif is_pypy: # apply the same hack to pypy too
|
||||
__builtins__ = mybuiltin()
|
||||
else:
|
||||
__builtins__['__import__'] = __builtin__.__import__ # WHY?
|
||||
__builtins__['__import__'] = builtin.__import__ # WHY?
|
||||
environment['request'] = request
|
||||
environment['response'] = response
|
||||
environment['session'] = session
|
||||
|
||||
@@ -436,13 +436,13 @@ def encode_pair(name, value):
|
||||
if nameLength < 128:
|
||||
s = chr(nameLength)
|
||||
else:
|
||||
s = struct.pack('!L', nameLength | 0x80000000L)
|
||||
s = struct.pack('!L', nameLength | 0x80000000)
|
||||
|
||||
valueLength = len(value)
|
||||
if valueLength < 128:
|
||||
s += chr(valueLength)
|
||||
else:
|
||||
s += struct.pack('!L', valueLength | 0x80000000L)
|
||||
s += struct.pack('!L', valueLength | 0x80000000)
|
||||
|
||||
return s + name + value
|
||||
|
||||
@@ -592,7 +592,7 @@ class Request(object):
|
||||
self._flush()
|
||||
self._end(appStatus, protocolStatus)
|
||||
|
||||
def _end(self, appStatus=0L, protocolStatus=FCGI_REQUEST_COMPLETE):
|
||||
def _end(self, appStatus=0, protocolStatus=FCGI_REQUEST_COMPLETE):
|
||||
self._conn.end_request(self, appStatus, protocolStatus)
|
||||
|
||||
def _flush(self):
|
||||
@@ -615,7 +615,7 @@ class CGIRequest(Request):
|
||||
self.stderr = sys.stderr
|
||||
self.data = StringIO.StringIO()
|
||||
|
||||
def _end(self, appStatus=0L, protocolStatus=FCGI_REQUEST_COMPLETE):
|
||||
def _end(self, appStatus=0, protocolStatus=FCGI_REQUEST_COMPLETE):
|
||||
sys.exit(appStatus)
|
||||
|
||||
def _flush(self):
|
||||
@@ -714,7 +714,7 @@ class Connection(object):
|
||||
"""
|
||||
rec.write(self._sock)
|
||||
|
||||
def end_request(self, req, appStatus=0L,
|
||||
def end_request(self, req, appStatus=0,
|
||||
protocolStatus=FCGI_REQUEST_COMPLETE, remove=True):
|
||||
"""
|
||||
End a Request.
|
||||
@@ -763,7 +763,7 @@ class Connection(object):
|
||||
|
||||
if not self._multiplexed and self._requests:
|
||||
# Can't multiplex requests.
|
||||
self.end_request(req, 0L, FCGI_CANT_MPX_CONN, remove=False)
|
||||
self.end_request(req, 0, FCGI_CANT_MPX_CONN, remove=False)
|
||||
else:
|
||||
self._requests[inrec.requestId] = req
|
||||
|
||||
@@ -854,7 +854,7 @@ class MultiplexedConnection(Connection):
|
||||
finally:
|
||||
self._lock.release()
|
||||
|
||||
def end_request(self, req, appStatus=0L,
|
||||
def end_request(self, req, appStatus=0,
|
||||
protocolStatus=FCGI_REQUEST_COMPLETE, remove=True):
|
||||
self._lock.acquire()
|
||||
try:
|
||||
|
||||
@@ -1447,7 +1447,7 @@ class _BaseV6(object):
|
||||
|
||||
try:
|
||||
# Now, parse the hextets into a 128-bit integer.
|
||||
ip_int = 0L
|
||||
ip_int = 0
|
||||
for i in xrange(parts_hi):
|
||||
ip_int <<= 16
|
||||
ip_int |= self._parse_hextet(parts[i])
|
||||
|
||||
@@ -52,8 +52,7 @@ _HISTORY_KIND = '_Shell_History'
|
||||
# Types that can't be pickled.
|
||||
UNPICKLABLE_TYPES = [
|
||||
types.ModuleType,
|
||||
types.TypeType,
|
||||
types.ClassType,
|
||||
type,
|
||||
types.FunctionType,
|
||||
]
|
||||
|
||||
|
||||
@@ -8,22 +8,22 @@
|
||||
Support for smart import syntax for web2py applications
|
||||
-------------------------------------------------------
|
||||
"""
|
||||
import __builtin__
|
||||
from gluon._compat import builtin
|
||||
import os
|
||||
import sys
|
||||
import threading
|
||||
from gluon import current
|
||||
|
||||
NATIVE_IMPORTER = __builtin__.__import__
|
||||
NATIVE_IMPORTER = builtin.__import__
|
||||
INVALID_MODULES = set(('', 'gluon', 'applications', 'custom_import'))
|
||||
|
||||
# backward compatibility API
|
||||
|
||||
|
||||
def custom_import_install():
|
||||
if __builtin__.__import__ == NATIVE_IMPORTER:
|
||||
if builtin.__import__ == NATIVE_IMPORTER:
|
||||
INVALID_MODULES.update(sys.modules.keys())
|
||||
__builtin__.__import__ = custom_importer
|
||||
builtin.__import__ = custom_importer
|
||||
|
||||
|
||||
def track_changes(track=True):
|
||||
@@ -98,7 +98,7 @@ def custom_importer(name, globals=None, locals=None, fromlist=None, level=-1):
|
||||
try:
|
||||
return NATIVE_IMPORTER(name, globals, locals, fromlist, level)
|
||||
except ImportError as e3:
|
||||
raise ImportError, e1, import_tb # there an import error in the module
|
||||
raise ImportError(e1, import_tb) # there an import error in the module
|
||||
except Exception as e2:
|
||||
raise # there is an error in the module
|
||||
finally:
|
||||
|
||||
+4
-4
@@ -10,7 +10,7 @@ File operations
|
||||
---------------
|
||||
"""
|
||||
|
||||
import storage
|
||||
from gluon import storage
|
||||
import os
|
||||
import re
|
||||
import tarfile
|
||||
@@ -18,9 +18,9 @@ import glob
|
||||
import time
|
||||
import datetime
|
||||
import logging
|
||||
from http import HTTP
|
||||
from gluon.http import HTTP
|
||||
from gzip import open as gzopen
|
||||
from recfile import generate
|
||||
from gluon.recfile import generate
|
||||
|
||||
__all__ = [
|
||||
'parse_version',
|
||||
@@ -449,7 +449,7 @@ def make_fake_file_like_object():
|
||||
return LogFile()
|
||||
|
||||
|
||||
from settings import global_settings # we need to import settings here because
|
||||
from gluon.settings import global_settings # we need to import settings here because
|
||||
# settings imports fileutils too
|
||||
|
||||
|
||||
|
||||
+15
-21
@@ -13,10 +13,9 @@ Contains the classes for the global used variables:
|
||||
- Session
|
||||
|
||||
"""
|
||||
|
||||
from gluon._compat import pickle, StringIO, copyreg, Cookie, urlparse, PY2
|
||||
from gluon.storage import Storage, List
|
||||
from gluon.streamer import streamer, stream_file_or_304_or_206, DEFAULT_CHUNK_SIZE
|
||||
from gluon.xmlrpc import handler
|
||||
from gluon.contenttype import contenttype
|
||||
from gluon.html import xmlescape, TABLE, TR, PRE, URL
|
||||
from gluon.http import HTTP, redirect
|
||||
@@ -29,24 +28,16 @@ from gluon import recfile
|
||||
from gluon.cache import CacheInRam
|
||||
from gluon.fileutils import copystream
|
||||
import hashlib
|
||||
import portalocker
|
||||
try:
|
||||
import cPickle as pickle
|
||||
except:
|
||||
import pickle
|
||||
from gluon import portalocker
|
||||
from pickle import Pickler, MARK, DICT, EMPTY_DICT
|
||||
from types import DictionaryType
|
||||
import cStringIO
|
||||
#from types import DictionaryType
|
||||
import datetime
|
||||
import re
|
||||
import copy_reg
|
||||
import Cookie
|
||||
import os
|
||||
import sys
|
||||
import traceback
|
||||
import threading
|
||||
import cgi
|
||||
import urlparse
|
||||
import copy
|
||||
import tempfile
|
||||
import json
|
||||
@@ -96,12 +87,14 @@ class SortingPickler(Pickler):
|
||||
self.memoize(obj)
|
||||
self._batch_setitems([(key, obj[key]) for key in sorted(obj)])
|
||||
|
||||
SortingPickler.dispatch = copy.copy(Pickler.dispatch)
|
||||
SortingPickler.dispatch[DictionaryType] = SortingPickler.save_dict
|
||||
if PY2:
|
||||
#FIXME PY3
|
||||
SortingPickler.dispatch = copy.copy(Pickler.dispatch)
|
||||
SortingPickler.dispatch[dict] = SortingPickler.save_dict
|
||||
|
||||
|
||||
def sorting_dumps(obj, protocol=None):
|
||||
file = cStringIO.StringIO()
|
||||
file = StringIO()
|
||||
SortingPickler(file, protocol).dump(obj)
|
||||
return file.getvalue()
|
||||
# END #####################################################################
|
||||
@@ -115,7 +108,7 @@ def copystream_progress(request, chunk_size=10 ** 5):
|
||||
"""
|
||||
env = request.env
|
||||
if not env.get('CONTENT_LENGTH', None):
|
||||
return cStringIO.StringIO()
|
||||
return StringIO()
|
||||
source = env['wsgi.input']
|
||||
try:
|
||||
size = int(env['CONTENT_LENGTH'])
|
||||
@@ -399,7 +392,7 @@ class Response(Storage):
|
||||
self.status = 200
|
||||
self.headers = dict()
|
||||
self.headers['X-Powered-By'] = 'web2py'
|
||||
self.body = cStringIO.StringIO()
|
||||
self.body = StringIO()
|
||||
self.session_id = None
|
||||
self.cookies = Cookie.SimpleCookie()
|
||||
self.postprocessing = []
|
||||
@@ -441,9 +434,9 @@ class Response(Storage):
|
||||
self._vars.update(b)
|
||||
self._view_environment.update(self._vars)
|
||||
if view:
|
||||
import cStringIO
|
||||
from .compat import StringIO
|
||||
(obody, oview) = (self.body, self.view)
|
||||
(self.body, self.view) = (cStringIO.StringIO(), view)
|
||||
(self.body, self.view) = (StringIO(), view)
|
||||
run_view_in(self._view_environment)
|
||||
page = self.body.getvalue()
|
||||
self.body.close()
|
||||
@@ -655,6 +648,7 @@ class Response(Storage):
|
||||
return json(data, default=default or custom_json)
|
||||
|
||||
def xmlrpc(self, request, methods):
|
||||
from gluon.xmlrpc import handler
|
||||
"""
|
||||
assuming::
|
||||
|
||||
@@ -671,7 +665,7 @@ class Response(Storage):
|
||||
import xmlrpclib
|
||||
connection = xmlrpclib.ServerProxy(
|
||||
'http://hostname/app/contr/func')
|
||||
print connection.add(3, 4)
|
||||
print(connection.add(3, 4))
|
||||
|
||||
"""
|
||||
|
||||
@@ -1234,4 +1228,4 @@ class Session(Storage):
|
||||
def pickle_session(s):
|
||||
return Session, (dict(s),)
|
||||
|
||||
copy_reg.pickle(Session, pickle_session)
|
||||
copyreg.pickle(Session, pickle_session)
|
||||
|
||||
+13
-22
@@ -18,20 +18,11 @@ import copy
|
||||
import types
|
||||
import urllib
|
||||
import base64
|
||||
import sanitizer
|
||||
from gluon import sanitizer, decoder
|
||||
import itertools
|
||||
import decoder
|
||||
import copy_reg
|
||||
from functools import reduce
|
||||
try:
|
||||
import cPickle as pickle
|
||||
except:
|
||||
import pickle
|
||||
from gluon._compat import reduce, pickle, copyreg, HTMLParser, name2codepoint, iteritems, unichr, unicodeT
|
||||
import marshal
|
||||
|
||||
from HTMLParser import HTMLParser
|
||||
from htmlentitydefs import name2codepoint
|
||||
|
||||
from gluon.storage import Storage
|
||||
from gluon.utils import web2py_uuid, simple_hash, compare
|
||||
from gluon.highlight import highlight
|
||||
@@ -42,7 +33,7 @@ regex_crlf = re.compile('\r|\n')
|
||||
join = ''.join
|
||||
|
||||
# name2codepoint is incomplete respect to xhtml (and xml): 'apos' is missing.
|
||||
entitydefs = dict(map(lambda k_v: (k_v[0], unichr(k_v[1]).encode('utf-8')), name2codepoint.iteritems()))
|
||||
entitydefs = dict(map(lambda k_v: (k_v[0], unichr(k_v[1]).encode('utf-8')), iteritems(name2codepoint)))
|
||||
entitydefs.setdefault('apos', u"'".encode('utf-8'))
|
||||
|
||||
|
||||
@@ -132,9 +123,9 @@ def xmlescape(data, quote=True):
|
||||
return data.xml()
|
||||
|
||||
# otherwise, make it a string
|
||||
if not isinstance(data, (str, unicode)):
|
||||
if not isinstance(data, (str, unicodeT)):
|
||||
data = str(data)
|
||||
elif isinstance(data, unicode):
|
||||
elif isinstance(data, unicodeT):
|
||||
data = data.encode('utf8', 'xmlcharrefreplace')
|
||||
|
||||
# ... and do the escaping
|
||||
@@ -608,7 +599,7 @@ class XML(XmlComponent):
|
||||
|
||||
if sanitize:
|
||||
text = sanitizer.sanitize(text, permitted_tags, allowed_attributes)
|
||||
if isinstance(text, unicode):
|
||||
if isinstance(text, unicodeT):
|
||||
text = text.encode('utf8', 'xmlcharrefreplace')
|
||||
elif not isinstance(text, str):
|
||||
text = str(text)
|
||||
@@ -675,7 +666,7 @@ def XML_unpickle(data):
|
||||
|
||||
def XML_pickle(data):
|
||||
return XML_unpickle, (marshal.dumps(str(data)),)
|
||||
copy_reg.pickle(XML, XML_pickle, XML_unpickle)
|
||||
copyreg.pickle(XML, XML_pickle, XML_unpickle)
|
||||
|
||||
|
||||
class DIV(XmlComponent):
|
||||
@@ -799,7 +790,7 @@ class DIV(XmlComponent):
|
||||
value: the new value
|
||||
"""
|
||||
self._setnode(value)
|
||||
if isinstance(i, (str, unicode)):
|
||||
if isinstance(i, (str, unicodeT)):
|
||||
self.attributes[i] = value
|
||||
else:
|
||||
self.components[i] = value
|
||||
@@ -1264,7 +1255,7 @@ class __tag_div__(DIV):
|
||||
DIV.__init__(self, *a, **b)
|
||||
self.tag = name
|
||||
|
||||
copy_reg.pickle(__tag_div__, TAG_pickler, TAG_unpickler)
|
||||
copyreg.pickle(__tag_div__, TAG_pickler, TAG_unpickler)
|
||||
|
||||
|
||||
class __TAG__(XmlComponent):
|
||||
@@ -1285,7 +1276,7 @@ class __TAG__(XmlComponent):
|
||||
def __getattr__(self, name):
|
||||
if name[-1:] == '_':
|
||||
name = name[:-1] + '/'
|
||||
if isinstance(name, unicode):
|
||||
if isinstance(name, unicodeT):
|
||||
name = name.encode('utf-8')
|
||||
return lambda *a, **b: __tag_div__(name, *a, **b)
|
||||
|
||||
@@ -2442,7 +2433,7 @@ class BEAUTIFY(DIV):
|
||||
try:
|
||||
keys = (sorter and sorter(c)) or c
|
||||
for key in keys:
|
||||
if isinstance(key, (str, unicode)) and keyfilter:
|
||||
if isinstance(key, (str, unicodeT)) and keyfilter:
|
||||
filtered_key = keyfilter(key)
|
||||
else:
|
||||
filtered_key = str(key)
|
||||
@@ -2462,7 +2453,7 @@ class BEAUTIFY(DIV):
|
||||
pass
|
||||
if isinstance(c, str):
|
||||
components.append(str(c))
|
||||
elif isinstance(c, unicode):
|
||||
elif isinstance(c, unicodeT):
|
||||
components.append(c.encode('utf8'))
|
||||
elif isinstance(c, (list, tuple)):
|
||||
items = [TR(TD(BEAUTIFY(item, **attributes)))
|
||||
@@ -2691,7 +2682,7 @@ class web2pyHTMLParser(HTMLParser):
|
||||
self.last = tag.tag[:-1]
|
||||
|
||||
def handle_data(self, data):
|
||||
if not isinstance(data, unicode):
|
||||
if not isinstance(data, unicodeT):
|
||||
try:
|
||||
data = data.decode('utf8')
|
||||
except:
|
||||
|
||||
+10
-10
@@ -18,20 +18,17 @@ import pkgutil
|
||||
import logging
|
||||
from cgi import escape
|
||||
from threading import RLock
|
||||
|
||||
try:
|
||||
import copyreg as copy_reg # python 3
|
||||
except ImportError:
|
||||
import copy_reg # python 2
|
||||
from gluon._compat import copyreg, PY2, maketrans
|
||||
|
||||
from gluon.portalocker import read_locked, LockedFile
|
||||
from utf8 import Utf8
|
||||
from gluon.utf8 import Utf8
|
||||
|
||||
from gluon.fileutils import listdir
|
||||
from gluon.cfs import getcfs
|
||||
from gluon.html import XML, xmlescape
|
||||
from gluon.contrib.markmin.markmin2html import render, markmin_escape
|
||||
from string import maketrans
|
||||
if PY2:
|
||||
# FIXME PY3
|
||||
from gluon.contrib.markmin.markmin2html import render, markmin_escape
|
||||
|
||||
__all__ = ['translator', 'findT', 'update_all_languages']
|
||||
|
||||
@@ -53,7 +50,10 @@ DEFAULT_GET_PLURAL_ID = lambda n: 0
|
||||
# word is unchangeable
|
||||
DEFAULT_CONSTRUCT_PLURAL_FORM = lambda word, plural_id: word
|
||||
|
||||
NUMBERS = (int, long, float)
|
||||
if PY2:
|
||||
NUMBERS = (int, long, float)
|
||||
else:
|
||||
NUMBERS = (int, float)
|
||||
|
||||
# pattern to find T(blah blah blah) expressions
|
||||
PY_STRING_LITERAL_RE = r'(?<=[^\w]T\()(?P<name>'\
|
||||
@@ -446,7 +446,7 @@ class lazyT(object):
|
||||
def pickle_lazyT(c):
|
||||
return str, (c.xml(),)
|
||||
|
||||
copy_reg.pickle(lazyT, pickle_lazyT)
|
||||
copyreg.pickle(lazyT, pickle_lazyT)
|
||||
|
||||
|
||||
class translator(object):
|
||||
|
||||
+5
-6
@@ -13,7 +13,7 @@ from __future__ import print_function
|
||||
|
||||
if False: import import_all # DO NOT REMOVE PART OF FREEZE PROCESS
|
||||
import gc
|
||||
import Cookie
|
||||
|
||||
import os
|
||||
import re
|
||||
import copy
|
||||
@@ -23,11 +23,10 @@ import datetime
|
||||
import signal
|
||||
import socket
|
||||
import random
|
||||
import urllib2
|
||||
import string
|
||||
|
||||
|
||||
from thread import allocate_lock
|
||||
from gluon._compat import Cookie, urllib2
|
||||
#from thread import allocate_lock
|
||||
|
||||
from gluon.fileutils import abspath, write_file
|
||||
from gluon.settings import global_settings
|
||||
@@ -710,9 +709,9 @@ class HttpServer(object):
|
||||
# if interfaces is specified, it must be tested for rocket parameter correctness
|
||||
# not necessarily completely tested (e.g. content of tuples or ip-format)
|
||||
import types
|
||||
if isinstance(interfaces, types.ListType):
|
||||
if isinstance(interfaces, list):
|
||||
for i in interfaces:
|
||||
if not isinstance(i, types.TupleType):
|
||||
if not isinstance(i, tuple):
|
||||
raise "Wrong format for rocket interfaces parameter - see http://packages.python.org/rocket/"
|
||||
else:
|
||||
raise "Wrong format for rocket interfaces parameter - see http://packages.python.org/rocket/"
|
||||
|
||||
+3
-6
@@ -10,10 +10,7 @@ Restricted environment to execute application's code
|
||||
"""
|
||||
|
||||
import sys
|
||||
try:
|
||||
import cPickle as pickle
|
||||
except:
|
||||
import pickle
|
||||
from gluon._compat import pickle
|
||||
import traceback
|
||||
import types
|
||||
import os
|
||||
@@ -224,7 +221,7 @@ def restricted(code, environment=None, layer='Unknown'):
|
||||
ccode = code
|
||||
else:
|
||||
ccode = compile2(code, layer)
|
||||
exec ccode in environment
|
||||
exec (ccode) in environment
|
||||
except HTTP:
|
||||
raise
|
||||
except RestrictedError:
|
||||
@@ -252,7 +249,7 @@ def snapshot(info=None, context=5, code=None, environment=None):
|
||||
# if no exception info given, get current:
|
||||
etype, evalue, etb = info or sys.exc_info()
|
||||
|
||||
if isinstance(etype, types.ClassType):
|
||||
if isinstance(etype, type):
|
||||
etype = etype.__name__
|
||||
|
||||
# create a snapshot dict with some basic information
|
||||
|
||||
+1
-3
@@ -10,11 +10,9 @@ Cross-site scripting (XSS) defense
|
||||
-----------------------------------
|
||||
"""
|
||||
|
||||
from HTMLParser import HTMLParser
|
||||
from ._compat import HTMLParser, urlparse, entitydefs
|
||||
from cgi import escape
|
||||
from urlparse import urlparse
|
||||
from formatter import AbstractFormatter
|
||||
from htmlentitydefs import entitydefs
|
||||
from xml.sax.saxutils import quoteattr
|
||||
|
||||
__all__ = ['sanitize']
|
||||
|
||||
@@ -120,8 +120,9 @@ def json(value, default=custom_json):
|
||||
value = json_parser.dumps(value, default=default)
|
||||
# replace JavaScript incompatible spacing
|
||||
# http://timelessrepo.com/json-isnt-a-javascript-subset
|
||||
return value.replace(ur'\u2028', '\\u2028').replace(ur'\2029', '\\u2029')
|
||||
|
||||
# PY3 FIXME
|
||||
# return value.replace(ur'\u2028', '\\u2028').replace(ur'\2029', '\\u2029')
|
||||
return value
|
||||
|
||||
def csv(value):
|
||||
return ''
|
||||
|
||||
+5
-6
@@ -86,7 +86,7 @@ def exec_environment(
|
||||
if pyfile:
|
||||
pycfile = pyfile + 'c'
|
||||
if os.path.isfile(pycfile):
|
||||
exec read_pyc(pycfile) in env
|
||||
exec (read_pyc(pycfile)) in env
|
||||
else:
|
||||
execfile(pyfile, env)
|
||||
return Storage(env)
|
||||
@@ -243,7 +243,7 @@ def run(
|
||||
"controllers_%s_%s.pyc" % (c, f))
|
||||
if ((cronjob and os.path.isfile(pycfile))
|
||||
or not os.path.isfile(pyfile)):
|
||||
exec read_pyc(pycfile) in _env
|
||||
exec (read_pyc(pycfile)) in _env
|
||||
elif os.path.isfile(pyfile):
|
||||
execfile(pyfile, _env)
|
||||
else:
|
||||
@@ -259,7 +259,7 @@ def run(
|
||||
ccode = None
|
||||
if startfile.endswith('.pyc'):
|
||||
ccode = read_pyc(startfile)
|
||||
exec ccode in _env
|
||||
exec (ccode) in _env
|
||||
else:
|
||||
execfile(startfile, _env)
|
||||
|
||||
@@ -397,8 +397,7 @@ def test(testpath, import_models=True, verbose=False):
|
||||
def doctest_object(name, obj):
|
||||
"""doctest obj and enclosed methods and classes."""
|
||||
|
||||
if type(obj) in (types.FunctionType, types.TypeType,
|
||||
types.ClassType, types.MethodType,
|
||||
if type(obj) in (types.FunctionType, type, types.MethodType,
|
||||
types.UnboundMethodType):
|
||||
|
||||
# Reload environment before each test.
|
||||
@@ -409,7 +408,7 @@ def test(testpath, import_models=True, verbose=False):
|
||||
obj, globs=globs,
|
||||
name='%s: %s' % (os.path.basename(testfile),
|
||||
name), verbose=verbose)
|
||||
if type(obj) in (types.TypeType, types.ClassType):
|
||||
if type(obj) in (type):
|
||||
for attr_name in dir(obj):
|
||||
|
||||
# Execute . operator so decorators are executed.
|
||||
|
||||
+5
-5
@@ -17,9 +17,9 @@ Holds:
|
||||
import datetime
|
||||
import urllib
|
||||
import re
|
||||
import cStringIO
|
||||
|
||||
import os
|
||||
from gluon._compat import StringIO, unichr
|
||||
from gluon.http import HTTP, redirect
|
||||
from gluon.html import XmlComponent, truncate_string
|
||||
from gluon.html import XML, SPAN, TAG, A, DIV, CAT, UL, LI, TEXTAREA, BR, IMG
|
||||
@@ -1654,7 +1654,7 @@ class SQLFORM(FORM):
|
||||
elif isinstance(f, (str, unicode)):
|
||||
# do not know why this happens, it should not
|
||||
(source_file, original_filename) = \
|
||||
(cStringIO.StringIO(f), 'file.txt')
|
||||
(StringIO(f), 'file.txt')
|
||||
else:
|
||||
# this should never happen, why does it happen?
|
||||
# print 'f=', repr(f)
|
||||
@@ -3472,8 +3472,8 @@ class ExporterTSV(ExportClass):
|
||||
ExportClass.__init__(self, rows)
|
||||
|
||||
def export(self):
|
||||
out = cStringIO.StringIO()
|
||||
final = cStringIO.StringIO()
|
||||
out = StringIO()
|
||||
final = StringIO()
|
||||
import csv
|
||||
writer = csv.writer(out, delimiter='\t')
|
||||
if self.rows:
|
||||
@@ -3511,7 +3511,7 @@ class ExporterCSV(ExportClass):
|
||||
|
||||
def export(self): # export CSV with rows.represent
|
||||
if self.rows:
|
||||
s = cStringIO.StringIO()
|
||||
s = StringIO()
|
||||
self.rows.export_to_csv_file(s, represent=True)
|
||||
return s.getvalue()
|
||||
else:
|
||||
|
||||
+6
-9
@@ -12,11 +12,7 @@ Provides:
|
||||
- Storage; like dictionary allowing also for `obj.foo` for `obj['foo']`
|
||||
"""
|
||||
|
||||
try:
|
||||
import cPickle as pickle
|
||||
except:
|
||||
import pickle
|
||||
import copy_reg
|
||||
from gluon._compat import copyreg, pickle, PY2
|
||||
import gluon.portalocker as portalocker
|
||||
|
||||
__all__ = ['List', 'Storage', 'Settings', 'Messages',
|
||||
@@ -139,10 +135,11 @@ class Storage(dict):
|
||||
def pickle_storage(s):
|
||||
return Storage, (dict(s),)
|
||||
|
||||
copy_reg.pickle(Storage, pickle_storage)
|
||||
|
||||
PICKABLE = (str, int, long, float, bool, list, dict, tuple, set)
|
||||
|
||||
copyreg.pickle(Storage, pickle_storage)
|
||||
if PY2:
|
||||
PICKABLE = (str, int, long, float, bool, list, dict, tuple, set)
|
||||
else:
|
||||
PICKABLE = (str, int, float, bool, list, dict, tuple, set)
|
||||
|
||||
class StorageList(Storage):
|
||||
"""
|
||||
|
||||
@@ -15,7 +15,6 @@ import stat
|
||||
import time
|
||||
import re
|
||||
import errno
|
||||
import rewrite
|
||||
from gluon.http import HTTP
|
||||
from gluon.contenttype import contenttype
|
||||
|
||||
|
||||
+23
-23
@@ -1,28 +1,28 @@
|
||||
import sys
|
||||
|
||||
from test_http import *
|
||||
from test_cache import *
|
||||
from test_contenttype import *
|
||||
from test_compileapp import *
|
||||
from test_fileutils import *
|
||||
from test_globals import *
|
||||
from test_html import *
|
||||
from test_is_url import *
|
||||
from test_languages import *
|
||||
from test_router import *
|
||||
from test_recfile import *
|
||||
from test_routes import *
|
||||
from test_storage import *
|
||||
from test_serializers import *
|
||||
from test_template import *
|
||||
from test_validators import *
|
||||
from test_utils import *
|
||||
from test_contribs import *
|
||||
from test_web import *
|
||||
from test_dal import *
|
||||
from test_tools import *
|
||||
from test_appadmin import *
|
||||
from test_scheduler import *
|
||||
from .test_http import *
|
||||
from .test_cache import *
|
||||
from .test_contenttype import *
|
||||
from .test_compileapp import *
|
||||
from .test_fileutils import *
|
||||
from .test_globals import *
|
||||
from .test_html import *
|
||||
from .test_is_url import *
|
||||
from .test_languages import *
|
||||
from .test_router import *
|
||||
from .test_recfile import *
|
||||
from .test_routes import *
|
||||
from .test_storage import *
|
||||
from .test_serializers import *
|
||||
from .test_template import *
|
||||
from .test_validators import *
|
||||
from .test_utils import *
|
||||
from .test_contribs import *
|
||||
from .test_web import *
|
||||
from .test_dal import *
|
||||
from .test_tools import *
|
||||
from .test_appadmin import *
|
||||
from .test_scheduler import *
|
||||
|
||||
if sys.version[:3] == '2.7':
|
||||
from test_old_doctests import *
|
||||
|
||||
@@ -43,7 +43,7 @@ class TestSerializers(unittest.TestCase):
|
||||
json_web2pyfied = [json(obj) for obj in iso_objs]
|
||||
self.assertEqual(json_objs, json_web2pyfied)
|
||||
# int or long int()ified
|
||||
self.assertEqual(json(1), json(1L))
|
||||
# self.assertEqual(json(1), json(1))
|
||||
# decimal stringified
|
||||
obj = {'a': decimal.Decimal('4.312312312312')}
|
||||
self.assertEqual(json(obj), u'{"a": "4.312312312312"}')
|
||||
|
||||
@@ -869,7 +869,7 @@ class TestAuth(unittest.TestCase):
|
||||
# not deleted
|
||||
self.assertFalse(self.auth.del_membership('some_test_group'))
|
||||
self.assertEqual(set(self.db.auth_membership(membership_id).as_dict().items()),
|
||||
set({'group_id': 2L, 'user_id': 1L, 'id': 2L}.items())) # is not deleted
|
||||
set({'group_id': 2, 'user_id': 1, 'id': 2}.items())) # is not deleted
|
||||
# deleted
|
||||
bart_id = self.db(self.db.auth_user.username == 'bart').select(self.db.auth_user.id).first().id
|
||||
self.assertTrue(self.auth.del_membership('some_test_group', user_id=bart_id))
|
||||
|
||||
+5
-3
@@ -11,12 +11,14 @@ Utilities and class for UTF8 strings managing
|
||||
----------------------------------------------
|
||||
"""
|
||||
from __future__ import print_function
|
||||
import __builtin__
|
||||
from gluon._compat import builtin as __builtin__
|
||||
|
||||
__all__ = ['Utf8']
|
||||
|
||||
repr_escape_tab = {}
|
||||
for i in range(1, 32):
|
||||
repr_escape_tab[i] = ur'\x%02x' % i
|
||||
#FIXME PY3
|
||||
#for i in range(1, 32):
|
||||
# repr_escape_tab[i] = ur'\x%02x' % i
|
||||
repr_escape_tab[7] = u'\\a'
|
||||
repr_escape_tab[8] = u'\\b'
|
||||
repr_escape_tab[9] = u'\\t'
|
||||
|
||||
+8
-14
@@ -23,17 +23,11 @@ import logging
|
||||
import socket
|
||||
import base64
|
||||
import zlib
|
||||
from gluon._compat import basestring, pickle, PY2, xrange, to_bytes
|
||||
|
||||
_struct_2_long_long = struct.Struct('=QQ')
|
||||
|
||||
python_version = sys.version_info[0]
|
||||
|
||||
if python_version == 2:
|
||||
import cPickle as pickle
|
||||
else:
|
||||
import pickle
|
||||
|
||||
import hashlib
|
||||
import hashlib, binascii
|
||||
from hashlib import md5, sha1, sha224, sha256, sha384, sha512
|
||||
|
||||
try:
|
||||
@@ -46,9 +40,9 @@ import hmac
|
||||
if hasattr(hashlib, "pbkdf2_hmac"):
|
||||
def pbkdf2_hex(data, salt, iterations=1000, keylen=24, hashfunc=None):
|
||||
hashfunc = hashfunc or sha1
|
||||
return hashlib.pbkdf2_hmac(hashfunc().name,
|
||||
data, salt, iterations,
|
||||
keylen).encode("hex")
|
||||
hmac = hashlib.pbkdf2_hmac(hashfunc().name, to_bytes(data),
|
||||
to_bytes(salt), iterations, keylen)
|
||||
return binascii.hexlify(hmac)
|
||||
HAVE_PBKDF2 = True
|
||||
else:
|
||||
try:
|
||||
@@ -85,7 +79,7 @@ def compare(a, b):
|
||||
return hmac.compare_digest(a, b)
|
||||
result = len(a) ^ len(b)
|
||||
for i in xrange(len(b)):
|
||||
result |= ord(a[i%len(a)]) ^ ord(b[i])
|
||||
result |= ord(a[i%len(a)]) ^ ord(b[i])
|
||||
return result == 0
|
||||
|
||||
|
||||
@@ -227,7 +221,7 @@ def initialize_urandom():
|
||||
# try to add process-specific entropy
|
||||
frandom = open('/dev/urandom', 'wb')
|
||||
try:
|
||||
if python_version == 2:
|
||||
if PY2:
|
||||
frandom.write(''.join(chr(t) for t in ctokens)) # python 2
|
||||
else:
|
||||
frandom.write(bytes([]).join(bytes([t]) for t in ctokens)) # python 3
|
||||
@@ -242,7 +236,7 @@ def initialize_urandom():
|
||||
"""Cryptographically secure session management is not possible on your system because
|
||||
your system does not provide a cryptographically secure entropy source.
|
||||
This is not specific to web2py; consider deploying on a different operating system.""")
|
||||
if python_version == 2:
|
||||
if PY2:
|
||||
packed = ''.join(chr(x) for x in ctokens) # python 2
|
||||
else:
|
||||
packed = bytes([]).join(bytes([x]) for x in ctokens) # python 3
|
||||
|
||||
+18
-18
@@ -21,7 +21,7 @@ import urllib
|
||||
import struct
|
||||
import decimal
|
||||
import unicodedata
|
||||
from cStringIO import StringIO
|
||||
from gluon._compat import StringIO, long, unicodeT
|
||||
from gluon.utils import simple_hash, web2py_uuid, DIGEST_ALG_BY_SIZE
|
||||
from pydal.objects import Field, FieldVirtual, FieldMethod
|
||||
from functools import reduce
|
||||
@@ -80,7 +80,7 @@ except ImportError:
|
||||
def translate(text):
|
||||
if text is None:
|
||||
return None
|
||||
elif isinstance(text, (str, unicode)) and have_current:
|
||||
elif isinstance(text, (str, unicodeT)) and have_current:
|
||||
if hasattr(current, 'T'):
|
||||
return str(current.T(text))
|
||||
return str(text)
|
||||
@@ -185,7 +185,7 @@ class IS_MATCH(Validator):
|
||||
if not expression.endswith('$'):
|
||||
expression = '(%s)$' % expression
|
||||
if is_unicode:
|
||||
if not isinstance(expression, unicode):
|
||||
if not isinstance(expression, unicodeT):
|
||||
expression = expression.decode('utf8')
|
||||
self.regex = re.compile(expression, re.UNICODE)
|
||||
else:
|
||||
@@ -196,12 +196,12 @@ class IS_MATCH(Validator):
|
||||
|
||||
def __call__(self, value):
|
||||
if self.is_unicode:
|
||||
if not isinstance(value, unicode):
|
||||
if not isinstance(value, unicodeT):
|
||||
match = self.regex.search(str(value).decode('utf8'))
|
||||
else:
|
||||
match = self.regex.search(value)
|
||||
else:
|
||||
if not isinstance(value, unicode):
|
||||
if not isinstance(value, unicodeT):
|
||||
match = self.regex.search(str(value))
|
||||
else:
|
||||
match = self.regex.search(value.encode('utf8'))
|
||||
@@ -267,7 +267,7 @@ class IS_EXPR(Validator):
|
||||
return (value, self.expression(value))
|
||||
# for backward compatibility
|
||||
self.environment.update(value=value)
|
||||
exec '__ret__=' + self.expression in self.environment
|
||||
exec ('__ret__=' + self.expression) in self.environment
|
||||
if self.environment['__ret__']:
|
||||
return (value, None)
|
||||
return (value, translate(self.error_message))
|
||||
@@ -338,7 +338,7 @@ class IS_LENGTH(Validator):
|
||||
lvalue = len(value)
|
||||
if self.minsize <= lvalue <= self.maxsize:
|
||||
return (value, None)
|
||||
elif isinstance(value, unicode):
|
||||
elif isinstance(value, unicodeT):
|
||||
if self.minsize <= len(value) <= self.maxsize:
|
||||
return (value.encode('utf8'), None)
|
||||
elif isinstance(value, (tuple, list)):
|
||||
@@ -717,7 +717,7 @@ class IS_NOT_IN_DB(Validator):
|
||||
self.record_id = id
|
||||
|
||||
def __call__(self, value):
|
||||
if isinstance(value, unicode):
|
||||
if isinstance(value, unicodeT):
|
||||
value = value.encode('utf8')
|
||||
else:
|
||||
value = str(value)
|
||||
@@ -987,7 +987,7 @@ class IS_DECIMAL_IN_RANGE(Validator):
|
||||
|
||||
def is_empty(value, empty_regex=None):
|
||||
"""test empty field"""
|
||||
if isinstance(value, (str, unicode)):
|
||||
if isinstance(value, (str, unicodeT)):
|
||||
value = value.strip()
|
||||
if empty_regex is not None and empty_regex.match(value):
|
||||
value = ''
|
||||
@@ -2096,7 +2096,7 @@ class IS_URL(Validator):
|
||||
else:
|
||||
raise SyntaxError("invalid mode '%s' in IS_URL" % self.mode)
|
||||
|
||||
if not isinstance(value, unicode):
|
||||
if not isinstance(value, unicodeT):
|
||||
return subMethod(value)
|
||||
else:
|
||||
try:
|
||||
@@ -2896,13 +2896,13 @@ class CRYPT(object):
|
||||
|
||||
# entropy calculator for IS_STRONG
|
||||
#
|
||||
lowerset = frozenset(unicode('abcdefghijklmnopqrstuvwxyz'))
|
||||
upperset = frozenset(unicode('ABCDEFGHIJKLMNOPQRSTUVWXYZ'))
|
||||
numberset = frozenset(unicode('0123456789'))
|
||||
sym1set = frozenset(unicode('!@#$%^&*()'))
|
||||
sym2set = frozenset(unicode('~`-_=+[]{}\\|;:\'",.<>?/'))
|
||||
lowerset = frozenset(u'abcdefghijklmnopqrstuvwxyz')
|
||||
upperset = frozenset(u'ABCDEFGHIJKLMNOPQRSTUVWXYZ')
|
||||
numberset = frozenset(u'0123456789')
|
||||
sym1set = frozenset(u'!@#$%^&*()')
|
||||
sym2set = frozenset(u'~`-_=+[]{}\\|;:\'",.<>?/')
|
||||
otherset = frozenset(
|
||||
unicode('0123456789abcdefghijklmnopqrstuvwxyz')) # anything else
|
||||
u'0123456789abcdefghijklmnopqrstuvwxyz') # anything else
|
||||
|
||||
|
||||
def calc_entropy(string):
|
||||
@@ -3350,8 +3350,8 @@ class IS_IPV4(Validator):
|
||||
'^(([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])\.){3}([1-9]?\d|1\d\d|2[0-4]\d|25[0-5])$')
|
||||
numbers = (16777216, 65536, 256, 1)
|
||||
localhost = 2130706433
|
||||
private = ((2886729728L, 2886795263L), (3232235520L, 3232301055L))
|
||||
automatic = (2851995648L, 2852061183L)
|
||||
private = ((2886729728, 2886795263), (3232235520, 3232301055))
|
||||
automatic = (2851995648, 2852061183)
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
|
||||
+6
-8
@@ -13,9 +13,8 @@ from __future__ import print_function
|
||||
|
||||
import datetime
|
||||
import sys
|
||||
import cStringIO
|
||||
from gluon._compat import StringIO, thread
|
||||
import time
|
||||
import thread
|
||||
import threading
|
||||
import os
|
||||
import copy
|
||||
@@ -23,14 +22,13 @@ import socket
|
||||
import signal
|
||||
import math
|
||||
import logging
|
||||
import newcron
|
||||
import getpass
|
||||
import gluon.main as main
|
||||
from gluon import main, newcron
|
||||
|
||||
from gluon.fileutils import read_file, write_file, create_welcome_w2p
|
||||
from gluon.settings import global_settings
|
||||
from gluon.shell import run, test
|
||||
from gluon.utils import is_valid_ip_address, is_loopback_ip_address, getipaddrinfo
|
||||
from .fileutils import read_file, write_file, create_welcome_w2p
|
||||
from .settings import global_settings
|
||||
from .shell import run, test
|
||||
from .utils import is_valid_ip_address, is_loopback_ip_address, getipaddrinfo
|
||||
|
||||
|
||||
ProgramName = 'web2py Web Framework'
|
||||
|
||||
Reference in New Issue
Block a user