fix: format all code with black
and from now on should not deviate from that...
This commit is contained in:
parent
8a09fb1a3c
commit
4d0693862d
68 changed files with 6693 additions and 5659 deletions
|
@ -11,8 +11,14 @@ from pyramid import testing
|
|||
from wuttaweb import grids
|
||||
from wuttaweb.forms import widgets as mod
|
||||
from wuttaweb.forms import schema
|
||||
from wuttaweb.forms.schema import (FileDownload, PersonRef, RoleRefs, Permissions,
|
||||
WuttaDateTime, EmailRecipients)
|
||||
from wuttaweb.forms.schema import (
|
||||
FileDownload,
|
||||
PersonRef,
|
||||
RoleRefs,
|
||||
Permissions,
|
||||
WuttaDateTime,
|
||||
EmailRecipients,
|
||||
)
|
||||
from wuttaweb.testing import WebTestCase
|
||||
|
||||
|
||||
|
@ -21,7 +27,7 @@ class TestObjectRefWidget(WebTestCase):
|
|||
def make_field(self, node, **kwargs):
|
||||
# TODO: not sure why default renderer is in use even though
|
||||
# pyramid_deform was included in setup? but this works..
|
||||
kwargs.setdefault('renderer', deform.Form.default_renderer)
|
||||
kwargs.setdefault("renderer", deform.Form.default_renderer)
|
||||
return deform.Field(node, **kwargs)
|
||||
|
||||
def make_widget(self, **kwargs):
|
||||
|
@ -33,14 +39,14 @@ class TestObjectRefWidget(WebTestCase):
|
|||
self.session.add(person)
|
||||
self.session.commit()
|
||||
|
||||
with patch.object(schema, 'Session', return_value=self.session):
|
||||
with patch.object(schema, "Session", return_value=self.session):
|
||||
|
||||
# standard (editable)
|
||||
node = colander.SchemaNode(PersonRef(self.request))
|
||||
widget = self.make_widget()
|
||||
field = self.make_field(node)
|
||||
html = widget.serialize(field, person.uuid)
|
||||
self.assertIn('<b-select ', html)
|
||||
self.assertIn("<b-select ", html)
|
||||
|
||||
# readonly
|
||||
node = colander.SchemaNode(PersonRef(self.request))
|
||||
|
@ -48,17 +54,17 @@ class TestObjectRefWidget(WebTestCase):
|
|||
widget = self.make_widget()
|
||||
field = self.make_field(node)
|
||||
html = widget.serialize(field, person.uuid, readonly=True)
|
||||
self.assertIn('Betty Boop', html)
|
||||
self.assertNotIn('<a', html)
|
||||
self.assertIn("Betty Boop", html)
|
||||
self.assertNotIn("<a", html)
|
||||
|
||||
# with hyperlink
|
||||
node = colander.SchemaNode(PersonRef(self.request))
|
||||
node.model_instance = person
|
||||
widget = self.make_widget(url=lambda p: '/foo')
|
||||
widget = self.make_widget(url=lambda p: "/foo")
|
||||
field = self.make_field(node)
|
||||
html = widget.serialize(field, person.uuid, readonly=True)
|
||||
self.assertIn('Betty Boop', html)
|
||||
self.assertIn('<a', html)
|
||||
self.assertIn("Betty Boop", html)
|
||||
self.assertIn("<a", html)
|
||||
self.assertIn('href="/foo"', html)
|
||||
|
||||
def test_get_template_values(self):
|
||||
|
@ -67,24 +73,25 @@ class TestObjectRefWidget(WebTestCase):
|
|||
self.session.add(person)
|
||||
self.session.commit()
|
||||
|
||||
with patch.object(schema, 'Session', return_value=self.session):
|
||||
with patch.object(schema, "Session", return_value=self.session):
|
||||
|
||||
# standard
|
||||
node = colander.SchemaNode(PersonRef(self.request))
|
||||
widget = self.make_widget()
|
||||
field = self.make_field(node)
|
||||
values = widget.get_template_values(field, person.uuid, {})
|
||||
self.assertIn('cstruct', values)
|
||||
self.assertNotIn('url', values)
|
||||
self.assertIn("cstruct", values)
|
||||
self.assertNotIn("url", values)
|
||||
|
||||
# readonly w/ empty option
|
||||
node = colander.SchemaNode(PersonRef(self.request,
|
||||
empty_option=('_empty_', '(empty)')))
|
||||
widget = self.make_widget(readonly=True, url=lambda obj: '/foo')
|
||||
node = colander.SchemaNode(
|
||||
PersonRef(self.request, empty_option=("_empty_", "(empty)"))
|
||||
)
|
||||
widget = self.make_widget(readonly=True, url=lambda obj: "/foo")
|
||||
field = self.make_field(node)
|
||||
values = widget.get_template_values(field, '_empty_', {})
|
||||
self.assertIn('cstruct', values)
|
||||
self.assertNotIn('url', values)
|
||||
values = widget.get_template_values(field, "_empty_", {})
|
||||
self.assertIn("cstruct", values)
|
||||
self.assertNotIn("url", values)
|
||||
|
||||
|
||||
class TestWuttaDateWidget(WebTestCase):
|
||||
|
@ -92,7 +99,7 @@ class TestWuttaDateWidget(WebTestCase):
|
|||
def make_field(self, node, **kwargs):
|
||||
# TODO: not sure why default renderer is in use even though
|
||||
# pyramid_deform was included in setup? but this works..
|
||||
kwargs.setdefault('renderer', deform.Form.default_renderer)
|
||||
kwargs.setdefault("renderer", deform.Form.default_renderer)
|
||||
return deform.Field(node, **kwargs)
|
||||
|
||||
def make_widget(self, **kwargs):
|
||||
|
@ -108,11 +115,11 @@ class TestWuttaDateWidget(WebTestCase):
|
|||
|
||||
# editable widget has normal picker html
|
||||
result = widget.serialize(field, str(dt))
|
||||
self.assertIn('<wutta-datepicker', result)
|
||||
self.assertIn("<wutta-datepicker", result)
|
||||
|
||||
# readonly is rendered per app convention
|
||||
result = widget.serialize(field, str(dt), readonly=True)
|
||||
self.assertEqual(result, '2025-01-15')
|
||||
self.assertEqual(result, "2025-01-15")
|
||||
|
||||
# now try again with datetime
|
||||
widget = self.make_widget()
|
||||
|
@ -120,11 +127,11 @@ class TestWuttaDateWidget(WebTestCase):
|
|||
|
||||
# editable widget has normal picker html
|
||||
result = widget.serialize(field, str(dt))
|
||||
self.assertIn('<wutta-datepicker', result)
|
||||
self.assertIn("<wutta-datepicker", result)
|
||||
|
||||
# readonly is rendered per app convention
|
||||
result = widget.serialize(field, str(dt), readonly=True)
|
||||
self.assertEqual(result, '2025-01-15')
|
||||
self.assertEqual(result, "2025-01-15")
|
||||
|
||||
|
||||
class TestWuttaDateTimeWidget(WebTestCase):
|
||||
|
@ -132,7 +139,7 @@ class TestWuttaDateTimeWidget(WebTestCase):
|
|||
def make_field(self, node, **kwargs):
|
||||
# TODO: not sure why default renderer is in use even though
|
||||
# pyramid_deform was included in setup? but this works..
|
||||
kwargs.setdefault('renderer', deform.Form.default_renderer)
|
||||
kwargs.setdefault("renderer", deform.Form.default_renderer)
|
||||
return deform.Field(node, **kwargs)
|
||||
|
||||
def make_widget(self, **kwargs):
|
||||
|
@ -146,11 +153,11 @@ class TestWuttaDateTimeWidget(WebTestCase):
|
|||
|
||||
# editable widget has normal picker html
|
||||
result = widget.serialize(field, str(dt))
|
||||
self.assertIn('<wutta-datepicker', result)
|
||||
self.assertIn("<wutta-datepicker", result)
|
||||
|
||||
# readonly is rendered per app convention
|
||||
result = widget.serialize(field, str(dt), readonly=True)
|
||||
self.assertEqual(result, '2024-12-12 13:49+0000')
|
||||
self.assertEqual(result, "2024-12-12 13:49+0000")
|
||||
|
||||
|
||||
class TestWuttaMoneyInputWidget(WebTestCase):
|
||||
|
@ -158,7 +165,7 @@ class TestWuttaMoneyInputWidget(WebTestCase):
|
|||
def make_field(self, node, **kwargs):
|
||||
# TODO: not sure why default renderer is in use even though
|
||||
# pyramid_deform was included in setup? but this works..
|
||||
kwargs.setdefault('renderer', deform.Form.default_renderer)
|
||||
kwargs.setdefault("renderer", deform.Form.default_renderer)
|
||||
return deform.Field(node, **kwargs)
|
||||
|
||||
def make_widget(self, **kwargs):
|
||||
|
@ -168,19 +175,19 @@ class TestWuttaMoneyInputWidget(WebTestCase):
|
|||
node = colander.SchemaNode(schema.WuttaMoney(self.request))
|
||||
field = self.make_field(node)
|
||||
widget = self.make_widget()
|
||||
amount = decimal.Decimal('12.34')
|
||||
amount = decimal.Decimal("12.34")
|
||||
|
||||
# editable widget has normal text input
|
||||
result = widget.serialize(field, str(amount))
|
||||
self.assertIn('<b-input', result)
|
||||
self.assertIn("<b-input", result)
|
||||
|
||||
# readonly is rendered per app convention
|
||||
result = widget.serialize(field, str(amount), readonly=True)
|
||||
self.assertEqual(result, '<span>$12.34</span>')
|
||||
self.assertEqual(result, "<span>$12.34</span>")
|
||||
|
||||
# readonly w/ null value
|
||||
result = widget.serialize(field, None, readonly=True)
|
||||
self.assertEqual(result, '<span></span>')
|
||||
self.assertEqual(result, "<span></span>")
|
||||
|
||||
|
||||
class TestFileDownloadWidget(WebTestCase):
|
||||
|
@ -188,7 +195,7 @@ class TestFileDownloadWidget(WebTestCase):
|
|||
def make_field(self, node, **kwargs):
|
||||
# TODO: not sure why default renderer is in use even though
|
||||
# pyramid_deform was included in setup? but this works..
|
||||
kwargs.setdefault('renderer', deform.Form.default_renderer)
|
||||
kwargs.setdefault("renderer", deform.Form.default_renderer)
|
||||
return deform.Field(node, **kwargs)
|
||||
|
||||
def test_serialize(self):
|
||||
|
@ -201,31 +208,31 @@ class TestFileDownloadWidget(WebTestCase):
|
|||
|
||||
# null value
|
||||
html = widget.serialize(field, None, readonly=True)
|
||||
self.assertNotIn('<a ', html)
|
||||
self.assertIn('<span>', html)
|
||||
self.assertNotIn("<a ", html)
|
||||
self.assertIn("<span>", html)
|
||||
|
||||
# path to nonexistent file
|
||||
html = widget.serialize(field, '/this/path/does/not/exist', readonly=True)
|
||||
self.assertNotIn('<a ', html)
|
||||
self.assertIn('<span>', html)
|
||||
html = widget.serialize(field, "/this/path/does/not/exist", readonly=True)
|
||||
self.assertNotIn("<a ", html)
|
||||
self.assertIn("<span>", html)
|
||||
|
||||
# path to actual file
|
||||
datfile = self.write_file('data.txt', "hello\n" * 1000)
|
||||
datfile = self.write_file("data.txt", "hello\n" * 1000)
|
||||
html = widget.serialize(field, datfile, readonly=True)
|
||||
self.assertNotIn('<a ', html)
|
||||
self.assertIn('<span>', html)
|
||||
self.assertIn('data.txt', html)
|
||||
self.assertIn('kB)', html)
|
||||
self.assertNotIn("<a ", html)
|
||||
self.assertIn("<span>", html)
|
||||
self.assertIn("data.txt", html)
|
||||
self.assertIn("kB)", html)
|
||||
|
||||
# path to file, w/ url
|
||||
node = colander.SchemaNode(FileDownload(self.request, url='/download/blarg'))
|
||||
node = colander.SchemaNode(FileDownload(self.request, url="/download/blarg"))
|
||||
field = self.make_field(node)
|
||||
widget = field.widget
|
||||
html = widget.serialize(field, datfile, readonly=True)
|
||||
self.assertNotIn('<span>', html)
|
||||
self.assertNotIn("<span>", html)
|
||||
self.assertIn('<a href="/download/blarg">', html)
|
||||
self.assertIn('data.txt', html)
|
||||
self.assertIn('kB)', html)
|
||||
self.assertIn("data.txt", html)
|
||||
self.assertIn("kB)", html)
|
||||
|
||||
# nb. same readonly output even if we ask for editable
|
||||
html2 = widget.serialize(field, datfile, readonly=False)
|
||||
|
@ -237,13 +244,15 @@ class TestGridWidget(WebTestCase):
|
|||
def make_field(self, node, **kwargs):
|
||||
# TODO: not sure why default renderer is in use even though
|
||||
# pyramid_deform was included in setup? but this works..
|
||||
kwargs.setdefault('renderer', deform.Form.default_renderer)
|
||||
kwargs.setdefault("renderer", deform.Form.default_renderer)
|
||||
return deform.Field(node, **kwargs)
|
||||
|
||||
def test_serialize(self):
|
||||
grid = grids.Grid(self.request,
|
||||
columns=['foo', 'bar'],
|
||||
data=[{'foo': 1, 'bar': 2}, {'foo': 3, 'bar': 4}])
|
||||
grid = grids.Grid(
|
||||
self.request,
|
||||
columns=["foo", "bar"],
|
||||
data=[{"foo": 1, "bar": 2}, {"foo": 3, "bar": 4}],
|
||||
)
|
||||
|
||||
node = colander.SchemaNode(colander.String())
|
||||
widget = mod.GridWidget(self.request, grid)
|
||||
|
@ -251,7 +260,7 @@ class TestGridWidget(WebTestCase):
|
|||
|
||||
# readonly works okay
|
||||
html = widget.serialize(field, None, readonly=True)
|
||||
self.assertIn('<b-table ', html)
|
||||
self.assertIn("<b-table ", html)
|
||||
|
||||
# but otherwise, error
|
||||
self.assertRaises(NotImplementedError, widget.serialize, field, None)
|
||||
|
@ -262,11 +271,11 @@ class TestRoleRefsWidget(WebTestCase):
|
|||
def make_field(self, node, **kwargs):
|
||||
# TODO: not sure why default renderer is in use even though
|
||||
# pyramid_deform was included in setup? but this works..
|
||||
kwargs.setdefault('renderer', deform.Form.default_renderer)
|
||||
kwargs.setdefault("renderer", deform.Form.default_renderer)
|
||||
return deform.Field(node, **kwargs)
|
||||
|
||||
def test_serialize(self):
|
||||
self.pyramid_config.add_route('roles.view', '/roles/{uuid}')
|
||||
self.pyramid_config.add_route("roles.view", "/roles/{uuid}")
|
||||
model = self.app.model
|
||||
auth = self.app.get_auth_handler()
|
||||
admin = auth.get_role_administrator(self.session)
|
||||
|
@ -275,7 +284,7 @@ class TestRoleRefsWidget(WebTestCase):
|
|||
self.session.commit()
|
||||
|
||||
# nb. we let the field construct the widget via our type
|
||||
with patch.object(schema, 'Session', return_value=self.session):
|
||||
with patch.object(schema, "Session", return_value=self.session):
|
||||
node = colander.SchemaNode(RoleRefs(self.request))
|
||||
field = self.make_field(node)
|
||||
widget = field.widget
|
||||
|
@ -305,16 +314,16 @@ class TestPermissionsWidget(WebTestCase):
|
|||
def make_field(self, node, **kwargs):
|
||||
# TODO: not sure why default renderer is in use even though
|
||||
# pyramid_deform was included in setup? but this works..
|
||||
kwargs.setdefault('renderer', deform.Form.default_renderer)
|
||||
kwargs.setdefault("renderer", deform.Form.default_renderer)
|
||||
return deform.Field(node, **kwargs)
|
||||
|
||||
def test_serialize(self):
|
||||
permissions = {
|
||||
'widgets': {
|
||||
'label': "Widgets",
|
||||
'perms': {
|
||||
'widgets.polish': {
|
||||
'label': "Polish the widgets",
|
||||
"widgets": {
|
||||
"label": "Widgets",
|
||||
"perms": {
|
||||
"widgets.polish": {
|
||||
"label": "Polish the widgets",
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -330,7 +339,7 @@ class TestPermissionsWidget(WebTestCase):
|
|||
self.assertNotIn("Polish the widgets", html)
|
||||
|
||||
# readonly output includes the perm if set
|
||||
html = widget.serialize(field, {'widgets.polish'}, readonly=True)
|
||||
html = widget.serialize(field, {"widgets.polish"}, readonly=True)
|
||||
self.assertIn("Polish the widgets", html)
|
||||
|
||||
# editable output always includes the perm
|
||||
|
@ -343,7 +352,7 @@ class TestEmailRecipientsWidget(WebTestCase):
|
|||
def make_field(self, node, **kwargs):
|
||||
# TODO: not sure why default renderer is in use even though
|
||||
# pyramid_deform was included in setup? but this works..
|
||||
kwargs.setdefault('renderer', deform.Form.default_renderer)
|
||||
kwargs.setdefault("renderer", deform.Form.default_renderer)
|
||||
return deform.Field(node, **kwargs)
|
||||
|
||||
def test_serialize(self):
|
||||
|
@ -352,19 +361,19 @@ class TestEmailRecipientsWidget(WebTestCase):
|
|||
widget = mod.EmailRecipientsWidget()
|
||||
|
||||
recips = [
|
||||
'alice@example.com',
|
||||
'bob@example.com',
|
||||
"alice@example.com",
|
||||
"bob@example.com",
|
||||
]
|
||||
recips_str = ', '.join(recips)
|
||||
recips_str = ", ".join(recips)
|
||||
|
||||
# readonly
|
||||
result = widget.serialize(field, recips_str, readonly=True)
|
||||
self.assertIn('<ul>', result)
|
||||
self.assertIn('<li>alice@example.com</li>', result)
|
||||
self.assertIn("<ul>", result)
|
||||
self.assertIn("<li>alice@example.com</li>", result)
|
||||
|
||||
# editable
|
||||
result = widget.serialize(field, recips_str)
|
||||
self.assertIn('<b-input', result)
|
||||
self.assertIn("<b-input", result)
|
||||
self.assertIn('type="textarea"', result)
|
||||
|
||||
def test_deserialize(self):
|
||||
|
@ -373,10 +382,10 @@ class TestEmailRecipientsWidget(WebTestCase):
|
|||
widget = mod.EmailRecipientsWidget()
|
||||
|
||||
recips = [
|
||||
'alice@example.com',
|
||||
'bob@example.com',
|
||||
"alice@example.com",
|
||||
"bob@example.com",
|
||||
]
|
||||
recips_str = ', '.join(recips)
|
||||
recips_str = ", ".join(recips)
|
||||
|
||||
# values
|
||||
result = widget.deserialize(field, recips_str)
|
||||
|
@ -392,7 +401,7 @@ class TestBatchIdWidget(WebTestCase):
|
|||
def make_field(self, node, **kwargs):
|
||||
# TODO: not sure why default renderer is in use even though
|
||||
# pyramid_deform was included in setup? but this works..
|
||||
kwargs.setdefault('renderer', deform.Form.default_renderer)
|
||||
kwargs.setdefault("renderer", deform.Form.default_renderer)
|
||||
return deform.Field(node, **kwargs)
|
||||
|
||||
def test_serialize(self):
|
||||
|
@ -404,4 +413,4 @@ class TestBatchIdWidget(WebTestCase):
|
|||
self.assertIs(result, colander.null)
|
||||
|
||||
result = widget.serialize(field, 42)
|
||||
self.assertEqual(result, '00000042')
|
||||
self.assertEqual(result, "00000042")
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue