Пример #1
0
    def __init__(self, parser, token):  # noqa D102
        bits = token.split_contents()

        if len(bits) < 4:
            raise TemplateSyntaxError(
                "{} accepts at least 3 arguments (bound_field, 'groupname'"
                " 'attr_name'), got: {}".format(bits[0], ','.join(bits[1:])))

        if len(bits) > 5:
            raise TemplateSyntaxError(
                "{} accepts at mast 4 arguments (bound_field, 'groupname'"
                " 'attr_name' action ), got: {}".format(
                    bits[0], ','.join(bits[1:])))

        if len(bits) >= 5 and bits[4] not in ['append', 'override']:
            raise TemplateSyntaxError(
                "{} unknown action {}  should be 'append'"
                " of 'override'".format(bits[0], ','.join(bits[4])))

        self.field = Variable(bits[1])
        self.group = Variable(bits[2])
        self.attr = bits[3]
        self.action = bits[4] if len(bits) >= 5 else 'override'
        self.nodelist = parser.parse(('end{}'.format(bits[0])))
        parser.delete_first_token()
Пример #2
0
    def __init__(self, parser, token):  # noqa D102
        bits = token.split_contents()

        if len(bits) > 5:
            raise TemplateSyntaxError(
                "%r accepts at most 4 arguments (part_id, section,"
                " asvar, varname), got: {}".format(bits[0],
                                                   ','.join(bits[1:])))

        self.part_id = Variable(bits[1])
        self.section = bits[2] if len(bits) >= 3 else None

        self.varname = None
        if len(bits) > 3:
            if bits[3] != 'asvar':
                raise TemplateSyntaxError(
                    'Forth argument should be asvar," " got {}'.format(
                        bits[3]))
            if len(bits) < 4:
                raise TemplateSyntaxError('Variable name not provided')
            else:
                self.varname = Variable(bits[4])

        self.nodelist = parser.parse(('end{}'.format(bits[0]), ))
        parser.delete_first_token()
Пример #3
0
    def __init__(self, parser, token):  # noqa D102
        bits = token.split_contents()

        if len(bits) < 3:
            raise TemplateSyntaxError(
                "%r accepts at least 2 arguments (bound_field,"
                " 'groupname'), got: {}".format(bits[0], ','.join(bits[1:])))

        if len(bits) > 5:
            raise TemplateSyntaxError(
                "%r accepts at mast 4 arguments (bound_field, 'groupname'"
                " default attrs_dict ), got: {}".format(
                    bits[0], ','.join(bits[1:])))

        if len(bits) > 3 and bits[3] != 'default':
            raise TemplateSyntaxError(
                "%r 3d argument should be 'default' (bound_field, 'groupname'"
                " default attrs_dict ), got: {}".format(
                    bits[0], ','.join(bits[1:])))

        self.field = Variable(bits[1])
        self.group = Variable(bits[2])
        self.widget_attrs = Variable(bits[4]) if len(bits) >= 5 else None
        self.nodelist = parser.parse(('end{}'.format(bits[0])))
        parser.delete_first_token()
Пример #4
0
    def test_variable_parsing(self):
        c = {"article": {"section": "News"}}
        self.assertEqual(Variable("article.section").resolve(c), "News")
        self.assertEqual(Variable('"News"').resolve(c), "News")
        self.assertEqual(Variable("'News'").resolve(c), "News")

        # Translated strings are handled correctly.
        self.assertEqual(Variable("_(article.section)").resolve(c), "News")
        self.assertEqual(Variable('_("Good News")').resolve(c), "Good News")
        self.assertEqual(Variable("_('Better News')").resolve(c), "Better News")

        # Escaped quotes work correctly as well.
        self.assertEqual(
            Variable(r'"Some \"Good\" News"').resolve(c), 'Some "Good" News'
        )
        self.assertEqual(
            Variable(r"'Some \'Better\' News'").resolve(c), "Some 'Better' News"
        )

        # Variables should reject access of attributes beginning with
        # underscores.
        msg = "Variables and attributes may not begin with underscores: 'article._hidden'"
        with self.assertRaisesMessage(TemplateSyntaxError, msg):
            Variable("article._hidden")

        # Variables should raise on non string type
        with self.assertRaisesMessage(TypeError, "Variable must be a string or number, got <class 'dict'>"):
            Variable({})
