bfh.transformations

Transformations that can go on Mappings.

They are not used alone, but rather declared on a mapping. They may be combined in various ways:

class MyMapping(Mapping):
    id = Concat('source', ':', Str(Get('id')))
    name = Get('name')
    squared = Do(lambda x: x*x, Get('value'))

When you apply a mapping to an object, the transformations filter and munge that object into the form of the output schema.

  • You can Get the value from a field and pass it somewhere.
  • You can use All to pass the whole input object somewhere.
  • You can coerce a value into a type with Bool, Int, Num, or Str.
  • You can Concat some values together into one value.
  • You can use Many to group some values into a list.
  • You can pass a constant value with Const no matter what the input object
  • You can Do arbitrary functions on input.
  • You can nest mappings inside others with Submapping and ManySubmap
class bfh.transformations.All(strict=False)

Get the whole darn source object

Parameters:strict (bool) – If the object is a schema, drop any extra keys that don’t appear in the schema.
Returns:If strict == False and called on a Schema instance, a GenericSchema Otherwise just the object.
class bfh.transformations.Bool(*args, **kwargs)

Coerce input to a boolean

class bfh.transformations.Concat(*args, **kwargs)

Concat some strings into a single string.

Parameters:
  • *args – strings to concatenate
  • strict (bool, default False) – if not strict, ignore None
class bfh.transformations.Const(*args, **kwargs)

Return a constant value.

class bfh.transformations.Do(*args, **kwargs)

Do an arbitrary thing to something.

Example:

class MyMapping(Mapping):
    squared = Do(lambda x: x*x, Get('value'))

MyMapping().apply({'value': 2}).serialize()
# {'squared': 4}
Parameters:*args – the first positional arg to the constructor should be a callable. this callable is applied to the input generated by any transformations passed in the subsequent args
class bfh.transformations.Get(*args, **kwargs)

Gets a value from a dict or object

Example:

value = Get("my_thing")({"my_thing": "get this"})
# value == "get this"

Fetch values from complex objects by passing multiple arguments:

value = Get("a", "b")({"a": {"b": 1}})
# value == 1
Parameters:
  • *args – a series of names to follow into object and subobject.
  • required (bool, default False) – error if names missing
Returns:

fetched value or None if required

Raises:

Missing if required is false

class bfh.transformations.Int(*args, **kwargs)

Coerce input to an integer

class bfh.transformations.Many(subtrans, *args, **kwargs)

Construct an array from a series of values.

Parameters:subtrans (Transformation) – transformation to apply to all input items
Returns:results of applying subtransformation to each item in the input
class bfh.transformations.ManySubmap(submapping_class, *args)

Map an array of complex objects onto a subschema.

Returns:results of applying submapping to each item in the input
class bfh.transformations.Num(*args, **kwargs)

Coerce input to a floating point number

class bfh.transformations.Str(*args, **kwargs)

Coerce input to a unicode string

class bfh.transformations.Submapping(submapping_class, *args)

Map a complex subobject into a subschema.

Parameters:submapping_class (bfh.Mapping) – a mapping
Returns:result of applying submapping to the input