better appadmin, thanks Anthony

This commit is contained in:
mdipierro
2013-06-13 15:20:50 -05:00
parent 6af173c853
commit 98c19740a2
14 changed files with 176 additions and 175 deletions
+1 -1
View File
@@ -1 +1 @@
Version 2.5.1-stable+timestamp.2013.06.11.08.00.05 Version 2.5.1-stable+timestamp.2013.06.13.15.20.01
+45 -29
View File
@@ -16,8 +16,6 @@ try:
except ImportError: except ImportError:
pgv = None pgv = None
response.subtitle = 'Database Administration (appadmin)'
# ## critical --- make a copy of the environment # ## critical --- make a copy of the environment
global_env = copy.copy(globals()) global_env = copy.copy(globals())
@@ -37,14 +35,26 @@ if request.env.http_x_forwarded_for or request.is_https:
elif (remote_addr not in hosts) and (remote_addr != "127.0.0.1"): elif (remote_addr not in hosts) and (remote_addr != "127.0.0.1"):
raise HTTP(200, T('appadmin is disabled because insecure channel')) raise HTTP(200, T('appadmin is disabled because insecure channel'))
if request.function in ('auth_manage','manage') and 'auth' in globals(): if request.function == 'manage':
auth.requires_membership(auth.settings.manager_group_role)(lambda: None)() if not 'auth' in globals() or not request.args:
redirect(URL(request.controller, 'index'))
if request.args(0) == 'auth':
manager_action = dict(role=auth.settings.auth_manager_role,
heading=T('Manage Access Control'),
tables=[auth.settings.table_user,
auth.settings.table_group,
auth.settings.table_permission])
else:
manager_action = auth.settings.manager_actions.get(request.args(0), None)
manager_role = manager_action.get('role', None) if manager_action else None
auth.requires_membership(manager_role)(lambda: None)()
menu = False menu = False
elif (request.application == 'admin' and not session.authorized) or \ elif (request.application == 'admin' and not session.authorized) or \
(request.application != 'admin' and not gluon.fileutils.check_credentials(request)): (request.application != 'admin' and not gluon.fileutils.check_credentials(request)):
redirect(URL('admin', 'default', 'index', redirect(URL('admin', 'default', 'index',
vars=dict(send=URL(args=request.args, vars=request.vars)))) vars=dict(send=URL(args=request.args, vars=request.vars))))
else: else:
response.subtitle = 'Database Administration (appadmin)'
menu = True menu = True
ignore_rw = True ignore_rw = True
@@ -580,34 +590,40 @@ def bg_graph_model():
def graph_model(): def graph_model():
return dict(databases=databases, pgv=pgv) return dict(databases=databases, pgv=pgv)
def auth_manage(): def manage():
tablename = request.args(0) tables = manager_action['tables']
if not tablename or not tablename in auth.db.tables: if isinstance(tables[0], str):
return dict() db = manager_action.get('db', auth.db)
table = auth.db[tablename] db = globals()[db] if isinstance(db, str) else db
formname = '%s_grid' % tablename tables = [db[table] for table in tables]
if tablename == auth.settings.table_user_name: if request.extension != 'load':
return dict(heading=manager_action.get('heading',
T('Manage %(action)s') % dict(action=request.args(0).replace('_', ' ').title())),
tablenames=[table._tablename for table in tables])
table = tables[request.args(1, cast=int)]
formname = '%s_grid' % table._tablename
linked_tables = orderby = None
if request.args(0) == 'auth':
auth.settings.table_group._id.readable = \
auth.settings.table_membership._id.readable = \
auth.settings.table_permission._id.readable = False
auth.settings.table_user._plural = T('Users') auth.settings.table_user._plural = T('Users')
auth.settings.table_membership._plural = T('Roles') auth.settings.table_group._plural = T('Roles')
auth.settings.table_membership._id.readable = False auth.settings.table_membership._plural = T('Memberships')
auth.settings.table_membership.user_id.label = T('User') auth.settings.table_membership.user_id.label = T('User')
auth.settings.table_membership.group_id.label = T('Role') auth.settings.table_membership.group_id.label = T('Role')
grid = SQLFORM.smartgrid(table, args=request.args[:1], user_signature=True, auth.settings.table_permission._plural = T('Permissions')
linked_tables=[auth.settings.table_membership_name],
maxtextlength=1000, formname=formname)
else:
table._id.readable = False
auth.settings.table_permission.group_id.label = T('Role') auth.settings.table_permission.group_id.label = T('Role')
auth.settings.table_permission.name.label = T('Permission') auth.settings.table_permission.name.label = T('Permission')
orderby = 'role' if table == auth.settings.table_group_name else 'group_id' if table == auth.settings.table_user:
grid = SQLFORM.grid(table, args=request.args[:1], orderby=table[orderby], linked_tables=[auth.settings.table_membership_name]
user_signature=True, maxtextlength=1000, formname=formname) elif table == auth.settings.table_group:
return grid if request.extension=='load' else dict(grid=grid) orderby = 'role' if not request.args(3) or '.group_id' not in request.args(3) else None
elif table == auth.settings.table_permission:
orderby = 'group_id'
def manage(): grid = SQLFORM.smartgrid(table, args=request.args[:2], user_signature=True,
tablename = request.args(0) orderby=orderby, linked_tables=linked_tables,
if tablename in auth.db.tables: maxtextlength=1000, formname=formname)
grid = SQLFORM.smartgrid(auth.db[tablename], args=request.args[:1]) return grid
else:
return dict()
return grid if request.extension=='load' else dict(grid=grid)
+10 -26
View File
@@ -248,37 +248,21 @@
{{pass}} {{pass}}
{{pass}} {{pass}}
{{if request.function == 'auth_manage':}} {{if request.function == 'manage':}}
<h2>{{=T('Manage Access Control')}}</h2> {{labels = ['Users', 'Roles', 'Permissions'] if request.args(0) == 'auth' else [name.replace('_', ' ').title() for name in tablenames]}}
<h2>{{=heading}}</h2>
<ul class="nav nav-tabs"> <ul class="nav nav-tabs">
<li class="active"><a href="#users" data-toggle="tab">Users</a></li> {{for k, tablename in enumerate(tablenames):}}
<li><a href="#roles" data-toggle="tab">Roles</a></li> <li{{=XML(' class="active"') if k == 0 else ''}}>
<li><a href="#permissions" data-toggle="tab">Permissions</a></li> <a href="#table-{{=tablename}}" data-toggle="tab">{{=labels[k]}}</a>
</ul> </li>
<div class="tab-content">
<div class="tab-pane active" id="users">
{{=LOAD(f='auth_manage.load', args=auth.settings.table_user_name,ajax=True)}}
</div>
<div class="tab-pane" id="roles">
{{=LOAD(f='auth_manage.load', args=auth.settings.table_group_name,ajax=True)}}
</div>
<div class="tab-pane" id="permissions">
{{=LOAD(f='auth_manage.load', args=auth.settings.table_permission_name,ajax=True)}}
</div>
</div>
{{elif request.function == 'manage':}}
<h2>{{=T('Manage Access Control')}}</h2>
<ul class="nav nav-tabs">
{{for k,tablename in enumerate(auth.db.tables):}}
<li><a href="#table-{{=tablename}}" data-toggle="tab">{{=tablename}}</a></li>
{{pass}} {{pass}}
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
{{for tablename in auth.db.tables:}} {{for k, tablename in enumerate(tablenames):}}
<div class="tab-pane" id="table-{{=tablename}}"> <div class="tab-pane{{=XML(' active') if k == 0 else ''}}" id="table-{{=tablename}}">
{{=LOAD(f='manage.load', args=tablename,ajax=True)}} {{=LOAD(f='manage.load', args=[request.args(0), k], ajax=True)}}
</div> </div>
{{pass}} {{pass}}
</div> </div>
+45 -29
View File
@@ -16,8 +16,6 @@ try:
except ImportError: except ImportError:
pgv = None pgv = None
response.subtitle = 'Database Administration (appadmin)'
# ## critical --- make a copy of the environment # ## critical --- make a copy of the environment
global_env = copy.copy(globals()) global_env = copy.copy(globals())
@@ -37,14 +35,26 @@ if request.env.http_x_forwarded_for or request.is_https:
elif (remote_addr not in hosts) and (remote_addr != "127.0.0.1"): elif (remote_addr not in hosts) and (remote_addr != "127.0.0.1"):
raise HTTP(200, T('appadmin is disabled because insecure channel')) raise HTTP(200, T('appadmin is disabled because insecure channel'))
if request.function in ('auth_manage','manage') and 'auth' in globals(): if request.function == 'manage':
auth.requires_membership(auth.settings.manager_group_role)(lambda: None)() if not 'auth' in globals() or not request.args:
redirect(URL(request.controller, 'index'))
if request.args(0) == 'auth':
manager_action = dict(role=auth.settings.auth_manager_role,
heading=T('Manage Access Control'),
tables=[auth.settings.table_user,
auth.settings.table_group,
auth.settings.table_permission])
else:
manager_action = auth.settings.manager_actions.get(request.args(0), None)
manager_role = manager_action.get('role', None) if manager_action else None
auth.requires_membership(manager_role)(lambda: None)()
menu = False menu = False
elif (request.application == 'admin' and not session.authorized) or \ elif (request.application == 'admin' and not session.authorized) or \
(request.application != 'admin' and not gluon.fileutils.check_credentials(request)): (request.application != 'admin' and not gluon.fileutils.check_credentials(request)):
redirect(URL('admin', 'default', 'index', redirect(URL('admin', 'default', 'index',
vars=dict(send=URL(args=request.args, vars=request.vars)))) vars=dict(send=URL(args=request.args, vars=request.vars))))
else: else:
response.subtitle = 'Database Administration (appadmin)'
menu = True menu = True
ignore_rw = True ignore_rw = True
@@ -580,34 +590,40 @@ def bg_graph_model():
def graph_model(): def graph_model():
return dict(databases=databases, pgv=pgv) return dict(databases=databases, pgv=pgv)
def auth_manage(): def manage():
tablename = request.args(0) tables = manager_action['tables']
if not tablename or not tablename in auth.db.tables: if isinstance(tables[0], str):
return dict() db = manager_action.get('db', auth.db)
table = auth.db[tablename] db = globals()[db] if isinstance(db, str) else db
formname = '%s_grid' % tablename tables = [db[table] for table in tables]
if tablename == auth.settings.table_user_name: if request.extension != 'load':
return dict(heading=manager_action.get('heading',
T('Manage %(action)s') % dict(action=request.args(0).replace('_', ' ').title())),
tablenames=[table._tablename for table in tables])
table = tables[request.args(1, cast=int)]
formname = '%s_grid' % table._tablename
linked_tables = orderby = None
if request.args(0) == 'auth':
auth.settings.table_group._id.readable = \
auth.settings.table_membership._id.readable = \
auth.settings.table_permission._id.readable = False
auth.settings.table_user._plural = T('Users') auth.settings.table_user._plural = T('Users')
auth.settings.table_membership._plural = T('Roles') auth.settings.table_group._plural = T('Roles')
auth.settings.table_membership._id.readable = False auth.settings.table_membership._plural = T('Memberships')
auth.settings.table_membership.user_id.label = T('User') auth.settings.table_membership.user_id.label = T('User')
auth.settings.table_membership.group_id.label = T('Role') auth.settings.table_membership.group_id.label = T('Role')
grid = SQLFORM.smartgrid(table, args=request.args[:1], user_signature=True, auth.settings.table_permission._plural = T('Permissions')
linked_tables=[auth.settings.table_membership_name],
maxtextlength=1000, formname=formname)
else:
table._id.readable = False
auth.settings.table_permission.group_id.label = T('Role') auth.settings.table_permission.group_id.label = T('Role')
auth.settings.table_permission.name.label = T('Permission') auth.settings.table_permission.name.label = T('Permission')
orderby = 'role' if table == auth.settings.table_group_name else 'group_id' if table == auth.settings.table_user:
grid = SQLFORM.grid(table, args=request.args[:1], orderby=table[orderby], linked_tables=[auth.settings.table_membership_name]
user_signature=True, maxtextlength=1000, formname=formname) elif table == auth.settings.table_group:
return grid if request.extension=='load' else dict(grid=grid) orderby = 'role' if not request.args(3) or '.group_id' not in request.args(3) else None
elif table == auth.settings.table_permission:
orderby = 'group_id'
def manage(): grid = SQLFORM.smartgrid(table, args=request.args[:2], user_signature=True,
tablename = request.args(0) orderby=orderby, linked_tables=linked_tables,
if tablename in auth.db.tables: maxtextlength=1000, formname=formname)
grid = SQLFORM.smartgrid(auth.db[tablename], args=request.args[:1]) return grid
else:
return dict()
return grid if request.extension=='load' else dict(grid=grid)
+10 -26
View File
@@ -248,37 +248,21 @@
{{pass}} {{pass}}
{{pass}} {{pass}}
{{if request.function == 'auth_manage':}} {{if request.function == 'manage':}}
<h2>{{=T('Manage Access Control')}}</h2> {{labels = ['Users', 'Roles', 'Permissions'] if request.args(0) == 'auth' else [name.replace('_', ' ').title() for name in tablenames]}}
<h2>{{=heading}}</h2>
<ul class="nav nav-tabs"> <ul class="nav nav-tabs">
<li class="active"><a href="#users" data-toggle="tab">Users</a></li> {{for k, tablename in enumerate(tablenames):}}
<li><a href="#roles" data-toggle="tab">Roles</a></li> <li{{=XML(' class="active"') if k == 0 else ''}}>
<li><a href="#permissions" data-toggle="tab">Permissions</a></li> <a href="#table-{{=tablename}}" data-toggle="tab">{{=labels[k]}}</a>
</ul> </li>
<div class="tab-content">
<div class="tab-pane active" id="users">
{{=LOAD(f='auth_manage.load', args=auth.settings.table_user_name,ajax=True)}}
</div>
<div class="tab-pane" id="roles">
{{=LOAD(f='auth_manage.load', args=auth.settings.table_group_name,ajax=True)}}
</div>
<div class="tab-pane" id="permissions">
{{=LOAD(f='auth_manage.load', args=auth.settings.table_permission_name,ajax=True)}}
</div>
</div>
{{elif request.function == 'manage':}}
<h2>{{=T('Manage Access Control')}}</h2>
<ul class="nav nav-tabs">
{{for k,tablename in enumerate(auth.db.tables):}}
<li><a href="#table-{{=tablename}}" data-toggle="tab">{{=tablename}}</a></li>
{{pass}} {{pass}}
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
{{for tablename in auth.db.tables:}} {{for k, tablename in enumerate(tablenames):}}
<div class="tab-pane" id="table-{{=tablename}}"> <div class="tab-pane{{=XML(' active') if k == 0 else ''}}" id="table-{{=tablename}}">
{{=LOAD(f='manage.load', args=tablename,ajax=True)}} {{=LOAD(f='manage.load', args=[request.args(0), k], ajax=True)}}
</div> </div>
{{pass}} {{pass}}
</div> </div>
+45 -29
View File
@@ -16,8 +16,6 @@ try:
except ImportError: except ImportError:
pgv = None pgv = None
response.subtitle = 'Database Administration (appadmin)'
# ## critical --- make a copy of the environment # ## critical --- make a copy of the environment
global_env = copy.copy(globals()) global_env = copy.copy(globals())
@@ -37,14 +35,26 @@ if request.env.http_x_forwarded_for or request.is_https:
elif (remote_addr not in hosts) and (remote_addr != "127.0.0.1"): elif (remote_addr not in hosts) and (remote_addr != "127.0.0.1"):
raise HTTP(200, T('appadmin is disabled because insecure channel')) raise HTTP(200, T('appadmin is disabled because insecure channel'))
if request.function in ('auth_manage','manage') and 'auth' in globals(): if request.function == 'manage':
auth.requires_membership(auth.settings.manager_group_role)(lambda: None)() if not 'auth' in globals() or not request.args:
redirect(URL(request.controller, 'index'))
if request.args(0) == 'auth':
manager_action = dict(role=auth.settings.auth_manager_role,
heading=T('Manage Access Control'),
tables=[auth.settings.table_user,
auth.settings.table_group,
auth.settings.table_permission])
else:
manager_action = auth.settings.manager_actions.get(request.args(0), None)
manager_role = manager_action.get('role', None) if manager_action else None
auth.requires_membership(manager_role)(lambda: None)()
menu = False menu = False
elif (request.application == 'admin' and not session.authorized) or \ elif (request.application == 'admin' and not session.authorized) or \
(request.application != 'admin' and not gluon.fileutils.check_credentials(request)): (request.application != 'admin' and not gluon.fileutils.check_credentials(request)):
redirect(URL('admin', 'default', 'index', redirect(URL('admin', 'default', 'index',
vars=dict(send=URL(args=request.args, vars=request.vars)))) vars=dict(send=URL(args=request.args, vars=request.vars))))
else: else:
response.subtitle = 'Database Administration (appadmin)'
menu = True menu = True
ignore_rw = True ignore_rw = True
@@ -580,34 +590,40 @@ def bg_graph_model():
def graph_model(): def graph_model():
return dict(databases=databases, pgv=pgv) return dict(databases=databases, pgv=pgv)
def auth_manage(): def manage():
tablename = request.args(0) tables = manager_action['tables']
if not tablename or not tablename in auth.db.tables: if isinstance(tables[0], str):
return dict() db = manager_action.get('db', auth.db)
table = auth.db[tablename] db = globals()[db] if isinstance(db, str) else db
formname = '%s_grid' % tablename tables = [db[table] for table in tables]
if tablename == auth.settings.table_user_name: if request.extension != 'load':
return dict(heading=manager_action.get('heading',
T('Manage %(action)s') % dict(action=request.args(0).replace('_', ' ').title())),
tablenames=[table._tablename for table in tables])
table = tables[request.args(1, cast=int)]
formname = '%s_grid' % table._tablename
linked_tables = orderby = None
if request.args(0) == 'auth':
auth.settings.table_group._id.readable = \
auth.settings.table_membership._id.readable = \
auth.settings.table_permission._id.readable = False
auth.settings.table_user._plural = T('Users') auth.settings.table_user._plural = T('Users')
auth.settings.table_membership._plural = T('Roles') auth.settings.table_group._plural = T('Roles')
auth.settings.table_membership._id.readable = False auth.settings.table_membership._plural = T('Memberships')
auth.settings.table_membership.user_id.label = T('User') auth.settings.table_membership.user_id.label = T('User')
auth.settings.table_membership.group_id.label = T('Role') auth.settings.table_membership.group_id.label = T('Role')
grid = SQLFORM.smartgrid(table, args=request.args[:1], user_signature=True, auth.settings.table_permission._plural = T('Permissions')
linked_tables=[auth.settings.table_membership_name],
maxtextlength=1000, formname=formname)
else:
table._id.readable = False
auth.settings.table_permission.group_id.label = T('Role') auth.settings.table_permission.group_id.label = T('Role')
auth.settings.table_permission.name.label = T('Permission') auth.settings.table_permission.name.label = T('Permission')
orderby = 'role' if table == auth.settings.table_group_name else 'group_id' if table == auth.settings.table_user:
grid = SQLFORM.grid(table, args=request.args[:1], orderby=table[orderby], linked_tables=[auth.settings.table_membership_name]
user_signature=True, maxtextlength=1000, formname=formname) elif table == auth.settings.table_group:
return grid if request.extension=='load' else dict(grid=grid) orderby = 'role' if not request.args(3) or '.group_id' not in request.args(3) else None
elif table == auth.settings.table_permission:
orderby = 'group_id'
def manage(): grid = SQLFORM.smartgrid(table, args=request.args[:2], user_signature=True,
tablename = request.args(0) orderby=orderby, linked_tables=linked_tables,
if tablename in auth.db.tables: maxtextlength=1000, formname=formname)
grid = SQLFORM.smartgrid(auth.db[tablename], args=request.args[:1]) return grid
else:
return dict()
return grid if request.extension=='load' else dict(grid=grid)
+10 -26
View File
@@ -248,37 +248,21 @@
{{pass}} {{pass}}
{{pass}} {{pass}}
{{if request.function == 'auth_manage':}} {{if request.function == 'manage':}}
<h2>{{=T('Manage Access Control')}}</h2> {{labels = ['Users', 'Roles', 'Permissions'] if request.args(0) == 'auth' else [name.replace('_', ' ').title() for name in tablenames]}}
<h2>{{=heading}}</h2>
<ul class="nav nav-tabs"> <ul class="nav nav-tabs">
<li class="active"><a href="#users" data-toggle="tab">Users</a></li> {{for k, tablename in enumerate(tablenames):}}
<li><a href="#roles" data-toggle="tab">Roles</a></li> <li{{=XML(' class="active"') if k == 0 else ''}}>
<li><a href="#permissions" data-toggle="tab">Permissions</a></li> <a href="#table-{{=tablename}}" data-toggle="tab">{{=labels[k]}}</a>
</ul> </li>
<div class="tab-content">
<div class="tab-pane active" id="users">
{{=LOAD(f='auth_manage.load', args=auth.settings.table_user_name,ajax=True)}}
</div>
<div class="tab-pane" id="roles">
{{=LOAD(f='auth_manage.load', args=auth.settings.table_group_name,ajax=True)}}
</div>
<div class="tab-pane" id="permissions">
{{=LOAD(f='auth_manage.load', args=auth.settings.table_permission_name,ajax=True)}}
</div>
</div>
{{elif request.function == 'manage':}}
<h2>{{=T('Manage Access Control')}}</h2>
<ul class="nav nav-tabs">
{{for k,tablename in enumerate(auth.db.tables):}}
<li><a href="#table-{{=tablename}}" data-toggle="tab">{{=tablename}}</a></li>
{{pass}} {{pass}}
</ul> </ul>
<div class="tab-content"> <div class="tab-content">
{{for tablename in auth.db.tables:}} {{for k, tablename in enumerate(tablenames):}}
<div class="tab-pane" id="table-{{=tablename}}"> <div class="tab-pane{{=XML(' active') if k == 0 else ''}}" id="table-{{=tablename}}">
{{=LOAD(f='manage.load', args=tablename,ajax=True)}} {{=LOAD(f='manage.load', args=[request.args(0), k], ajax=True)}}
</div> </div>
{{pass}} {{pass}}
</div> </div>
+1 -1
View File
@@ -67,7 +67,7 @@
<body> <body>
<!-- Navbar ================================================== --> <!-- Navbar ================================================== -->
<div class="navbar navbar-inverse navbar-fixed-top"> <div class="navbar navbar-inverse">
<div class="flash">{{=response.flash or ''}}</div> <div class="flash">{{=response.flash or ''}}</div>
<div class="navbar-inner"> <div class="navbar-inner">
<div class="container"> <div class="container">
+1 -1
View File
@@ -3,7 +3,7 @@ AIM class to credit card payment with authorize.net
Fork of authnet code written by John Conde Fork of authnet code written by John Conde
http://www.johnconde.net/blog/integrate-the-authorizenet-aim-api-with-python-3-2/ http://www.johnconde.net/blog/integrate-the-authorizenet-aim-api-with-python-3-2/
Unkown license, assuming public domain Unknown license, assuming public domain
Modifed by Massimo Di Pierro Modifed by Massimo Di Pierro
+1 -1
View File
@@ -3,7 +3,7 @@ DowCommerce class to process credit card payments with DowCommerce.com
Modifications to support Dow Commerce API from code originally written by John Conde Modifications to support Dow Commerce API from code originally written by John Conde
http://www.johnconde.net/blog/integrate-the-authorizenet-aim-api-with-python-3-2/ http://www.johnconde.net/blog/integrate-the-authorizenet-aim-api-with-python-3-2/
Unkown license, assuming public domain Unknown license, assuming public domain
Modifed by Dave Stoll dave.stoll@gmail.com Modifed by Dave Stoll dave.stoll@gmail.com
+1 -1
View File
@@ -236,7 +236,7 @@ class Table(DALStorage):
field.name)) field.name))
elif not field.type in self._db._translator\ elif not field.type in self._db._translator\
or not self._db._translator[field.type]: or not self._db._translator[field.type]:
raise SyntaxError('Field: unkown field type %s' % field.type) raise SyntaxError('Field: unknown field type %s' % field.type)
self._tableobj = self._db.client self._tableobj = self._db.client
return None return None
+3 -3
View File
@@ -1007,7 +1007,7 @@ class BaseAdapter(ConnectionPool):
def fix(item): def fix(item):
k,v=item k,v=item
if not isinstance(v,dict): if not isinstance(v,dict):
v=dict(type='unkown',sql=v) v=dict(type='unknown',sql=v)
return k.lower(),v return k.lower(),v
# make sure all field names are lower case to avoid # make sure all field names are lower case to avoid
# migrations because of case cahnge # migrations because of case cahnge
@@ -9176,7 +9176,7 @@ class SQLCustomType(object):
class FieldVirtual(object): class FieldVirtual(object):
def __init__(self, name, f=None, ftype='string',label=None,table_name=None): def __init__(self, name, f=None, ftype='string',label=None,table_name=None):
# for backward compatibility # for backward compatibility
(self.name, self.f) = (name, f) if f else ('unkown', name) (self.name, self.f) = (name, f) if f else ('unknown', name)
self.type = ftype self.type = ftype
self.label = label or self.name.capitalize().replace('_',' ') self.label = label or self.name.capitalize().replace('_',' ')
self.represent = lambda v,r:v self.represent = lambda v,r:v
@@ -9194,7 +9194,7 @@ class FieldVirtual(object):
class FieldMethod(object): class FieldMethod(object):
def __init__(self, name, f=None, handler=None): def __init__(self, name, f=None, handler=None):
# for backward compatibility # for backward compatibility
(self.name, self.f) = (name, f) if f else ('unkown', name) (self.name, self.f) = (name, f) if f else ('unknown', name)
self.handler = handler self.handler = handler
def list_represent(x,r=None): def list_represent(x,r=None):
+1 -1
View File
@@ -130,7 +130,7 @@ def csv(value):
def ics(events, title=None, link=None, timeshift=0, calname=True, def ics(events, title=None, link=None, timeshift=0, calname=True,
**ignored): **ignored):
import datetime import datetime
title = title or '(unkown)' title = title or '(unknown)'
if link and not callable(link): if link and not callable(link):
link = lambda item, prefix=link: prefix.replace( link = lambda item, prefix=link: prefix.replace(
'[id]', str(item['id'])) '[id]', str(item['id']))
+2 -1
View File
@@ -878,7 +878,8 @@ class Auth(object):
alternate_requires_registration=False, alternate_requires_registration=False,
create_user_groups="user_%(id)s", create_user_groups="user_%(id)s",
everybody_group_id=None, everybody_group_id=None,
manager_group_role=None, manager_actions={},
auth_manager_role=None,
login_captcha=None, login_captcha=None,
register_captcha=None, register_captcha=None,
retrieve_username_captcha=None, retrieve_username_captcha=None,