コード例 #1
0
def cut(value, arg):
    """Remove all values of arg from the given string."""
    safe = isinstance(value, SafeData)
    value = value.replace(arg, '')
    if safe and arg != ';':
        return mark_safe(value)
    return value
コード例 #2
0
ファイル: widgets.py プロジェクト: Matthijs990/os-sys-github
    def get_context(self, name, value, attrs):
        context = super().get_context(name, value, attrs)
        rel_to = self.rel.model
        if rel_to in self.admin_site._registry:
            # The related object is registered with the same AdminSite
            related_url = reverse(
                'admin:%s_%s_changelist' % (
                    rel_to._meta.app_label,
                    rel_to._meta.model_name,
                ),
                current_app=self.admin_site.name,
            )

            params = self.url_parameters()
            if params:
                related_url += '?' + '&'.join('%s=%s' % (k, v)
                                                  for k, v in params.items())
            context['related_url'] = mark_safe(related_url)
            context['link_title'] = _('Lookup')
            # The JavaScript code looks for this class.
            context['widget']['attrs'].setdefault(
                'class', 'vForeignKeyRawIdAdminField')
        if context['widget']['value']:
            context['link_label'], context[
                'link_url'] = self.label_and_url_for_value(value)
        return context
コード例 #3
0
def safeseq(value):
    """
    A "safe" filter for sequences. Mark each element in the sequence,
    individually, as safe, after converting them to strings. Return a list
    with the results.
    """
    return [mark_safe(str(obj)) for obj in value]
コード例 #4
0
ファイル: formsets.py プロジェクト: Matthijs990/os-sys-github
 def as_table(self):
     "Return this formset rendered as HTML <tr>s -- excluding the <table></table>."
     # XXX: there is no semantic division between forms here, there
     # probably should be. It might make sense to render each form as a
     # table row with each field as a td.
     forms = ' '.join(form.as_table() for form in self)
     return mark_safe(str(self.management_form) + '\n' + forms)
コード例 #5
0
 def _dec(*args, **kwargs):
     args = list(args)
     args[0] = str(args[0])
     if (isinstance(args[0], SafeData)
             and getattr(_dec._decorated_function, 'is_safe', False)):
         return mark_safe(func(*args, **kwargs))
     return func(*args, **kwargs)
コード例 #6
0
ファイル: utils.py プロジェクト: Matthijs990/os-sys-github
def parse_rst(text, default_reference_context, thing_being_parsed=None):
    """
    Convert the string from reST to an XHTML fragment.
    """
    overrides = {
        'doctitle_xform': True,
        'initial_header_level': 3,
        "default_reference_context": default_reference_context,
        "link_base": reverse('server-admindocs-docroot').rstrip('/'),
        'raw_enabled': False,
        'file_insertion_enabled': False,
    }
    thing_being_parsed = thing_being_parsed and force_bytes(
        '<%s>' % thing_being_parsed)
    # Wrap ``text`` in some reST that sets the default role to ``cmsreference``,
    # then restores it.
    source = """
.. default-role:: cmsreference

%s

.. default-role::
"""
    parts = docutils.core.publish_parts(
        source % text,
        source_path=thing_being_parsed,
        destination_path=None,
        writer_name='html',
        settings_overrides=overrides,
    )
    return mark_safe(parts['fragment'])
コード例 #7
0
def linebreaks_filter(value, autoescape=True):
    """
    Replace line breaks in plain text with appropriate HTML; a single
    newline becomes an HTML line break (``<br>``) and a new line
    followed by a blank line becomes a paragraph break (``</p>``).
    """
    autoescape = autoescape and not isinstance(value, SafeData)
    return mark_safe(linebreaks(value, autoescape))
コード例 #8
0
ファイル: html.py プロジェクト: Matthijs990/os-sys-github
def format_html(format_string, *args, **kwargs):
    """
    Similar to str.format, but pass all arguments through conditional_escape(),
    and call mark_safe() on the result. This function should be used instead
    of str.format or % interpolation to build up small HTML fragments.
    """
    args_safe = map(conditional_escape, args)
    kwargs_safe = {k: conditional_escape(v) for (k, v) in kwargs.items()}
    return mark_safe(format_string.format(*args_safe, **kwargs_safe))
コード例 #9
0
def pgettext(context, message):
    msg_with_ctxt = "%s%s%s" % (context, CONTEXT_SEPARATOR, message)
    result = gettext(msg_with_ctxt)
    if CONTEXT_SEPARATOR in result:
        # Translation not found
        result = message
    elif isinstance(message, SafeData):
        result = mark_safe(result)
    return result
