Data Types and User-defined Types

The following sections describe in more detail how user-defined data types are used in behave. The type converter functionality, that is described here, is only supported by the:

  • “parse” matcher (based on: parse module)
  • “cfparse” matcher (based on: parse-type module)

Contents:

Important

Part of the functionality, that is described here, is based on parse-type, an extension of the excellent parse module.

The parse module is the inverse of Python string.format function. The parse-type module extends it to simplify the generation of types (actually type converter functions for types).

parse features:

  • Optional pattern attribute (for regex) in user-defined type converters.
  • The with_pattern() decorator for type-converters.

parse-type features:

  • Simplifies the creation of type converters for some common cases

  • Creates type converter variants based on cardinality

  • parse_type extensions (TypeBuilder functionality).

  • Provides an extended parser with cardinality field support. A cardinality field is a type suffix in parse expression, like:

    Cardinality Example Description
    0..1 “{person:Person?}” Zero or one: For optional parts.
    0..* “{persons:Person*}” Zero or more: For list<T> (many0).
    1..* “{persons:Person+}” One or more: For list<T> (many).