Exemplo n.º 1
0
class Dash(object):
    """docstring for Dash"""

    def __init__(self, app, url_prefix='/dashboard', title='dashboard', endpoint='dash'):
        self.app = app
        self.blueprint = Blueprint(endpoint,
                                   __name__,
                                   static_folder='static',
                                   template_folder='templates',)
        self.url_prefix = url_prefix
        self.title = title
        self._register_model = OrderedMultiDict()
        self._panels = OrderedMultiDict()

    def register_model(self, model, db_session, list_fields=None, model_class=DashModelView,):
        if not hasattr(model, '__modelclass__'):
            model = model_class(model, db_session,self.blueprint.name)

        if list_fields:
            model.list_fields = list_fields
        self._register_model[model] = model

    def register_panel(self, title, panel):
        panel = panel(self, title)
        self._panels[title] = panel



    def get_panels(self):
        return sorted(self._panels.values(), key=lambda x: x.title)




    def get_url_name(self,model,name):
        if self._register_model.has_key(model):
            model = self._register_model[model]
        return '%s.%s_%s' % (self.blueprint.name,model.model_name, name,)

    def index(self):
        return 'ss'

    def get_urls(self):
        return (
            ('/', self.index),
        )

    def register_jinja_filter(self):
        self.app.jinja_env.filters['get_field_attr'] = get_field_attr

    def register_blueprint(self, **kwargs):
        self.app.register_blueprint(
            self.blueprint, url_prefix=self.url_prefix, **kwargs)

    def configure_routes(self):
        for url, func in self.get_urls():
            self.blueprint.route(url, methods=['GET', 'POST'])(func)

        for model in self._register_model.values():
            model_name = model.model_name()
            for url, func in model.get_urls():
                full_url = '/%s%s' % (model_name.lower(), url)
                self.blueprint.add_url_rule(
                    full_url,
                    "%s_%s" % (model_name.lower(), func.__name__),
                    func,
                    methods=['GET', 'POST'],
                )

        for panel in self._panels.values():
            for url, func in panel.get_urls():
                full_url = '/%s%s' % (panel.title, url)
                self.blueprint.add_url_rule(
                    full_url,
                    "panel_%s_%s" % (panel.title, func.__name__),
                    func,
                )

    def setup(self):
        self.configure_routes()
        self.register_blueprint()
        self.register_jinja_filter()