コード例 #10
0
ファイル: base.py プロジェクト: Matthijs990/os-sys-github
 def render(self, context):
     bits = []
     for node in self:
         if isinstance(node, Node):
             bit = node.render_annotated(context)
         else:
             bit = node
         bits.append(str(bit))
     return mark_safe(''.join(bits))
コード例 #11
0
def join(value, arg, autoescape=True):
    """Join a list with a string, like Python's ``str.join(list)``."""
    try:
        if autoescape:
            value = [conditional_escape(v) for v in value]
        data = conditional_escape(arg).join(value)
    except TypeError:  # Fail silently if arg isn't iterable.
        return value
    return mark_safe(data)
コード例 #12
0
 def render(self, context):
     old_setting = context.autoescape
     context.autoescape = self.setting
     output = self.nodelist.render(context)
     context.autoescape = old_setting
     if self.setting:
         return mark_safe(output)
     else:
         return output
コード例 #13
0
ファイル: html.py プロジェクト: Matthijs990/os-sys-github
def escape(text):
    """
    Return the given text with ampersands, quotes and angle brackets encoded
    for use in HTML.

    Always escape input, even if it's already escaped and marked as such.
    This may result in double-escaping. If this is a concern, use
    conditional_escape() instead.
    """
    return mark_safe(str(text).translate(_html_escapes))
コード例 #14
0
def linebreaksbr(value, autoescape=True):
    """
    Convert all newlines in a piece of plain text to HTML line breaks
    (``<br>``).
    """
    autoescape = autoescape and not isinstance(value, SafeData)
    value = normalize_newlines(value)
    if autoescape:
        value = escape(value)
    return mark_safe(value.replace('\n', '<br>'))
コード例 #15
0
ファイル: html.py プロジェクト: Matthijs990/os-sys-github
def json_script(value, element_id):
    """
    Escape all the HTML/XML special characters with their unicode escapes, so
    value is safe to be output anywhere except for inside a tag attribute. Wrap
    the escaped JSON in a script tag.
    """
    from server.core.serializers.json import ServerJSONEncoder
    json_str = json.dumps(
        value, cls=ServerJSONEncoder).translate(_json_script_escapes)
    return format_html('<script id="{}" type="application/json">{}</script>',
                       element_id, mark_safe(json_str))
コード例 #16
0
 def super(self):
     if not hasattr(self, 'context'):
         raise TemplateSyntaxError(
             "'%s' object has no attribute 'context'. Did you use "
             "{{ block.super }} in a base template?" %
             self.__class__.__name__)
     render_context = self.context.render_context
     if (BLOCK_CONTEXT_KEY in render_context
             and render_context[BLOCK_CONTEXT_KEY].get_block(
                 self.name) is not None):
         return mark_safe(self.render(self.context))
     return ''
コード例 #17
0
def urlizetrunc(value, limit, autoescape=True):
    """
    Convert URLs into clickable links, truncating URLs to the given character
    limit, and adding 'rel=nofollow' attribute to discourage spamming.

    Argument: Length to truncate URLs to.
    """
    return mark_safe(
        _urlize(value,
                trim_url_limit=int(limit),
                nofollow=True,
                autoescape=autoescape))
コード例 #18
0
def paginator_number(cl, i):
    """
    Generate an individual page index link in a paginated list.
    """
    if i == DOT:
        return '... '
    elif i == cl.page_num:
        return format_html('<span class="this-page">{}</span> ', i + 1)
    else:
        return format_html(
            '<a href="{}"{}>{}</a> ', cl.get_query_string({PAGE_VAR: i}),
            mark_safe(' class="end"' if i == cl.paginator.num_pages -
                      1 else ''), i + 1)
コード例 #19
0
def linenumbers(value, autoescape=True):
    """Display text with line numbers."""
    lines = value.split('\n')
    # Find the maximum width of the line count, for use with zero padding
    # string format command
    width = str(len(str(len(lines))))
    if not autoescape or isinstance(value, SafeData):
        for i, line in enumerate(lines):
            lines[i] = ("%0" + width + "d. %s") % (i + 1, line)
    else:
        for i, line in enumerate(lines):
            lines[i] = ("%0" + width + "d. %s") % (i + 1, escape(line))
    return mark_safe('\n'.join(lines))
