if menuitem.url: myurl = resolve(menuitem.url) url_splitted = myurl.url_name.split("_") model_name = 'xxx' if len(url_splitted) == 3: model_name = url_splitted[1] elif len(url_splitted) == 4: model_name = url_splitted[1] + "_" + url_splitted[2] permission_name = url_splitted[0] + ".change_" + model_name retorno = context['user'].has_perm(permission_name) if not retorno and menuitem.has_children(): for child in menuitem.children(): retorno = retorno or menu_has_permission(context, child) return retorno register.assignment_tag(takes_context=True)(menu_has_permission) @register.filter def replace(string, args): args = args.split(args[0]) return re.sub(args[1], args[2], string)
from notifications.templatetags.notifications_tags import notifications_unread Notification = swapper.load_model('notifications', 'Notification') register = Library() def get_notifications_count(context): user_pk = context['user'].is_authenticated and context['user'].pk cache_key = Notification.COUNT_CACHE_KEY.format(user_pk) count = cache.get(cache_key) if count is None: count = notifications_unread(context) cache.set(cache_key, count) return count def unread_notifications(context): count = get_notifications_count(context) output = '' if count: output = '<span>{0}</span>' output = format_html(output.format(count)) return output if StrictVersion(get_version()) >= StrictVersion('2.0'): register.simple_tag(takes_context=True)(unread_notifications) else: register.assignment_tag(takes_context=True)(notifications_unread)
from django.core.urlresolvers import reverse # pylint: disable=no-name-in-module,import-error register = Library() def notifications_unread_fn(context, recipient=None): recip = recipient or user_context(context) return Notification.objects.filter( recipient_content_type_id=ContentType.objects.get_for_model(recip).id, recipient_object_id=recip.id).unread().count() if StrictVersion(get_version()) >= StrictVersion('2.0'): register.simple_tag(name='notifications_unread', takes_context=True)(notifications_unread_fn) # pylint: disable=invalid-name else: register.assignment_tag(name='notifications_unread', takes_context=True)(notifications_unread_fn) # pylint: disable=invalid-name @register.filter def has_notification(user): recip = user if recip: return Notification.objects.filter( recipient_content_type_id=ContentType.objects.get_for_model(recip).id, recipient_object_id=recip.id).unread().exists() return False # Requires vanilla-js framework - http://vanilla-js.com/ @register.simple_tag def register_notify_callbacks(badge_class='live_notify_badge', # pylint: disable=too-many-arguments,missing-docstring
@register.inclusion_tag('privacy/partials/field.html') def render_privacy_level_field(obj, field_name=None): return get_privacy_dict(obj, field_name) def is_access_allowed(owner, requester, obj, field_name=None): get_clearance_level = load_member_from_setting( 'PRIVACY_CLEARANCE_LEVEL_FUNCTION') clearance_level = get_clearance_level(owner, requester) kwargs = { 'content_type': ContentType.objects.get_for_model(obj), 'object_id': obj.pk, } if field_name: kwargs.update({'field_name': field_name}) else: kwargs.update({'field_name': ''}) try: privacy_setting = PrivacySetting.objects.get(**kwargs) except ObjectDoesNotExist: return True # No settings given? Allow for everyone if privacy_setting.level.clearance_level <= clearance_level: # Level has to be at least as high as the setting's label of the # object/field return True return False register.assignment_tag(is_access_allowed)
from collections import OrderedDict from django import VERSION as django_version from django.template import Library from wagtailtrans.sites import get_languages_for_site register = Library() if django_version >= (1, 9): register.assignment_tag = register.simple_tag def _get_translations(page, homepage_fallback=True, include_self=True): """ Return URLs for translations of provided pages, if a language isn't available as direct translation Note: after https://github.com/wagtail/wagtail/pull/3354 gets merged we should update the URL functions for better perfomance. """ site = page.get_site() available_translations = {} available_languages = get_languages_for_site(site) if hasattr(page, 'language'): if not include_self: available_languages.remove(page.language) page_translations = page.get_translations(only_live=True, include_self=include_self)
register.filter('get_item', get_item) def worduse_stats(qs_list): ct = Counter([it.use for it in qs_list]) total = len(qs_list) return { 'ok': ct[0] / total * 100, 'prefer_other': ct[1] / total * 100, 'unrecognized': ct[2] / total * 100, 'count': len(qs_list) } register.assignment_tag(worduse_stats, takes_context=False, name='worduse_stats') class SplitListNode(Node): def __init__(self, list_string, chunk_size, new_list_name): self.list = list_string self.chunk_size = chunk_size self.new_list_name = new_list_name def split_seq(self, seq, size): """ Split up seq in pieces of size, from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/425044""" return [seq[i:i + size] for i in range(0, len(seq), size)] def render(self, context):
def get_user_favorite_count(user, app, model): from ..models import Favorite ctype = ContentType.objects.get(app_label=app, model=model) # Return the current total number for UI updates favorites_count = Favorite.objects.filter(content_type=ctype, user=user).count() return str(favorites_count) def assign_wooey_setting(name): return getattr(wooey_settings, name, "") # Django 1.9 > Support for assign wooey setting if DJANGO_VERSION <= DJ18: register.assignment_tag(assign_wooey_setting) else: register.simple_tag(assign_wooey_setting) @register.simple_tag def get_wooey_setting(name): return getattr(wooey_settings, name, "") @register.filter def divide(value, arg): try: return float(value) / float(arg) except ZeroDivisionError: return None
# -*- coding: utf-8 -*- """ Author: FeiYe <*****@*****.**> Since: 2017/4/11 """ from django.template import Library from jiango.cms.shortcuts import cms_contents, cms_collections register = Library() register.assignment_tag(cms_contents) register.assignment_tag(cms_collections)
from django.template import Library from ..api import get_last_invalidation register = Library() register.assignment_tag(get_last_invalidation)
log = logging.getLogger(__name__) register = Library() def get_item(dictionary, key): return dictionary.get(key) register.filter('get_item', get_item) def worduse_stats(qs_list): ct = Counter([it.use for it in qs_list]) total = len(qs_list) return {'ok': ct[0]/total*100, 'prefer_other': ct[1]/total*100, 'unrecognized': ct[2]/total*100, 'count': len(qs_list)} register.assignment_tag(worduse_stats, takes_context=False, name='worduse_stats') class SplitListNode(Node): def __init__(self, list_string, chunk_size, new_list_name): self.list = list_string self.chunk_size = chunk_size self.new_list_name = new_list_name def split_seq(self, seq, size): """ Split up seq in pieces of size, from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/425044""" return [seq[i:i+size] for i in range(0, len(seq), size)] def render(self, context): context[self.new_list_name] = self.split_seq(context[self.list], int(self.chunk_size))
@register.simple_tag def get_user_favorite_count(user, app, model): from ..models import Favorite ctype = ContentType.objects.get(app_label=app, model=model) # Return the current total number for UI updates favorites_count = Favorite.objects.filter(content_type=ctype, user=user).count() return str(favorites_count) def assign_wooey_setting(name): return getattr(wooey_settings, name, "") # Django 1.9 > Support for assign wooey setting if DJANGO_VERSION <= DJ18: register.assignment_tag(assign_wooey_setting) else: register.simple_tag(assign_wooey_setting) @register.simple_tag def get_wooey_setting(name): return getattr(wooey_settings, name, "") @register.filter def divide(value, arg): try: return float(value)/float(arg) except ZeroDivisionError: return None
@register.inclusion_tag('privacy/partials/field.html') def render_privacy_level_field(obj, field_name=None): return get_privacy_dict(obj, field_name) def is_access_allowed(owner, requester, obj, field_name=None): get_clearance_level = load_member_from_setting( 'PRIVACY_CLEARANCE_LEVEL_FUNCTION') clearance_level = get_clearance_level(owner, requester) kwargs = { 'content_type': ContentType.objects.get_for_model(obj), 'object_id': obj.pk, } if field_name: kwargs.update({'field_name': field_name}) else: kwargs.update({'field_name': ''}) try: privacy_setting = PrivacySetting.objects.get(**kwargs) except ObjectDoesNotExist: return True # No settings given? Allow for everyone if privacy_setting.level.clearance_level <= clearance_level: # Level has to be at least as high as the setting's label of the # object/field return True return False register.assignment_tag(is_access_allowed)
retorno = False if menuitem.url: myurl = resolve(menuitem.url) url_splitted = myurl.url_name.split("_") model_name = 'xxx' if len(url_splitted) == 3: model_name = url_splitted[1] elif len(url_splitted) == 4: model_name = url_splitted[1] + "_" + url_splitted[2] permission_name = url_splitted[0] + ".change_" + model_name retorno = context['user'].has_perm(permission_name) if not retorno and menuitem.has_children(): for child in menuitem.children(): retorno = retorno or menu_has_permission(context, child) return retorno register.assignment_tag(takes_context=True)(menu_has_permission) @register.filter def replace(string, args): args = args.split(args[0]) return re.sub(args[1], args[2], string)
from django.core.urlresolvers import reverse # pylint: disable=no-name-in-module,import-error register = Library() def notifications_unread(context): user = user_context(context) if not user: return '' return user.notifications.unread().count() if StrictVersion(get_version()) >= StrictVersion('2.0'): notifications_unread = register.simple_tag(takes_context=True)(notifications_unread) # pylint: disable=invalid-name else: notifications_unread = register.assignment_tag(takes_context=True)(notifications_unread) # noqa @register.filter def has_notification(user): if user: return user.notifications.unread().exists() return False # Requires vanilla-js framework - http://vanilla-js.com/ @register.simple_tag def register_notify_callbacks(badge_class='live_notify_badge', # pylint: disable=too-many-arguments,missing-docstring menu_class='live_notify_list', refresh_period=15, callbacks='',