• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

liqd / adhocracy-plus / 18908688697

29 Oct 2025 12:59PM UTC coverage: 44.622% (-44.5%) from 89.135%
18908688697

Pull #2986

github

web-flow
Merge 1dfde8ee7 into 445e1d498
Pull Request #2986: Draft: Speed up Github Ci Tests

3012 of 6750 relevant lines covered (44.62%)

0.45 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/apps/contrib/templatetags/contrib_tags.py
1
import re
×
2
import unicodedata
×
3

4
from django import template
×
5
from django.conf import settings
×
6
from django.core.exceptions import ImproperlyConfigured
×
7
from django.forms.utils import flatatt
×
8
from django.template import defaultfilters
×
9
from django.template.loader import render_to_string
×
10
from django.utils import timezone
×
11
from django.utils.encoding import force_str
×
12
from django.utils.safestring import mark_safe
×
13

14
register = template.Library()
×
15

16

17
@register.simple_tag
×
18
def include_template_string(template, **kwargs):
×
19
    rendered_template = render_to_string(template, kwargs)
×
20
    return str(rendered_template)
×
21

22

23
@register.simple_tag
×
24
def combined_url_parameter(request_query_dict, **kwargs):
×
25
    combined_query_dict = request_query_dict.copy()
×
26
    for key in kwargs:
×
27
        combined_query_dict.setlist(key, [kwargs[key]])
×
28
    encoded_parameter = "?" + combined_query_dict.urlencode()
×
29
    return encoded_parameter
×
30

31

32
@register.simple_tag
×
33
def filter_has_perm(perm, user, objects):
×
34
    """Filter a list of objects based on user permissions."""
35
    if not hasattr(user, "has_perm"):
×
36
        # If the swapped user model does not support permissions, all objects
37
        # will be returned. This is taken from rules.templatetags.has_perm.
38
        return objects
×
39
    else:
40
        return [obj for obj in objects if user.has_perm(perm, obj)]
×
41

42

43
@register.simple_tag()
×
44
def html_date(value, displayfmt=None, datetimefmt="c", **kwargs):
×
45
    """Format a date and wrap it in a html <time> element.
46

47
    Additional html attributes may be provided as kwargs (e.g. 'class').
48

49
    Note: Converts the value to localtime as we loose the expects_localtime
50
    flag functionality by directly calling the date filter from django.
51
    """
52
    if value:
×
53
        localtime_value = timezone.localtime(value)
×
54
        displaydate = defaultfilters.date(localtime_value, displayfmt)
×
55
        datetime = defaultfilters.date(localtime_value, datetimefmt)
×
56
        attribs = flatatt(kwargs)
×
57
        result = '<time %s datetime="%s">%s</time>' % (attribs, datetime, displaydate)
×
58
        return mark_safe(result)
×
59

60

61
@register.filter
×
62
def classify(value):
×
63
    """
64
    Create a valid CSS class name from a value.
65

66
    Converts to ASCII. Converts spaces to dashes. Removes characters that
67
    aren't alphanumerics, underscores, or hyphens.
68
    Also strips leading and trailing whitespace.
69
    """
70
    if value is None:
×
71
        return "NONE"
×
72

73
    value = force_str(value)
×
74
    value = (
×
75
        unicodedata.normalize("NFKD", value).encode("ascii", "ignore").decode("ascii")
76
    )
77
    value = re.sub(r"[^\w\s-]", "", value).strip()
×
78
    return mark_safe(re.sub(r"[-\s]+", "-", value))
×
79

80

81
@register.filter
×
82
def fa_class(icon):
×
83
    if hasattr(icon, "startswith") and not icon.startswith("fa"):
×
84
        return "fas fa-{icon}".format(icon=icon)
×
85
    return icon
×
86

87

88
@register.simple_tag()
×
89
def matomo_enabled():
×
90
    if hasattr(settings, "MATOMO_ENABLED"):
×
91
        return settings.MATOMO_ENABLED
×
92
    return False
×
93

94

95
@register.inclusion_tag("a4_candy_contrib/matomo/tracking_code.html")
×
96
def matomo_tracking_code():
×
97
    if not hasattr(settings, "MATOMO_SITE_ID"):
×
98
        raise ImproperlyConfigured("MATOMO_SITE_ID does not exist.")
×
99

100
    if not hasattr(settings, "MATOMO_URL"):
×
101
        raise ImproperlyConfigured("MATOMO_URL does not exist.")
×
102

103
    cookie_disabled = False
×
104
    if hasattr(settings, "MATOMO_COOKIE_DISABLED"):
×
105
        cookie_disabled = settings.MATOMO_COOKIE_DISABLED
×
106

107
    return {
×
108
        "id": settings.MATOMO_SITE_ID,
109
        "url": settings.MATOMO_URL,
110
        "cookie_disabled": cookie_disabled,
111
    }
112

113

114
@register.filter
×
115
def devide(value, arg):
×
116
    if arg:
×
117
        return round(value / arg, 2)
×
118
    return 0
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc