from __future__ import absolute_import
import mf.annotation
from mf.db_conn import DbConn
from mf.renderer import FormRenderer
from .views import *
[docs]class Dashboard:
''' Manage administration dashboard for pyramid
'''
dconfig = {'permission': None, 'templates': ''}
@staticmethod
[docs] def set_config(config):
'''Global config for dashboard.
- permission: Pyramid permission for /admin views, no permission by default
- templates: path to Mako dashboard template, default is Dashboard.mako
:param config: configuration dictionary
:type config: dict
'''
Dashboard.dconfig = config
@staticmethod
def get_config():
return Dashboard.dconfig
@staticmethod
[docs] def set_connection(conn):
'''Sets the db connection to mongo
:param conn: MongoDB connection objects
:type conn: Connection
'''
DbConn.db_conn = conn
@staticmethod
[docs] def add_dashboard(klasses, config=None, prefix=''):
''' Adds a list of class to the dashboard
:param klasses: list of object class to add to the dashboard
:type klasses: list
:param config: Pyramid Configurator
:type config: pyramid.config.Configurator
:param prefix: optional prefix to add in front of the routes
:type prefix: str
'''
if klasses is None:
return
if prefix is not None:
FormRenderer.prefix = prefix
for klass in klasses:
Annotation.addKlass(klass)
if config is not None:
config.add_route('mf_admin', prefix + '/admin')
config.add_route('mf_objects', prefix + '/{objname}s')
config.add_route('mf_object', prefix + '/{objname}s/{id}')
#config.add_view(mf_search, route_name='mf_objects', renderer='json', request_method='POST')
# If no Search parameter, then call mf_list, else call mf_search
config.add_view(mf_list, route_name='mf_objects', renderer='json', request_method='GET')
config.add_view(mf_show, route_name='mf_object', renderer='json', request_method='GET')
config.add_view(mf_edit, route_name='mf_object', renderer='json', request_method='PUT')
config.add_view(mf_delete, route_name='mf_object', renderer='json', request_method='DELETE')
config.add_view(mf_add, route_name='mf_objects', renderer='json',
request_method='POST')
templates = Dashboard.dconfig['templates']
if not templates:
templates = 'dashboard.mako'
if Dashboard.dconfig['permission'] is not None:
config.add_view(mf_admin, route_name='mf_admin', renderer=templates, permission=Dashboard.dconfig['permission'])
else:
config.add_view(mf_admin, route_name='mf_admin', renderer=templates)