Basic Forms — flatland 0.8.1 documentation

# Basic Forms

class `Schema`(value=Unspecified, **kw)

  Bases: `flatland.schema.containers.Dict`

  A declarative collection of named elements.

  Schemas behave like `Dict`, but are defined with Python class syntax:

      >>> from flatland import Schema, String
      >>> class HelloSchema(Schema):
      ...     hello = String
      ...     world = String
      ...

  Elements are assigned names from the attribute declaration. If a named element schema is used, a renamed copy will be assigned to the Schema to match the declaration.

      >>> class HelloSchema(Schema):
      ...     hello = String.named('hello')    # redundant
      ...     world = String.named('goodbye')  # will be renamed 'world'
      ...
      >>> helloworld = HelloSchema()
      >>> sorted(helloworld.keys())
      [u'hello', u'world']

  Schemas may embed other container fields and other schemas:

      >>> from flatland import List
      >>> class BigSchema(Schema):
      ...     main_hello = HelloSchema
      ...     alt_hello = List.of(String.named('alt_name'),
      ...                         HelloSchema.named('alt_hello'))
      ...

  This would create a Schema with one `HelloSchema` embedded as `main_hello`, and a list of zero or more dicts, each containing an `alt_name` and another `HelloSchema` named `alt_hello`.

  Schemas may inherit from other Schemas or Dicts. Element attributes declared in a subclass will override those of a superclass. Multiple inheritance is supported.

  The special behavior of `Schema` is limited to class construction time only. After construction, the `Schema` acts exactly like a `Dict`. In particular, fields declared as class attributes as above do not remain class attributes. They are removed from the class dictionary and placed in the `field_schema`:

      >>> hasattr(HelloSchema, 'hello')
      False
      >>> sorted([field.name for field in HelloSchema.field_schema])
      [u'hello', u'world']

  The order of `field_schema` is undefined.

class `SparseSchema`(value=Unspecified, **kw)

  Bases: `flatland.schema.containers.SparseDict`

  A sparse variant of `Schema`.

  Exactly as `Schema`, but based upon ~flatland.schema.containers.SparseDict`.

class `Form`(value=Unspecified, **kw)

  Bases: `flatland.schema.containers.Dict`

  An alias for Schema, for older flatland version compatibility.