157 lines
6.3 KiB
Diff
157 lines
6.3 KiB
Diff
--- gluon/compileapp.py
|
|
+++ gluon/compileapp.py
|
|
@@ -61,7 +61,7 @@
|
|
TEST_CODE = \
|
|
r"""
|
|
def _TEST():
|
|
- import doctest, sys, cStringIO, types, cgi, gluon.fileutils
|
|
+ import doctest, sys, cStringIO, types, gluon.fileutils
|
|
if not gluon.fileutils.check_credentials(request):
|
|
raise HTTP(401, web2py_error='invalid credentials')
|
|
stdout = sys.stdout
|
|
--- gluon/globals.py
|
|
+++ gluon/globals.py
|
|
@@ -241,7 +241,15 @@
|
|
# parse POST variables on POST, PUT, BOTH only in post_vars
|
|
if body and not is_json and env.request_method in ('POST', 'PUT', 'DELETE', 'BOTH'):
|
|
query_string = env.pop('QUERY_STRING', None)
|
|
- dpost = cgi.FieldStorage(fp=body, environ=env, keep_blank_values=1)
|
|
+ content_disposition = env.get('HTTP_CONTENT_DISPOSITION')
|
|
+ if content_disposition:
|
|
+ headers = {'content-disposition': content_disposition,
|
|
+ 'content-type': env['CONTENT_TYPE'],
|
|
+ 'content-length': env['CONTENT_LENGTH'],
|
|
+ }
|
|
+ else:
|
|
+ headers = None
|
|
+ dpost = cgi.FieldStorage(fp=body, environ=env, headers=headers, keep_blank_values=1)
|
|
try:
|
|
post_vars.update(dpost)
|
|
except:
|
|
--- gluon/languages.py
|
|
+++ gluon/languages.py
|
|
@@ -16,7 +16,6 @@
|
|
import sys
|
|
import pkgutil
|
|
import logging
|
|
-from cgi import escape
|
|
from threading import RLock
|
|
|
|
from pydal._compat import copyreg, PY2, maketrans, iterkeys, unicodeT, to_unicode, to_bytes, iteritems, to_native, pjoin
|
|
--- gluon/packages/dal/pydal/_compat.py
|
|
+++ gluon/packages/dal/pydal/_compat.py
|
|
@@ -32,7 +32,6 @@
|
|
from urllib2 import urlopen
|
|
from string import maketrans
|
|
from types import ClassType
|
|
- import cgi
|
|
import cookielib
|
|
from xmlrpclib import ProtocolError
|
|
BytesIO = StringIO
|
|
--- gluon/packages/dal/pydal/adapters/oracle.py
|
|
+++ gluon/packages/dal/pydal/adapters/oracle.py
|
|
@@ -96,7 +96,7 @@
|
|
return self.dialect.quote(tablename)
|
|
|
|
def _build_value_for_insert(self, field, value, r_values):
|
|
- if field.type is 'text':
|
|
+ if field.type == 'text':
|
|
r_values[':' + field._rname] = self.expand(value, field.type)
|
|
return ':' + field._rname
|
|
return self.expand(value, field.type)
|
|
--- gluon/packages/dal/pydal/contrib/portalocker.py
|
|
+++ gluon/packages/dal/pydal/contrib/portalocker.py
|
|
@@ -193,6 +193,9 @@
|
|
def read(self, size=None):
|
|
return self.file.read() if size is None else self.file.read(size)
|
|
|
|
+ def readinto(self, b):
|
|
+ b[:] = self.file.read()
|
|
+
|
|
def readline(self):
|
|
return self.file.readline()
|
|
|
|
--- gluon/packages/dal/pydal/dialects/postgre.py
|
|
+++ gluon/packages/dal/pydal/dialects/postgre.py
|
|
@@ -130,8 +130,8 @@
|
|
return rv
|
|
|
|
def st_asgeojson(self, first, second, query_env={}):
|
|
- return 'ST_AsGeoJSON(%s,%s,%s,%s)' % (
|
|
- second['version'], self.expand(first, query_env=query_env),
|
|
+ return 'ST_AsGeoJSON(%s,%s,%s)' % (
|
|
+ self.expand(first, query_env=query_env),
|
|
second['precision'], second['options'])
|
|
|
|
def st_astext(self, first, query_env={}):
|
|
@@ -258,8 +258,8 @@
|
|
return 'ST_AsText(%s)' % self.expand(first, query_env=query_env)
|
|
|
|
def st_asgeojson(self, first, second, query_env={}):
|
|
- return 'ST_AsGeoJSON(%s,%s,%s,%s)' % (
|
|
- second['version'], self.expand(first, query_env=query_env),
|
|
+ return 'ST_AsGeoJSON(%s,%s,%s)' % (
|
|
+ self.expand(first, query_env=query_env),
|
|
second['precision'], second['options'])
|
|
|
|
def json_key(self, first, key, query_env=None):
|
|
--- gluon/packages/dal/pydal/helpers/classes.py
|
|
+++ gluon/packages/dal/pydal/helpers/classes.py
|
|
@@ -532,6 +532,9 @@
|
|
self.p += len(data)
|
|
return data
|
|
|
|
+ def readinto(self, bytes):
|
|
+ return self.read(bytes)
|
|
+
|
|
def readline(self):
|
|
i = self.data.find('\n', self.p)+1
|
|
if i > 0:
|
|
--- gluon/packages/dal/pydal/validators.py
|
|
+++ gluon/packages/dal/pydal/validators.py
|
|
@@ -148,7 +148,7 @@
|
|
|
|
|
|
def validator_caller(func, value):
|
|
- if getattr(func, 'validate', None) is Validator.validate:
|
|
+ if getattr(func, 'validate', None) is not Validator.validate:
|
|
return func.validate(value)
|
|
value, error = func(value)
|
|
if error is not None:
|
|
@@ -3154,7 +3154,7 @@
|
|
if not all_special.count(True) >= self.special:
|
|
failures.append(self.translator("Must include at least %s of the following: %s")
|
|
% (self.special, self.specials))
|
|
- elif self.special is 0:
|
|
+ elif self.special == 0 and self.special is not False:
|
|
if len(all_special) > 0:
|
|
failures.append(self.translator("May not contain any of the following: %s")
|
|
% self.specials)
|
|
@@ -3169,7 +3169,7 @@
|
|
if not len(all_upper) >= self.upper:
|
|
failures.append(self.translator("Must include at least %s uppercase")
|
|
% str(self.upper))
|
|
- elif self.upper is 0:
|
|
+ elif self.upper == 0 and self.upper is not False:
|
|
if len(all_upper) > 0:
|
|
failures.append(
|
|
self.translator("May not include any uppercase letters"))
|
|
@@ -3179,7 +3179,7 @@
|
|
if not len(all_lower) >= self.lower:
|
|
failures.append(self.translator("Must include at least %s lowercase")
|
|
% str(self.lower))
|
|
- elif self.lower is 0:
|
|
+ elif self.lower == 0 and self.lower is not False:
|
|
if len(all_lower) > 0:
|
|
failures.append(
|
|
self.translator("May not include any lowercase letters"))
|
|
@@ -3192,7 +3192,7 @@
|
|
if not len(all_number) >= self.number:
|
|
failures.append(self.translator("Must include at least %s %s")
|
|
% (str(self.number), numbers))
|
|
- elif self.number is 0:
|
|
+ elif self.number == 0 and self.number is not False:
|
|
if len(all_number) > 0:
|
|
failures.append(self.translator("May not include any numbers"))
|
|
if len(failures) == 0:
|