コード例 #20
0
ファイル: base.py プロジェクト: Matthijs990/os-sys-github
 def resolve(self, context, ignore_failures=False):
     if isinstance(self.var, Variable):
         try:
             obj = self.var.resolve(context)
         except VariableDoesNotExist:
             if ignore_failures:
                 obj = None
             else:
                 string_if_invalid = context.template.engine.string_if_invalid
                 if string_if_invalid:
                     if '%s' in string_if_invalid:
                         return string_if_invalid % self.var
                     else:
                         return string_if_invalid
                 else:
                     obj = string_if_invalid
     else:
         obj = self.var
     for func, args in self.filters:
         arg_vals = []
         for lookup, arg in args:
             if not lookup:
                 arg_vals.append(mark_safe(arg))
             else:
                 arg_vals.append(arg.resolve(context))
         if getattr(func, 'expects_localtime', False):
             obj = template_localtime(obj, context.use_tz)
         if getattr(func, 'needs_autoescape', False):
             new_obj = func(obj, autoescape=context.autoescape, *arg_vals)
         else:
             new_obj = func(obj, *arg_vals)
         if getattr(func, 'is_safe', False) and isinstance(obj, SafeData):
             obj = mark_safe(new_obj)
         else:
             obj = new_obj
     return obj
コード例 #21
0
def slugify(value, allow_unicode=False):
    """
    Convert to ASCII if 'allow_unicode' is False. Convert spaces to hyphens.
    Remove characters that aren't alphanumerics, underscores, or hyphens.
    Convert to lowercase. Also strip leading and trailing whitespace.
    """
    value = str(value)
    if allow_unicode:
        value = unicodedata.normalize('NFKC', value)
    else:
        value = unicodedata.normalize('NFKD',
                                      value).encode('ascii',
                                                    'ignore').decode('ascii')
    value = re.sub(r'[^\w\s-]', '', value).strip().lower()
    return mark_safe(re.sub(r'[-\s]+', '-', value))
コード例 #22
0
ファイル: html.py プロジェクト: Matthijs990/os-sys-github
def html_safe(klass):
    """
    A decorator that defines the __html__ method. This helps non-Server
    templates to detect classes whose __str__ methods return SafeText.
    """
    if '__html__' in klass.__dict__:
        raise ValueError("can't apply @html_safe to %s because it defines "
                         "__html__()." % klass.__name__)
    if '__str__' not in klass.__dict__:
        raise ValueError("can't apply @html_safe to %s because it doesn't "
                         "define __str__()." % klass.__name__)
    klass_str = klass.__str__
    klass.__str__ = lambda self: mark_safe(klass_str(self))
    klass.__html__ = lambda self: str(self)
    return klass
コード例 #23
0
ファイル: cookie.py プロジェクト: Matthijs990/os-sys-github
 def process_messages(self, obj):
     if isinstance(obj, list) and obj:
         if obj[0] == MessageEncoder.message_key:
             if len(obj) == 3:
                 # Compatibility with previously-encoded messages
                 return Message(*obj[1:])
             if obj[1]:
                 obj[3] = mark_safe(obj[3])
             return Message(*obj[2:])
         return [self.process_messages(item) for item in obj]
     if isinstance(obj, dict):
         return {
             key: self.process_messages(value)
             for key, value in obj.items()
         }
     return obj
コード例 #24
0
ファイル: base.py プロジェクト: Matthijs990/os-sys-github
 def resolve(self, context):
     """Resolve this variable against a given context."""
     if self.lookups is not None:
         # We're dealing with a variable that needs to be resolved
         value = self._resolve_lookup(context)
     else:
         # We're dealing with a literal, so it's already been "resolved"
         value = self.literal
     if self.translate:
         is_safe = isinstance(value, SafeData)
         msgid = value.replace('%', '%%')
         msgid = mark_safe(msgid) if is_safe else msgid
         if self.message_context:
             return pgettext_lazy(self.message_context, msgid)
         else:
             return gettext_lazy(msgid)
     return value
コード例 #25
0
ファイル: i18n.py プロジェクト: Matthijs990/os-sys-github
 def render(self, context):
     self.filter_expression.var.translate = not self.noop
     if self.message_context:
         self.filter_expression.var.message_context = (
             self.message_context.resolve(context))
     output = self.filter_expression.resolve(context)
     value = render_value_in_context(output, context)
     # Restore percent signs. Percent signs in template text are doubled
     # so they are not interpreted as string format flags.
     is_safe = isinstance(value, SafeData)
     value = value.replace('%%', '%')
     value = mark_safe(value) if is_safe else value
     if self.asvar:
         context[self.asvar] = value
         return ''
     else:
         return value
