pythonpyramiddeformcolander

Colander subclassing SchemaNode


I wonder if someone can help me. I'm explore deform and colander in a new project and was following the documentation about subclassing SchemaNode. However, whilst the documentation states that

subclass can define the following methods and attributes: preparer, validator, default, missing, name, title, description, widget, and after_bind.

when I define title, it doesn't seem to come through. Here is some example code that I'm using:

class LocationSchemaNode(colander.SchemaNode):
    schema_type = colander.Int
    title = 'Location'
    missing = None
    validator = colander.Range(
       min=1,
       min_err='Please select a valid location'
    )

class PersonSchema(colander.Schema):

    location_id = LocationSchemaNode()

However, when the form is rendered the label for the field is "Location Id" not "Location" as per the title defined in SchemaNode. If instead I write:

class PersonSchema(colander.Schema):

    location_id = LocationSchemaNode(title="Location")

Then all appears as I want, but the documentation seems to state I don't need to do this, and if I do it kind of defeats the point of pre-defining a SchemaNode if I have to keep defining fields.

Am I missing something, or is deform doing something that it shouldn't be (I doubt that is going to be the case). Any help is much appreciated.

Keith


Solution

  • This appears to be a bug that was fixed: https://github.com/Pylons/colander/pull/183

    Also, the patch seems to be in the latest available release of colander so an update to the latest version should fix this issue.

    Correction:

    The example given in that PR exactly matches this question, but the fix given didn't actually fix that exact issue! So, I filed another PR to fix that issue and used the example given in #183 as the test. You can manually patch your own copy if you can't wait for the fix to be introduced into the repo or the next release.