diff --git a/CONTRIBUTORS.txt b/CONTRIBUTORS.txt index 7033902..fe72d82 100644 --- a/CONTRIBUTORS.txt +++ b/CONTRIBUTORS.txt @@ -117,3 +117,4 @@ Contributors - Michael Howitz, 2013/12/05 - Alex Marandon, 2013/12/21 - Cédric Messiant, 2014/06/27 +- Gouji Ochiai, 2014/08/21 diff --git a/colander/__init__.py b/colander/__init__.py index 6f4185b..82eb96b 100644 --- a/colander/__init__.py +++ b/colander/__init__.py @@ -1815,7 +1815,7 @@ class _SchemaNode(object): missing_msg = _('Required') name = '' raw_title = _marker - title = '' + title = _marker description = '' widget = None after_bind = None @@ -1842,8 +1842,9 @@ class _SchemaNode(object): # bw compat forces us to manufacture a title if one is not supplied title = kw.get('title', _marker) if title is _marker: - name = kw.get('name', self.name) - kw['title'] = name.replace('_', ' ').title() + if self.title is _marker: + name = kw.get('name', self.name) + kw['title'] = name.replace('_', ' ').title() else: kw['raw_title'] = title diff --git a/colander/tests/test_colander.py b/colander/tests/test_colander.py index 487eca1..4ff4939 100644 --- a/colander/tests/test_colander.py +++ b/colander/tests/test_colander.py @@ -2726,6 +2726,22 @@ class TestSchemaNodeSubclassing(unittest.TestCase): result = node.deserialize(colander.null) self.assertEqual(result, 10) + def test_subclass_uses_title(self): + import colander + class MyNode(colander.SchemaNode): + schema_type = colander.Int + title = 'some title' + node = MyNode(name='my') + self.assertEqual(node.title, 'some title') + + def test_subclass_title_overwritten_by_constructor(self): + import colander + class MyNode(colander.SchemaNode): + schema_type = colander.Int + title = 'some title' + node = MyNode(name='my', title='other title') + self.assertEqual(node.title, 'other title') + def test_subclass_value_overridden_by_constructor(self): import colander class MyNode(colander.SchemaNode):