- Bug fix: if a `title
argument which is the empty string or
None
` is
passed explicitly to a SchemaNode, it is no longer replaced by a title computed from the name.
This commit is contained in:
@@ -7,6 +7,10 @@ Next release
|
|||||||
- New API: ``colander.required``. Used as the marker value when a
|
- New API: ``colander.required``. Used as the marker value when a
|
||||||
``missing`` argument is left unspecified.
|
``missing`` argument is left unspecified.
|
||||||
|
|
||||||
|
- Bug fix: if a ``title`` argument which is the empty string or ``None`` is
|
||||||
|
passed explicitly to a SchemaNode, it is no longer replaced by a title
|
||||||
|
computed from the name.
|
||||||
|
|
||||||
0.9.1 (2010-12-02)
|
0.9.1 (2010-12-02)
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
@@ -1256,7 +1256,11 @@ class SchemaNode(object):
|
|||||||
self.default = kw.pop('default', null)
|
self.default = kw.pop('default', null)
|
||||||
self.missing = kw.pop('missing', required)
|
self.missing = kw.pop('missing', required)
|
||||||
self.name = kw.pop('name', '')
|
self.name = kw.pop('name', '')
|
||||||
self.title = kw.pop('title', self.name.replace('_', ' ').title())
|
self.raw_title = kw.pop('title', _marker)
|
||||||
|
if self.raw_title is _marker:
|
||||||
|
self.title = self.name.replace('_', ' ').title()
|
||||||
|
else:
|
||||||
|
self.title = self.raw_title
|
||||||
self.description = kw.pop('description', '')
|
self.description = kw.pop('description', '')
|
||||||
self.widget = kw.pop('widget', None)
|
self.widget = kw.pop('widget', None)
|
||||||
self.after_bind = kw.pop('after_bind', None)
|
self.after_bind = kw.pop('after_bind', None)
|
||||||
@@ -1403,14 +1407,13 @@ class SchemaNode(object):
|
|||||||
self.name,
|
self.name,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
class _SchemaMeta(type):
|
class _SchemaMeta(type):
|
||||||
def __init__(cls, name, bases, clsattrs):
|
def __init__(cls, name, bases, clsattrs):
|
||||||
nodes = []
|
nodes = []
|
||||||
for name, value in clsattrs.items():
|
for name, value in clsattrs.items():
|
||||||
if isinstance(value, SchemaNode):
|
if isinstance(value, SchemaNode):
|
||||||
value.name = name
|
value.name = name
|
||||||
if not value.title:
|
if value.raw_title is _marker:
|
||||||
value.title = name.replace('_', ' ').title()
|
value.title = name.replace('_', ' ').title()
|
||||||
nodes.append((value._order, value))
|
nodes.append((value._order, value))
|
||||||
cls.__schema_nodes__ = nodes
|
cls.__schema_nodes__ = nodes
|
||||||
|
@@ -1608,6 +1608,19 @@ class TestSchema(unittest.TestCase):
|
|||||||
self.assertEqual(node.children[0].title, 'Thing A')
|
self.assertEqual(node.children[0].title, 'Thing A')
|
||||||
self.assertEqual(node.children[1].title, 'bar')
|
self.assertEqual(node.children[1].title, 'bar')
|
||||||
|
|
||||||
|
def test_title_munging(self):
|
||||||
|
import colander
|
||||||
|
class MySchema(colander.Schema):
|
||||||
|
thing1 = colander.SchemaNode(colander.String())
|
||||||
|
thing2 = colander.SchemaNode(colander.String(), title=None)
|
||||||
|
thing3 = colander.SchemaNode(colander.String(), title='')
|
||||||
|
thing4 = colander.SchemaNode(colander.String(), title='thing2')
|
||||||
|
node = MySchema()
|
||||||
|
self.assertEqual(node.children[0].title, 'Thing1')
|
||||||
|
self.assertEqual(node.children[1].title, None)
|
||||||
|
self.assertEqual(node.children[2].title, '')
|
||||||
|
self.assertEqual(node.children[3].title, 'thing2')
|
||||||
|
|
||||||
class TestSequenceSchema(unittest.TestCase):
|
class TestSequenceSchema(unittest.TestCase):
|
||||||
def test_succeed(self):
|
def test_succeed(self):
|
||||||
import colander
|
import colander
|
||||||
|
Reference in New Issue
Block a user