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

zopefoundation / z3c.form / 5104192483

pending completion
5104192483

push

github

web-flow
Config with pure python template (#114)

* Bumped version for breaking release.

* Drop support for Python 2.7, 3.5, 3.6.

* Add support for Python 3.11.

1316 of 1408 branches covered (93.47%)

Branch coverage included in aggregate %.

420 of 420 new or added lines in 39 files covered. (100.0%)

3716 of 3838 relevant lines covered (96.82%)

0.97 hits per line

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

97.06
/src/z3c/form/browser/radio.py
1
##############################################################################
2
#
3
# Copyright (c) 2007 Zope Foundation and Contributors.
4
# All Rights Reserved.
5
#
6
# This software is subject to the provisions of the Zope Public License,
7
# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
8
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
9
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
10
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
11
# FOR A PARTICULAR PURPOSE.
12
#
13
##############################################################################
14
"""Text Widget Implementation
1✔
15

16
$Id$
17
"""
18
__docformat__ = "reStructuredText"
1✔
19

20
import zope.component
1✔
21
import zope.interface
1✔
22
import zope.schema
1✔
23
import zope.schema.interfaces
1✔
24
from zope.i18n import translate
1✔
25
from zope.pagetemplate.interfaces import IPageTemplate
1✔
26
from zope.schema.vocabulary import SimpleTerm
1✔
27

28
from z3c.form import interfaces
1✔
29
from z3c.form import util
1✔
30
from z3c.form.browser import widget
1✔
31
from z3c.form.widget import FieldWidget
1✔
32
from z3c.form.widget import SequenceWidget
1✔
33

34

35
@zope.interface.implementer_only(interfaces.IRadioWidget)
1✔
36
class RadioWidget(widget.HTMLInputWidget, SequenceWidget):
1✔
37
    """Input type radio widget implementation."""
38

39
    klass = 'radio-widget'
1✔
40
    css = 'radio'
1✔
41

42
    def isChecked(self, term):
1✔
43
        return term.token in self.value
1✔
44

45
    def renderForValue(self, value):
1✔
46
        terms = list(self.terms)
1✔
47
        try:
1✔
48
            term = self.terms.getTermByToken(value)
1✔
49
        except LookupError:
1✔
50
            if value == SequenceWidget.noValueToken:
1!
51
                term = SimpleTerm(value)
1✔
52
                terms.insert(0, term)
1✔
53
                id = '%s-novalue' % self.id
1✔
54
            else:
55
                raise
×
56
        else:
57
            id = '%s-%i' % (self.id, terms.index(term))
1✔
58
        checked = self.isChecked(term)
1✔
59
        item = {'id': id, 'name': self.name, 'value': term.token,
1✔
60
                'checked': checked}
61
        template = zope.component.getMultiAdapter(
1✔
62
            (self.context, self.request, self.form, self.field, self),
63
            IPageTemplate, name=self.mode + '_single')
64
        return template(self, item)
1✔
65

66
    @property
1✔
67
    def items(self):
1✔
68
        if self.terms is None:
1✔
69
            return
1✔
70

71
        for count, term in enumerate(self.terms):
1✔
72
            checked = self.isChecked(term)
1✔
73
            id = '%s-%i' % (self.id, count)
1✔
74
            if zope.schema.interfaces.ITitledTokenizedTerm.providedBy(term):
1✔
75
                label = translate(term.title, context=self.request,
1✔
76
                                  default=term.title)
77
            else:
78
                label = util.toUnicode(term.value)
1✔
79
            yield {'id': id, 'name': self.name, 'value': term.token,
1✔
80
                   'label': label, 'checked': checked}
81

82
    def update(self):
1✔
83
        """See z3c.form.interfaces.IWidget."""
84
        super().update()
1✔
85
        widget.addFieldClass(self)
1✔
86

87
    def json_data(self):
1✔
88
        data = super().json_data()
1✔
89
        data['options'] = list(self.items)
1✔
90
        data['type'] = 'radio'
1✔
91
        return data
1✔
92

93

94
@zope.component.adapter(zope.schema.interfaces.IField, interfaces.IFormLayer)
1✔
95
@zope.interface.implementer(interfaces.IFieldWidget)
1✔
96
def RadioFieldWidget(field, request):
1✔
97
    """IFieldWidget factory for RadioWidget."""
98
    return FieldWidget(field, RadioWidget(request))
1✔
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