Merge pull request #885 from BuhtigithuB/fix/pep8-tools-py
Improve PEP8 gluon/tools.py
This commit is contained in:
+128
-160
@@ -287,29 +287,28 @@ class Mail(object):
|
|||||||
self.result = {}
|
self.result = {}
|
||||||
self.error = None
|
self.error = None
|
||||||
|
|
||||||
def send(
|
def send(self,
|
||||||
self,
|
|
||||||
to,
|
to,
|
||||||
subject = '[no subject]',
|
subject='[no subject]',
|
||||||
message = '[no message]',
|
message='[no message]',
|
||||||
attachments = None,
|
attachments=None,
|
||||||
cc = None,
|
cc=None,
|
||||||
bcc = None,
|
bcc=None,
|
||||||
reply_to = None,
|
reply_to=None,
|
||||||
sender = None,
|
sender=None,
|
||||||
encoding = 'utf-8',
|
encoding='utf-8',
|
||||||
raw = False,
|
raw=False,
|
||||||
headers = {},
|
headers={},
|
||||||
from_address = None,
|
from_address=None,
|
||||||
cipher_type = None,
|
cipher_type=None,
|
||||||
sign = None,
|
sign=None,
|
||||||
sign_passphrase = None,
|
sign_passphrase=None,
|
||||||
encrypt = None,
|
encrypt=None,
|
||||||
x509_sign_keyfile = None,
|
x509_sign_keyfile=None,
|
||||||
x509_sign_chainfile = None,
|
x509_sign_chainfile=None,
|
||||||
x509_sign_certfile = None,
|
x509_sign_certfile=None,
|
||||||
x509_crypt_certfiles = None,
|
x509_crypt_certfiles=None,
|
||||||
x509_nocerts = None
|
x509_nocerts=None
|
||||||
):
|
):
|
||||||
"""
|
"""
|
||||||
Sends an email using data specified in constructor
|
Sends an email using data specified in constructor
|
||||||
@@ -664,7 +663,7 @@ class Mail(object):
|
|||||||
|
|
||||||
# SIGN
|
# SIGN
|
||||||
if sign:
|
if sign:
|
||||||
#key for signing
|
# key for signing
|
||||||
try:
|
try:
|
||||||
keyfile_bio = BIO.openfile(x509_sign_keyfile)\
|
keyfile_bio = BIO.openfile(x509_sign_keyfile)\
|
||||||
if os.path.isfile(x509_sign_keyfile)\
|
if os.path.isfile(x509_sign_keyfile)\
|
||||||
@@ -796,7 +795,7 @@ class Mail(object):
|
|||||||
subject=subject, body=text, **xcc)
|
subject=subject, body=text, **xcc)
|
||||||
else:
|
else:
|
||||||
smtp_args = self.settings.server.split(':')
|
smtp_args = self.settings.server.split(':')
|
||||||
kwargs = dict(timeout = self.settings.timeout)
|
kwargs = dict(timeout=self.settings.timeout)
|
||||||
if self.settings.ssl:
|
if self.settings.ssl:
|
||||||
server = smtplib.SMTP_SSL(*smtp_args, **kwargs)
|
server = smtplib.SMTP_SSL(*smtp_args, **kwargs)
|
||||||
else:
|
else:
|
||||||
@@ -839,8 +838,7 @@ class Recaptcha(DIV):
|
|||||||
API_SERVER = 'http://www.google.com/recaptcha/api'
|
API_SERVER = 'http://www.google.com/recaptcha/api'
|
||||||
VERIFY_SERVER = 'http://www.google.com/recaptcha/api/verify'
|
VERIFY_SERVER = 'http://www.google.com/recaptcha/api/verify'
|
||||||
|
|
||||||
def __init__(
|
def __init__(self,
|
||||||
self,
|
|
||||||
request=None,
|
request=None,
|
||||||
public_key='',
|
public_key='',
|
||||||
private_key='',
|
private_key='',
|
||||||
@@ -849,7 +847,7 @@ class Recaptcha(DIV):
|
|||||||
error_message='invalid',
|
error_message='invalid',
|
||||||
label='Verify:',
|
label='Verify:',
|
||||||
options='',
|
options='',
|
||||||
comment = '',
|
comment='',
|
||||||
ajax=False
|
ajax=False
|
||||||
):
|
):
|
||||||
request = request or current.request
|
request = request or current.request
|
||||||
@@ -942,7 +940,7 @@ class Recaptcha(DIV):
|
|||||||
jQuery.getScript('%(url)s',function() {
|
jQuery.getScript('%(url)s',function() {
|
||||||
Recaptcha.create('%(public_key)s',
|
Recaptcha.create('%(public_key)s',
|
||||||
'recaptcha',jQuery.extend(RecaptchaOptions,{'callback':Recaptcha.focus_response_field}))
|
'recaptcha',jQuery.extend(RecaptchaOptions,{'callback':Recaptcha.focus_response_field}))
|
||||||
}) """ % ({'options':RecaptchaOptions,'url':url_recaptcha_js,'public_key':public_key})
|
}) """ % ({'options': RecaptchaOptions, 'url': url_recaptcha_js, 'public_key': public_key})
|
||||||
captcha = DIV(
|
captcha = DIV(
|
||||||
SCRIPT(
|
SCRIPT(
|
||||||
script,
|
script,
|
||||||
@@ -963,6 +961,7 @@ class Recaptcha(DIV):
|
|||||||
captcha.append(DIV(self.errors['captcha'], _class='error'))
|
captcha.append(DIV(self.errors['captcha'], _class='error'))
|
||||||
return XML(captcha).xml()
|
return XML(captcha).xml()
|
||||||
|
|
||||||
|
|
||||||
# this should only be used for catcha and perhaps not even for that
|
# this should only be used for catcha and perhaps not even for that
|
||||||
def addrow(form, a, b, c, style, _id, position=-1):
|
def addrow(form, a, b, c, style, _id, position=-1):
|
||||||
if style == "divs":
|
if style == "divs":
|
||||||
@@ -1050,14 +1049,14 @@ class Auth(object):
|
|||||||
profile_fields=None,
|
profile_fields=None,
|
||||||
email_case_sensitive=True,
|
email_case_sensitive=True,
|
||||||
username_case_sensitive=True,
|
username_case_sensitive=True,
|
||||||
update_fields = ['email'],
|
update_fields=['email'],
|
||||||
ondelete="CASCADE",
|
ondelete="CASCADE",
|
||||||
client_side = True,
|
client_side=True,
|
||||||
renew_session_onlogin=True,
|
renew_session_onlogin=True,
|
||||||
renew_session_onlogout=True,
|
renew_session_onlogout=True,
|
||||||
keep_session_onlogin=True,
|
keep_session_onlogin=True,
|
||||||
keep_session_onlogout=False,
|
keep_session_onlogout=False,
|
||||||
wiki = Settings(),
|
wiki=Settings(),
|
||||||
)
|
)
|
||||||
# ## these are messages that can be customized
|
# ## these are messages that can be customized
|
||||||
default_messages = dict(
|
default_messages = dict(
|
||||||
@@ -1099,8 +1098,7 @@ class Auth(object):
|
|||||||
retrieve_username_subject='Username retrieve',
|
retrieve_username_subject='Username retrieve',
|
||||||
retrieve_password='Your password is: %(password)s',
|
retrieve_password='Your password is: %(password)s',
|
||||||
retrieve_password_subject='Password retrieve',
|
retrieve_password_subject='Password retrieve',
|
||||||
reset_password=
|
reset_password='Click on the link %(link)s to reset your password',
|
||||||
'Click on the link %(link)s to reset your password',
|
|
||||||
reset_password_subject='Password reset',
|
reset_password_subject='Password reset',
|
||||||
invalid_reset_password='Invalid reset password',
|
invalid_reset_password='Invalid reset password',
|
||||||
profile_updated='Profile updated',
|
profile_updated='Profile updated',
|
||||||
@@ -1263,7 +1261,7 @@ class Auth(object):
|
|||||||
f=f, args=args, vars=vars, scheme=scheme)
|
f=f, args=args, vars=vars, scheme=scheme)
|
||||||
|
|
||||||
def here(self):
|
def here(self):
|
||||||
return URL(args=current.request.args,vars=current.request.get_vars)
|
return URL(args=current.request.args, vars=current.request.get_vars)
|
||||||
|
|
||||||
def __init__(self, environment=None, db=None, mailer=True,
|
def __init__(self, environment=None, db=None, mailer=True,
|
||||||
hmac_key=None, controller='default', function='user',
|
hmac_key=None, controller='default', function='user',
|
||||||
@@ -1365,7 +1363,8 @@ class Auth(object):
|
|||||||
# ## these are messages that can be customized
|
# ## these are messages that can be customized
|
||||||
messages = self.messages = Messages(current.T)
|
messages = self.messages = Messages(current.T)
|
||||||
messages.update(Auth.default_messages)
|
messages.update(Auth.default_messages)
|
||||||
messages.update(ajax_failed_authentication=DIV(H4('NOT AUTHORIZED'),
|
messages.update(ajax_failed_authentication=
|
||||||
|
DIV(H4('NOT AUTHORIZED'),
|
||||||
'Please ',
|
'Please ',
|
||||||
A('login',
|
A('login',
|
||||||
_href=self.settings.login_url +
|
_href=self.settings.login_url +
|
||||||
@@ -1392,7 +1391,7 @@ class Auth(object):
|
|||||||
return next
|
return next
|
||||||
|
|
||||||
def _get_user_id(self):
|
def _get_user_id(self):
|
||||||
"accessor for auth.user_id"
|
"""accessor for auth.user_id"""
|
||||||
return self.user and self.user.id or None
|
return self.user and self.user.id or None
|
||||||
|
|
||||||
user_id = property(_get_user_id, doc="user.id or None")
|
user_id = property(_get_user_id, doc="user.id or None")
|
||||||
@@ -1545,10 +1544,10 @@ class Auth(object):
|
|||||||
self.bar[0][3].append((item['name'], False, item['href']))
|
self.bar[0][3].append((item['name'], False, item['href']))
|
||||||
|
|
||||||
def bootstrap3(): # Default web2py scaffolding
|
def bootstrap3(): # Default web2py scaffolding
|
||||||
def rename(icon): return icon+' '+icon.replace('icon','glyphicon')
|
def rename(icon): return icon+' '+icon.replace('icon', 'glyphicon')
|
||||||
self.bar = UL(LI(Anr(I(_class=rename('icon '+items[0]['icon'])),
|
self.bar = UL(LI(Anr(I(_class=rename('icon '+items[0]['icon'])),
|
||||||
' ' + items[0]['name'],
|
' ' + items[0]['name'],
|
||||||
_href=items[0]['href'])),_class='dropdown-menu')
|
_href=items[0]['href'])), _class='dropdown-menu')
|
||||||
del items[0]
|
del items[0]
|
||||||
for item in items:
|
for item in items:
|
||||||
self.bar.insert(-1, LI(Anr(I(_class=rename('icon '+item['icon'])),
|
self.bar.insert(-1, LI(Anr(I(_class=rename('icon '+item['icon'])),
|
||||||
@@ -1557,13 +1556,13 @@ class Auth(object):
|
|||||||
self.bar.insert(-1, LI('', _class='divider'))
|
self.bar.insert(-1, LI('', _class='divider'))
|
||||||
if self.user_id:
|
if self.user_id:
|
||||||
self.bar = LI(Anr(prefix, user_identifier,
|
self.bar = LI(Anr(prefix, user_identifier,
|
||||||
_href='#',_class="dropdown-toggle",
|
_href='#', _class="dropdown-toggle",
|
||||||
data={'toggle':'dropdown'}),
|
data={'toggle': 'dropdown'}),
|
||||||
self.bar,_class='dropdown')
|
self.bar, _class='dropdown')
|
||||||
else:
|
else:
|
||||||
self.bar = LI(Anr(T('Log In'),
|
self.bar = LI(Anr(T('Log In'),
|
||||||
_href='#',_class="dropdown-toggle",
|
_href='#', _class="dropdown-toggle",
|
||||||
data={'toggle':'dropdown'}), self.bar,
|
data={'toggle': 'dropdown'}), self.bar,
|
||||||
_class='dropdown')
|
_class='dropdown')
|
||||||
|
|
||||||
def bare():
|
def bare():
|
||||||
@@ -1714,7 +1713,7 @@ class Auth(object):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
current_record_label = current_record_label or current.T(
|
current_record_label = current_record_label or current.T(
|
||||||
current_record.replace('_',' ').title())
|
current_record.replace('_', ' ').title())
|
||||||
for table in tables:
|
for table in tables:
|
||||||
fieldnames = table.fields()
|
fieldnames = table.fields()
|
||||||
if ('id' in fieldnames and
|
if ('id' in fieldnames and
|
||||||
@@ -1787,8 +1786,10 @@ class Auth(object):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
db = self.db
|
db = self.db
|
||||||
if migrate is None: migrate = db._migrate
|
if migrate is None:
|
||||||
if fake_migrate is None: fake_migrate = db._fake_migrate
|
migrate = db._migrate
|
||||||
|
if fake_migrate is None:
|
||||||
|
fake_migrate = db._fake_migrate
|
||||||
settings = self.settings
|
settings = self.settings
|
||||||
if username is None:
|
if username is None:
|
||||||
username = settings.use_username
|
username = settings.use_username
|
||||||
@@ -1895,8 +1896,7 @@ class Auth(object):
|
|||||||
settings.table_group_name,
|
settings.table_group_name,
|
||||||
Field('role', length=512, default='',
|
Field('role', length=512, default='',
|
||||||
label=self.messages.label_role,
|
label=self.messages.label_role,
|
||||||
requires=IS_NOT_IN_DB(
|
requires=IS_NOT_IN_DB(db, '%s.role' % settings.table_group_name)),
|
||||||
db, '%s.role' % settings.table_group_name)),
|
|
||||||
Field('description', 'text',
|
Field('description', 'text',
|
||||||
label=self.messages.label_description),
|
label=self.messages.label_description),
|
||||||
*extra_fields,
|
*extra_fields,
|
||||||
@@ -2116,8 +2116,7 @@ class Auth(object):
|
|||||||
basic_realm = unicode(basic_auth_realm)
|
basic_realm = unicode(basic_auth_realm)
|
||||||
elif basic_auth_realm is True:
|
elif basic_auth_realm is True:
|
||||||
basic_realm = u'' + current.request.application
|
basic_realm = u'' + current.request.application
|
||||||
http_401 = HTTP(401, u'Not Authorized',
|
http_401 = HTTP(401, u'Not Authorized', **{'WWW-Authenticate': u'Basic realm="' + basic_realm + '"'})
|
||||||
**{'WWW-Authenticate': u'Basic realm="' + basic_realm + '"'})
|
|
||||||
if not basic or not basic[:6].lower() == 'basic ':
|
if not basic or not basic[:6].lower() == 'basic ':
|
||||||
if basic_auth_realm:
|
if basic_auth_realm:
|
||||||
raise http_401
|
raise http_401
|
||||||
@@ -2135,16 +2134,15 @@ class Auth(object):
|
|||||||
from gluon.settings import global_settings
|
from gluon.settings import global_settings
|
||||||
if global_settings.web2py_runtime_gae:
|
if global_settings.web2py_runtime_gae:
|
||||||
user = Row(self.table_user()._filter_fields(user, id=True))
|
user = Row(self.table_user()._filter_fields(user, id=True))
|
||||||
delattr(user,'password')
|
delattr(user, 'password')
|
||||||
else:
|
else:
|
||||||
user = Row(user)
|
user = Row(user)
|
||||||
for key, value in user.items():
|
for key, value in user.items():
|
||||||
if callable(value) or key=='password':
|
if callable(value) or key == 'password':
|
||||||
delattr(user,key)
|
delattr(user, key)
|
||||||
if self.settings.renew_session_onlogin:
|
if self.settings.renew_session_onlogin:
|
||||||
current.session.renew(clear_session=not self.settings.keep_session_onlogin)
|
current.session.renew(clear_session=not self.settings.keep_session_onlogin)
|
||||||
current.session.auth = Storage(
|
current.session.auth = Storage(user=user,
|
||||||
user = user,
|
|
||||||
last_visit=current.request.now,
|
last_visit=current.request.now,
|
||||||
expiration=self.settings.expiration,
|
expiration=self.settings.expiration,
|
||||||
hmac_key=web2py_uuid())
|
hmac_key=web2py_uuid())
|
||||||
@@ -2178,8 +2176,7 @@ class Auth(object):
|
|||||||
else:
|
else:
|
||||||
# user not in database try other login methods
|
# user not in database try other login methods
|
||||||
for login_method in self.settings.login_methods:
|
for login_method in self.settings.login_methods:
|
||||||
if login_method != self and \
|
if login_method != self and login_method(username, password):
|
||||||
login_method(username, password):
|
|
||||||
self.user = username
|
self.user = username
|
||||||
return username
|
return username
|
||||||
return False
|
return False
|
||||||
@@ -2196,20 +2193,14 @@ class Auth(object):
|
|||||||
elif not fields.get(settings.userfield):
|
elif not fields.get(settings.userfield):
|
||||||
raise ValueError("register_bare: " +
|
raise ValueError("register_bare: " +
|
||||||
"userfield not provided or invalid")
|
"userfield not provided or invalid")
|
||||||
fields[settings.passfield] = \
|
fields[settings.passfield] = settings.table_user[settings.passfield].validate(fields[settings.passfield])[0]
|
||||||
settings.table_user[settings.passfield].validate(
|
user = self.get_or_create_user(fields, login=False, get=False, update_fields=self.settings.update_fields)
|
||||||
fields[settings.passfield])[0]
|
|
||||||
user = self.get_or_create_user(
|
|
||||||
fields, login=False, get=False,
|
|
||||||
update_fields=self.settings.update_fields)
|
|
||||||
if not user:
|
if not user:
|
||||||
# get or create did not create a user (it ignores duplicate records)
|
# get or create did not create a user (it ignores duplicate records)
|
||||||
return False
|
return False
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
def cas_login(self,
|
||||||
def cas_login(
|
|
||||||
self,
|
|
||||||
next=DEFAULT,
|
next=DEFAULT,
|
||||||
onvalidation=DEFAULT,
|
onvalidation=DEFAULT,
|
||||||
onaccept=DEFAULT,
|
onaccept=DEFAULT,
|
||||||
@@ -2303,18 +2294,17 @@ class Auth(object):
|
|||||||
raise HTTP(200, message)
|
raise HTTP(200, message)
|
||||||
|
|
||||||
def _reset_two_factor_auth(self, session):
|
def _reset_two_factor_auth(self, session):
|
||||||
'''When two-step authentication is enabled, this function is used to
|
"""When two-step authentication is enabled, this function is used to
|
||||||
clear the session after successfully completing second challenge
|
clear the session after successfully completing second challenge
|
||||||
or when the maximum number of tries allowed has expired.
|
or when the maximum number of tries allowed has expired.
|
||||||
'''
|
"""
|
||||||
session.auth_two_factor_user = None
|
session.auth_two_factor_user = None
|
||||||
session.auth_two_factor = None
|
session.auth_two_factor = None
|
||||||
session.auth_two_factor_enabled = False
|
session.auth_two_factor_enabled = False
|
||||||
# Allow up to 4 attempts (the 1st one plus 3 more)
|
# Allow up to 4 attempts (the 1st one plus 3 more)
|
||||||
session.auth_two_factor_tries_left = 3
|
session.auth_two_factor_tries_left = 3
|
||||||
|
|
||||||
def login(
|
def login(self,
|
||||||
self,
|
|
||||||
next=DEFAULT,
|
next=DEFAULT,
|
||||||
onvalidation=DEFAULT,
|
onvalidation=DEFAULT,
|
||||||
onaccept=DEFAULT,
|
onaccept=DEFAULT,
|
||||||
@@ -2424,7 +2414,7 @@ class Auth(object):
|
|||||||
|
|
||||||
if settings.remember_me_form:
|
if settings.remember_me_form:
|
||||||
extra_fields = [
|
extra_fields = [
|
||||||
Field('remember_me','boolean',default=False,
|
Field('remember_me', 'boolean', default=False,
|
||||||
label = self.messages.label_remember_me)]
|
label = self.messages.label_remember_me)]
|
||||||
else:
|
else:
|
||||||
extra_fields = []
|
extra_fields = []
|
||||||
@@ -2549,7 +2539,7 @@ class Auth(object):
|
|||||||
# auth.settings.two_factor_authentication_group
|
# auth.settings.two_factor_authentication_group
|
||||||
if user and self.settings.two_factor_authentication_group:
|
if user and self.settings.two_factor_authentication_group:
|
||||||
role = self.settings.two_factor_authentication_group
|
role = self.settings.two_factor_authentication_group
|
||||||
session.auth_two_factor_enabled = self.has_membership(user_id=user.id,role=role)
|
session.auth_two_factor_enabled = self.has_membership(user_id=user.id, role=role)
|
||||||
# challenge
|
# challenge
|
||||||
if session.auth_two_factor_enabled:
|
if session.auth_two_factor_enabled:
|
||||||
form = SQLFORM.factory(
|
form = SQLFORM.factory(
|
||||||
@@ -2673,8 +2663,7 @@ class Auth(object):
|
|||||||
if not next is None:
|
if not next is None:
|
||||||
redirect(next)
|
redirect(next)
|
||||||
|
|
||||||
def register(
|
def register(self,
|
||||||
self,
|
|
||||||
next=DEFAULT,
|
next=DEFAULT,
|
||||||
onvalidation=DEFAULT,
|
onvalidation=DEFAULT,
|
||||||
onaccept=DEFAULT,
|
onaccept=DEFAULT,
|
||||||
@@ -2728,7 +2717,7 @@ class Auth(object):
|
|||||||
if self.settings.register_verify_password:
|
if self.settings.register_verify_password:
|
||||||
extra_fields = [
|
extra_fields = [
|
||||||
Field("password_two", "password", requires=IS_EQUAL_TO(
|
Field("password_two", "password", requires=IS_EQUAL_TO(
|
||||||
request.post_vars.get(passfield,None),
|
request.post_vars.get(passfield, None),
|
||||||
error_message=self.messages.mismatched_password),
|
error_message=self.messages.mismatched_password),
|
||||||
label=current.T("Confirm Password"))]
|
label=current.T("Confirm Password"))]
|
||||||
else:
|
else:
|
||||||
@@ -2772,7 +2761,7 @@ 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]))
|
||||||
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,
|
||||||
@@ -2813,8 +2802,7 @@ class Auth(object):
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def verify_email(
|
def verify_email(self,
|
||||||
self,
|
|
||||||
next=DEFAULT,
|
next=DEFAULT,
|
||||||
onaccept=DEFAULT,
|
onaccept=DEFAULT,
|
||||||
log=DEFAULT,
|
log=DEFAULT,
|
||||||
@@ -2847,8 +2835,7 @@ class Auth(object):
|
|||||||
callback(onaccept, user)
|
callback(onaccept, user)
|
||||||
redirect(next)
|
redirect(next)
|
||||||
|
|
||||||
def retrieve_username(
|
def retrieve_username(self,
|
||||||
self,
|
|
||||||
next=DEFAULT,
|
next=DEFAULT,
|
||||||
onvalidation=DEFAULT,
|
onvalidation=DEFAULT,
|
||||||
onaccept=DEFAULT,
|
onaccept=DEFAULT,
|
||||||
@@ -2905,8 +2892,7 @@ class Auth(object):
|
|||||||
username = ', '.join(u.username for u in users)
|
username = ', '.join(u.username for u in users)
|
||||||
self.settings.mailer.send(to=form.vars.email,
|
self.settings.mailer.send(to=form.vars.email,
|
||||||
subject=self.messages.retrieve_username_subject,
|
subject=self.messages.retrieve_username_subject,
|
||||||
message=self.messages.retrieve_username
|
message=self.messages.retrieve_username % dict(username=username))
|
||||||
% dict(username=username))
|
|
||||||
session.flash = self.messages.email_sent
|
session.flash = self.messages.email_sent
|
||||||
for user in users:
|
for user in users:
|
||||||
self.log_event(log, user)
|
self.log_event(log, user)
|
||||||
@@ -2931,8 +2917,7 @@ class Auth(object):
|
|||||||
password += random.choice(specials)
|
password += random.choice(specials)
|
||||||
return ''.join(random.sample(password, len(password)))
|
return ''.join(random.sample(password, len(password)))
|
||||||
|
|
||||||
def reset_password_deprecated(
|
def reset_password_deprecated(self,
|
||||||
self,
|
|
||||||
next=DEFAULT,
|
next=DEFAULT,
|
||||||
onvalidation=DEFAULT,
|
onvalidation=DEFAULT,
|
||||||
onaccept=DEFAULT,
|
onaccept=DEFAULT,
|
||||||
@@ -2991,8 +2976,7 @@ class Auth(object):
|
|||||||
if self.settings.mailer and \
|
if self.settings.mailer and \
|
||||||
self.settings.mailer.send(to=form.vars.email,
|
self.settings.mailer.send(to=form.vars.email,
|
||||||
subject=self.messages.retrieve_password_subject,
|
subject=self.messages.retrieve_password_subject,
|
||||||
message=self.messages.retrieve_password
|
message=self.messages.retrieve_password % dict(password=password)):
|
||||||
% dict(password=password)):
|
|
||||||
session.flash = self.messages.email_sent
|
session.flash = self.messages.email_sent
|
||||||
else:
|
else:
|
||||||
session.flash = self.messages.unable_to_send_email
|
session.flash = self.messages.unable_to_send_email
|
||||||
@@ -3006,8 +2990,7 @@ class Auth(object):
|
|||||||
table_user.email.requires = old_requires
|
table_user.email.requires = old_requires
|
||||||
return form
|
return form
|
||||||
|
|
||||||
def reset_password(
|
def reset_password(self,
|
||||||
self,
|
|
||||||
next=DEFAULT,
|
next=DEFAULT,
|
||||||
onvalidation=DEFAULT,
|
onvalidation=DEFAULT,
|
||||||
onaccept=DEFAULT,
|
onaccept=DEFAULT,
|
||||||
@@ -3071,8 +3054,7 @@ class Auth(object):
|
|||||||
redirect(next, client_side=self.settings.client_side)
|
redirect(next, client_side=self.settings.client_side)
|
||||||
return form
|
return form
|
||||||
|
|
||||||
def request_reset_password(
|
def request_reset_password(self,
|
||||||
self,
|
|
||||||
next=DEFAULT,
|
next=DEFAULT,
|
||||||
onvalidation=DEFAULT,
|
onvalidation=DEFAULT,
|
||||||
onaccept=DEFAULT,
|
onaccept=DEFAULT,
|
||||||
@@ -3101,7 +3083,7 @@ class Auth(object):
|
|||||||
log = self.messages['reset_password_log']
|
log = self.messages['reset_password_log']
|
||||||
userfield = self.settings.login_userfield or 'username' \
|
userfield = self.settings.login_userfield or 'username' \
|
||||||
if 'username' in table_user.fields else 'email'
|
if 'username' in table_user.fields else 'email'
|
||||||
if userfield=='email':
|
if userfield == 'email':
|
||||||
table_user.email.requires = [
|
table_user.email.requires = [
|
||||||
IS_EMAIL(error_message=self.messages.invalid_email),
|
IS_EMAIL(error_message=self.messages.invalid_email),
|
||||||
IS_IN_DB(self.db, table_user.email,
|
IS_IN_DB(self.db, table_user.email,
|
||||||
@@ -3169,8 +3151,7 @@ class Auth(object):
|
|||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|
||||||
def retrieve_password(
|
def retrieve_password(self,
|
||||||
self,
|
|
||||||
next=DEFAULT,
|
next=DEFAULT,
|
||||||
onvalidation=DEFAULT,
|
onvalidation=DEFAULT,
|
||||||
onaccept=DEFAULT,
|
onaccept=DEFAULT,
|
||||||
@@ -3181,8 +3162,7 @@ class Auth(object):
|
|||||||
else:
|
else:
|
||||||
return self.reset_password_deprecated(next, onvalidation, onaccept, log)
|
return self.reset_password_deprecated(next, onvalidation, onaccept, log)
|
||||||
|
|
||||||
def change_password(
|
def change_password(self,
|
||||||
self,
|
|
||||||
next=DEFAULT,
|
next=DEFAULT,
|
||||||
onvalidation=DEFAULT,
|
onvalidation=DEFAULT,
|
||||||
onaccept=DEFAULT,
|
onaccept=DEFAULT,
|
||||||
@@ -3211,9 +3191,9 @@ class Auth(object):
|
|||||||
log = self.messages['change_password_log']
|
log = self.messages['change_password_log']
|
||||||
passfield = self.settings.password_field
|
passfield = self.settings.password_field
|
||||||
requires = table_user[passfield].requires
|
requires = table_user[passfield].requires
|
||||||
if not isinstance(requires,(list, tuple)):
|
if not isinstance(requires, (list, tuple)):
|
||||||
requires = [requires]
|
requires = [requires]
|
||||||
requires = filter(lambda t:isinstance(t,CRYPT), requires)
|
requires = filter(lambda t: isinstance(t, CRYPT), requires)
|
||||||
if requires:
|
if requires:
|
||||||
requires[0].min_length = 0
|
requires[0].min_length = 0
|
||||||
form = SQLFORM.factory(
|
form = SQLFORM.factory(
|
||||||
@@ -3237,7 +3217,7 @@ class Auth(object):
|
|||||||
onvalidation=onvalidation,
|
onvalidation=onvalidation,
|
||||||
hideerror=self.settings.hideerror):
|
hideerror=self.settings.hideerror):
|
||||||
|
|
||||||
current_user = s.select(limitby=(0,1), orderby_on_limitby=False).first()
|
current_user = s.select(limitby=(0, 1), orderby_on_limitby=False).first()
|
||||||
if not form.vars['old_password'] == current_user[passfield]:
|
if not form.vars['old_password'] == current_user[passfield]:
|
||||||
form.errors['old_password'] = self.messages.invalid_password
|
form.errors['old_password'] = self.messages.invalid_password
|
||||||
else:
|
else:
|
||||||
@@ -3253,8 +3233,7 @@ class Auth(object):
|
|||||||
redirect(next, client_side=self.settings.client_side)
|
redirect(next, client_side=self.settings.client_side)
|
||||||
return form
|
return form
|
||||||
|
|
||||||
def profile(
|
def profile(self,
|
||||||
self,
|
|
||||||
next=DEFAULT,
|
next=DEFAULT,
|
||||||
onvalidation=DEFAULT,
|
onvalidation=DEFAULT,
|
||||||
onaccept=DEFAULT,
|
onaccept=DEFAULT,
|
||||||
@@ -3314,7 +3293,7 @@ class Auth(object):
|
|||||||
onaccept = self.settings.login_onaccept
|
onaccept = self.settings.login_onaccept
|
||||||
if onaccept:
|
if onaccept:
|
||||||
form = Storage(dict(vars=self.user))
|
form = Storage(dict(vars=self.user))
|
||||||
if not isinstance(onaccept,(list, tuple)):
|
if not isinstance(onaccept, (list, tuple)):
|
||||||
onaccept = [onaccept]
|
onaccept = [onaccept]
|
||||||
for callback in onaccept:
|
for callback in onaccept:
|
||||||
callback(form)
|
callback(form)
|
||||||
@@ -3615,8 +3594,7 @@ class Auth(object):
|
|||||||
if group_id in self.user_groups: del self.user_groups[group_id]
|
if group_id in self.user_groups: del self.user_groups[group_id]
|
||||||
return ret
|
return ret
|
||||||
|
|
||||||
def has_permission(
|
def has_permission(self,
|
||||||
self,
|
|
||||||
name='any',
|
name='any',
|
||||||
table_name='',
|
table_name='',
|
||||||
record_id=0,
|
record_id=0,
|
||||||
@@ -3668,8 +3646,7 @@ class Auth(object):
|
|||||||
table_name=table_name, record_id=record_id))
|
table_name=table_name, record_id=record_id))
|
||||||
return r
|
return r
|
||||||
|
|
||||||
def add_permission(
|
def add_permission(self,
|
||||||
self,
|
|
||||||
group_id,
|
group_id,
|
||||||
name='any',
|
name='any',
|
||||||
table_name='',
|
table_name='',
|
||||||
@@ -3683,7 +3660,7 @@ class Auth(object):
|
|||||||
if group_id == 0:
|
if group_id == 0:
|
||||||
group_id = self.user_group()
|
group_id = self.user_group()
|
||||||
record = self.db(permission.group_id == group_id)(permission.name == name)(permission.table_name == str(table_name))(
|
record = self.db(permission.group_id == group_id)(permission.name == name)(permission.table_name == str(table_name))(
|
||||||
permission.record_id == long(record_id)).select(limitby=(0,1), orderby_on_limitby=False).first()
|
permission.record_id == long(record_id)).select(limitby=(0, 1), orderby_on_limitby=False).first()
|
||||||
if record:
|
if record:
|
||||||
id = record.id
|
id = record.id
|
||||||
else:
|
else:
|
||||||
@@ -3696,8 +3673,7 @@ class Auth(object):
|
|||||||
record_id=record_id))
|
record_id=record_id))
|
||||||
return id
|
return id
|
||||||
|
|
||||||
def del_permission(
|
def del_permission(self,
|
||||||
self,
|
|
||||||
group_id,
|
group_id,
|
||||||
name='any',
|
name='any',
|
||||||
table_name='',
|
table_name='',
|
||||||
@@ -3862,7 +3838,8 @@ class Auth(object):
|
|||||||
force_render=False,
|
force_render=False,
|
||||||
groups=None):
|
groups=None):
|
||||||
|
|
||||||
if controller and function: resolve = False
|
if controller and function:
|
||||||
|
resolve = False
|
||||||
|
|
||||||
if not hasattr(self, '_wiki'):
|
if not hasattr(self, '_wiki'):
|
||||||
self._wiki = Wiki(self, render=render,
|
self._wiki = Wiki(self, render=render,
|
||||||
@@ -3885,7 +3862,7 @@ class Auth(object):
|
|||||||
if resolve:
|
if resolve:
|
||||||
if slug:
|
if slug:
|
||||||
wiki = self._wiki.read(slug, force_render)
|
wiki = self._wiki.read(slug, force_render)
|
||||||
if isinstance(wiki, dict) and wiki.has_key('content'):
|
if isinstance(wiki, dict) and wiki.has_key('content'): # FIXME: .has_key() is deprecated
|
||||||
# We don't want to return a dict object, just the wiki
|
# We don't want to return a dict object, just the wiki
|
||||||
wiki = wiki['content']
|
wiki = wiki['content']
|
||||||
else:
|
else:
|
||||||
@@ -4013,8 +3990,7 @@ class Crud(object):
|
|||||||
return Auth.archive(form, archive_table=archive_table,
|
return Auth.archive(form, archive_table=archive_table,
|
||||||
current_record=current_record)
|
current_record=current_record)
|
||||||
|
|
||||||
def update(
|
def update(self,
|
||||||
self,
|
|
||||||
table,
|
table,
|
||||||
record,
|
record,
|
||||||
next=DEFAULT,
|
next=DEFAULT,
|
||||||
@@ -4125,8 +4101,7 @@ class Crud(object):
|
|||||||
raise HTTP(401, serializers.json(dict(errors=form.errors)))
|
raise HTTP(401, serializers.json(dict(errors=form.errors)))
|
||||||
return form
|
return form
|
||||||
|
|
||||||
def create(
|
def create(self,
|
||||||
self,
|
|
||||||
table,
|
table,
|
||||||
next=DEFAULT,
|
next=DEFAULT,
|
||||||
onvalidation=DEFAULT,
|
onvalidation=DEFAULT,
|
||||||
@@ -4182,8 +4157,7 @@ class Crud(object):
|
|||||||
return table._filter_fields(form.record, id=True)
|
return table._filter_fields(form.record, id=True)
|
||||||
return form
|
return form
|
||||||
|
|
||||||
def delete(
|
def delete(self,
|
||||||
self,
|
|
||||||
table,
|
table,
|
||||||
record_id,
|
record_id,
|
||||||
next=DEFAULT,
|
next=DEFAULT,
|
||||||
@@ -4237,8 +4211,7 @@ class Crud(object):
|
|||||||
limitby=limitby))
|
limitby=limitby))
|
||||||
return rows
|
return rows
|
||||||
|
|
||||||
def select(
|
def select(self,
|
||||||
self,
|
|
||||||
table,
|
table,
|
||||||
query=None,
|
query=None,
|
||||||
fields=None,
|
fields=None,
|
||||||
@@ -4329,7 +4302,7 @@ class Crud(object):
|
|||||||
"""
|
"""
|
||||||
table = tables[0]
|
table = tables[0]
|
||||||
fields = args.get('fields', table.fields)
|
fields = args.get('fields', table.fields)
|
||||||
validate = args.get('validate',True)
|
validate = args.get('validate', True)
|
||||||
request = current.request
|
request = current.request
|
||||||
db = self.db
|
db = self.db
|
||||||
if not (isinstance(table, Table) or table in db.tables):
|
if not (isinstance(table, Table) or table in db.tables):
|
||||||
@@ -4382,8 +4355,7 @@ class Crud(object):
|
|||||||
if request.post_vars and (chkval or field.type == 'id'):
|
if request.post_vars and (chkval or field.type == 'id'):
|
||||||
if txtval and opval != '':
|
if txtval and opval != '':
|
||||||
if field.type[0:10] == 'reference ':
|
if field.type[0:10] == 'reference ':
|
||||||
refsearch.append(self.get_query(field,
|
refsearch.append(self.get_query(field, opval, txtval, refsearch=True))
|
||||||
opval, txtval, refsearch=True))
|
|
||||||
elif validate:
|
elif validate:
|
||||||
value, error = field.validate(txtval)
|
value, error = field.validate(txtval)
|
||||||
if not error:
|
if not error:
|
||||||
@@ -4477,8 +4449,7 @@ def universal_caller(f, *a, **b):
|
|||||||
|
|
||||||
# Fill the arg_dict with name and value for the submitted, positional values
|
# Fill the arg_dict with name and value for the submitted, positional values
|
||||||
for pos_index, pos_val in enumerate(a[:c]):
|
for pos_index, pos_val in enumerate(a[:c]):
|
||||||
arg_dict[n[pos_index]
|
arg_dict[n[pos_index]] = pos_val # n[pos_index] is the name of the argument
|
||||||
] = pos_val # n[pos_index] is the name of the argument
|
|
||||||
|
|
||||||
# There might be pos_args left, that are sent as named_values. Gather them as well.
|
# There might be pos_args left, that are sent as named_values. Gather them as well.
|
||||||
# If a argument already is populated with values we simply replaces them.
|
# If a argument already is populated with values we simply replaces them.
|
||||||
@@ -4856,7 +4827,6 @@ class Service(object):
|
|||||||
-32603: ("Internal error", "Internal JSON-RPC error."),
|
-32603: ("Internal error", "Internal JSON-RPC error."),
|
||||||
-32099: ("Server error", "Reserved for implementation-defined server-errors.")}
|
-32099: ("Server error", "Reserved for implementation-defined server-errors.")}
|
||||||
|
|
||||||
|
|
||||||
def serve_jsonrpc(self):
|
def serve_jsonrpc(self):
|
||||||
def return_response(id, result):
|
def return_response(id, result):
|
||||||
return serializers.json({'version': '1.1',
|
return serializers.json({'version': '1.1',
|
||||||
@@ -4886,7 +4856,7 @@ class Service(object):
|
|||||||
if not method in methods:
|
if not method in methods:
|
||||||
return return_error(id, 100, 'method "%s" does not exist' % method)
|
return return_error(id, 100, 'method "%s" does not exist' % method)
|
||||||
try:
|
try:
|
||||||
if isinstance(params,dict):
|
if isinstance(params, dict):
|
||||||
s = methods[method](**params)
|
s = methods[method](**params)
|
||||||
else:
|
else:
|
||||||
s = methods[method](*params)
|
s = methods[method](*params)
|
||||||
@@ -4952,8 +4922,6 @@ class Service(object):
|
|||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
request = current.request
|
request = current.request
|
||||||
response = current.response
|
response = current.response
|
||||||
if not data:
|
if not data:
|
||||||
@@ -4986,7 +4954,7 @@ class Service(object):
|
|||||||
if not method in methods:
|
if not method in methods:
|
||||||
return return_error(id, -32601, data='Method "%s" does not exist' % method)
|
return return_error(id, -32601, data='Method "%s" does not exist' % method)
|
||||||
try:
|
try:
|
||||||
if isinstance(params,dict):
|
if isinstance(params, dict):
|
||||||
s = methods[method](**params)
|
s = methods[method](**params)
|
||||||
else:
|
else:
|
||||||
s = methods[method](*params)
|
s = methods[method](*params)
|
||||||
@@ -5006,7 +4974,6 @@ class Service(object):
|
|||||||
logger.warning('%s: %s\n%s' % (etype.__name__, eval, traceback.format_tb(etb)))
|
logger.warning('%s: %s\n%s' % (etype.__name__, eval, traceback.format_tb(etb)))
|
||||||
return return_error(id, -32099, data=data)
|
return return_error(id, -32099, data=data)
|
||||||
|
|
||||||
|
|
||||||
def serve_xmlrpc(self):
|
def serve_xmlrpc(self):
|
||||||
request = current.request
|
request = current.request
|
||||||
response = current.response
|
response = current.response
|
||||||
@@ -5407,7 +5374,7 @@ class Expose(object):
|
|||||||
self.filenames = [f[len(path) - 1:] for f in sorted(glob.glob(path))
|
self.filenames = [f[len(path) - 1:] for f in sorted(glob.glob(path))
|
||||||
if not os.path.isdir(f) and not self.isprivate(f)]
|
if not os.path.isdir(f) and not self.isprivate(f)]
|
||||||
if 'README' in self.filenames:
|
if 'README' in self.filenames:
|
||||||
readme = open(os.path.join(filename,'README')).read()
|
readme = open(os.path.join(filename, 'README')).read()
|
||||||
self.paragraph = MARKMIN(readme)
|
self.paragraph = MARKMIN(readme)
|
||||||
else:
|
else:
|
||||||
self.paragraph = None
|
self.paragraph = None
|
||||||
@@ -5464,7 +5431,8 @@ class Expose(object):
|
|||||||
class Wiki(object):
|
class Wiki(object):
|
||||||
everybody = 'everybody'
|
everybody = 'everybody'
|
||||||
rows_page = 25
|
rows_page = 25
|
||||||
def markmin_base(self,body):
|
|
||||||
|
def markmin_base(self, body):
|
||||||
return MARKMIN(body, extra=self.settings.extra,
|
return MARKMIN(body, extra=self.settings.extra,
|
||||||
url=True, environment=self.env,
|
url=True, environment=self.env,
|
||||||
autolinks=lambda link: expand_one(link, {})).xml()
|
autolinks=lambda link: expand_one(link, {})).xml()
|
||||||
@@ -5576,7 +5544,7 @@ class Wiki(object):
|
|||||||
|
|
||||||
table_definitions = [
|
table_definitions = [
|
||||||
('wiki_page', {
|
('wiki_page', {
|
||||||
'args':[
|
'args': [
|
||||||
Field('slug',
|
Field('slug',
|
||||||
requires=[IS_SLUG(),
|
requires=[IS_SLUG(),
|
||||||
IS_NOT_IN_DB(db, 'wiki_page.slug')],
|
IS_NOT_IN_DB(db, 'wiki_page.slug')],
|
||||||
@@ -5601,20 +5569,20 @@ class Wiki(object):
|
|||||||
requires=IS_EMPTY_OR(
|
requires=IS_EMPTY_OR(
|
||||||
IS_IN_SET(engines))),
|
IS_IN_SET(engines))),
|
||||||
auth.signature],
|
auth.signature],
|
||||||
'vars':{'format':'%(title)s', 'migrate':migrate}}),
|
'vars': {'format': '%(title)s', 'migrate': migrate}}),
|
||||||
('wiki_tag', {
|
('wiki_tag', {
|
||||||
'args':[
|
'args': [
|
||||||
Field('name'),
|
Field('name'),
|
||||||
Field('wiki_page', 'reference wiki_page'),
|
Field('wiki_page', 'reference wiki_page'),
|
||||||
auth.signature],
|
auth.signature],
|
||||||
'vars':{'format':'%(title)s', 'migrate':migrate}}),
|
'vars':{'format': '%(title)s', 'migrate': migrate}}),
|
||||||
('wiki_media', {
|
('wiki_media', {
|
||||||
'args':[
|
'args': [
|
||||||
Field('wiki_page', 'reference wiki_page'),
|
Field('wiki_page', 'reference wiki_page'),
|
||||||
Field('title', required=True),
|
Field('title', required=True),
|
||||||
Field('filename', 'upload', required=True),
|
Field('filename', 'upload', required=True),
|
||||||
auth.signature],
|
auth.signature],
|
||||||
'vars':{'format':'%(title)s', 'migrate':migrate}}),
|
'vars': {'format': '%(title)s', 'migrate': migrate}}),
|
||||||
]
|
]
|
||||||
|
|
||||||
# define only non-existent tables
|
# define only non-existent tables
|
||||||
@@ -5633,7 +5601,7 @@ class Wiki(object):
|
|||||||
|
|
||||||
if self.settings.templates is None and not \
|
if self.settings.templates is None and not \
|
||||||
self.settings.manage_permissions:
|
self.settings.manage_permissions:
|
||||||
self.settings.templates = db.wiki_page.tags.contains('template')&\
|
self.settings.templates = db.wiki_page.tags.contains('template') & \
|
||||||
db.wiki_page.can_read.contains('everybody')
|
db.wiki_page.can_read.contains('everybody')
|
||||||
|
|
||||||
def update_tags_insert(page, id, db=db):
|
def update_tags_insert(page, id, db=db):
|
||||||
@@ -5643,7 +5611,7 @@ class Wiki(object):
|
|||||||
db.wiki_tag.insert(name=tag, wiki_page=id)
|
db.wiki_tag.insert(name=tag, wiki_page=id)
|
||||||
|
|
||||||
def update_tags_update(dbset, page, db=db):
|
def update_tags_update(dbset, page, db=db):
|
||||||
page = dbset.select(limitby=(0,1)).first()
|
page = dbset.select(limitby=(0, 1)).first()
|
||||||
db(db.wiki_tag.wiki_page == page.id).delete()
|
db(db.wiki_tag.wiki_page == page.id).delete()
|
||||||
for tag in page.tags or []:
|
for tag in page.tags or []:
|
||||||
tag = tag.strip().lower()
|
tag = tag.strip().lower()
|
||||||
@@ -5733,7 +5701,7 @@ class Wiki(object):
|
|||||||
elif not zero or not zero.startswith('_'):
|
elif not zero or not zero.startswith('_'):
|
||||||
return self.read(zero)
|
return self.read(zero)
|
||||||
elif zero == '_edit':
|
elif zero == '_edit':
|
||||||
return self.edit(request.args(1) or 'index',request.args(2) or 0)
|
return self.edit(request.args(1) or 'index', request.args(2) or 0)
|
||||||
elif zero == '_editmedia':
|
elif zero == '_editmedia':
|
||||||
return self.editmedia(request.args(1) or 'index')
|
return self.editmedia(request.args(1) or 'index')
|
||||||
elif zero == '_create':
|
elif zero == '_create':
|
||||||
@@ -5804,7 +5772,7 @@ class Wiki(object):
|
|||||||
created_on=page.created_on,
|
created_on=page.created_on,
|
||||||
modified_on=page.modified_on)
|
modified_on=page.modified_on)
|
||||||
|
|
||||||
def edit(self,slug,from_template=0):
|
def edit(self, slug, from_template=0):
|
||||||
auth = self.auth
|
auth = self.auth
|
||||||
db = auth.db
|
db = auth.db
|
||||||
page = db.wiki_page(slug=slug)
|
page = db.wiki_page(slug=slug)
|
||||||
@@ -5825,7 +5793,8 @@ class Wiki(object):
|
|||||||
db.wiki_page.body.default = \
|
db.wiki_page.body.default = \
|
||||||
'- Menu Item > @////index\n- - Submenu > http://web2py.com'
|
'- Menu Item > @////index\n- - Submenu > http://web2py.com'
|
||||||
else:
|
else:
|
||||||
db.wiki_page.body.default = db(db.wiki_page.id==from_template).select(db.wiki_page.body)[0].body if int(from_template) > 0 else '## %s\n\npage content' % title_guess
|
db.wiki_page.body.default = db(db.wiki_page.id == from_template).select(db.wiki_page.body)[0].body \
|
||||||
|
if int(from_template) > 0 else '## %s\n\npage content' % title_guess
|
||||||
vars = current.request.post_vars
|
vars = current.request.post_vars
|
||||||
if vars.body:
|
if vars.body:
|
||||||
vars.body = vars.body.replace('://%s' % self.host, '://HOSTNAME')
|
vars.body = vars.body.replace('://%s' % self.host, '://HOSTNAME')
|
||||||
@@ -5880,9 +5849,9 @@ class Wiki(object):
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
""" % dict(url=URL(args=('_preview', slug)),link_media=('true' if page else 'false'),
|
""" % dict(url=URL(args=('_preview', slug)), link_media=('true' if page else 'false'),
|
||||||
urlmedia=URL(extension='load',
|
urlmedia=URL(extension='load',
|
||||||
args=('_editmedia',slug),
|
args=('_editmedia', slug),
|
||||||
vars=dict(embedded=1)))
|
vars=dict(embedded=1)))
|
||||||
return dict(content=TAG[''](form, SCRIPT(script)))
|
return dict(content=TAG[''](form, SCRIPT(script)))
|
||||||
|
|
||||||
@@ -5894,9 +5863,7 @@ class Wiki(object):
|
|||||||
return self.not_authorized(page)
|
return self.not_authorized(page)
|
||||||
self.auth.db.wiki_media.id.represent = lambda id, row: \
|
self.auth.db.wiki_media.id.represent = lambda id, row: \
|
||||||
id if not row.filename else \
|
id if not row.filename else \
|
||||||
SPAN('@////%i/%s.%s' %
|
SPAN('@////%i/%s.%s' % (id, IS_SLUG.urlify(row.title.split('.')[0]), row.filename.split('.')[-1]))
|
||||||
(id, IS_SLUG.urlify(row.title.split('.')[0]),
|
|
||||||
row.filename.split('.')[-1]))
|
|
||||||
self.auth.db.wiki_media.wiki_page.default = page.id
|
self.auth.db.wiki_media.wiki_page.default = page.id
|
||||||
self.auth.db.wiki_media.wiki_page.writable = False
|
self.auth.db.wiki_media.wiki_page.writable = False
|
||||||
links = []
|
links = []
|
||||||
@@ -5907,16 +5874,16 @@ class Wiki(object):
|
|||||||
fragment = self.auth.db.wiki_media.id.represent
|
fragment = self.auth.db.wiki_media.id.represent
|
||||||
csv = False
|
csv = False
|
||||||
create = False
|
create = False
|
||||||
links=[
|
links= [
|
||||||
lambda row:
|
lambda row:
|
||||||
A('copy into source', _href='#', _onclick=script % (fragment(row.id, row)))
|
A('copy into source', _href='#', _onclick=script % (fragment(row.id, row)))
|
||||||
]
|
]
|
||||||
content = SQLFORM.grid(
|
content = SQLFORM.grid(
|
||||||
self.auth.db.wiki_media.wiki_page == page.id,
|
self.auth.db.wiki_media.wiki_page == page.id,
|
||||||
orderby=self.auth.db.wiki_media.title,
|
orderby=self.auth.db.wiki_media.title,
|
||||||
links = links,
|
links=links,
|
||||||
csv = csv,
|
csv=csv,
|
||||||
create = create,
|
create=create,
|
||||||
args=['_editmedia', slug],
|
args=['_editmedia', slug],
|
||||||
user_signature=False)
|
user_signature=False)
|
||||||
return dict(content=content)
|
return dict(content=content)
|
||||||
@@ -5925,12 +5892,12 @@ class Wiki(object):
|
|||||||
if not self.can_edit():
|
if not self.can_edit():
|
||||||
return self.not_authorized()
|
return self.not_authorized()
|
||||||
db = self.auth.db
|
db = self.auth.db
|
||||||
slugs=db(db.wiki_page.id>0).select(db.wiki_page.id,db.wiki_page.slug)
|
slugs = db(db.wiki_page.id > 0).select(db.wiki_page.id, db.wiki_page.slug)
|
||||||
options=[OPTION(row.slug,_value=row.id) for row in slugs]
|
options = [OPTION(row.slug, _value=row.id) for row in slugs]
|
||||||
options.insert(0, OPTION('',_value=''))
|
options.insert(0, OPTION('', _value=''))
|
||||||
fields = [Field("slug", default=current.request.args(1) or
|
fields = [Field("slug", default=current.request.args(1) or
|
||||||
self.settings.force_prefix,
|
self.settings.force_prefix,
|
||||||
requires=(IS_SLUG(), IS_NOT_IN_DB(db,db.wiki_page.slug))),]
|
requires=(IS_SLUG(), IS_NOT_IN_DB(db, db.wiki_page.slug))),]
|
||||||
if self.settings.templates:
|
if self.settings.templates:
|
||||||
fields.append(
|
fields.append(
|
||||||
Field("from_template", "reference wiki_page",
|
Field("from_template", "reference wiki_page",
|
||||||
@@ -5947,7 +5914,7 @@ class Wiki(object):
|
|||||||
if form.process().accepted:
|
if form.process().accepted:
|
||||||
form.vars.from_template = 0 if not form.vars.from_template \
|
form.vars.from_template = 0 if not form.vars.from_template \
|
||||||
else form.vars.from_template
|
else form.vars.from_template
|
||||||
redirect(URL(args=('_edit', form.vars.slug,form.vars.from_template or 0))) # added param
|
redirect(URL(args=('_edit', form.vars.slug, form.vars.from_template or 0))) # added param
|
||||||
return dict(content=form)
|
return dict(content=form)
|
||||||
|
|
||||||
def pages(self):
|
def pages(self):
|
||||||
@@ -5960,14 +5927,14 @@ class Wiki(object):
|
|||||||
wiki_table = self.auth.db.wiki_page
|
wiki_table = self.auth.db.wiki_page
|
||||||
content = SQLFORM.grid(
|
content = SQLFORM.grid(
|
||||||
wiki_table,
|
wiki_table,
|
||||||
fields = [wiki_table.slug,
|
fields=[wiki_table.slug,
|
||||||
wiki_table.title, wiki_table.tags,
|
wiki_table.title, wiki_table.tags,
|
||||||
wiki_table.can_read, wiki_table.can_edit],
|
wiki_table.can_read, wiki_table.can_edit],
|
||||||
links=[
|
links=[
|
||||||
lambda row:
|
lambda row:
|
||||||
A('edit', _href=URL(args=('_edit', row.slug)),_class='btn'),
|
A('edit', _href=URL(args=('_edit', row.slug)), _class='btn'),
|
||||||
lambda row:
|
lambda row:
|
||||||
A('media', _href=URL(args=('_editmedia', row.slug)),_class='btn')],
|
A('media', _href=URL(args=('_editmedia', row.slug)), _class='btn')],
|
||||||
details=False, editable=False, deletable=False, create=False,
|
details=False, editable=False, deletable=False, create=False,
|
||||||
orderby=self.auth.db.wiki_page.title,
|
orderby=self.auth.db.wiki_page.title,
|
||||||
args=['_pages'],
|
args=['_pages'],
|
||||||
@@ -6151,6 +6118,7 @@ class Wiki(object):
|
|||||||
request.post_vars.render = None
|
request.post_vars.render = None
|
||||||
return render(request.post_vars)
|
return render(request.post_vars)
|
||||||
|
|
||||||
|
|
||||||
class Config(object):
|
class Config(object):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
@@ -6166,7 +6134,7 @@ class Config(object):
|
|||||||
self.filename = filename
|
self.filename = filename
|
||||||
|
|
||||||
def read(self):
|
def read(self):
|
||||||
if not( isinstance(current.session['settings_%s' % self.section], dict) ):
|
if not(isinstance(current.session['settings_%s' % self.section], dict)):
|
||||||
settings = dict(self.config.items(self.section))
|
settings = dict(self.config.items(self.section))
|
||||||
else:
|
else:
|
||||||
settings = current.session['settings_%s' % self.section]
|
settings = current.session['settings_%s' % self.section]
|
||||||
|
|||||||
Reference in New Issue
Block a user