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

zostera / django-bootstrap4 / 7527075746

15 Jan 2024 09:49AM CUT coverage: 91.069%. First build
7527075746

Pull #670

github

web-flow
Bump ruff from 0.1.12 to 0.1.13

Bumps [ruff](https://github.com/astral-sh/ruff) from 0.1.12 to 0.1.13.
- [Release notes](https://github.com/astral-sh/ruff/releases)
- [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md)
- [Commits](https://github.com/astral-sh/ruff/compare/v0.1.12...v0.1.13)

---
updated-dependencies:
- dependency-name: ruff
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Pull Request #670: Bump ruff from 0.1.12 to 0.1.13

322 of 394 branches covered (0.0%)

Branch coverage included in aggregate %.

1279 of 1364 relevant lines covered (93.77%)

14.94 hits per line

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

80.45
/src/bootstrap4/forms.py
1
from django.forms import EmailInput, NumberInput, PasswordInput, Textarea, TextInput, URLInput
16✔
2
from django.utils.safestring import mark_safe
16✔
3

4
from .bootstrap import get_bootstrap_setting, get_field_renderer, get_form_renderer, get_formset_renderer
16✔
5
from .exceptions import BootstrapError
16✔
6
from .text import text_value
16✔
7
from .utils import add_css_class, render_tag
16✔
8

9
FORM_GROUP_CLASS = "form-group"
16✔
10

11

12
def render_formset(formset, **kwargs):
16✔
13
    """Render a formset to a Bootstrap layout."""
14
    renderer_cls = get_formset_renderer(**kwargs)
16✔
15
    return renderer_cls(formset, **kwargs).render()
16✔
16

17

18
def render_formset_errors(formset, **kwargs):
16✔
19
    """Render formset errors to a Bootstrap layout."""
20
    renderer_cls = get_formset_renderer(**kwargs)
×
21
    return renderer_cls(formset, **kwargs).render_errors()
×
22

23

24
def render_form(form, **kwargs):
16✔
25
    """Render a form to a Bootstrap layout."""
26
    renderer_cls = get_form_renderer(**kwargs)
16✔
27
    return renderer_cls(form, **kwargs).render()
16✔
28

29

30
def render_form_errors(form, type="all", **kwargs):
16✔
31
    """Render form errors to a Bootstrap layout."""
32
    renderer_cls = get_form_renderer(**kwargs)
×
33
    return renderer_cls(form, **kwargs).render_errors(type)
×
34

35

36
def render_field(field, **kwargs):
16✔
37
    """Render a field to a Bootstrap layout."""
38
    renderer_cls = get_field_renderer(**kwargs)
16✔
39
    return renderer_cls(field, **kwargs).render()
16✔
40

41

42
def render_label(content, label_for=None, label_class=None, label_title=""):
16✔
43
    """Render a label with content."""
44
    attrs = {}
16✔
45
    if label_for:
16✔
46
        attrs["for"] = label_for
16✔
47
    if label_class:
16✔
48
        attrs["class"] = label_class
16✔
49
    if label_title:
16✔
50
        attrs["title"] = label_title
16✔
51
    return render_tag("label", attrs=attrs, content=content)
16✔
52

53

54
def render_button(
16✔
55
    content,
56
    button_type=None,
57
    button_class="btn-primary",
58
    size="",
59
    href="",
60
    name=None,
61
    value=None,
62
    title=None,
63
    extra_classes="",
64
    id="",
65
):
66
    """Render a button with content."""
67
    attrs = {}
16✔
68
    classes = add_css_class("btn", button_class)
16✔
69
    size = text_value(size).lower().strip()
16✔
70
    if size == "xs":
16!
71
        classes = add_css_class(classes, "btn-xs")
×
72
    elif size == "sm" or size == "small":
16!
73
        classes = add_css_class(classes, "btn-sm")
×
74
    elif size == "lg" or size == "large":
16✔
75
        classes = add_css_class(classes, "btn-lg")
16✔
76
    elif size == "md" or size == "medium":
16!
77
        pass
×
78
    elif size:
16!
79
        raise BootstrapError(f'Parameter "size" should be "xs", "sm", "lg" or empty ("{size}" given).')
×
80

81
    if button_type:
16✔
82
        if button_type not in ("submit", "reset", "button", "link"):
16✔
83
            raise BootstrapError(
16✔
84
                'Parameter "button_type" should be "submit", "reset", "button", "link" or empty '
85
                f'("{button_type}" given).'
86
            )
87
        if button_type != "link":
16✔
88
            attrs["type"] = button_type
16✔
89

90
    classes = add_css_class(classes, extra_classes)
16✔
91
    attrs["class"] = classes
16✔
92

93
    if href:
16✔
94
        tag = "a"
16✔
95
        if button_type and button_type != "link":
16✔
96
            raise BootstrapError(f'Button of type "{button_type}" is not allowed a "href" parameter.')
16✔
97
        attrs["href"] = href
16✔
98
        # Specify role for link with button appearance
99
        attrs.setdefault("role", "button")
16✔
100
    else:
101
        tag = "button"
16✔
102

103
    if id:
16!
104
        attrs["id"] = id
×
105
    if name:
16!
106
        attrs["name"] = name
×
107
    if value:
16!
108
        attrs["value"] = value
×
109
    if title:
16!
110
        attrs["title"] = title
×
111
    return render_tag(tag, attrs=attrs, content=mark_safe(content))
16✔
112

113

114
def render_field_and_label(field, label, field_class="", label_for=None, label_class="", layout="", **kwargs):
16✔
115
    """Render a field with its label."""
116
    if layout == "horizontal":
16!
117
        if not label_class:
16!
118
            label_class = get_bootstrap_setting("horizontal_label_class")
16✔
119
        if not field_class:
16!
120
            field_class = get_bootstrap_setting("horizontal_field_class")
16✔
121
        if not label:
16!
122
            label = mark_safe("&#160;")
16✔
123
        label_class = add_css_class(label_class, "control-label")
16✔
124
    html = field
16✔
125
    if field_class:
16!
126
        html = f'<div class="{field_class}">{html}</div>'
16✔
127
    if label:
16!
128
        html = render_label(label, label_for=label_for, label_class=label_class) + html
16✔
129
    return html
16✔
130

131

132
def render_form_group(content, css_class=FORM_GROUP_CLASS):
16✔
133
    """Render a Bootstrap form group."""
134
    return f'<div class="{css_class}">{content}</div>'
16✔
135

136

137
def is_widget_with_placeholder(widget):
16✔
138
    """
139
    Return whether this widget should have a placeholder.
140

141
    Only text, text area, number, e-mail, url, password, number and derived inputs have placeholders.
142
    """
143
    return isinstance(widget, (TextInput, Textarea, NumberInput, EmailInput, URLInput, PasswordInput))
16✔
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