Пример #5
0
 def __init__(self,var_name,fmt_name=settings.DEFAULT_TIME_FORMAT,
                 tz_var=None):
     self.var_name = Variable(var_name)
     if tz_var is None:
         self.tz_var = None
     else:
         self.tz_var = Variable(tz_var)
     self.fmt_name = fmt_name
Пример #6
0
 def render(self, context):
     try:
         user = Variable(self.request).resolve(context)
         obj = Variable(self.obj).resolve(context)
         field = getattr(obj, self.field_name)
     except template.VariableDoesNotExist:
         return ''
     try:
         vote = field.get_rating_for_user(user)
         context[self.context_var] = vote
     except ObjectDoesNotExist:
         context[self.context_var] = 0
     return ''
Пример #7
0
 def render(self, context):
     try:
         request = Variable(self.request).resolve(context)
         obj = Variable(self.obj).resolve(context)
         field = getattr(obj, self.field_name)
     except (template.VariableDoesNotExist, AttributeError):
         return ''
     try:
         vote = field.get_rating_for_user(request.user,
                                          request.META['REMOTE_ADDR'],
                                          request.COOKIES)
         context[self.context_var] = vote
     except ObjectDoesNotExist:
         context[self.context_var] = 0
     return ''
Пример #8
0
 def render(self, context):
     if self not in context.render_context:
         context.render_context[self] = (
             Variable(self.form),
             Variable(self.helper) if self.helper else None
         )
     form, helper = context.render_context[self]
     actual_form = form.resolve(context)
     if self.helper is not None:
         helper = helper.resolve(context)
     else:
         helper = actual_form.helper
     template = get_template(helper.template_name)
     c = self.get_render(context)
     return template.render(c)
    def __init__(self, parser, token):
        bits = token.split_contents()

        if len(bits) == 0:
            raise TemplateSyntaxError(
                "%r received invalid args, expected one element for render. Got: %r" %
                (bits[0], bits[1:]))

        remaining_bits = bits[2:]

        self.kwargs = token_kwargs(remaining_bits, parser)

        if remaining_bits:
            raise TemplateSyntaxError("%r received an invalid token: %r" %
                                      (bits[0], remaining_bits[0]))

        for key in self.kwargs:
            if key not in ('template', 'widget'):
                raise TemplateSyntaxError("%r received an invalid key: %r" %
                                          (bits[0], key))

            self.kwargs[key] = self.kwargs[key]

        self.nodelist = parser.parse(('end{}'.format(bits[0]),))
        parser.delete_first_token()

        self.element = Variable(bits[1])
Пример #10
0
def hash(object,attr):
	pseudo_context={'object':object}
	try:
		value = Variable('object.%s' % attr).resolve(pseudo_context)
	except VariableDoesNotExist:
		value = None
	return value
Пример #11
0
def do_map(list, var):
    try:
        iter(list)
    except TypeError:
        # Not iterable, return an empty array
        return []
    return map(lambda item: Variable(var).resolve(item), list)
Пример #12
0
 def _property_resolver(arg):
     try:
         float(arg)
     except ValueError:
         return Variable(arg).resolve
     else:
         return itemgetter(arg)
