From 0528a347b37140671496f20914c8ca735fd8e5c5 Mon Sep 17 00:00:00 2001 From: Giovanni Barillari Date: Sat, 13 Aug 2016 15:38:55 +0200 Subject: [PATCH] Updated pyDAL to 16.08 --- applications/admin/controllers/default.py | 2 +- applications/welcome/controllers/appadmin.py | 6 +- gluon/_compat.py | 157 +++++++++++++++++++ gluon/admin.py | 2 +- gluon/cache.py | 2 +- gluon/cfs.py | 2 +- gluon/compileapp.py | 2 +- gluon/contenttype.py | 2 +- gluon/contrib/appconfig.py | 2 +- gluon/contrib/autolinks.py | 2 +- gluon/contrib/markmin/markmin2html.py | 2 +- gluon/contrib/shell.py | 2 +- gluon/contrib/webclient.py | 2 +- gluon/custom_import.py | 2 +- gluon/debug.py | 2 +- gluon/fileutils.py | 2 +- gluon/globals.py | 6 +- gluon/highlight.py | 2 +- gluon/html.py | 10 +- gluon/http.py | 2 +- gluon/languages.py | 2 +- gluon/main.py | 2 +- gluon/packages/dal | 2 +- gluon/recfile.py | 2 +- gluon/restricted.py | 2 +- gluon/rewrite.py | 2 +- gluon/rocket.py | 2 +- gluon/sanitizer.py | 2 +- gluon/scheduler.py | 2 +- gluon/serializers.py | 2 +- gluon/settings.py | 4 +- gluon/shell.py | 2 +- gluon/sqlhtml.py | 2 +- gluon/storage.py | 2 +- gluon/streamer.py | 2 +- gluon/template.py | 2 +- gluon/tests/test_contenttype.py | 2 +- gluon/tests/test_contribs.py | 2 +- gluon/tests/test_dal.py | 2 +- gluon/tests/test_globals.py | 2 +- gluon/tests/test_html.py | 4 +- gluon/tests/test_languages.py | 2 +- gluon/tests/test_router.py | 2 +- gluon/tests/test_routes.py | 2 +- gluon/tests/test_storage.py | 2 +- gluon/tests/test_template.py | 2 +- gluon/tests/test_tools.py | 2 +- gluon/tests/test_validators.py | 2 +- gluon/tests/test_web.py | 2 +- gluon/tools.py | 12 +- gluon/utf8.py | 2 +- gluon/utils.py | 4 +- gluon/validators.py | 2 +- gluon/widget.py | 4 +- 54 files changed, 227 insertions(+), 70 deletions(-) create mode 100644 gluon/_compat.py diff --git a/applications/admin/controllers/default.py b/applications/admin/controllers/default.py index bdadcf2b..6c46d971 100644 --- a/applications/admin/controllers/default.py +++ b/applications/admin/controllers/default.py @@ -15,7 +15,7 @@ from gluon.utils import web2py_uuid from gluon.tools import Config from gluon.compileapp import find_exposed_functions from glob import glob -from pydal._compat import iteritems, PY2, pickle, xrange, urlopen, to_bytes, StringIO, to_native +from gluon._compat import iteritems, PY2, pickle, xrange, urlopen, to_bytes, StringIO, to_native import shutil import platform diff --git a/applications/welcome/controllers/appadmin.py b/applications/welcome/controllers/appadmin.py index 6de48036..0b8b227f 100644 --- a/applications/welcome/controllers/appadmin.py +++ b/applications/welcome/controllers/appadmin.py @@ -10,7 +10,7 @@ import datetime import copy import gluon.contenttype import gluon.fileutils -from pydal._compat import iteritems +from gluon._compat import iteritems try: import pygraphviz as pgv @@ -213,7 +213,7 @@ def select(): if is_imap: step = 3 - + stop = start + step table = None @@ -421,7 +421,7 @@ def ccache(): 'oldest': time.time(), 'keys': [] } - + disk = copy.copy(ram) total = copy.copy(ram) disk['keys'] = [] diff --git a/gluon/_compat.py b/gluon/_compat.py new file mode 100644 index 00000000..f7b53dde --- /dev/null +++ b/gluon/_compat.py @@ -0,0 +1,157 @@ +import sys +import hashlib +import os + +PY2 = sys.version_info[0] == 2 + +_identity = lambda x: x + +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 + import Queue + import ConfigParser as configparser + from email.MIMEBase import MIMEBase + from email.Header import Header + from email import Encoders, Charset + from email.MIMEMultipart import MIMEMultipart + from email.MIMEText import MIMEText + from email.Charset import add_charset, QP as charset_QP + from urllib import FancyURLopener, urlencode, urlopen + from urllib import quote as urllib_quote, unquote as urllib_unquote + from string import maketrans + from types import ClassType + import cgi + import cookielib + BytesIO = StringIO + reduce = reduce + hashlib_md5 = hashlib.md5 + iterkeys = lambda d: d.iterkeys() + itervalues = lambda d: d.itervalues() + iteritems = lambda d: d.iteritems() + integer_types = (int, long) + string_types = (str, unicode) + text_type = unicode + basestring = basestring + xrange = xrange + long = long + unichr = unichr + unicodeT = unicode + + def implements_bool(cls): + cls.__nonzero__ = cls.__bool__ + del cls.__bool__ + return cls + + def implements_iterator(cls): + cls.next = cls.__next__ + del cls.__next__ + return cls + + def to_bytes(obj, charset='utf-8', errors='strict'): + if obj is None: + return None + if isinstance(obj, (bytes, bytearray, buffer)): + return bytes(obj) + if isinstance(obj, unicode): + return obj.encode(charset, errors) + raise TypeError('Expected bytes') + + def to_native(obj, charset='utf8', errors='strict'): + if obj is None or isinstance(obj, str): + return obj + return obj.encode(charset, errors) + + +else: + import pickle + from io import StringIO, BytesIO + 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 + import configparser + import queue as Queue + from email.mime.base import MIMEBase + from email.mime.multipart import MIMEMultipart + from email.mime.text import MIMEText + from email import encoders as Encoders + from email.header import Header + from email.charset import Charset, add_charset, QP as charset_QP + from urllib.request import FancyURLopener, urlopen + from urllib.parse import quote as urllib_quote, unquote as urllib_unquote, urlencode + from http import cookiejar as cookielib + import html # warning, this is the python3 module and not the web2py html module + hashlib_md5 = lambda s: hashlib.md5(bytes(s, 'utf8')) + iterkeys = lambda d: iter(d.keys()) + itervalues = lambda d: iter(d.values()) + iteritems = lambda d: iter(d.items()) + integer_types = (int,) + string_types = (str,) + text_type = str + basestring = str + xrange = range + long = int + unichr = chr + unicodeT = str + maketrans = str.maketrans + ClassType = type + + implements_iterator = _identity + implements_bool = _identity + + def to_bytes(obj, charset='utf-8', errors='strict'): + if obj is None: + return None + if isinstance(obj, (bytes, bytearray, memoryview)): + return bytes(obj) + if isinstance(obj, str): + return obj.encode(charset, errors) + raise TypeError('Expected bytes') + + def to_native(obj, charset='utf8', errors='strict'): + if obj is None or isinstance(obj, str): + return obj + return obj.decode(charset, errors) + + +def with_metaclass(meta, *bases): + """Create a base class with a metaclass.""" + # This requires a bit of explanation: the basic idea is to make a dummy + # metaclass for one level of class instantiation that replaces itself with + # the actual metaclass. + class metaclass(meta): + __call__ = type.__call__ + __init__ = type.__init__ + + def __new__(cls, name, this_bases, d): + if this_bases is None: + return type.__new__(cls, name, (), d) + return meta(name, bases, d) + return metaclass('temporary_class', None, {}) + + +def to_unicode(obj, charset='utf-8', errors='strict'): + if obj is None: + return None + if not isinstance(obj, bytes): + return text_type(obj) + return obj.decode(charset, errors) + + +# shortcuts +pjoin = os.path.join +exists = os.path.exists diff --git a/gluon/admin.py b/gluon/admin.py index 9a1a5ff8..8c70c348 100644 --- a/gluon/admin.py +++ b/gluon/admin.py @@ -22,7 +22,7 @@ from gluon.fileutils import read_file, write_file, parse_version from gluon.restricted import RestrictedError from gluon.settings import global_settings from gluon.cache import CacheOnDisk -from pydal._compat import urlopen, to_native +from gluon._compat import urlopen, to_native if not global_settings.web2py_runtime_gae: import site diff --git a/gluon/cache.py b/gluon/cache.py index da38e5a0..5050d213 100644 --- a/gluon/cache.py +++ b/gluon/cache.py @@ -40,7 +40,7 @@ except ImportError: have_settings = False from pydal.contrib import portalocker -from pydal._compat import pickle, thread, to_bytes, to_native, hashlib_md5 +from gluon._compat import pickle, thread, to_bytes, to_native, hashlib_md5 try: import psutil diff --git a/gluon/cfs.py b/gluon/cfs.py index 8b8c695f..4925a3cd 100644 --- a/gluon/cfs.py +++ b/gluon/cfs.py @@ -15,7 +15,7 @@ Note: from os import stat from gluon.fileutils import read_file -from pydal._compat import thread +from gluon._compat import thread cfs = {} # for speed-up cfs_lock = thread.allocate_lock() # and thread safety diff --git a/gluon/compileapp.py b/gluon/compileapp.py index 5d0dc3b6..0ee9c18c 100644 --- a/gluon/compileapp.py +++ b/gluon/compileapp.py @@ -18,7 +18,7 @@ import fnmatch import os import copy import random -from pydal._compat import builtin, PY2, unicodeT, to_native, to_bytes, iteritems, basestring, reduce, xrange, long +from gluon._compat import builtin, PY2, unicodeT, to_native, to_bytes, iteritems, basestring, reduce, xrange, long from gluon.storage import Storage, List from gluon.template import parse_template from gluon.restricted import restricted, compile2 diff --git a/gluon/contenttype.py b/gluon/contenttype.py index 146ee2f4..7dd28f35 100644 --- a/gluon/contenttype.py +++ b/gluon/contenttype.py @@ -19,7 +19,7 @@ Additions: - .pickle: application/python-pickle - .w2p': application/w2p """ -from pydal._compat import to_native +from gluon._compat import to_native __all__ = ['contenttype'] diff --git a/gluon/contrib/appconfig.py b/gluon/contrib/appconfig.py index 849ada00..1160e08a 100644 --- a/gluon/contrib/appconfig.py +++ b/gluon/contrib/appconfig.py @@ -29,7 +29,7 @@ is restarted (or reload=True is passed). """ import os import json -from pydal._compat import thread, configparser +from gluon._compat import thread, configparser from gluon.globals import current locker = thread.allocate_lock() diff --git a/gluon/contrib/autolinks.py b/gluon/contrib/autolinks.py index 91d53a96..4670c304 100644 --- a/gluon/contrib/autolinks.py +++ b/gluon/contrib/autolinks.py @@ -42,7 +42,7 @@ revision3.com viddler.com """ from __future__ import print_function -from pydal._compat import FancyURLopener, urllib_quote +from gluon._compat import FancyURLopener, urllib_quote import re import cgi diff --git a/gluon/contrib/markmin/markmin2html.py b/gluon/contrib/markmin/markmin2html.py index e64224d2..9492a6ca 100755 --- a/gluon/contrib/markmin/markmin2html.py +++ b/gluon/contrib/markmin/markmin2html.py @@ -6,7 +6,7 @@ from __future__ import print_function import re import urllib -from pydal._compat import maketrans, urllib_quote, unicodeT, to_bytes, to_native, xrange +from gluon._compat import maketrans, urllib_quote, unicodeT, to_bytes, to_native, xrange from gluon.utils import local_html_escape as escape from ast import parse as ast_parse import ast diff --git a/gluon/contrib/shell.py b/gluon/contrib/shell.py index 6f43465a..638d3c81 100755 --- a/gluon/contrib/shell.py +++ b/gluon/contrib/shell.py @@ -29,7 +29,7 @@ An interactive, stateful AJAX shell that runs Python code on the server. """ from __future__ import print_function -from pydal._compat import ClassType, pickle, StringIO +from gluon._compat import ClassType, pickle, StringIO import logging import new import sys diff --git a/gluon/contrib/webclient.py b/gluon/contrib/webclient.py index 670e93d1..c5e7f3c7 100644 --- a/gluon/contrib/webclient.py +++ b/gluon/contrib/webclient.py @@ -16,7 +16,7 @@ mostly for testing purposes Some examples at the bottom. """ from __future__ import print_function -from pydal._compat import urllib2, cookielib, iteritems, to_native, urlencode, to_bytes +from gluon._compat import urllib2, cookielib, iteritems, to_native, urlencode, to_bytes import re import time diff --git a/gluon/custom_import.py b/gluon/custom_import.py index 1840561c..ef6c7ab2 100644 --- a/gluon/custom_import.py +++ b/gluon/custom_import.py @@ -8,7 +8,7 @@ Support for smart import syntax for web2py applications ------------------------------------------------------- """ -from pydal._compat import builtin, unicodeT, PY2, to_native +from gluon._compat import builtin, unicodeT, PY2, to_native import os import sys import threading diff --git a/gluon/debug.py b/gluon/debug.py index dd89836e..a4432590 100644 --- a/gluon/debug.py +++ b/gluon/debug.py @@ -14,7 +14,7 @@ Debugger support classes import logging import pdb import sys -from pydal._compat import Queue +from gluon._compat import Queue logger = logging.getLogger("web2py") diff --git a/gluon/fileutils.py b/gluon/fileutils.py index 07624dc4..27fe8a8d 100644 --- a/gluon/fileutils.py +++ b/gluon/fileutils.py @@ -21,7 +21,7 @@ import logging from gluon.http import HTTP from gzip import open as gzopen from gluon.recfile import generate -from pydal._compat import PY2 +from gluon._compat import PY2 __all__ = [ 'parse_version', diff --git a/gluon/globals.py b/gluon/globals.py index ff0cbf52..41ac708e 100644 --- a/gluon/globals.py +++ b/gluon/globals.py @@ -13,7 +13,7 @@ Contains the classes for the global used variables: - Session """ -from pydal._compat import pickle, StringIO, copyreg, Cookie, urlparse, PY2, iteritems, to_unicode, to_native, unicodeT +from gluon._compat import pickle, StringIO, copyreg, Cookie, urlparse, PY2, iteritems, to_unicode, to_native, unicodeT from gluon.storage import Storage, List from gluon.streamer import streamer, stream_file_or_304_or_206, DEFAULT_CHUNK_SIZE from gluon.contenttype import contenttype @@ -436,7 +436,7 @@ class Response(Storage): self._vars.update(b) self._view_environment.update(self._vars) if view: - from pydal._compat import StringIO + from gluon._compat import StringIO (obody, oview) = (self.body, self.view) (self.body, self.view) = (StringIO(), view) run_view_in(self._view_environment) @@ -1192,7 +1192,7 @@ class Session(Storage): def _try_store_in_file(self, request, response): try: - if (not response.session_id or + if (not response.session_id or not response.session_filename or self._forget or self._unchanged(response)): diff --git a/gluon/highlight.py b/gluon/highlight.py index bf98e9b3..d6faff87 100644 --- a/gluon/highlight.py +++ b/gluon/highlight.py @@ -7,7 +7,7 @@ | License: LGPLv3 (http://www.gnu.org/licenses/lgpl.html) """ from __future__ import print_function -from pydal._compat import xrange +from gluon._compat import xrange from gluon.utils import local_html_escape import re diff --git a/gluon/html.py b/gluon/html.py index 049ede93..da8e2d6e 100644 --- a/gluon/html.py +++ b/gluon/html.py @@ -20,7 +20,7 @@ import urllib import base64 from gluon import sanitizer, decoder import itertools -from pydal._compat import reduce, pickle, copyreg, HTMLParser, name2codepoint, iteritems, unichr, unicodeT, urllib_quote, to_bytes, to_native, to_unicode, basestring, urlencode, implements_bool +from gluon._compat import reduce, pickle, copyreg, HTMLParser, name2codepoint, iteritems, unichr, unicodeT, urllib_quote, to_bytes, to_native, to_unicode, basestring, urlencode, implements_bool from gluon.utils import local_html_escape import marshal @@ -127,7 +127,7 @@ def xmlescape(data, quote=True): data=str(data) data = to_bytes(data, 'utf8', 'xmlcharrefreplace') - + # ... and do the escaping data = local_html_escape(data, quote) return data @@ -945,7 +945,7 @@ class DIV(XmlComponent): fa = b'' for name, value in attr: fa += (b' %s="%s"') % (to_bytes(name), xmlescape(value, True)) - + # get the xml for the inner components co = b''.join([xmlescape(component) for component in self.components]) return (fa, co) @@ -975,7 +975,7 @@ class DIV(XmlComponent): """ # In PY3 __str__ cannot return bytes (TypeError: __str__ returned non-string (type bytes)) return to_native(self.xml()) - + def flatten(self, render=None): """ Returns the text stored by the DIV object rendered by the render function @@ -1440,7 +1440,7 @@ class STYLE(DIV): def xml(self): (fa, co) = self._xml() - fa = to_native(fa) + fa = to_native(fa) # no escaping of subcomponents co = '\n'.join([str(component) for component in self.components]) diff --git a/gluon/http.py b/gluon/http.py index 9cf17eec..e34fb8f0 100644 --- a/gluon/http.py +++ b/gluon/http.py @@ -11,7 +11,7 @@ HTTP statuses helpers """ import re -from pydal._compat import iteritems +from gluon._compat import iteritems __all__ = ['HTTP', 'redirect'] diff --git a/gluon/languages.py b/gluon/languages.py index 528a9ceb..98fa4790 100644 --- a/gluon/languages.py +++ b/gluon/languages.py @@ -21,7 +21,7 @@ from threading import RLock from gluon.utf8 import Utf8 from gluon.utils import local_html_escape -from pydal._compat import copyreg, PY2, maketrans, iterkeys, unicodeT, to_unicode, to_bytes, iteritems, to_native, pjoin +from gluon._compat import copyreg, PY2, maketrans, iterkeys, unicodeT, to_unicode, to_bytes, iteritems, to_native, pjoin from pydal.contrib.portalocker import read_locked, LockedFile from gluon.fileutils import listdir diff --git a/gluon/main.py b/gluon/main.py index 1549b3df..971c48a7 100644 --- a/gluon/main.py +++ b/gluon/main.py @@ -25,7 +25,7 @@ import socket import random import string -from pydal._compat import Cookie, urllib2 +from gluon._compat import Cookie, urllib2 #from thread import allocate_lock from gluon.fileutils import abspath, write_file diff --git a/gluon/packages/dal b/gluon/packages/dal index 79ec4e99..77e0d3f3 160000 --- a/gluon/packages/dal +++ b/gluon/packages/dal @@ -1 +1 @@ -Subproject commit 79ec4e99d09b768ca2dcc42ac32f408529e0745f +Subproject commit 77e0d3f386e326a2016a7e2139900ce72d7ddada diff --git a/gluon/recfile.py b/gluon/recfile.py index 9881e7ac..51f81cf9 100755 --- a/gluon/recfile.py +++ b/gluon/recfile.py @@ -10,7 +10,7 @@ Generates names for cache and session files -------------------------------------------- """ import os -from pydal._compat import builtin +from gluon._compat import builtin def generate(filename, depth=2, base=512): if os.path.sep in filename: diff --git a/gluon/restricted.py b/gluon/restricted.py index 6f4493b2..c67bcbf4 100644 --- a/gluon/restricted.py +++ b/gluon/restricted.py @@ -10,7 +10,7 @@ Restricted environment to execute application's code """ import sys -from pydal._compat import pickle, ClassType +from gluon._compat import pickle, ClassType import traceback import types import os diff --git a/gluon/rewrite.py b/gluon/rewrite.py index bced6731..fc14557a 100644 --- a/gluon/rewrite.py +++ b/gluon/rewrite.py @@ -27,7 +27,7 @@ from gluon.storage import Storage, List from gluon.http import HTTP from gluon.fileutils import abspath, read_file from gluon.settings import global_settings -from pydal._compat import urllib_unquote, urllib_quote, iteritems, xrange +from gluon._compat import urllib_unquote, urllib_quote, iteritems, xrange isdir = os.path.isdir isfile = os.path.isfile diff --git a/gluon/rocket.py b/gluon/rocket.py index c3eb5006..c41ac32d 100644 --- a/gluon/rocket.py +++ b/gluon/rocket.py @@ -11,7 +11,7 @@ import errno import socket import logging import platform -from pydal._compat import iteritems, to_bytes, StringIO, urllib_unquote +from gluon._compat import iteritems, to_bytes, StringIO, urllib_unquote # Define Constants VERSION = '1.2.6' diff --git a/gluon/sanitizer.py b/gluon/sanitizer.py index 0aea74d7..dbf84eca 100644 --- a/gluon/sanitizer.py +++ b/gluon/sanitizer.py @@ -10,7 +10,7 @@ Cross-site scripting (XSS) defense ----------------------------------- """ -from pydal._compat import HTMLParser, urlparse, entitydefs, basestring +from gluon._compat import HTMLParser, urlparse, entitydefs, basestring from cgi import escape from formatter import AbstractFormatter from xml.sax.saxutils import quoteattr diff --git a/gluon/scheduler.py b/gluon/scheduler.py index cc429591..1b9a478e 100644 --- a/gluon/scheduler.py +++ b/gluon/scheduler.py @@ -29,7 +29,7 @@ from json import loads, dumps from gluon import DAL, Field, IS_NOT_EMPTY, IS_IN_SET, IS_NOT_IN_DB, IS_EMPTY_OR from gluon import IS_INT_IN_RANGE, IS_DATETIME, IS_IN_DB from gluon.utils import web2py_uuid -from pydal._compat import Queue, long, iteritems +from gluon._compat import Queue, long, iteritems from gluon.storage import Storage USAGE = """ diff --git a/gluon/serializers.py b/gluon/serializers.py index 823c5b2b..d53740d7 100644 --- a/gluon/serializers.py +++ b/gluon/serializers.py @@ -10,7 +10,7 @@ from gluon.html import TAG, XmlComponent, xmlescape from gluon.languages import lazyT import gluon.contrib.rss2 as rss2 import json as json_parser -from pydal._compat import long, to_native, unicodeT +from gluon._compat import long, to_native, unicodeT have_yaml = True try: diff --git a/gluon/settings.py b/gluon/settings.py index 1ef8fcad..cb46648e 100644 --- a/gluon/settings.py +++ b/gluon/settings.py @@ -10,7 +10,7 @@ import os import sys import platform from gluon.storage import Storage -from pydal._compat import PY2 +from gluon._compat import PY2 global_settings = Storage() settings = global_settings # legacy compatibility @@ -41,5 +41,5 @@ global_settings.is_jython = \ global_settings.is_source = os.path.exists(os.path.join( global_settings.gluon_parent, 'web2py.py')) - + global_settings.is_py2 = PY2 diff --git a/gluon/shell.py b/gluon/shell.py index 29462491..95359c3a 100644 --- a/gluon/shell.py +++ b/gluon/shell.py @@ -30,7 +30,7 @@ from gluon.globals import Request, Response, Session from gluon.storage import Storage, List from gluon.admin import w2p_unpack from pydal.base import BaseAdapter -from pydal._compat import iteritems, ClassType +from gluon._compat import iteritems, ClassType logger = logging.getLogger("web2py") diff --git a/gluon/sqlhtml.py b/gluon/sqlhtml.py index 3e8d8843..9ddc34d6 100644 --- a/gluon/sqlhtml.py +++ b/gluon/sqlhtml.py @@ -19,7 +19,7 @@ import urllib import re import os -from pydal._compat import StringIO, unichr, urllib_quote, iteritems, basestring, long, unicodeT, to_native +from gluon._compat import StringIO, unichr, urllib_quote, iteritems, basestring, long, unicodeT, to_native 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 diff --git a/gluon/storage.py b/gluon/storage.py index dd5d78f2..818ff914 100644 --- a/gluon/storage.py +++ b/gluon/storage.py @@ -13,7 +13,7 @@ Provides: """ from pydal.contrib import portalocker -from pydal._compat import copyreg, pickle, PY2 +from gluon._compat import copyreg, pickle, PY2 __all__ = ['List', 'Storage', 'Settings', 'Messages', 'StorageList', 'load_storage', 'save_storage'] diff --git a/gluon/streamer.py b/gluon/streamer.py index c10c129c..dd7b78b2 100644 --- a/gluon/streamer.py +++ b/gluon/streamer.py @@ -17,7 +17,7 @@ import re import errno from gluon.http import HTTP from gluon.contenttype import contenttype -from pydal._compat import PY2 +from gluon._compat import PY2 regex_start_range = re.compile('\d+(?=\-)') diff --git a/gluon/template.py b/gluon/template.py index 5ce69655..2afc29ab 100644 --- a/gluon/template.py +++ b/gluon/template.py @@ -18,7 +18,7 @@ import os import cgi import logging from re import compile, sub, escape, DOTALL -from pydal._compat import StringIO, unicodeT, to_unicode, to_bytes, to_native +from gluon._compat import StringIO, unicodeT, to_unicode, to_bytes, to_native try: # have web2py diff --git a/gluon/tests/test_contenttype.py b/gluon/tests/test_contenttype.py index ba73fd42..1a476a62 100644 --- a/gluon/tests/test_contenttype.py +++ b/gluon/tests/test_contenttype.py @@ -11,7 +11,7 @@ from .fix_path import fix_sys_path fix_sys_path(__file__) from gluon.contenttype import contenttype -from pydal._compat import iteritems +from gluon._compat import iteritems class TestContentType(unittest.TestCase): diff --git a/gluon/tests/test_contribs.py b/gluon/tests/test_contribs.py index 012f1648..577056e4 100644 --- a/gluon/tests/test_contribs.py +++ b/gluon/tests/test_contribs.py @@ -8,7 +8,7 @@ import os from .fix_path import fix_sys_path fix_sys_path(__file__) -from pydal._compat import to_bytes +from gluon._compat import to_bytes from gluon.storage import Storage from gluon.contrib import fpdf as fpdf from gluon.contrib import pyfpdf as pyfpdf diff --git a/gluon/tests/test_dal.py b/gluon/tests/test_dal.py index fe574a8a..4c7e0b24 100644 --- a/gluon/tests/test_dal.py +++ b/gluon/tests/test_dal.py @@ -34,7 +34,7 @@ class TestDALSubclass(unittest.TestCase): db.close() def testSerialization(self): - from pydal._compat import pickle + from gluon._compat import pickle db = DAL(check_reserved=['all']) db.define_table('t_a', Field('f_a')) db.t_a.insert(f_a='test') diff --git a/gluon/tests/test_globals.py b/gluon/tests/test_globals.py index 4ef0aa10..d2336093 100644 --- a/gluon/tests/test_globals.py +++ b/gluon/tests/test_globals.py @@ -14,7 +14,7 @@ fix_sys_path(__file__) from gluon.globals import Request, Response, Session from gluon import URL -from pydal._compat import basestring +from gluon._compat import basestring def setup_clean_session(): request = Request(env={}) diff --git a/gluon/tests/test_html.py b/gluon/tests/test_html.py index 18bc80f3..c861e511 100644 --- a/gluon/tests/test_html.py +++ b/gluon/tests/test_html.py @@ -17,7 +17,7 @@ from gluon.html import STYLE, TABLE, TR, TD, TAG, TBODY, THEAD, TEXTAREA, TFOOT, from gluon.storage import Storage from gluon.html import XML_pickle, XML_unpickle from gluon.html import TAG_pickler, TAG_unpickler -from pydal._compat import xrange, PY2, to_native +from gluon._compat import xrange, PY2, to_native class TestBareHelpers(unittest.TestCase): @@ -676,7 +676,7 @@ class TestBareHelpers(unittest.TestCase): # TODO: def test_markdown_serializer(self): # TODO: def test_markmin_serializer(self): - + @unittest.skipIf(not PY2, "Skipping Python 3.x tests for MARKMIN") def test_MARKMIN(self): # This test pass with python 2.7 but expected to fail under 2.6 diff --git a/gluon/tests/test_languages.py b/gluon/tests/test_languages.py index 90fd3932..acc621ea 100644 --- a/gluon/tests/test_languages.py +++ b/gluon/tests/test_languages.py @@ -15,7 +15,7 @@ from .fix_path import fix_sys_path fix_sys_path(__file__) from gluon import languages -from pydal._compat import PY2 +from gluon._compat import PY2 MP_WORKING = 0 try: diff --git a/gluon/tests/test_router.py b/gluon/tests/test_router.py index c42881f2..edec86cd 100644 --- a/gluon/tests/test_router.py +++ b/gluon/tests/test_router.py @@ -21,7 +21,7 @@ from gluon.fileutils import abspath from gluon.settings import global_settings from gluon.http import HTTP from gluon.storage import Storage -from pydal._compat import to_bytes, to_native, PY2 +from gluon._compat import to_bytes, to_native, PY2 logger = None oldcwd = None diff --git a/gluon/tests/test_routes.py b/gluon/tests/test_routes.py index 1d2113f4..16bb8a09 100644 --- a/gluon/tests/test_routes.py +++ b/gluon/tests/test_routes.py @@ -21,7 +21,7 @@ from gluon.fileutils import abspath from gluon.settings import global_settings from gluon.http import HTTP from gluon.storage import Storage -from pydal._compat import to_bytes +from gluon._compat import to_bytes logger = None oldcwd = None diff --git a/gluon/tests/test_storage.py b/gluon/tests/test_storage.py index 7acae127..48adce2e 100644 --- a/gluon/tests/test_storage.py +++ b/gluon/tests/test_storage.py @@ -10,7 +10,7 @@ fix_sys_path(__file__) from gluon.storage import Storage, StorageList, List from gluon.http import HTTP -from pydal._compat import pickle +from gluon._compat import pickle class TestStorage(unittest.TestCase): diff --git a/gluon/tests/test_template.py b/gluon/tests/test_template.py index ee7d3f9b..47ac8d44 100644 --- a/gluon/tests/test_template.py +++ b/gluon/tests/test_template.py @@ -66,7 +66,7 @@ class TestTemplate(unittest.TestCase): def testWithDummyFileSystem(self): from os.path import join as pjoin import contextlib - from pydal._compat import StringIO + from gluon._compat import StringIO from gluon.restricted import RestrictedError @contextlib.contextmanager diff --git a/gluon/tests/test_tools.py b/gluon/tests/test_tools.py index a615063f..fa963144 100644 --- a/gluon/tests/test_tools.py +++ b/gluon/tests/test_tools.py @@ -22,7 +22,7 @@ from gluon.dal import DAL, Field from pydal.objects import Table from gluon import tools from gluon.tools import Auth, Mail, Recaptcha, Recaptcha2, prettydate, Expose -from pydal._compat import PY2 +from gluon._compat import PY2 from gluon.globals import Request, Response, Session from gluon.storage import Storage from gluon.languages import translator diff --git a/gluon/tests/test_validators.py b/gluon/tests/test_validators.py index c77a5b2c..19a18e16 100644 --- a/gluon/tests/test_validators.py +++ b/gluon/tests/test_validators.py @@ -13,7 +13,7 @@ fix_sys_path(__file__) from gluon.validators import * -from pydal._compat import PY2, to_bytes +from gluon._compat import PY2, to_bytes class TestValidators(unittest.TestCase): diff --git a/gluon/tests/test_web.py b/gluon/tests/test_web.py index 89f42177..f7e9ddf3 100644 --- a/gluon/tests/test_web.py +++ b/gluon/tests/test_web.py @@ -16,7 +16,7 @@ from .fix_path import fix_sys_path fix_sys_path(__file__) from gluon.contrib.webclient import WebClient -from pydal._compat import urllib2, PY2 +from gluon._compat import urllib2, PY2 webserverprocess = None diff --git a/gluon/tools.py b/gluon/tools.py index d5178850..f88a01bc 100644 --- a/gluon/tools.py +++ b/gluon/tools.py @@ -12,7 +12,7 @@ Auth, Mail, PluginManager and various utilities import base64 from functools import reduce -from pydal._compat import pickle, thread, urllib2, Cookie, StringIO, configparser, MIMEBase, MIMEMultipart, \ +from gluon._compat import pickle, thread, urllib2, Cookie, StringIO, configparser, MIMEBase, MIMEMultipart, \ MIMEText, Encoders, Charset, long, urllib_quote, iteritems, to_bytes, to_native, add_charset, \ charset_QP, basestring, unicodeT, to_unicode import datetime @@ -1193,7 +1193,7 @@ class AuthJWT(object): return '%s$%s' % (request.now, auth.user_id) return "No auth info!" - + """ @@ -1246,7 +1246,7 @@ class AuthJWT(object): self.before_authorization = before_authorization self.max_header_length = max_header_length self.recvd_token = None - + @staticmethod def jwt_b64e(string): string = to_bytes(string) @@ -1362,7 +1362,7 @@ class AuthJWT(object): """ The part that issues (and refreshes) tokens. Used in a controller, given myjwt is the istantiated class, as - + @myjwt.allow_jwt(required=False, verify_expiration=False) def api_auth(): return myjwt.jwt_token_manager() @@ -1440,7 +1440,7 @@ class AuthJWT(object): self.recvd_token = token return token - + def allows_jwt(self, otherwise=None, required=True, verify_expiration=True, token_param='_token'): """ The decorator that takes care of injecting auth info in the decorated action. @@ -1832,7 +1832,7 @@ class Auth(object): # ## what happens after registration? settings = self.settings = Settings() - settings.update(Auth.default_settings) + settings.update(Auth.default_settings) host = self.select_host(request.env.http_host, host_names) settings.update( cas_domains=[host], diff --git a/gluon/utf8.py b/gluon/utf8.py index f9672ee7..21fd12c4 100644 --- a/gluon/utf8.py +++ b/gluon/utf8.py @@ -11,7 +11,7 @@ Utilities and class for UTF8 strings managing ---------------------------------------------- """ from __future__ import print_function -from pydal._compat import builtin as __builtin__, unicodeT, iteritems, to_unicode, to_native +from gluon._compat import builtin as __builtin__, unicodeT, iteritems, to_unicode, to_native __all__ = ['Utf8'] diff --git a/gluon/utils.py b/gluon/utils.py index 79fd8604..8589cd2f 100644 --- a/gluon/utils.py +++ b/gluon/utils.py @@ -23,7 +23,7 @@ import logging import socket import base64 import zlib -from pydal._compat import basestring, pickle, PY2, xrange, to_bytes, to_native +from gluon._compat import basestring, pickle, PY2, xrange, to_bytes, to_native _struct_2_long_long = struct.Struct('=QQ') @@ -370,7 +370,7 @@ def local_html_escape(data, quote=False): translated. """ if PY2: - import cgi + import cgi data = cgi.escape(data, quote) return data.replace("'", "'") if quote else data else: diff --git a/gluon/validators.py b/gluon/validators.py index 2e9fd490..4181c226 100644 --- a/gluon/validators.py +++ b/gluon/validators.py @@ -21,7 +21,7 @@ import urllib import struct import decimal import unicodedata -from pydal._compat import StringIO, long, unicodeT, to_unicode, urllib_unquote, unichr, to_bytes, PY2, to_unicode, to_native +from gluon._compat import StringIO, long, unicodeT, to_unicode, urllib_unquote, unichr, to_bytes, PY2, to_unicode, to_native from gluon.utils import simple_hash, web2py_uuid, DIGEST_ALG_BY_SIZE from pydal.objects import Field, FieldVirtual, FieldMethod from functools import reduce diff --git a/gluon/widget.py b/gluon/widget.py index f801b001..73692f9d 100644 --- a/gluon/widget.py +++ b/gluon/widget.py @@ -13,7 +13,7 @@ from __future__ import print_function import datetime import sys -from pydal._compat import StringIO, thread, xrange +from gluon._compat import StringIO, thread, xrange import time import threading import os @@ -935,7 +935,7 @@ def console(): sys.argv, other_args = sys.argv[:k], sys.argv[k + 1:] (options, args) = parser.parse_args() options.args = [options.run] + other_args - + copy_options = copy.deepcopy(options) copy_options.password = '******' global_settings.cmd_options = copy_options