Merge remote-tracking branch 'web2py/master'
This commit is contained in:
+1
-1
@@ -1,6 +1,6 @@
|
||||
language: python
|
||||
|
||||
sudo: false
|
||||
sudo: required
|
||||
|
||||
cache: pip
|
||||
|
||||
|
||||
@@ -352,9 +352,9 @@
|
||||
'modules': 'modules',
|
||||
'Multi User Mode': 'Multi User Mode',
|
||||
'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 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" imported': 'new application "%s" imported',
|
||||
'New Application Wizard': 'Nieuwe Applicatie Wizard',
|
||||
|
||||
@@ -356,9 +356,9 @@
|
||||
'modules': 'модулі',
|
||||
'Multi User Mode': 'Multi User Mode',
|
||||
'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 upper case': 'Повинен включати щонайменше %s великих букв',
|
||||
'Must include at least %s uppercase': 'Повинен включати щонайменше %s великих букв',
|
||||
'new application "%s" created': 'новий додаток "%s" створено',
|
||||
'new application "%s" imported': 'new application "%s" imported',
|
||||
'New Application Wizard': 'Майстер створення нового додатку',
|
||||
|
||||
+3
-3
@@ -314,8 +314,8 @@
|
||||
// Vim does not support modifier only keys.
|
||||
return false;
|
||||
}
|
||||
// TODO: Current bindings expect the character to be lower case, but
|
||||
// it looks like vim key notation uses upper case.
|
||||
// TODO: Current bindings expect the character to be lowercase, but
|
||||
// it looks like vim key notation uses uppercase.
|
||||
if (isUpperCase(lastPiece)) {
|
||||
pieces[pieces.length - 1] = lastPiece.toLowerCase();
|
||||
}
|
||||
@@ -3644,7 +3644,7 @@
|
||||
* Extract the regular expression from the query and return a Regexp object.
|
||||
* Returns null if the query is blank.
|
||||
* 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.
|
||||
* 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
|
||||
|
||||
+3
-1
@@ -962,7 +962,9 @@ def findT(path, language=DEFAULT_LANGUAGE):
|
||||
+ listdir(vp, '^.+\.html$', 0) + listdir(mop, '^.+\.py$', 0):
|
||||
data = to_native(read_locked(filename))
|
||||
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:
|
||||
try:
|
||||
message = safe_eval(item)
|
||||
|
||||
@@ -843,7 +843,7 @@ class TestValidators(unittest.TestCase):
|
||||
'|'.join(['Minimum length is 8',
|
||||
'Maximum length is 4',
|
||||
'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']))
|
||||
)
|
||||
rtn = IS_STRONG(es=True)('abcde')
|
||||
@@ -851,7 +851,7 @@ class TestValidators(unittest.TestCase):
|
||||
('abcde',
|
||||
'|'.join(['Minimum length is 8',
|
||||
'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']))
|
||||
)
|
||||
rtn = IS_STRONG(upper=0, lower=0, number=0, es=True)('Abcde1')
|
||||
@@ -859,8 +859,8 @@ class TestValidators(unittest.TestCase):
|
||||
('Abcde1',
|
||||
'|'.join(['Minimum length is 8',
|
||||
'Must include at least 1 of the following: ~!@#$%^&*()_+-=?<>,.:;{}[]|',
|
||||
'May not include any upper case letters',
|
||||
'May not include any lower case letters',
|
||||
'May not include any uppercase letters',
|
||||
'May not include any lowercase letters',
|
||||
'May not include any numbers']))
|
||||
)
|
||||
|
||||
|
||||
+24
-2
@@ -2005,6 +2005,12 @@ class Auth(object):
|
||||
return self.cas_validate(version=2, proxy=False)
|
||||
elif args(1) == self.settings.cas_actions['proxyvalidate']:
|
||||
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']:
|
||||
return self.logout(next=request.vars.service or DEFAULT)
|
||||
else:
|
||||
@@ -2830,6 +2836,15 @@ class Auth(object):
|
||||
if success:
|
||||
if version == 1:
|
||||
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
|
||||
username = user.get('username', user[userfield])
|
||||
message = build_response(
|
||||
@@ -3417,7 +3432,9 @@ class Auth(object):
|
||||
link = self.url(
|
||||
self.settings.function, args=('verify_email', key), scheme=True)
|
||||
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(
|
||||
to=form.vars.email,
|
||||
subject=self.messages.verify_email_subject,
|
||||
@@ -3670,7 +3687,12 @@ class Auth(object):
|
||||
key = request.args[-1]
|
||||
if 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:
|
||||
key = session._reset_password_key
|
||||
else:
|
||||
|
||||
+6
-6
@@ -2470,7 +2470,7 @@ class IS_LIST_OF(Validator):
|
||||
|
||||
class IS_LOWER(Validator):
|
||||
"""
|
||||
Converts to lower case::
|
||||
Converts to lowercase::
|
||||
|
||||
>>> IS_LOWER()('ABC')
|
||||
('abc', None)
|
||||
@@ -2485,7 +2485,7 @@ class IS_LOWER(Validator):
|
||||
|
||||
class IS_UPPER(Validator):
|
||||
"""
|
||||
Converts to upper case::
|
||||
Converts to uppercase::
|
||||
|
||||
>>> IS_UPPER()('abc')
|
||||
('ABC', None)
|
||||
@@ -3025,22 +3025,22 @@ class IS_STRONG(object):
|
||||
all_upper = re.findall("[A-Z]", value)
|
||||
if self.upper > 0:
|
||||
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))
|
||||
else:
|
||||
if len(all_upper) > 0:
|
||||
failures.append(
|
||||
translate("May not include any upper case letters"))
|
||||
translate("May not include any uppercase letters"))
|
||||
if isinstance(self.lower, int):
|
||||
all_lower = re.findall("[a-z]", value)
|
||||
if self.lower > 0:
|
||||
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))
|
||||
else:
|
||||
if len(all_lower) > 0:
|
||||
failures.append(
|
||||
translate("May not include any lower case letters"))
|
||||
translate("May not include any lowercase letters"))
|
||||
if isinstance(self.number, int):
|
||||
all_number = re.findall("[0-9]", value)
|
||||
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.
|
||||
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 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',
|
||||
'--user=%s' % username,
|
||||
'--password=%s' % password,
|
||||
'--host=%s' % host,
|
||||
'--execute=show tables;',
|
||||
database_name],
|
||||
stdin=subprocess.PIPE,
|
||||
@@ -64,14 +65,15 @@ def mysql(database_name, username, password):
|
||||
sql_showtables, stderr = p.communicate()
|
||||
tables = [re.sub(
|
||||
'\|\s+([^\|*])\s+.*', '\1', x) for x in sql_showtables.split()[1:]]
|
||||
connection_string = "legacy_db = DAL('mysql://%s:%s@localhost/%s')" % (
|
||||
username, password, database_name)
|
||||
connection_string = "legacy_db = DAL('mysql://%s:%s@%s/%s')" % (
|
||||
username, password, host, database_name)
|
||||
legacy_db_table_web2py_code = []
|
||||
for table_name in tables:
|
||||
#get the sql create statement
|
||||
p = subprocess.Popen(['mysqldump',
|
||||
'--user=%s' % username,
|
||||
'--password=%s' % password,
|
||||
'--host=%s' % host,
|
||||
'--skip-add-drop-table',
|
||||
'--no-data', database_name,
|
||||
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)
|
||||
return legacy_db_web2py_code
|
||||
|
||||
regex = re.compile('(.*?):(.*?)@(.*)')
|
||||
regex = re.compile('(.*):(.*)@((.*)/)?(.*)')
|
||||
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:
|
||||
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