Пример #13
0
    def render(self, context):
        # our main context
        storage = Context()

        # stash the whole context if needed
        if getattr(settings, 'PHASED_KEEP_CONTEXT', False):
            storage.update(flatten_context(context))

        # but check if there are variables specifically wanted
        for var_name in self.var_names:
            if var_name[0] in ('"', "'") and var_name[-1] == var_name[0]:
                var_name = var_name[1:-1]
            try:
                storage[var_name] = Variable(var_name).resolve(context)
            except VariableDoesNotExist:
                raise TemplateSyntaxError(
                    '"phased" tag got an unknown variable: %r' % var_name)

        storage = backup_csrf_token(context, storage)

        # lastly return the pre phased template part
        return u'%(delimiter)s%(content)s%(pickled)s%(delimiter)s' % {
            'content': self.content,
            'delimiter': settings.PHASED_SECRET_DELIMITER,
            'pickled': pickle_context(storage),
        }
Пример #14
0
 def push_media(self, context):
     if self.prev_context_hash == context.__hash__():
         if DEBUG:
             log.debug('same context: {0} == {1}'.format(
                 self.prev_context_hash, context.__hash__()))
         return
     self.prev_context_hash = context.__hash__()
     cache = get_from_context_root(context, INSERT_TAG_KEY)
     reqset = cache.get(self.container_name, None)
     if not reqset:
         reqset = []
         cache[self.container_name] = reqset
     insert_content = None
     if self.insert_line == None:
         if self.subnodes == None:
             raise AttributeError(
                 'insert_line or subnodes must be specified')
         insert_content = self.subnodes.render(context)
     else:
         if self.subnodes != None:
             raise AttributeError(
                 'insert_line or subnodes must be specified, not both')
         var = True
         insert_content = Variable(self.insert_line).resolve(context)
     reqset.append(OrderedItem(insert_content))
Пример #15
0
 def get_theme(self, context):
     # Get the current theme:
     try:
         request = Variable('request').resolve(context)
     except VariableDoesNotExist:
         request = None
     return get_theme(request)
Пример #16
0
    def resolve_var(
            self,
            varname: Union[str, 'TreeItemBase', FilterExpression],
            context: Context = None
    ) -> Any:
        """Resolves name as a variable in a given context.

        If no context specified page context is considered as context.

        :param varname:
        :param context:

        """
        context = context or self.current_page_context

        if isinstance(varname, FilterExpression):
            varname = varname.resolve(context)

        else:
            varname = varname.strip()

            try:
                varname = Variable(varname).resolve(context)
            except VariableDoesNotExist:
                varname = varname

        return varname
Пример #17
0
    def render(self, context):
        """Add the tournament in the context to the arguments, then render as
        usual."""

        # In order to take advantage of the superclass's method, the easiest
        # thing to do is to grab the string we want to insert, and turn it into
        # a (literal) Variable for the superclass. This is a little roundabout,
        # since we're creating a variable only for it to be turned back into
        # the string again, but it's better than copy-pasting the superclass's
        # method itself.
        try:
            tournament_slug = context['tournament'].slug
        except KeyError:
            raise TemplateSyntaxError(
                "tournamenturl can only be used in contexts with a tournament rtf "
            )
        tournament_slug = Variable("'" + tournament_slug + "'")
        self.args = list(
            self._args
        )  # make a copy in case render() gets called multiple times
        self.kwargs = dict(self._kwargs)

        if self.kwargs:
            self.kwargs['tournament_slug'] = tournament_slug
        else:
            self.args.insert(0, tournament_slug)

        return super().render(context)
Пример #18
0
 def render(self, context):
     try:
         value = Variable(self.var_value).resolve(context)
     except VariableDoesNotExist as notexisterr:
         value = ""
     context[self.var_name] = value
     return ""
Пример #19
0
def serialize_opportunistically(context, expressions):
    """
    :param context: A template context
    :param expressions: A list of strings that refer to the context, e.g. "foo.bar" or "baz.1"
    :return: A string containing a JSON dump of a dictionary representing the parts of the
      context that are referred to in the expressions, resolved to their final values.
      In other words, a snapshot of the current context, limited to the listed names.
    """
    ctx = {}
    for expression in expressions:
        try:
            value = Variable(expression).resolve(context)
        except VariableDoesNotExist:
            logger.debug(
                "JSX block refers to ctx.%s, but there's no variable by that name "
                "in the Django template context.", expression)
            if context.template:
                string_if_invalid = context.template.engine.string_if_invalid
            else:
                string_if_invalid = ''
            if '%s' in string_if_invalid:
                value = string_if_invalid % expression
            else:
                value = string_if_invalid
        set_nested(ctx, expression, value)
    ctx = json.dumps(ctx)
    return ctx
