Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0a013e3edc | ||
|
|
fb4c114d85 | ||
|
|
b47e1334d5 | ||
|
|
ce0b255747 | ||
|
|
05d2ced779 | ||
|
|
d144ff7d65 | ||
|
|
780510dc32 | ||
|
|
7a5f611e76 | ||
|
|
b7b8a009f2 | ||
|
|
113df51ef9 | ||
|
|
b3a7c20f3f | ||
|
|
2fc4115718 |
2
Makefile
2
Makefile
@@ -32,7 +32,7 @@ update:
|
||||
echo "remember that pymysql was tweaked"
|
||||
src:
|
||||
### Use semantic versioning
|
||||
echo 'Version 2.15.1-stable+timestamp.'`date +%Y.%m.%d.%H.%M.%S` > VERSION
|
||||
echo 'Version 2.15.2-stable+timestamp.'`date +%Y.%m.%d.%H.%M.%S` > VERSION
|
||||
### rm -f all junk files
|
||||
make clean
|
||||
### clean up baisc apps
|
||||
|
||||
2
VERSION
2
VERSION
@@ -1 +1 @@
|
||||
Version 2.15.1-stable+timestamp.2017.07.10.16.17.24
|
||||
Version 2.15.2-stable+timestamp.2017.07.19.01.21.31
|
||||
|
||||
@@ -115,7 +115,7 @@ class AuthAPI(object):
|
||||
if auth.last_visit and auth.last_visit + delta > now:
|
||||
self.user = auth.user
|
||||
# this is a trick to speed up sessions to avoid many writes
|
||||
if (now - auth.last_visit).seconds > (auth.expiration / 10):
|
||||
if (now - auth.last_visit).seconds > (auth.expiration // 10):
|
||||
auth.last_visit = now
|
||||
else:
|
||||
self.user = None
|
||||
|
||||
@@ -7,15 +7,13 @@ db = get_db()
|
||||
"""
|
||||
import os
|
||||
from gluon import *
|
||||
from pydal.adapters import ADAPTERS, PostgreSQLAdapter
|
||||
from pydal.helpers.classes import UseDatabaseStoredFile
|
||||
from pydal.adapters import adapters, PostgrePsyco
|
||||
from pydal.helpers.classes import DatabaseStoredFile
|
||||
|
||||
class HerokuPostgresAdapter(UseDatabaseStoredFile,PostgreSQLAdapter):
|
||||
drivers = ('psycopg2',)
|
||||
@adapters.register_for('postgres')
|
||||
class HerokuPostgresAdapter(DatabaseStoredFile, PostgrePsyco):
|
||||
uploads_in_blob = True
|
||||
|
||||
ADAPTERS['postgres'] = HerokuPostgresAdapter
|
||||
|
||||
def get_db(name = None, pool_size=10):
|
||||
if not name:
|
||||
names = [n for n in os.environ.keys()
|
||||
|
||||
@@ -45,7 +45,7 @@ class RESIZE(object):
|
||||
background = Image.new('RGBA', (self.nx, self.ny), (255, 255, 255, 0))
|
||||
background.paste(
|
||||
img,
|
||||
((self.nx - img.size[0]) / 2, (self.ny - img.size[1]) / 2))
|
||||
((self.nx - img.size[0]) // 2, (self.ny - img.size[1]) // 2))
|
||||
background.save(s, 'JPEG', quality=self.quality)
|
||||
else:
|
||||
img.save(s, 'JPEG', quality=self.quality)
|
||||
|
||||
@@ -415,10 +415,10 @@ def fix_newlines(path):
|
||||
|\r|
|
||||
)''')
|
||||
for filename in listdir(path, '.*\.(py|html)$', drop=False):
|
||||
rdata = read_file(filename, 'rb')
|
||||
rdata = read_file(filename, 'r')
|
||||
wdata = regex.sub('\n', rdata)
|
||||
if wdata != rdata:
|
||||
write_file(filename, wdata, 'wb')
|
||||
write_file(filename, wdata, 'w')
|
||||
|
||||
|
||||
def copystream(
|
||||
|
||||
@@ -11,7 +11,7 @@ HTTP statuses helpers
|
||||
"""
|
||||
|
||||
import re
|
||||
from gluon._compat import iteritems
|
||||
from gluon._compat import iteritems, unicodeT
|
||||
|
||||
__all__ = ['HTTP', 'redirect']
|
||||
|
||||
@@ -122,6 +122,8 @@ class HTTP(Exception):
|
||||
if env.get('request_method', '') == 'HEAD':
|
||||
return ['']
|
||||
elif isinstance(body, (str, bytes, bytearray)):
|
||||
if isinstance(body, unicodeT):
|
||||
body = body.encode('utf-8')
|
||||
return [body]
|
||||
elif hasattr(body, '__iter__'):
|
||||
return body
|
||||
|
||||
Submodule gluon/packages/dal updated: d75d5cf5f3...3e0fd7c01c
@@ -405,7 +405,7 @@ class RadioWidget(OptionsWidget):
|
||||
cols = attributes.get('cols', 1)
|
||||
totals = len(options)
|
||||
mods = totals % cols
|
||||
rows = totals / cols
|
||||
rows = totals // cols
|
||||
if mods:
|
||||
rows += 1
|
||||
|
||||
@@ -471,7 +471,7 @@ class CheckboxesWidget(OptionsWidget):
|
||||
cols = attributes.get('cols', 1)
|
||||
totals = len(options)
|
||||
mods = totals % cols
|
||||
rows = totals / cols
|
||||
rows = totals // cols
|
||||
if mods:
|
||||
rows += 1
|
||||
|
||||
@@ -684,9 +684,10 @@ class AutocompleteWidget(object):
|
||||
urlvars = request.vars
|
||||
urlvars[default_var] = 1
|
||||
self.url = URL(args=request.args, vars=urlvars)
|
||||
self.callback()
|
||||
self.run_callback = True
|
||||
else:
|
||||
self.url = request
|
||||
self.run_callback = False
|
||||
|
||||
def callback(self):
|
||||
if self.keyword in self.request.vars:
|
||||
@@ -759,6 +760,8 @@ class AutocompleteWidget(object):
|
||||
raise HTTP(200, '')
|
||||
|
||||
def __call__(self, field, value, **attributes):
|
||||
if self.run_callback:
|
||||
self.callback()
|
||||
default = dict(
|
||||
_type='text',
|
||||
value=(value is not None and str(value)) or '',
|
||||
@@ -1916,7 +1919,7 @@ class SQLFORM(FORM):
|
||||
if 'table_name' in attributes:
|
||||
del attributes['table_name']
|
||||
|
||||
return SQLFORM(DAL(None).define_table(table_name, *fields),
|
||||
return SQLFORM(DAL(None).define_table(table_name, *[field.clone() for field in fields]),
|
||||
**attributes)
|
||||
|
||||
@staticmethod
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
import os
|
||||
import unittest
|
||||
import datetime
|
||||
|
||||
from gluon.fileutils import parse_version
|
||||
from gluon.fileutils import parse_version, fix_newlines
|
||||
|
||||
|
||||
class TestFileUtils(unittest.TestCase):
|
||||
@@ -22,3 +23,6 @@ class TestFileUtils(unittest.TestCase):
|
||||
# Semantic Beta
|
||||
rtn = parse_version('Version 2.14.1-beta+timestamp.2016.03.21.22.35.26')
|
||||
self.assertEqual(rtn, (2, 14, 1, 'beta', datetime.datetime(2016, 3, 21, 22, 35, 26)))
|
||||
|
||||
def test_fix_newlines(self):
|
||||
fix_newlines(os.path.dirname(os.path.abspath(__file__)))
|
||||
|
||||
@@ -1762,7 +1762,7 @@ class Auth(AuthAPI):
|
||||
if auth.last_visit and auth.last_visit + delta > now:
|
||||
self.user = auth.user
|
||||
# this is a trick to speed up sessions to avoid many writes
|
||||
if (now - auth.last_visit).seconds > (auth.expiration / 10):
|
||||
if (now - auth.last_visit).seconds > (auth.expiration // 10):
|
||||
auth.last_visit = now
|
||||
else:
|
||||
self.user = None
|
||||
@@ -5531,15 +5531,15 @@ def prettydate(d, T=lambda x: x, utc=False):
|
||||
else:
|
||||
suffix = ' ago'
|
||||
if dt.days >= 2 * 365:
|
||||
return T('%d years' + suffix) % int(dt.days / 365)
|
||||
return T('%d years' + suffix) % int(dt.days // 365)
|
||||
elif dt.days >= 365:
|
||||
return T('1 year' + suffix)
|
||||
elif dt.days >= 60:
|
||||
return T('%d months' + suffix) % int(dt.days / 30)
|
||||
return T('%d months' + suffix) % int(dt.days // 30)
|
||||
elif dt.days >= 27: # 4 weeks ugly
|
||||
return T('1 month' + suffix)
|
||||
elif dt.days >= 14:
|
||||
return T('%d weeks' + suffix) % int(dt.days / 7)
|
||||
return T('%d weeks' + suffix) % int(dt.days // 7)
|
||||
elif dt.days >= 7:
|
||||
return T('1 week' + suffix)
|
||||
elif dt.days > 1:
|
||||
@@ -5547,11 +5547,11 @@ def prettydate(d, T=lambda x: x, utc=False):
|
||||
elif dt.days == 1:
|
||||
return T('1 day' + suffix)
|
||||
elif dt.seconds >= 2 * 60 * 60:
|
||||
return T('%d hours' + suffix) % int(dt.seconds / 3600)
|
||||
return T('%d hours' + suffix) % int(dt.seconds // 3600)
|
||||
elif dt.seconds >= 60 * 60:
|
||||
return T('1 hour' + suffix)
|
||||
elif dt.seconds >= 2 * 60:
|
||||
return T('%d minutes' + suffix) % int(dt.seconds / 60)
|
||||
return T('%d minutes' + suffix) % int(dt.seconds // 60)
|
||||
elif dt.seconds >= 60:
|
||||
return T('1 minute' + suffix)
|
||||
elif dt.seconds > 1:
|
||||
|
||||
@@ -156,12 +156,12 @@ def get_digest(value):
|
||||
raise ValueError("Invalid digest algorithm: %s" % value)
|
||||
|
||||
DIGEST_ALG_BY_SIZE = {
|
||||
128 / 4: 'md5',
|
||||
160 / 4: 'sha1',
|
||||
224 / 4: 'sha224',
|
||||
256 / 4: 'sha256',
|
||||
384 / 4: 'sha384',
|
||||
512 / 4: 'sha512',
|
||||
128 // 4: 'md5',
|
||||
160 // 4: 'sha1',
|
||||
224 // 4: 'sha224',
|
||||
256 // 4: 'sha256',
|
||||
384 // 4: 'sha384',
|
||||
512 // 4: 'sha512',
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -2767,7 +2767,7 @@ class LazyCrypt(object):
|
||||
else:
|
||||
digest_alg, key = self.crypt.digest_alg, ''
|
||||
if self.crypt.salt:
|
||||
if self.crypt.salt:
|
||||
if self.crypt.salt is True:
|
||||
salt = str(web2py_uuid()).replace('-', '')[-16:]
|
||||
else:
|
||||
salt = self.crypt.salt
|
||||
|
||||
Reference in New Issue
Block a user