Merge branch 'master' into DAL-modular
* master: (58 commits) changed version number better types by default, given that we're on 2005 at least fix for StorageList and tests added improved coverage, fix bug with IS_LIST_OF and items not being strings fix cache.increment, added tests R-2.9.11 reverted simplejson R-2.9.10 upgraded memcache and markdown2 upgraded pypyodbc.py upgraded simplejson no more split in contains, thanks Niphlod fixed wording and bug on contains(), made smart_query use ilike instead of like ilike, thanks Niphlod CROSS JOIN, thanks jotbe added custom represent to GoogleDatastoreAdapter, thanks Alan postgresql: identifies what adapter auto-loads json values added more tests for json Field fixed typo in driver_auto_json Improve the graphing to show the name of the application. ... Conflicts: gluon/dal.py gluon/globals.py gluon/tests/test_dal.py
This commit is contained in:
+11
-8
@@ -2,14 +2,8 @@ import os, sys
|
||||
|
||||
from test_http import *
|
||||
from test_cache import *
|
||||
|
||||
NOSQL = any([name in (os.getenv("DB") or "")
|
||||
for name in ("datastore", "mongodb", "imap")])
|
||||
if NOSQL:
|
||||
from test_dal_nosql import *
|
||||
else:
|
||||
from test_dal import *
|
||||
|
||||
from test_contenttype import *
|
||||
from test_fileutils import *
|
||||
from test_html import *
|
||||
from test_is_url import *
|
||||
from test_languages import *
|
||||
@@ -25,3 +19,12 @@ from test_web import *
|
||||
|
||||
if sys.version[:3] == '2.7':
|
||||
from test_old_doctests import *
|
||||
|
||||
|
||||
NOSQL = any([name in (os.getenv("DB") or "")
|
||||
for name in ("datastore", "mongodb", "imap")])
|
||||
|
||||
if NOSQL:
|
||||
from test_dal_nosql import *
|
||||
else:
|
||||
from test_dal import *
|
||||
@@ -0,0 +1,30 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
import os
|
||||
import sys
|
||||
|
||||
def fix_sys_path(current_path):
|
||||
"""
|
||||
logic to have always the correct sys.path
|
||||
'', web2py/gluon, web2py/site-packages, web2py/ ...
|
||||
"""
|
||||
|
||||
def add_path_first(path):
|
||||
sys.path = [path] + [p for p in sys.path if (
|
||||
not p == path and not p == (path + '/'))]
|
||||
|
||||
path = os.path.dirname(os.path.abspath(current_path))
|
||||
|
||||
if not os.path.isfile(os.path.join(path,'web2py.py')):
|
||||
i = 0
|
||||
while i<10:
|
||||
i += 1
|
||||
if os.path.exists(os.path.join(path,'web2py.py')):
|
||||
break
|
||||
path = os.path.abspath(os.path.join(path, '..'))
|
||||
|
||||
paths = [path,
|
||||
os.path.abspath(os.path.join(path, 'site-packages')),
|
||||
os.path.abspath(os.path.join(path, 'gluon')),
|
||||
'']
|
||||
[add_path_first(path) for path in paths]
|
||||
+41
-31
@@ -4,43 +4,15 @@
|
||||
"""
|
||||
Unit tests for gluon.cache
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import unittest
|
||||
from fix_path import fix_sys_path
|
||||
|
||||
|
||||
def fix_sys_path():
|
||||
"""
|
||||
logic to have always the correct sys.path
|
||||
'', web2py/gluon, web2py/site-packages, web2py/ ...
|
||||
"""
|
||||
|
||||
def add_path_first(path):
|
||||
sys.path = [path] + [p for p in sys.path if (
|
||||
not p == path and not p == (path + '/'))]
|
||||
|
||||
path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
if not os.path.isfile(os.path.join(path,'web2py.py')):
|
||||
i = 0
|
||||
while i<10:
|
||||
i += 1
|
||||
if os.path.exists(os.path.join(path,'web2py.py')):
|
||||
break
|
||||
path = os.path.abspath(os.path.join(path, '..'))
|
||||
|
||||
paths = [path,
|
||||
os.path.abspath(os.path.join(path, 'site-packages')),
|
||||
os.path.abspath(os.path.join(path, 'gluon')),
|
||||
'']
|
||||
[add_path_first(path) for path in paths]
|
||||
|
||||
fix_sys_path()
|
||||
fix_sys_path(__file__)
|
||||
|
||||
|
||||
from storage import Storage
|
||||
from cache import CacheInRam, CacheOnDisk
|
||||
from cache import CacheInRam, CacheOnDisk, Cache
|
||||
|
||||
oldcwd = None
|
||||
|
||||
@@ -76,6 +48,20 @@ class TestCache(unittest.TestCase):
|
||||
cache.clear()
|
||||
self.assertEqual(cache('a', lambda: 3, 100), 3)
|
||||
self.assertEqual(cache('a', lambda: 4, 0), 4)
|
||||
#test singleton behaviour
|
||||
cache = CacheInRam()
|
||||
cache.clear()
|
||||
self.assertEqual(cache('a', lambda: 3, 100), 3)
|
||||
self.assertEqual(cache('a', lambda: 4, 0), 4)
|
||||
#test key deletion
|
||||
cache('a', None)
|
||||
self.assertEqual(cache('a', lambda: 5, 100), 5)
|
||||
#test increment
|
||||
self.assertEqual(cache.increment('a'), 6)
|
||||
self.assertEqual(cache('a', lambda: 1, 100), 6)
|
||||
cache.increment('b')
|
||||
self.assertEqual(cache('b', lambda: 'x', 100), 1)
|
||||
|
||||
|
||||
def testCacheOnDisk(self):
|
||||
|
||||
@@ -93,6 +79,30 @@ class TestCache(unittest.TestCase):
|
||||
cache.clear()
|
||||
self.assertEqual(cache('a', lambda: 3, 100), 3)
|
||||
self.assertEqual(cache('a', lambda: 4, 0), 4)
|
||||
#test singleton behaviour
|
||||
cache = CacheOnDisk(s)
|
||||
cache.clear()
|
||||
self.assertEqual(cache('a', lambda: 3, 100), 3)
|
||||
self.assertEqual(cache('a', lambda: 4, 0), 4)
|
||||
#test key deletion
|
||||
cache('a', None)
|
||||
self.assertEqual(cache('a', lambda: 5, 100), 5)
|
||||
#test increment
|
||||
self.assertEqual(cache.increment('a'), 6)
|
||||
self.assertEqual(cache('a', lambda: 1, 100), 6)
|
||||
cache.increment('b')
|
||||
self.assertEqual(cache('b', lambda: 'x', 100), 1)
|
||||
|
||||
def testCacheWithPrefix(self):
|
||||
s = Storage({'application': 'admin',
|
||||
'folder': 'applications/admin'})
|
||||
cache = Cache(s)
|
||||
prefix = cache.with_prefix(cache.ram,'prefix')
|
||||
self.assertEqual(prefix('a', lambda: 1, 0), 1)
|
||||
self.assertEqual(prefix('a', lambda: 2, 100), 1)
|
||||
self.assertEqual(cache.ram('prefixa', lambda: 2, 100), 1)
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
Unit tests for gluon.contenttype
|
||||
"""
|
||||
|
||||
import unittest
|
||||
from fix_path import fix_sys_path
|
||||
|
||||
fix_sys_path(__file__)
|
||||
|
||||
from contenttype import contenttype
|
||||
|
||||
|
||||
class TestContentType(unittest.TestCase):
|
||||
|
||||
def testTypeRecognition(self):
|
||||
rtn = contenttype('.png')
|
||||
self.assertEqual(rtn, 'image/png')
|
||||
rtn = contenttype('.gif')
|
||||
self.assertEqual(rtn, 'image/gif')
|
||||
rtn = contenttype('.tar.bz2')
|
||||
self.assertEqual(rtn, 'application/x-bzip-compressed-tar')
|
||||
# test overrides and additions
|
||||
mapping = {
|
||||
'.load': 'text/html; charset=utf-8',
|
||||
'.json': 'application/json',
|
||||
'.jsonp': 'application/jsonp',
|
||||
'.pickle': 'application/python-pickle',
|
||||
'.w2p': 'application/w2p',
|
||||
'.md': 'text/x-markdown; charset=utf-8'
|
||||
}
|
||||
for k, v in mapping.iteritems():
|
||||
self.assertEqual(contenttype(k), v)
|
||||
|
||||
# test without dot extension
|
||||
rtn = contenttype('png')
|
||||
self.assertEqual(rtn, 'text/plain; charset=utf-8')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
@@ -3,37 +3,10 @@
|
||||
|
||||
""" Unit tests for contribs """
|
||||
|
||||
import sys
|
||||
import os
|
||||
import unittest
|
||||
from fix_path import fix_sys_path
|
||||
|
||||
def fix_sys_path():
|
||||
"""
|
||||
logic to have always the correct sys.path
|
||||
'', web2py/gluon, web2py/site-packages, web2py/ ...
|
||||
"""
|
||||
|
||||
def add_path_first(path):
|
||||
sys.path = [path] + [p for p in sys.path if (
|
||||
not p == path and not p == (path + '/'))]
|
||||
|
||||
path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
if not os.path.isfile(os.path.join(path,'web2py.py')):
|
||||
i = 0
|
||||
while i<10:
|
||||
i += 1
|
||||
if os.path.exists(os.path.join(path,'web2py.py')):
|
||||
break
|
||||
path = os.path.abspath(os.path.join(path, '..'))
|
||||
|
||||
paths = [path,
|
||||
os.path.abspath(os.path.join(path, 'site-packages')),
|
||||
os.path.abspath(os.path.join(path, 'gluon')),
|
||||
'']
|
||||
[add_path_first(path) for path in paths]
|
||||
|
||||
fix_sys_path()
|
||||
fix_sys_path(__file__)
|
||||
|
||||
|
||||
from utils import md5_hash
|
||||
|
||||
+23
-32
@@ -15,42 +15,20 @@ try:
|
||||
except:
|
||||
from io import StringIO
|
||||
|
||||
def fix_sys_path():
|
||||
"""
|
||||
logic to have always the correct sys.path
|
||||
'', web2py/gluon, web2py/site-packages, web2py/ ...
|
||||
"""
|
||||
from fix_path import fix_sys_path
|
||||
|
||||
def add_path_first(path):
|
||||
sys.path = [path] + [p for p in sys.path if (
|
||||
not p == path and not p == (path + '/'))]
|
||||
|
||||
path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
if not os.path.isfile(os.path.join(path,'web2py.py')):
|
||||
i = 0
|
||||
while i<10:
|
||||
i += 1
|
||||
if os.path.exists(os.path.join(path,'web2py.py')):
|
||||
break
|
||||
path = os.path.abspath(os.path.join(path, '..'))
|
||||
|
||||
paths = [path,
|
||||
os.path.abspath(os.path.join(path, 'site-packages')),
|
||||
os.path.abspath(os.path.join(path, 'gluon')),
|
||||
'']
|
||||
[add_path_first(path) for path in paths]
|
||||
|
||||
fix_sys_path()
|
||||
fix_sys_path(__file__)
|
||||
|
||||
#for travis-ci
|
||||
DEFAULT_URI = os.environ.get('DB', 'sqlite:memory')
|
||||
DEFAULT_URI = os.getenv('DB', 'sqlite:memory')
|
||||
|
||||
print 'Testing against %s engine (%s)' % (DEFAULT_URI.partition(':')[0], DEFAULT_URI)
|
||||
|
||||
from dal import DAL, Field
|
||||
from dal.objects import Table
|
||||
from dal.helpers.classes import SQLALL
|
||||
from dal import DAL, Field, Table, SQLALL
|
||||
from gluon.cache import CacheInRam
|
||||
|
||||
ALLOWED_DATATYPES = [
|
||||
'string',
|
||||
@@ -131,6 +109,7 @@ class TestFields(unittest.TestCase):
|
||||
isinstance(f.formatter(datetime.datetime.now()), str)
|
||||
|
||||
def testRun(self):
|
||||
"""Test all field types and their return values"""
|
||||
db = DAL(DEFAULT_URI, check_reserved=['all'])
|
||||
for ft in ['string', 'text', 'password', 'upload', 'blob']:
|
||||
db.define_table('tt', Field('aa', ft, default=''))
|
||||
@@ -150,8 +129,22 @@ class TestFields(unittest.TestCase):
|
||||
self.assertEqual(db().select(db.tt.aa)[0].aa, True)
|
||||
db.tt.drop()
|
||||
db.define_table('tt', Field('aa', 'json', default={}))
|
||||
self.assertEqual(db.tt.insert(aa={}), 1)
|
||||
self.assertEqual(db().select(db.tt.aa)[0].aa, {})
|
||||
# test different python objects for correct serialization in json
|
||||
objs = [
|
||||
{'a' : 1, 'b' : 2},
|
||||
[1, 2, 3],
|
||||
'abc',
|
||||
True,
|
||||
False,
|
||||
None,
|
||||
11,
|
||||
14.3,
|
||||
long(11)
|
||||
]
|
||||
for obj in objs:
|
||||
rtn_id = db.tt.insert(aa=obj)
|
||||
rtn = db(db.tt.id == rtn_id).select().first().aa
|
||||
self.assertEqual(obj, rtn)
|
||||
db.tt.drop()
|
||||
db.define_table('tt', Field('aa', 'date',
|
||||
default=datetime.date.today()))
|
||||
@@ -551,9 +544,8 @@ class TestMinMaxSumAvg(unittest.TestCase):
|
||||
db.tt.drop()
|
||||
|
||||
|
||||
class TestCache(unittest.TestCase):
|
||||
class TestCacheSelect(unittest.TestCase):
|
||||
def testRun(self):
|
||||
from cache import CacheInRam
|
||||
cache = CacheInRam()
|
||||
db = DAL(DEFAULT_URI, check_reserved=['all'])
|
||||
db.define_table('tt', Field('aa'))
|
||||
@@ -1446,7 +1438,6 @@ class TestQuoting(unittest.TestCase):
|
||||
db._adapter.types[key]=db._adapter.types[key].replace(
|
||||
'%(on_delete_action)s','NO ACTION')
|
||||
|
||||
|
||||
t0 = db.define_table('t0',
|
||||
Field('f', 'string'))
|
||||
t1 = db.define_table('b',
|
||||
|
||||
@@ -19,34 +19,9 @@ try:
|
||||
except:
|
||||
from io import StringIO
|
||||
|
||||
from fix_path import fix_sys_path
|
||||
|
||||
def fix_sys_path():
|
||||
"""
|
||||
logic to have always the correct sys.path
|
||||
'', web2py/gluon, web2py/site-packages, web2py/ ...
|
||||
"""
|
||||
|
||||
def add_path_first(path):
|
||||
sys.path = [path] + [p for p in sys.path if (
|
||||
not p == path and not p == (path + '/'))]
|
||||
|
||||
path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
if not os.path.isfile(os.path.join(path,'web2py.py')):
|
||||
i = 0
|
||||
while i<10:
|
||||
i += 1
|
||||
if os.path.exists(os.path.join(path,'web2py.py')):
|
||||
break
|
||||
path = os.path.abspath(os.path.join(path, '..'))
|
||||
|
||||
paths = [path,
|
||||
os.path.abspath(os.path.join(path, 'site-packages')),
|
||||
os.path.abspath(os.path.join(path, 'gluon')),
|
||||
'']
|
||||
[add_path_first(path) for path in paths]
|
||||
|
||||
fix_sys_path()
|
||||
fix_sys_path(__file__)
|
||||
|
||||
#for travis-ci
|
||||
DEFAULT_URI = os.environ.get('DB', 'sqlite:memory')
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import unittest
|
||||
import datetime
|
||||
from fix_path import fix_sys_path
|
||||
|
||||
fix_sys_path(__file__)
|
||||
|
||||
from fileutils import parse_version
|
||||
|
||||
|
||||
class TestFileUtils(unittest.TestCase):
|
||||
|
||||
def testParseVersion(self):
|
||||
rtn = parse_version('Version 1.99.0-rc.1+timestamp.2011.09.19.08.23.26')
|
||||
self.assertEqual(rtn, (1, 99, 0, 'rc.1', datetime.datetime(2011, 9, 19, 8, 23, 26)))
|
||||
rtn = parse_version('Version 2.9.11-stable+timestamp.2014.09.15.18.31.17')
|
||||
self.assertEqual(rtn, (2, 9, 11, 'stable', datetime.datetime(2014, 9, 15, 18, 31, 17)))
|
||||
rtn = parse_version('Version 1.99.0 (2011-09-19 08:23:26)')
|
||||
self.assertEqual(rtn, (1, 99, 0, 'dev', datetime.datetime(2011, 9, 19, 8, 23, 26)))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
@@ -5,37 +5,10 @@
|
||||
Unit tests for gluon.html
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import unittest
|
||||
from fix_path import fix_sys_path
|
||||
|
||||
def fix_sys_path():
|
||||
"""
|
||||
logic to have always the correct sys.path
|
||||
'', web2py/gluon, web2py/site-packages, web2py/ ...
|
||||
"""
|
||||
|
||||
def add_path_first(path):
|
||||
sys.path = [path] + [p for p in sys.path if (
|
||||
not p == path and not p == (path + '/'))]
|
||||
|
||||
path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
if not os.path.isfile(os.path.join(path,'web2py.py')):
|
||||
i = 0
|
||||
while i<10:
|
||||
i += 1
|
||||
if os.path.exists(os.path.join(path,'web2py.py')):
|
||||
break
|
||||
path = os.path.abspath(os.path.join(path, '..'))
|
||||
|
||||
paths = [path,
|
||||
os.path.abspath(os.path.join(path, 'site-packages')),
|
||||
os.path.abspath(os.path.join(path, 'gluon')),
|
||||
'']
|
||||
[add_path_first(path) for path in paths]
|
||||
|
||||
fix_sys_path()
|
||||
fix_sys_path(__file__)
|
||||
|
||||
from html import *
|
||||
from storage import Storage
|
||||
|
||||
@@ -3,38 +3,10 @@
|
||||
|
||||
"""Unit tests for http.py """
|
||||
|
||||
import sys
|
||||
import os
|
||||
import unittest
|
||||
from fix_path import fix_sys_path
|
||||
|
||||
|
||||
def fix_sys_path():
|
||||
"""
|
||||
logic to have always the correct sys.path
|
||||
'', web2py/gluon, web2py/site-packages, web2py/ ...
|
||||
"""
|
||||
|
||||
def add_path_first(path):
|
||||
sys.path = [path] + [p for p in sys.path if (
|
||||
not p == path and not p == (path + '/'))]
|
||||
|
||||
path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
if not os.path.isfile(os.path.join(path,'web2py.py')):
|
||||
i = 0
|
||||
while i<10:
|
||||
i += 1
|
||||
if os.path.exists(os.path.join(path,'web2py.py')):
|
||||
break
|
||||
path = os.path.abspath(os.path.join(path, '..'))
|
||||
|
||||
paths = [path,
|
||||
os.path.abspath(os.path.join(path, 'site-packages')),
|
||||
os.path.abspath(os.path.join(path, 'gluon')),
|
||||
'']
|
||||
[add_path_first(path) for path in paths]
|
||||
|
||||
fix_sys_path()
|
||||
fix_sys_path(__file__)
|
||||
|
||||
|
||||
from http import HTTP, defined_status
|
||||
@@ -68,8 +40,5 @@ class TestHTTP(unittest.TestCase):
|
||||
|
||||
# test wrong call detection
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
@@ -4,42 +4,14 @@
|
||||
Unit tests for IS_URL()
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import unittest
|
||||
from fix_path import fix_sys_path
|
||||
|
||||
fix_sys_path(__file__)
|
||||
|
||||
|
||||
def fix_sys_path():
|
||||
"""
|
||||
logic to have always the correct sys.path
|
||||
'', web2py/gluon, web2py/site-packages, web2py/ ...
|
||||
"""
|
||||
|
||||
def add_path_first(path):
|
||||
sys.path = [path] + [p for p in sys.path if (
|
||||
not p == path and not p == (path + '/'))]
|
||||
|
||||
path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
if not os.path.isfile(os.path.join(path,'web2py.py')):
|
||||
i = 0
|
||||
while i<10:
|
||||
i += 1
|
||||
if os.path.exists(os.path.join(path,'web2py.py')):
|
||||
break
|
||||
path = os.path.abspath(os.path.join(path, '..'))
|
||||
|
||||
paths = [path,
|
||||
os.path.abspath(os.path.join(path, 'site-packages')),
|
||||
os.path.abspath(os.path.join(path, 'gluon')),
|
||||
'']
|
||||
[add_path_first(path) for path in paths]
|
||||
|
||||
fix_sys_path()
|
||||
|
||||
|
||||
from validators import IS_URL, IS_HTTP_URL, IS_GENERIC_URL, \
|
||||
unicode_to_ascii_authority
|
||||
from validators import IS_URL, IS_HTTP_URL, IS_GENERIC_URL
|
||||
from validators import unicode_to_ascii_authority
|
||||
|
||||
|
||||
class TestIsUrl(unittest.TestCase):
|
||||
|
||||
@@ -7,38 +7,11 @@
|
||||
|
||||
import sys
|
||||
import os
|
||||
import unittest
|
||||
import tempfile
|
||||
import threading
|
||||
import logging
|
||||
import unittest
|
||||
from fix_path import fix_sys_path
|
||||
|
||||
def fix_sys_path():
|
||||
"""
|
||||
logic to have always the correct sys.path
|
||||
'', web2py/gluon, web2py/site-packages, web2py/ ...
|
||||
"""
|
||||
|
||||
def add_path_first(path):
|
||||
sys.path = [path] + [p for p in sys.path if (
|
||||
not p == path and not p == (path + '/'))]
|
||||
|
||||
path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
if not os.path.isfile(os.path.join(path,'web2py.py')):
|
||||
i = 0
|
||||
while i<10:
|
||||
i += 1
|
||||
if os.path.exists(os.path.join(path,'web2py.py')):
|
||||
break
|
||||
path = os.path.abspath(os.path.join(path, '..'))
|
||||
|
||||
paths = [path,
|
||||
os.path.abspath(os.path.join(path, 'site-packages')),
|
||||
os.path.abspath(os.path.join(path, 'gluon')),
|
||||
'']
|
||||
[add_path_first(path) for path in paths]
|
||||
|
||||
fix_sys_path()
|
||||
fix_sys_path(__file__)
|
||||
|
||||
#support skipif also in python 2.6
|
||||
def _skipIf(cond, message=''):
|
||||
@@ -55,7 +28,6 @@ else:
|
||||
skipIf = _skipIf
|
||||
|
||||
import languages
|
||||
from storage import Storage
|
||||
MP_WORKING = 0
|
||||
try:
|
||||
import multiprocessing
|
||||
@@ -76,6 +48,7 @@ def read_write(args):
|
||||
languages.write_dict(filename, content)
|
||||
return True
|
||||
|
||||
|
||||
class TestLanguagesParallel(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
@@ -91,7 +64,7 @@ class TestLanguagesParallel(unittest.TestCase):
|
||||
os.remove(self.filename)
|
||||
except:
|
||||
pass
|
||||
|
||||
|
||||
@skipIf(MP_WORKING == 0, 'multiprocessing tests unavailable')
|
||||
def test_reads_and_writes(self):
|
||||
readwriters = 10
|
||||
@@ -99,7 +72,7 @@ class TestLanguagesParallel(unittest.TestCase):
|
||||
results = pool.map(read_write, [[self.filename, 10]] * readwriters)
|
||||
for result in results:
|
||||
self.assertTrue(result)
|
||||
|
||||
|
||||
@skipIf(MP_WORKING == 1, 'multiprocessing tests available')
|
||||
def test_reads_and_writes_no_mp(self):
|
||||
results = []
|
||||
@@ -108,6 +81,7 @@ class TestLanguagesParallel(unittest.TestCase):
|
||||
for result in results:
|
||||
self.assertTrue(result)
|
||||
|
||||
|
||||
class TestTranslations(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
@@ -144,7 +118,6 @@ class TestTranslations(unittest.TestCase):
|
||||
T.force('it')
|
||||
self.assertEqual(str(T('Hello World')),
|
||||
'Salve Mondo')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
@@ -7,41 +7,15 @@
|
||||
"""
|
||||
import sys
|
||||
import os
|
||||
import unittest
|
||||
import doctest
|
||||
import unittest
|
||||
from fix_path import fix_sys_path
|
||||
|
||||
fix_sys_path(__file__)
|
||||
|
||||
def fix_sys_path():
|
||||
"""
|
||||
logic to have always the correct sys.path
|
||||
'', web2py/gluon, web2py/site-packages, web2py/ ...
|
||||
"""
|
||||
|
||||
def add_path_first(path):
|
||||
sys.path = [path] + [p for p in sys.path if (
|
||||
not p == path and not p == (path + '/'))]
|
||||
|
||||
path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
if not os.path.isfile(os.path.join(path,'web2py.py')):
|
||||
i = 0
|
||||
while i<10:
|
||||
i += 1
|
||||
if os.path.exists(os.path.join(path,'web2py.py')):
|
||||
break
|
||||
path = os.path.abspath(os.path.join(path, '..'))
|
||||
|
||||
paths = [path,
|
||||
os.path.abspath(os.path.join(path, 'site-packages')),
|
||||
os.path.abspath(os.path.join(path, 'gluon')),
|
||||
'']
|
||||
[add_path_first(path) for path in paths]
|
||||
|
||||
fix_sys_path()
|
||||
|
||||
def load_tests(loader, tests, ignore):
|
||||
|
||||
|
||||
tests.addTests(
|
||||
doctest.DocTestSuite('html')
|
||||
)
|
||||
|
||||
+70
-31
@@ -3,40 +3,14 @@
|
||||
|
||||
""" Unit tests for storage.py """
|
||||
|
||||
import sys
|
||||
import os
|
||||
import unittest
|
||||
from fix_path import fix_sys_path
|
||||
|
||||
fix_sys_path(__file__)
|
||||
|
||||
def fix_sys_path():
|
||||
"""
|
||||
logic to have always the correct sys.path
|
||||
'', web2py/gluon, web2py/site-packages, web2py/ ...
|
||||
"""
|
||||
|
||||
def add_path_first(path):
|
||||
sys.path = [path] + [p for p in sys.path if (
|
||||
not p == path and not p == (path + '/'))]
|
||||
|
||||
path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
if not os.path.isfile(os.path.join(path,'web2py.py')):
|
||||
i = 0
|
||||
while i<10:
|
||||
i += 1
|
||||
if os.path.exists(os.path.join(path,'web2py.py')):
|
||||
break
|
||||
path = os.path.abspath(os.path.join(path, '..'))
|
||||
|
||||
paths = [path,
|
||||
os.path.abspath(os.path.join(path, 'site-packages')),
|
||||
os.path.abspath(os.path.join(path, 'gluon')),
|
||||
'']
|
||||
[add_path_first(path) for path in paths]
|
||||
|
||||
fix_sys_path()
|
||||
|
||||
from storage import Storage
|
||||
from storage import Storage, StorageList, List
|
||||
from http import HTTP
|
||||
import pickle
|
||||
|
||||
|
||||
class TestStorage(unittest.TestCase):
|
||||
@@ -97,5 +71,70 @@ class TestStorage(unittest.TestCase):
|
||||
self.assertEquals(s['a'], None)
|
||||
self.assertTrue('a' in s)
|
||||
|
||||
def test_pickling(self):
|
||||
""" Test storage pickling """
|
||||
s = Storage(a=1)
|
||||
sd = pickle.dumps(s, pickle.HIGHEST_PROTOCOL)
|
||||
news = pickle.loads(sd)
|
||||
self.assertEqual(news.a, 1)
|
||||
|
||||
def test_getlist(self):
|
||||
# usually used with request.vars
|
||||
a = Storage()
|
||||
a.x = 'abc'
|
||||
a.y = ['abc', 'def']
|
||||
self.assertEqual(a.getlist('x'), ['abc'])
|
||||
self.assertEqual(a.getlist('y'), ['abc', 'def'])
|
||||
self.assertEqual(a.getlist('z'), [])
|
||||
|
||||
def test_getfirst(self):
|
||||
# usually with request.vars
|
||||
a = Storage()
|
||||
a.x = 'abc'
|
||||
a.y = ['abc', 'def']
|
||||
self.assertEqual(a.getfirst('x'), 'abc')
|
||||
self.assertEqual(a.getfirst('y'), 'abc')
|
||||
self.assertEqual(a.getfirst('z'), None)
|
||||
|
||||
def test_getlast(self):
|
||||
# usually with request.vars
|
||||
a = Storage()
|
||||
a.x = 'abc'
|
||||
a.y = ['abc', 'def']
|
||||
self.assertEqual(a.getlast('x'), 'abc')
|
||||
self.assertEqual(a.getlast('y'), 'def')
|
||||
self.assertEqual(a.getlast('z'), None)
|
||||
|
||||
|
||||
class TestStorageList(unittest.TestCase):
|
||||
""" Tests storage.StorageList """
|
||||
|
||||
def test_attribute(self):
|
||||
s = StorageList(a=1)
|
||||
|
||||
self.assertEqual(s.a, 1)
|
||||
self.assertEqual(s['a'], 1)
|
||||
self.assertEqual(s.b, [])
|
||||
s.b.append(1)
|
||||
self.assertEqual(s.b, [1])
|
||||
|
||||
|
||||
class TestList(unittest.TestCase):
|
||||
""" Tests Storage.List (fast-check for request.args()) """
|
||||
|
||||
def test_listcall(self):
|
||||
a = List((1, 2, 3))
|
||||
self.assertEqual(a(1), 2)
|
||||
self.assertEqual(a(-1), 3)
|
||||
self.assertEqual(a(-5), None)
|
||||
self.assertEqual(a(-5, default='x'), 'x')
|
||||
self.assertEqual(a(-3, cast=str), '1')
|
||||
a.append('1234')
|
||||
self.assertEqual(a(3), '1234')
|
||||
self.assertEqual(a(3, cast=int), 1234)
|
||||
a.append('x')
|
||||
self.assertRaises(HTTP, a, 4, cast=int)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
@@ -4,38 +4,10 @@
|
||||
Unit tests for gluon.template
|
||||
"""
|
||||
|
||||
import sys
|
||||
import os
|
||||
import unittest
|
||||
from fix_path import fix_sys_path
|
||||
|
||||
|
||||
def fix_sys_path():
|
||||
"""
|
||||
logic to have always the correct sys.path
|
||||
'', web2py/gluon, web2py/site-packages, web2py/ ...
|
||||
"""
|
||||
|
||||
def add_path_first(path):
|
||||
sys.path = [path] + [p for p in sys.path if (
|
||||
not p == path and not p == (path + '/'))]
|
||||
|
||||
path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
if not os.path.isfile(os.path.join(path,'web2py.py')):
|
||||
i = 0
|
||||
while i<10:
|
||||
i += 1
|
||||
if os.path.exists(os.path.join(path,'web2py.py')):
|
||||
break
|
||||
path = os.path.abspath(os.path.join(path, '..'))
|
||||
|
||||
paths = [path,
|
||||
os.path.abspath(os.path.join(path, 'site-packages')),
|
||||
os.path.abspath(os.path.join(path, 'gluon')),
|
||||
'']
|
||||
[add_path_first(path) for path in paths]
|
||||
|
||||
fix_sys_path()
|
||||
fix_sys_path(__file__)
|
||||
|
||||
from template import render
|
||||
|
||||
|
||||
@@ -3,38 +3,10 @@
|
||||
|
||||
""" Unit tests for utils.py """
|
||||
|
||||
import sys
|
||||
import os
|
||||
import unittest
|
||||
from fix_path import fix_sys_path
|
||||
|
||||
|
||||
def fix_sys_path():
|
||||
"""
|
||||
logic to have always the correct sys.path
|
||||
'', web2py/gluon, web2py/site-packages, web2py/ ...
|
||||
"""
|
||||
|
||||
def add_path_first(path):
|
||||
sys.path = [path] + [p for p in sys.path if (
|
||||
not p == path and not p == (path + '/'))]
|
||||
|
||||
path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
if not os.path.isfile(os.path.join(path,'web2py.py')):
|
||||
i = 0
|
||||
while i<10:
|
||||
i += 1
|
||||
if os.path.exists(os.path.join(path,'web2py.py')):
|
||||
break
|
||||
path = os.path.abspath(os.path.join(path, '..'))
|
||||
|
||||
paths = [path,
|
||||
os.path.abspath(os.path.join(path, 'site-packages')),
|
||||
os.path.abspath(os.path.join(path, 'gluon')),
|
||||
'']
|
||||
[add_path_first(path) for path in paths]
|
||||
|
||||
fix_sys_path()
|
||||
fix_sys_path(__file__)
|
||||
|
||||
from utils import md5_hash
|
||||
|
||||
|
||||
+151
-33
@@ -3,43 +3,17 @@
|
||||
|
||||
"""Unit tests for http.py """
|
||||
|
||||
import sys
|
||||
import os
|
||||
import unittest
|
||||
|
||||
|
||||
def fix_sys_path():
|
||||
"""
|
||||
logic to have always the correct sys.path
|
||||
'', web2py/gluon, web2py/site-packages, web2py/ ...
|
||||
"""
|
||||
|
||||
def add_path_first(path):
|
||||
sys.path = [path] + [p for p in sys.path if (
|
||||
not p == path and not p == (path + '/'))]
|
||||
|
||||
path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
if not os.path.isfile(os.path.join(path,'web2py.py')):
|
||||
i = 0
|
||||
while i<10:
|
||||
i += 1
|
||||
if os.path.exists(os.path.join(path,'web2py.py')):
|
||||
break
|
||||
path = os.path.abspath(os.path.join(path, '..'))
|
||||
|
||||
paths = [path,
|
||||
os.path.abspath(os.path.join(path, 'site-packages')),
|
||||
os.path.abspath(os.path.join(path, 'gluon')),
|
||||
'']
|
||||
[add_path_first(path) for path in paths]
|
||||
|
||||
fix_sys_path()
|
||||
|
||||
import datetime
|
||||
import decimal
|
||||
from gluon.validators import *
|
||||
import re
|
||||
from fix_path import fix_sys_path
|
||||
|
||||
fix_sys_path(__file__)
|
||||
|
||||
|
||||
from gluon.validators import *
|
||||
|
||||
|
||||
class TestValidators(unittest.TestCase):
|
||||
|
||||
@@ -114,6 +88,19 @@ class TestValidators(unittest.TestCase):
|
||||
self.assertEqual(rtn, (datetime.date(2008, 3, 3), None))
|
||||
rtn = v(datetime.date(2010,3,3))
|
||||
self.assertEqual(rtn, (datetime.date(2010, 3, 3), 'oops'))
|
||||
v = IS_DATE_IN_RANGE(maximum=datetime.date(2009,12,31),
|
||||
format="%m/%d/%Y")
|
||||
rtn = v('03/03/2010')
|
||||
self.assertEqual(rtn, ('03/03/2010', 'Enter date on or before 12/31/2009'))
|
||||
v = IS_DATE_IN_RANGE(minimum=datetime.date(2008,1,1),
|
||||
format="%m/%d/%Y")
|
||||
rtn = v('03/03/2007')
|
||||
self.assertEqual(rtn, ('03/03/2007', 'Enter date on or after 01/01/2008'))
|
||||
v = IS_DATE_IN_RANGE(minimum=datetime.date(2008,1,1),
|
||||
maximum=datetime.date(2009,12,31),
|
||||
format="%m/%d/%Y")
|
||||
rtn = v('03/03/2007')
|
||||
self.assertEqual(rtn, ('03/03/2007', 'Enter date in range 01/01/2008 12/31/2009'))
|
||||
|
||||
def test_IS_DATE(self):
|
||||
v = IS_DATE(format="%m/%d/%Y",error_message="oops")
|
||||
@@ -135,6 +122,19 @@ class TestValidators(unittest.TestCase):
|
||||
self.assertEquals(rtn, (datetime.datetime(2008, 3, 3, 0, 0), None))
|
||||
rtn = v(datetime.datetime(2010,3,3,0,0))
|
||||
self.assertEquals(rtn, (datetime.datetime(2010, 3, 3, 0, 0), 'oops'))
|
||||
v = IS_DATETIME_IN_RANGE(maximum=datetime.datetime(2009,12,31,12,20),
|
||||
format='%m/%d/%Y %H:%M:%S')
|
||||
rtn = v('03/03/2010 12:20:00')
|
||||
self.assertEqual(rtn, ('03/03/2010 12:20:00', 'Enter date and time on or before 12/31/2009 12:20:00'))
|
||||
v = IS_DATETIME_IN_RANGE(minimum=datetime.datetime(2008,1,1,12,20),
|
||||
format='%m/%d/%Y %H:%M:%S')
|
||||
rtn = v('03/03/2007 12:20:00')
|
||||
self.assertEqual(rtn, ('03/03/2007 12:20:00', 'Enter date and time on or after 01/01/2008 12:20:00'))
|
||||
v = IS_DATETIME_IN_RANGE(minimum=datetime.datetime(2008,1,1,12,20),
|
||||
maximum=datetime.datetime(2009,12,31,12,20),
|
||||
format='%m/%d/%Y %H:%M:%S')
|
||||
rtn = v('03/03/2007 12:20:00')
|
||||
self.assertEqual(rtn, ('03/03/2007 12:20:00', 'Enter date and time in range 01/01/2008 12:20:00 12/31/2009 12:20:00'))
|
||||
|
||||
def test_IS_DATETIME(self):
|
||||
v = IS_DATETIME(format="%m/%d/%Y %H:%M",error_message="oops")
|
||||
@@ -186,6 +186,8 @@ class TestValidators(unittest.TestCase):
|
||||
self.assertEqual(rtn, ('6,5', 'Enter a number'))
|
||||
rtn = IS_DECIMAL_IN_RANGE(dot=',')('6.5')
|
||||
self.assertEqual(rtn, (decimal.Decimal('6.5'), None))
|
||||
rtn = IS_DECIMAL_IN_RANGE(1,5)(decimal.Decimal('4'))
|
||||
self.assertEqual(rtn, (decimal.Decimal('4'), None))
|
||||
|
||||
def test_IS_EMAIL(self):
|
||||
rtn = IS_EMAIL()('a@b.com')
|
||||
@@ -242,6 +244,16 @@ class TestValidators(unittest.TestCase):
|
||||
self.assertEqual(rtn, ('Ima Fool@example.com', 'Enter a valid email address'))
|
||||
rtn = IS_EMAIL()('localguy@localhost') # localhost as domain
|
||||
self.assertEqual(rtn, ('localguy@localhost', None))
|
||||
# test for banned
|
||||
rtn = IS_EMAIL(banned='^.*\.com(|\..*)$')('localguy@localhost') # localhost as domain
|
||||
self.assertEqual(rtn, ('localguy@localhost', None))
|
||||
rtn = IS_EMAIL(banned='^.*\.com(|\..*)$')('abc@example.com')
|
||||
self.assertEqual(rtn, ('abc@example.com', 'Enter a valid email address'))
|
||||
# test for forced
|
||||
rtn = IS_EMAIL(forced='^.*\.edu(|\..*)$')('localguy@localhost')
|
||||
self.assertEqual(rtn, ('localguy@localhost', 'Enter a valid email address'))
|
||||
rtn = IS_EMAIL(forced='^.*\.edu(|\..*)$')('localguy@example.edu')
|
||||
self.assertEqual(rtn, ('localguy@example.edu', None))
|
||||
|
||||
def test_IS_LIST_OF_EMAILS(self):
|
||||
emails = ['localguy@localhost', '_Yosemite.Sam@example.com']
|
||||
@@ -255,6 +267,19 @@ class TestValidators(unittest.TestCase):
|
||||
rtn = IS_LIST_OF_EMAILS()(';'.join(emails))
|
||||
self.assertEqual(rtn, ('localguy@localhost;_Yosemite.Sam@example.com;a', 'Invalid emails: a'))
|
||||
|
||||
def test_IS_LIST_OF(self):
|
||||
values = [0,1,2,3,4]
|
||||
rtn = IS_LIST_OF(IS_INT_IN_RANGE(0, 10))(values)
|
||||
self.assertEqual(rtn, (values, None))
|
||||
values.append(11)
|
||||
rtn = IS_LIST_OF(IS_INT_IN_RANGE(0, 10))(values)
|
||||
self.assertEqual(rtn, (values, 'Enter an integer between 0 and 9'))
|
||||
rtn = IS_LIST_OF(IS_INT_IN_RANGE(0, 10))(1)
|
||||
self.assertEqual(rtn, ([1], None))
|
||||
rtn = IS_LIST_OF(IS_INT_IN_RANGE(0, 10), minimum=10)([1,2])
|
||||
self.assertEqual(rtn, ([1, 2], 'Enter between 10 and 100 values'))
|
||||
rtn = IS_LIST_OF(IS_INT_IN_RANGE(0, 10), maximum=2)([1,2,3])
|
||||
self.assertEqual(rtn, ([1, 2, 3], 'Enter between 0 and 2 values'))
|
||||
|
||||
def test_IS_EMPTY_OR(self):
|
||||
rtn = IS_EMPTY_OR(IS_EMAIL())('abc@def.com')
|
||||
@@ -515,8 +540,46 @@ class TestValidators(unittest.TestCase):
|
||||
self.assertEqual(rtn, (None, 'Enter from 1 to 255 characters'))
|
||||
rtn = IS_LENGTH(minsize=1)([])
|
||||
self.assertEqual(rtn, ([], 'Enter from 1 to 255 characters'))
|
||||
rtn = IS_LENGTH(minsize=1)([1, 2])
|
||||
self.assertEqual(rtn, ([1, 2], None))
|
||||
rtn = IS_LENGTH(minsize=1)([1])
|
||||
self.assertEqual(rtn, ([1], None))
|
||||
# test unicode
|
||||
rtn = IS_LENGTH(2)(u'°2')
|
||||
self.assertEqual(rtn, ('\xc2\xb02', None))
|
||||
rtn = IS_LENGTH(2)(u'°12')
|
||||
self.assertEqual(rtn, (u'\xb012', 'Enter from 0 to 2 characters'))
|
||||
# test automatic str()
|
||||
rtn = IS_LENGTH(minsize=1)(1)
|
||||
self.assertEqual(rtn, ('1', None))
|
||||
rtn = IS_LENGTH(minsize=2)(1)
|
||||
self.assertEqual(rtn, (1, 'Enter from 2 to 255 characters'))
|
||||
# test FieldStorage
|
||||
import cgi
|
||||
from StringIO import StringIO
|
||||
a = cgi.FieldStorage()
|
||||
a.file = StringIO('abc')
|
||||
rtn = IS_LENGTH(minsize=4)(a)
|
||||
self.assertEqual(rtn, (a, 'Enter from 4 to 255 characters'))
|
||||
urlencode_data = "key2=value2x&key3=value3&key4=value4"
|
||||
urlencode_environ = {
|
||||
'CONTENT_LENGTH': str(len(urlencode_data)),
|
||||
'CONTENT_TYPE': 'application/x-www-form-urlencoded',
|
||||
'QUERY_STRING': 'key1=value1&key2=value2y',
|
||||
'REQUEST_METHOD': 'POST',
|
||||
}
|
||||
fake_stdin = StringIO(urlencode_data)
|
||||
fake_stdin.seek(0)
|
||||
a = cgi.FieldStorage(fp=fake_stdin, environ=urlencode_environ)
|
||||
rtn = IS_LENGTH(minsize=6)(a)
|
||||
self.assertEqual(rtn, (a, 'Enter from 6 to 255 characters'))
|
||||
a = cgi.FieldStorage()
|
||||
rtn = IS_LENGTH(minsize=6)(a)
|
||||
self.assertEqual(rtn, (a, 'Enter from 6 to 255 characters'))
|
||||
rtn = IS_LENGTH(6)(a)
|
||||
self.assertEqual(rtn, (a, None))
|
||||
|
||||
|
||||
|
||||
def test_IS_LOWER(self):
|
||||
rtn = IS_LOWER()('ABC')
|
||||
@@ -545,10 +608,14 @@ class TestValidators(unittest.TestCase):
|
||||
self.assertEqual(rtn, ('hellas', 'Invalid expression'))
|
||||
rtn = IS_MATCH('hell$', strict=True)('hellas')
|
||||
self.assertEqual(rtn, ('hellas', 'Invalid expression'))
|
||||
rtn = IS_MATCH('^.hell$', strict=True)('shell')
|
||||
self.assertEqual(rtn, ('shell', None))
|
||||
rtn = IS_MATCH(u'hell', is_unicode=True)('àòè')
|
||||
self.assertEqual(rtn, ('\xc3\xa0\xc3\xb2\xc3\xa8', 'Invalid expression'))
|
||||
rtn = IS_MATCH(u'hell', is_unicode=True)(u'hell')
|
||||
self.assertEqual(rtn, (u'hell', None))
|
||||
rtn = IS_MATCH('hell', is_unicode=True)(u'hell')
|
||||
self.assertEqual(rtn, (u'hell', None))
|
||||
|
||||
|
||||
def test_IS_EQUAL_TO(self):
|
||||
@@ -718,6 +785,57 @@ class TestValidators(unittest.TestCase):
|
||||
rtn = IS_JSON()('spam1234')
|
||||
self.assertEqual(rtn, ('spam1234', 'Invalid json'))
|
||||
|
||||
def test_IS_UPLOAD_FILENAME(self):
|
||||
import cgi
|
||||
from StringIO import StringIO
|
||||
def gen_fake(filename):
|
||||
formdata_file_data = """
|
||||
---123
|
||||
Content-Disposition: form-data; name="key2"
|
||||
|
||||
value2y
|
||||
---123
|
||||
Content-Disposition: form-data; name="file_attach"; filename="%s"
|
||||
Content-Type: text/plain
|
||||
|
||||
this is the content of the fake file
|
||||
|
||||
---123--
|
||||
""" % filename
|
||||
formdata_file_environ = {
|
||||
'CONTENT_LENGTH': str(len(formdata_file_data)),
|
||||
'CONTENT_TYPE': 'multipart/form-data; boundary=-123',
|
||||
'QUERY_STRING': 'key1=value1&key2=value2x',
|
||||
'REQUEST_METHOD': 'POST',
|
||||
}
|
||||
return cgi.FieldStorage(fp=StringIO(formdata_file_data), environ=formdata_file_environ)['file_attach']
|
||||
|
||||
fake = gen_fake('example.pdf')
|
||||
rtn = IS_UPLOAD_FILENAME(extension='pdf')(fake)
|
||||
self.assertEqual(rtn, (fake, None))
|
||||
fake = gen_fake('example.gif')
|
||||
rtn = IS_UPLOAD_FILENAME(extension='pdf')(fake)
|
||||
self.assertEqual(rtn, (fake, 'Enter valid filename'))
|
||||
fake = gen_fake('backup2014.tar.gz')
|
||||
rtn = IS_UPLOAD_FILENAME(filename='backup.*', extension='tar.gz', lastdot=False)(fake)
|
||||
self.assertEqual(rtn, (fake, None))
|
||||
fake = gen_fake('README')
|
||||
rtn = IS_UPLOAD_FILENAME(filename='^README$', extension='^$', case=0)(fake)
|
||||
self.assertEqual(rtn, (fake, None))
|
||||
fake = gen_fake('readme')
|
||||
rtn = IS_UPLOAD_FILENAME(filename='^README$', extension='^$', case=0)(fake)
|
||||
self.assertEqual(rtn, (fake, 'Enter valid filename'))
|
||||
fake = gen_fake('readme')
|
||||
rtn = IS_UPLOAD_FILENAME(filename='README', case=2)(fake)
|
||||
self.assertEqual(rtn, (fake, None))
|
||||
fake = gen_fake('README')
|
||||
rtn = IS_UPLOAD_FILENAME(filename='README', case=2)(fake)
|
||||
self.assertEqual(rtn, (fake, None))
|
||||
rtn = IS_UPLOAD_FILENAME(extension='pdf')('example.pdf')
|
||||
self.assertEqual(rtn, ('example.pdf', 'Enter valid filename'))
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
+2
-27
@@ -13,34 +13,9 @@ import subprocess
|
||||
import time
|
||||
import signal
|
||||
|
||||
from fix_path import fix_sys_path
|
||||
|
||||
def fix_sys_path():
|
||||
"""
|
||||
logic to have always the correct sys.path
|
||||
'', web2py/gluon, web2py/site-packages, web2py/ ...
|
||||
"""
|
||||
|
||||
def add_path_first(path):
|
||||
sys.path = [path] + [p for p in sys.path if (
|
||||
not p == path and not p == (path + '/'))]
|
||||
|
||||
path = os.path.dirname(os.path.abspath(__file__))
|
||||
|
||||
if not os.path.isfile(os.path.join(path,'web2py.py')):
|
||||
i = 0
|
||||
while i<10:
|
||||
i += 1
|
||||
if os.path.exists(os.path.join(path,'web2py.py')):
|
||||
break
|
||||
path = os.path.abspath(os.path.join(path, '..'))
|
||||
|
||||
paths = [path,
|
||||
os.path.abspath(os.path.join(path, 'site-packages')),
|
||||
os.path.abspath(os.path.join(path, 'gluon')),
|
||||
'']
|
||||
[add_path_first(path) for path in paths]
|
||||
|
||||
fix_sys_path()
|
||||
fix_sys_path(__file__)
|
||||
|
||||
from contrib.webclient import WebClient
|
||||
from urllib2 import HTTPError
|
||||
|
||||
Reference in New Issue
Block a user