Пример #20
0
def ifnumbrefloat(value, n):
    if value == None:
        return 'None'
    else:
        try:
            return round(float(value), int(n))
        except ValueError:
            return Variable(value).resolve
Пример #21
0
    def render(self, context):
        """Add the round to the arguments, then render as usual."""

        # Similar comment as for TournamentURLNode.render()
        round = self.round.resolve(context) if self.round else context['round']
        tournament_slug = Variable("'" + round.tournament.slug + "'")
        round_seq = Variable("'%d'" % round.seq)
        self.args = list(self._args)      # make a copy in case render() gets called multiple times
        self.kwargs = dict(self._kwargs)

        if self.kwargs:
            self.kwargs['tournament_slug'] = tournament_slug
            self.kwargs['round_seq'] = round_seq
        else:
            self.args = [tournament_slug, round_seq] + self.args

        return super().render(context)
Пример #22
0
 def render(self, context):
     try:
         var = Variable(self.varname).resolve(context)
     except:
         var = 0
     #deep = len(context.dicts)-1
     context.dicts[0][self.varname] = var + 1
     return ''
Пример #23
0
 def test_nonliterals(self):
     """Variable names that aren't resolved as literals."""
     var_names = []
     for var in ('inf', 'infinity', 'iNFiniTy', 'nan'):
         var_names.extend((var, '-' + var, '+' + var))
     for var in var_names:
         with self.subTest(var=var):
             self.assertIsNone(Variable(var).literal)
Пример #24
0
 def render(self, context):
     num_spaces = Variable(self.num_spaces).resolve(context)
     try:
         num_spaces = int(num_spaces)
     except ValueError:
         raise TemplateSyntaxError('do_spaces tag\'s num_spaces argument '
                                   'must be an int')
     return '&nbsp;&nbsp;' * num_spaces
Пример #25
0
def sfpirg_pagination(context, token):
    parts = token.split_contents()[1:]
    for part in parts:
        recordlist = Variable(part).resolve(context)
        break
    context['recordlist'] = recordlist
    t = get_template('include/pagination.html')
    return t.render(Context(context))
Пример #26
0
def dictsortreversed(value, arg):
    """
    Takes a list of dicts, returns that list sorted in reverse order by the
    property given in the argument.
    """
    try:
        return sorted(value, key=Variable(arg).resolve, reverse=True)
    except (TypeError, VariableDoesNotExist):
        return ''
Пример #27
0
def render_get_params(context):
    """Docstring."""
    req = Variable("request").resolve(context)
    data = req.GET.copy().urlencode()

    if data:
        return "?%s" % data
    else:
        return ""
Пример #28
0
 def render(self, context):
     dict = Variable(self.dict).resolve(context)
     key = context.get(self.key, self.key)
     default = context.get(self.default, self.default)
     if dict:
         context[self.context_key] = dict.get(key, default)
     else:
         context[self.context_key] = default
     return ''
Пример #29
0
def dictsort(value, arg):
    """
    Takes a list of dicts, returns that list sorted by the property given in
    the argument.
    """
    var_resolve = Variable(arg).resolve
    decorated = [(var_resolve(item), item) for item in value]
    decorated.sort()
    return [item[1] for item in decorated]
Пример #30
0
def dictsort(value, arg):
    """
    Takes a list of dicts, returns that list sorted by the property given in
    the argument.
    """
    try:
        return sorted(value, key=Variable(arg).resolve)
    except (TypeError, VariableDoesNotExist):
        return u''