コード例 #26
0
ファイル: base.py プロジェクト: Matthijs990/os-sys-github
    def __init__(self, var):
        self.var = var
        self.literal = None
        self.lookups = None
        self.translate = False
        self.message_context = None

        if not isinstance(var, str):
            raise TypeError(
                "Variable must be a string or number, got %s" % type(var))
        try:
            # First try to treat this variable as a number.
            #
            # Note that this could cause an OverflowError here that we're not
            # catching. Since this should only happen at compile time, that's
            # probably OK.

            # Try to interpret values containing a period or an 'e'/'E'
            # (possibly scientific notation) as a float;  otherwise, try int.
            if '.' in var or 'e' in var.lower():
                self.literal = float(var)
                # "2." is invalid
                if var.endswith('.'):
                    raise ValueError
            else:
                self.literal = int(var)
        except ValueError:
            # A ValueError means that the variable isn't a number.
            if var.startswith('_(') and var.endswith(')'):
                # The result of the lookup should be translated at rendering
                # time.
                self.translate = True
                var = var[2:-1]
            # If it's wrapped with quotes (single or double), then
            # we're also dealing with a literal.
            try:
                self.literal = mark_safe(unescape_string_literal(var))
            except ValueError:
                # Otherwise we'll set self.lookups so that resolve() knows we're
                # dealing with a bonafide variable
                if var.find(VARIABLE_ATTRIBUTE_SEPARATOR + '_') > -1 or var[0] == '_':
                    raise TemplateSyntaxError("Variables and attributes may "
                                              "not begin with underscores: '%s'" %
                                              var)
                self.lookups = tuple(var.split(VARIABLE_ATTRIBUTE_SEPARATOR))
コード例 #27
0
ファイル: html.py プロジェクト: Matthijs990/os-sys-github
def format_html_join(sep, format_string, args_generator):
    """
    A wrapper of format_html, for the common case of a group of arguments that
    need to be formatted using the same format string, and then joined using
    'sep'. 'sep' is also passed through conditional_escape.

    'args_generator' should be an iterator that returns the sequence of 'args'
    that will be passed to format_html.

    Example:

      format_html_join('\n', "<li>{} {}</li>", ((u.first_name, u.last_name)
                                                  for u in users))
    """
    return mark_safe(
        conditional_escape(sep).join(
            format_html(format_string, *tuple(args))
            for args in args_generator))
コード例 #28
0
ファイル: helpers.py プロジェクト: Matthijs990/os-sys-github
    def label_tag(self):
        classes = []
        contents = conditional_escape(self.field.label)
        if self.is_checkbox:
            classes.append('vCheckboxLabel')

        if self.field.field.required:
            classes.append('required')
        if not self.is_first:
            classes.append('inline')
        attrs = {'class': ' '.join(classes)} if classes else {}
        # checkboxes should not have a label suffix as the checkbox appears
        # to the left of the label.
        return self.field.label_tag(
            contents=mark_safe(contents),
            attrs=attrs,
            label_suffix='' if self.is_checkbox else None,
        )
コード例 #29
0
    def label_tag(self, contents=None, attrs=None, label_suffix=None):
        """
        Wrap the given contents in a <label>, if the field has an ID attribute.
        contents should be mark_safe'd to avoid HTML escaping. If contents
        aren't given, use the field's HTML-escaped label.

        If attrs are given, use them as HTML attributes on the <label> tag.

        label_suffix overrides the form's label_suffix.
        """
        contents = contents or self.label
        if label_suffix is None:
            label_suffix = (self.field.label_suffix if self.field.label_suffix
                            is not None else self.form.label_suffix)
        # Only add the suffix if the label does not end in punctuation.
        # Translators: If found as last label character, these punctuation
        # characters will prevent the default label_suffix to be appended to the label
        if label_suffix and contents and contents[-1] not in _(':?.!'):
            contents = format_html('{}{}', contents, label_suffix)
        widget = self.field.widget
        id_ = widget.attrs.get('id') or self.auto_id
        if id_:
            id_for_label = widget.id_for_label(id_)
            if id_for_label:
                attrs = {**(attrs or {}), 'for': id_for_label}
            if self.field.required and hasattr(self.form,
                                               'required_css_class'):
                attrs = attrs or {}
                if 'class' in attrs:
                    attrs['class'] += ' ' + self.form.required_css_class
                else:
                    attrs['class'] = self.form.required_css_class
            attrs = flatatt(attrs) if attrs else ''
            contents = format_html('<label{}>{}</label>', attrs, contents)
        else:
            contents = conditional_escape(contents)
        return mark_safe(contents)
コード例 #30
0
def gettext(message):
    """
    Translate the 'message' string. It uses the current thread to find the
    translation object to use. If no current translation is activated, the
    message will be run through the default translation object.
    """
    global _default

    eol_message = message.replace('\r\n', '\n').replace('\r', '\n')

    if eol_message:
        _default = _default or translation(settings.LANGUAGE_CODE)
        translation_object = getattr(_active, "value", _default)

        result = translation_object.gettext(eol_message)
    else:
        # Return an empty value of the corresponding type if an empty message
        # is given, instead of metadata, which is the default gettext behavior.
        result = type(message)('')

    if isinstance(message, SafeData):
        return mark_safe(result)

    return result