Source code for dash.templatetags.dash_tags

__all__ = ('get_dash_plugin',)

from django.template import Library, TemplateSyntaxError, Node
from django.conf import settings
from django.utils.translation import ugettext_lazy as _

from dash.settings import ACTIVE_LAYOUT, DISPLAY_AUTH_LINK
from dash.utils import get_workspaces

register = Library()

# ***************************************************************************************
# ***************************************************************************************
# ***************************************************************************************
# **************************** General Dash tags ****************************************
# ***************************************************************************************
# ***************************************************************************************
# ***************************************************************************************

class GetDashPluginNode(Node):
    """
    Node for ``get_dash_plugin`` tag.
    """
    def __init__(self, dashboard_entry, as_var=None):
        self.dashboard_entry = dashboard_entry
        self.as_var = as_var

    def render(self, context):
        request = context['request']
        dashboard_entry = self.dashboard_entry.resolve(context, True)

        plugin = dashboard_entry.get_plugin(request=request)
        context[self.as_var] = plugin
        return ''


@register.tag
[docs]def get_dash_plugin(parser, token): """ Gets the plugin. Note, that ``dashboard_entry`` shall be a instance of ``dash.models.DashboardEntry``. :syntax: {% get_dash_plugin dashboard_entry as [context_var_name] %} :example: {% get_dash_plugin dashboard_entry as plugin %} {% get_dash_plugin dashboard_entry as plugin %} {{ plugin.render }} """ bits = token.contents.split() if 4 == len(bits): if 'as' != bits[-2]: raise TemplateSyntaxError( "Invalid syntax for {0}. Incorrect number of arguments.".format(bits[0]) ) as_var = bits[-1] else: raise TemplateSyntaxError( "Invalid syntax for {0}. See docs for valid syntax.".format(bits[0]) ) dashboard_entry = parser.compile_filter(bits[1]) return GetDashPluginNode(dashboard_entry=dashboard_entry, as_var=as_var)
class GetDashWorkspacesNode(Node): """ Node for ``get_dash_workspaces`` tag. """ def __init__(self, layout_uid=None, edit_mode=False): self.layout_uid = layout_uid self.edit_mode = edit_mode def render(self, context): try: request = context['request'] user = request.user except Exception as e: return '' if self.layout_uid: layout_uid = self.layout_uid.resolve(context, True) else: try: layout_uid = context['layout'].uid except Exception as e: layout_uid = ACTIVE_LAYOUT workspaces = get_workspaces(user=user, layout_uid=layout_uid) context['workspaces'] = workspaces['workspaces'] context['next_workspace'] = workspaces['next_workspace'] context['previous_workspace'] = workspaces['previous_workspace'] context['current_workspace'] = workspaces['current_workspace'] return '' @register.tag def get_dash_workspaces(parser, token): """ Gets the workspaces queryset :syntax: {% get_dash_workspaces [layout_uid] mode [edit_mode] %} :example: {% get_dash_workspaces layout.uid %} {% get_dash_workspaces layout.uid 1 %} """ bits = token.contents.split() if len(bits) not in (1, 2, 3, 4): raise TemplateSyntaxError( "Invalid syntax for {0}. Incorrect number of arguments.".format(bits[0]) ) if 4 == len(bits): layout_uid = parser.compile_filter(bits[1]) edit_mode = bits[-1] elif 3 == len(bits): layout_uid = None edit_mode = bits[-1] elif 2 == len(bits): layout_uid = parser.compile_filter(bits[1]) edit_mode = False return GetDashWorkspacesNode(layout_uid=layout_uid, edit_mode=edit_mode) # *************************************************************************************** # *************************************************************************************** # *************************************************************************************** # **************************** Additional Dash tags ************************************* # *************************************************************************************** # *************************************************************************************** # *************************************************************************************** def render_auth_link(context): """ Render logout link. """ if not DISPLAY_AUTH_LINK: return {} request = context.get('request', None) if request and request.user.is_authenticated(): try: auth_url = settings.LOGOUT_URL auth_icon_class = 'icon-signout' auth_link_text = _('Log out') except Exception as e: auth_url = '' auth_icon_class = '' auth_link_text = '' else: try: auth_url = settings.LOGIN_URL auth_icon_class = 'icon-signin' auth_link_text = _('Log in') except Exception as e: auth_url = '' auth_icon_class = '' auth_link_text = '' return { 'auth_link': auth_url, 'auth_icon_class': auth_icon_class, 'auth_link_text': auth_link_text } # For backwards compatibilty. TODO: Raise deprecation warning. def render_logout_link(context): return render_auth_link(context) register.inclusion_tag('dash/snippets/render_auth_link.html', takes_context=True)(render_auth_link) register.inclusion_tag('dash/snippets/render_auth_link.html', takes_context=True)(render_logout_link) # *************************************************************************************** # *************************************************************************************** # *************************************************************************************** # **************************** Permission tags ****************************************** # *************************************************************************************** # *************************************************************************************** # *************************************************************************************** class HasEditDashboardPermissionsNode(Node): """ Node for ``has_edit_dashboard_permissions`` tag. """ def __init__(self, as_var=None): self.as_var = as_var def render(self, context): try: perms = context['perms'] except Exception as e: if self.as_var: context[self.as_var] = False return '' else: return False perms_required = [ 'dash.add_dashboardentry', 'dash.change_dashboardentry', 'dash.delete_dashboardentry', 'dash.add_dashboardworkspace', 'dash.change_dashboardworkspace', 'dash.delete_dashboardworkspace', 'dash.add_dashboardsettings', 'dash.change_dashboardsettings', 'dash.delete_dashboardsettings', ] for perm in perms_required: if perm in perms: if self.as_var: context[self.as_var] = True return '' else: return True if self.as_var: context[self.as_var] = False return '' else: return False @register.tag def has_edit_dashboard_permissions(parser, token): """ Gets the workspaces queryset :syntax: {% has_edit_dashboard_permissions as [var_name] %} :example: {% has_edit_dashboard_permissions %} or {% has_edit_dashboard_permissions as has_permissions %} """ bits = token.contents.split() if len(bits) not in (1, 3): raise TemplateSyntaxError( "Invalid syntax for {0}. Incorrect number of arguments.".format(bits[0]) ) if 3 == len(bits): as_var = bits[-1] else: as_var = None return HasEditDashboardPermissionsNode(as_var=as_var)
Read the Docs v: 0.2.4
Versions
latest
0.3.2
0.3
0.2.4
0.1.4
Downloads
On Read the Docs
Project Home
Builds

Free document hosting provided by Read the Docs.