Merge remote-tracking branch 'web2py/master'
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
language: python
|
language: python
|
||||||
|
|
||||||
sudo: false
|
sudo: required
|
||||||
|
|
||||||
cache: pip
|
cache: pip
|
||||||
|
|
||||||
|
|||||||
@@ -352,9 +352,9 @@
|
|||||||
'modules': 'modules',
|
'modules': 'modules',
|
||||||
'Multi User Mode': 'Multi User Mode',
|
'Multi User Mode': 'Multi User Mode',
|
||||||
'Must include at least %s %s': 'Moet ten minste bevatten %s %s',
|
'Must include at least %s %s': 'Moet ten minste bevatten %s %s',
|
||||||
'Must include at least %s lower case': 'Moet ten minste bevatten %s lower case',
|
'Must include at least %s lowercase': 'Moet ten minste bevatten %s kleine letter',
|
||||||
'Must include at least %s of the following : %s': 'Moet ten minste bevatten %s van het volgende : %s',
|
'Must include at least %s of the following : %s': 'Moet ten minste bevatten %s van het volgende : %s',
|
||||||
'Must include at least %s upper case': 'Moet ten minste bevatten %s upper case',
|
'Must include at least %s uppercase': 'Moet ten minste bevatten %s hoofdletter',
|
||||||
'new application "%s" created': 'nieuwe applicatie "%s" gemaakt',
|
'new application "%s" created': 'nieuwe applicatie "%s" gemaakt',
|
||||||
'new application "%s" imported': 'new application "%s" imported',
|
'new application "%s" imported': 'new application "%s" imported',
|
||||||
'New Application Wizard': 'Nieuwe Applicatie Wizard',
|
'New Application Wizard': 'Nieuwe Applicatie Wizard',
|
||||||
|
|||||||
@@ -356,9 +356,9 @@
|
|||||||
'modules': 'модулі',
|
'modules': 'модулі',
|
||||||
'Multi User Mode': 'Multi User Mode',
|
'Multi User Mode': 'Multi User Mode',
|
||||||
'Must include at least %s %s': 'Має вміщувати щонайменше %s %s',
|
'Must include at least %s %s': 'Має вміщувати щонайменше %s %s',
|
||||||
'Must include at least %s lower case': 'Повинен включати щонайменше %s малих букв',
|
'Must include at least %s lowercase': 'Повинен включати щонайменше %s малих букв',
|
||||||
'Must include at least %s of the following : %s': 'Має включати не менше %s таких символів : %s',
|
'Must include at least %s of the following : %s': 'Має включати не менше %s таких символів : %s',
|
||||||
'Must include at least %s upper case': 'Повинен включати щонайменше %s великих букв',
|
'Must include at least %s uppercase': 'Повинен включати щонайменше %s великих букв',
|
||||||
'new application "%s" created': 'новий додаток "%s" створено',
|
'new application "%s" created': 'новий додаток "%s" створено',
|
||||||
'new application "%s" imported': 'new application "%s" imported',
|
'new application "%s" imported': 'new application "%s" imported',
|
||||||
'New Application Wizard': 'Майстер створення нового додатку',
|
'New Application Wizard': 'Майстер створення нового додатку',
|
||||||
|
|||||||
+3
-3
@@ -314,8 +314,8 @@
|
|||||||
// Vim does not support modifier only keys.
|
// Vim does not support modifier only keys.
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// TODO: Current bindings expect the character to be lower case, but
|
// TODO: Current bindings expect the character to be lowercase, but
|
||||||
// it looks like vim key notation uses upper case.
|
// it looks like vim key notation uses uppercase.
|
||||||
if (isUpperCase(lastPiece)) {
|
if (isUpperCase(lastPiece)) {
|
||||||
pieces[pieces.length - 1] = lastPiece.toLowerCase();
|
pieces[pieces.length - 1] = lastPiece.toLowerCase();
|
||||||
}
|
}
|
||||||
@@ -3644,7 +3644,7 @@
|
|||||||
* Extract the regular expression from the query and return a Regexp object.
|
* Extract the regular expression from the query and return a Regexp object.
|
||||||
* Returns null if the query is blank.
|
* Returns null if the query is blank.
|
||||||
* If ignoreCase is passed in, the Regexp object will have the 'i' flag set.
|
* If ignoreCase is passed in, the Regexp object will have the 'i' flag set.
|
||||||
* If smartCase is passed in, and the query contains upper case letters,
|
* If smartCase is passed in, and the query contains uppercase letters,
|
||||||
* then ignoreCase is overridden, and the 'i' flag will not be set.
|
* then ignoreCase is overridden, and the 'i' flag will not be set.
|
||||||
* If the query contains the /i in the flag part of the regular expression,
|
* If the query contains the /i in the flag part of the regular expression,
|
||||||
* then both ignoreCase and smartCase are ignored, and 'i' will be passed
|
* then both ignoreCase and smartCase are ignored, and 'i' will be passed
|
||||||
|
|||||||
+3
-1
@@ -962,7 +962,9 @@ def findT(path, language=DEFAULT_LANGUAGE):
|
|||||||
+ listdir(vp, '^.+\.html$', 0) + listdir(mop, '^.+\.py$', 0):
|
+ listdir(vp, '^.+\.html$', 0) + listdir(mop, '^.+\.py$', 0):
|
||||||
data = to_native(read_locked(filename))
|
data = to_native(read_locked(filename))
|
||||||
items = regex_translate.findall(data)
|
items = regex_translate.findall(data)
|
||||||
items += ["@markmin\x01%s" %x for x in regex_translate_m.findall(data)]
|
for x in regex_translate_m.findall(data):
|
||||||
|
if x[0:3] in ["'''", '"""']: items.append("%s@markmin\x01%s" %(x[0:3], x[3:]))
|
||||||
|
else: items.append("%s@markmin\x01%s" %(x[0], x[1:]))
|
||||||
for item in items:
|
for item in items:
|
||||||
try:
|
try:
|
||||||
message = safe_eval(item)
|
message = safe_eval(item)
|
||||||
|
|||||||
@@ -843,7 +843,7 @@ class TestValidators(unittest.TestCase):
|
|||||||
'|'.join(['Minimum length is 8',
|
'|'.join(['Minimum length is 8',
|
||||||
'Maximum length is 4',
|
'Maximum length is 4',
|
||||||
'Must include at least 1 of the following: ~!@#$%^&*()_+-=?<>,.:;{}[]|',
|
'Must include at least 1 of the following: ~!@#$%^&*()_+-=?<>,.:;{}[]|',
|
||||||
'Must include at least 1 upper case',
|
'Must include at least 1 uppercase',
|
||||||
'Must include at least 1 number']))
|
'Must include at least 1 number']))
|
||||||
)
|
)
|
||||||
rtn = IS_STRONG(es=True)('abcde')
|
rtn = IS_STRONG(es=True)('abcde')
|
||||||
@@ -851,7 +851,7 @@ class TestValidators(unittest.TestCase):
|
|||||||
('abcde',
|
('abcde',
|
||||||
'|'.join(['Minimum length is 8',
|
'|'.join(['Minimum length is 8',
|
||||||
'Must include at least 1 of the following: ~!@#$%^&*()_+-=?<>,.:;{}[]|',
|
'Must include at least 1 of the following: ~!@#$%^&*()_+-=?<>,.:;{}[]|',
|
||||||
'Must include at least 1 upper case',
|
'Must include at least 1 uppercase',
|
||||||
'Must include at least 1 number']))
|
'Must include at least 1 number']))
|
||||||
)
|
)
|
||||||
rtn = IS_STRONG(upper=0, lower=0, number=0, es=True)('Abcde1')
|
rtn = IS_STRONG(upper=0, lower=0, number=0, es=True)('Abcde1')
|
||||||
@@ -859,8 +859,8 @@ class TestValidators(unittest.TestCase):
|
|||||||
('Abcde1',
|
('Abcde1',
|
||||||
'|'.join(['Minimum length is 8',
|
'|'.join(['Minimum length is 8',
|
||||||
'Must include at least 1 of the following: ~!@#$%^&*()_+-=?<>,.:;{}[]|',
|
'Must include at least 1 of the following: ~!@#$%^&*()_+-=?<>,.:;{}[]|',
|
||||||
'May not include any upper case letters',
|
'May not include any uppercase letters',
|
||||||
'May not include any lower case letters',
|
'May not include any lowercase letters',
|
||||||
'May not include any numbers']))
|
'May not include any numbers']))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
+24
-2
@@ -2005,6 +2005,12 @@ class Auth(object):
|
|||||||
return self.cas_validate(version=2, proxy=False)
|
return self.cas_validate(version=2, proxy=False)
|
||||||
elif args(1) == self.settings.cas_actions['proxyvalidate']:
|
elif args(1) == self.settings.cas_actions['proxyvalidate']:
|
||||||
return self.cas_validate(version=2, proxy=True)
|
return self.cas_validate(version=2, proxy=True)
|
||||||
|
elif (args(1) == 'p3'
|
||||||
|
and args(2) == self.settings.cas_actions['servicevalidate']):
|
||||||
|
return self.cas_validate(version=3, proxy=False)
|
||||||
|
elif (args(1) == 'p3'
|
||||||
|
and args(2) == self.settings.cas_actions['proxyvalidate']):
|
||||||
|
return self.cas_validate(version=3, proxy=True)
|
||||||
elif args(1) == self.settings.cas_actions['logout']:
|
elif args(1) == self.settings.cas_actions['logout']:
|
||||||
return self.logout(next=request.vars.service or DEFAULT)
|
return self.logout(next=request.vars.service or DEFAULT)
|
||||||
else:
|
else:
|
||||||
@@ -2830,6 +2836,15 @@ class Auth(object):
|
|||||||
if success:
|
if success:
|
||||||
if version == 1:
|
if version == 1:
|
||||||
message = 'yes\n%s' % user[userfield]
|
message = 'yes\n%s' % user[userfield]
|
||||||
|
elif version == 3:
|
||||||
|
username = user.get('username', user[userfield])
|
||||||
|
message = build_response(
|
||||||
|
TAG['cas:authenticationSuccess'](
|
||||||
|
TAG['cas:user'](username),
|
||||||
|
TAG['cas:attributes'](
|
||||||
|
*[TAG['cas:' + field.name](user[field.name])
|
||||||
|
for field in self.table_user()
|
||||||
|
if field.readable])))
|
||||||
else: # assume version 2
|
else: # assume version 2
|
||||||
username = user.get('username', user[userfield])
|
username = user.get('username', user[userfield])
|
||||||
message = build_response(
|
message = build_response(
|
||||||
@@ -3417,7 +3432,9 @@ class Auth(object):
|
|||||||
link = self.url(
|
link = self.url(
|
||||||
self.settings.function, args=('verify_email', key), scheme=True)
|
self.settings.function, args=('verify_email', key), scheme=True)
|
||||||
d = dict(form.vars)
|
d = dict(form.vars)
|
||||||
d.update(dict(key=key, link=link, username=form.vars[username]))
|
d.update(dict(key=key, link=link, username=form.vars[username],
|
||||||
|
firstname=form.vars['firstname'],
|
||||||
|
lastname=form.vars['lastname']))
|
||||||
if not (self.settings.mailer and self.settings.mailer.send(
|
if not (self.settings.mailer and self.settings.mailer.send(
|
||||||
to=form.vars.email,
|
to=form.vars.email,
|
||||||
subject=self.messages.verify_email_subject,
|
subject=self.messages.verify_email_subject,
|
||||||
@@ -3670,7 +3687,12 @@ class Auth(object):
|
|||||||
key = request.args[-1]
|
key = request.args[-1]
|
||||||
if key:
|
if key:
|
||||||
session._reset_password_key = key
|
session._reset_password_key = key
|
||||||
redirect(self.url(args='confirm_registration'))
|
if next:
|
||||||
|
redirect_vars = {'_next': next}
|
||||||
|
else:
|
||||||
|
redirect_vars = {}
|
||||||
|
redirect(self.url(args='confirm_registration',
|
||||||
|
vars=redirect_vars))
|
||||||
else:
|
else:
|
||||||
key = session._reset_password_key
|
key = session._reset_password_key
|
||||||
else:
|
else:
|
||||||
|
|||||||
+6
-6
@@ -2470,7 +2470,7 @@ class IS_LIST_OF(Validator):
|
|||||||
|
|
||||||
class IS_LOWER(Validator):
|
class IS_LOWER(Validator):
|
||||||
"""
|
"""
|
||||||
Converts to lower case::
|
Converts to lowercase::
|
||||||
|
|
||||||
>>> IS_LOWER()('ABC')
|
>>> IS_LOWER()('ABC')
|
||||||
('abc', None)
|
('abc', None)
|
||||||
@@ -2485,7 +2485,7 @@ class IS_LOWER(Validator):
|
|||||||
|
|
||||||
class IS_UPPER(Validator):
|
class IS_UPPER(Validator):
|
||||||
"""
|
"""
|
||||||
Converts to upper case::
|
Converts to uppercase::
|
||||||
|
|
||||||
>>> IS_UPPER()('abc')
|
>>> IS_UPPER()('abc')
|
||||||
('ABC', None)
|
('ABC', None)
|
||||||
@@ -3025,22 +3025,22 @@ class IS_STRONG(object):
|
|||||||
all_upper = re.findall("[A-Z]", value)
|
all_upper = re.findall("[A-Z]", value)
|
||||||
if self.upper > 0:
|
if self.upper > 0:
|
||||||
if not len(all_upper) >= self.upper:
|
if not len(all_upper) >= self.upper:
|
||||||
failures.append(translate("Must include at least %s upper case")
|
failures.append(translate("Must include at least %s uppercase")
|
||||||
% str(self.upper))
|
% str(self.upper))
|
||||||
else:
|
else:
|
||||||
if len(all_upper) > 0:
|
if len(all_upper) > 0:
|
||||||
failures.append(
|
failures.append(
|
||||||
translate("May not include any upper case letters"))
|
translate("May not include any uppercase letters"))
|
||||||
if isinstance(self.lower, int):
|
if isinstance(self.lower, int):
|
||||||
all_lower = re.findall("[a-z]", value)
|
all_lower = re.findall("[a-z]", value)
|
||||||
if self.lower > 0:
|
if self.lower > 0:
|
||||||
if not len(all_lower) >= self.lower:
|
if not len(all_lower) >= self.lower:
|
||||||
failures.append(translate("Must include at least %s lower case")
|
failures.append(translate("Must include at least %s lowercase")
|
||||||
% str(self.lower))
|
% str(self.lower))
|
||||||
else:
|
else:
|
||||||
if len(all_lower) > 0:
|
if len(all_lower) > 0:
|
||||||
failures.append(
|
failures.append(
|
||||||
translate("May not include any lower case letters"))
|
translate("May not include any lowercase letters"))
|
||||||
if isinstance(self.number, int):
|
if isinstance(self.number, int):
|
||||||
all_number = re.findall("[0-9]", value)
|
all_number = re.findall("[0-9]", value)
|
||||||
if self.number > 0:
|
if self.number > 0:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ legacy_db(legacy_db.mytable.id>0).select()
|
|||||||
If the script crashes this is might be due to that fact that the data_type_map dictionary below is incomplete.
|
If the script crashes this is might be due to that fact that the data_type_map dictionary below is incomplete.
|
||||||
Please complete it, improve it and continue.
|
Please complete it, improve it and continue.
|
||||||
|
|
||||||
Created by Falko Krause, minor modifications by Massimo Di Pierro and Ron McOuat
|
Created by Falko Krause, minor modifications by Massimo Di Pierro, Ron McOuat and Marvi Benedet
|
||||||
'''
|
'''
|
||||||
import subprocess
|
import subprocess
|
||||||
import re
|
import re
|
||||||
@@ -52,10 +52,11 @@ data_type_map = dict(
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def mysql(database_name, username, password):
|
def mysql(database_name, username, password, host):
|
||||||
p = subprocess.Popen(['mysql',
|
p = subprocess.Popen(['mysql',
|
||||||
'--user=%s' % username,
|
'--user=%s' % username,
|
||||||
'--password=%s' % password,
|
'--password=%s' % password,
|
||||||
|
'--host=%s' % host,
|
||||||
'--execute=show tables;',
|
'--execute=show tables;',
|
||||||
database_name],
|
database_name],
|
||||||
stdin=subprocess.PIPE,
|
stdin=subprocess.PIPE,
|
||||||
@@ -64,14 +65,15 @@ def mysql(database_name, username, password):
|
|||||||
sql_showtables, stderr = p.communicate()
|
sql_showtables, stderr = p.communicate()
|
||||||
tables = [re.sub(
|
tables = [re.sub(
|
||||||
'\|\s+([^\|*])\s+.*', '\1', x) for x in sql_showtables.split()[1:]]
|
'\|\s+([^\|*])\s+.*', '\1', x) for x in sql_showtables.split()[1:]]
|
||||||
connection_string = "legacy_db = DAL('mysql://%s:%s@localhost/%s')" % (
|
connection_string = "legacy_db = DAL('mysql://%s:%s@%s/%s')" % (
|
||||||
username, password, database_name)
|
username, password, host, database_name)
|
||||||
legacy_db_table_web2py_code = []
|
legacy_db_table_web2py_code = []
|
||||||
for table_name in tables:
|
for table_name in tables:
|
||||||
#get the sql create statement
|
#get the sql create statement
|
||||||
p = subprocess.Popen(['mysqldump',
|
p = subprocess.Popen(['mysqldump',
|
||||||
'--user=%s' % username,
|
'--user=%s' % username,
|
||||||
'--password=%s' % password,
|
'--password=%s' % password,
|
||||||
|
'--host=%s' % host,
|
||||||
'--skip-add-drop-table',
|
'--skip-add-drop-table',
|
||||||
'--no-data', database_name,
|
'--no-data', database_name,
|
||||||
table_name], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
table_name], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
|
||||||
@@ -106,9 +108,13 @@ def mysql(database_name, username, password):
|
|||||||
legacy_db_table_web2py_code)
|
legacy_db_table_web2py_code)
|
||||||
return legacy_db_web2py_code
|
return legacy_db_web2py_code
|
||||||
|
|
||||||
regex = re.compile('(.*?):(.*?)@(.*)')
|
regex = re.compile('(.*):(.*)@((.*)/)?(.*)')
|
||||||
if len(sys.argv) < 2 or not regex.match(sys.argv[1]):
|
if len(sys.argv) < 2 or not regex.match(sys.argv[1]):
|
||||||
print 'USAGE:\n\n extract_mysql_models.py username:password@data_basename\n\n'
|
print 'USAGE:\n\n extract_mysql_models.py username:password@[host/]data_basename\n\n'
|
||||||
else:
|
else:
|
||||||
m = regex.match(sys.argv[1])
|
m = regex.match(sys.argv[1])
|
||||||
print mysql(m.group(3), m.group(1), m.group(2))
|
username = m.group(1)
|
||||||
|
password = m.group(2)
|
||||||
|
host = m.group(4) or 'localhost'
|
||||||
|
db_name = m.group(5)
|
||||||
|
print mysql(database_name = db_name, username = username, password = password, host = host)
|
||||||
|
|||||||
Reference in New Issue
Block a user