objectfactory

objectfactory is a python package to easily implement the factory design pattern for object creation, serialization, and polymorphism

objectfactory.base

base module

implements abstract base classes for objectfactory

class objectfactory.base.FieldABC(default=None, key=None, required=False, allow_none=True)

Bases: abc.ABC

abstract base class for serializable field

Parameters
  • default – default value for field if unset

  • key – dictionary key to use for field serialization

  • required – whether this field is required to deserialize an object

  • allow_none – whether null should be considered a valid value

abstract marshmallow()

create generic marshmallow field to do actual serialization

Returns

associated marshmallow field

class objectfactory.base.SerializableABC

Bases: abc.ABC

abstract base class for serializable object

abstract deserialize(body: dict)

deserialize model from dictionary

Parameters

body – serialized data to load into object

abstract serialize(include_type: bool = True, use_full_type: bool = True) → dict

serialize model to dictionary

Parameters
  • include_type – if true, type information will be included in body

  • use_full_type – if true, the fully qualified path with be specified in body

Returns

serialized object as dict

objectfactory.factory

factory module

implements serializable object factory

class objectfactory.factory.Factory(name)

Bases: object

factory class for registering and creating serializable objects

create(body: dict, object_type: Type[T] = <class 'objectfactory.serializable.Serializable'>) → T

create object from dictionary

Parameters
  • body – serialized object data

  • object_type – (optional) specified object type

Raises

TypeError – if the object is not an instance of the specified type

Returns

deserialized object of specified type

register(serializable: objectfactory.serializable.Serializable)

decorator to register class with factory

Parameters

serializable – serializable object class

Returns

registered class

objectfactory.factory.create(body: dict, object_type: Type[T] = <class 'objectfactory.serializable.Serializable'>) → T

create object from dictionary with the global factory

Parameters
  • body – serialized object data

  • object_type – (optional) specified object type

Raises

TypeError – if the object is not an instance of the specified type

Returns

deserialized object of specified type

objectfactory.factory.register(serializable: objectfactory.serializable.Serializable)

decorator to register class with the global factory

Parameters

serializable – serializable object class

Returns

registered class

objectfactory.field

field module

implements serializable fields

class objectfactory.field.Boolean(default=None, key=None, required=False, allow_none=True)

Bases: objectfactory.field.Field

serializable field for boolean data

Parameters
  • default – default value for field if unset

  • key – dictionary key to use for field serialization

  • required – whether this field is required to deserialize an object

  • allow_none – whether null should be considered a valid value

marshmallow()

create generic marshmallow field to do actual serialization

Returns

associated marshmallow field

class objectfactory.field.Field(default=None, key=None, required=False, allow_none=True)

Bases: objectfactory.base.FieldABC

base class for serializable field

this is a class level descriptor for abstracting access to fields of serializable objects

Parameters
  • default – default value for field if unset

  • key – dictionary key to use for field serialization

  • required – whether this field is required to deserialize an object

  • allow_none – whether null should be considered a valid value

marshmallow()

create generic marshmallow field to do actual serialization

Returns

associated marshmallow field

class objectfactory.field.Float(default=None, key=None, required=False, allow_none=True)

Bases: objectfactory.field.Field

serializable field for float data

Parameters
  • default – default value for field if unset

  • key – dictionary key to use for field serialization

  • required – whether this field is required to deserialize an object

  • allow_none – whether null should be considered a valid value

marshmallow()

create generic marshmallow field to do actual serialization

Returns

associated marshmallow field

class objectfactory.field.Integer(default=None, key=None, required=False, allow_none=True)

Bases: objectfactory.field.Field

serializable field for integer data

Parameters
  • default – default value for field if unset

  • key – dictionary key to use for field serialization

  • required – whether this field is required to deserialize an object

  • allow_none – whether null should be considered a valid value

marshmallow()

create generic marshmallow field to do actual serialization

Returns

associated marshmallow field

class objectfactory.field.List(default=None, key=None, field_type=None, required=False, allow_none=True)

Bases: objectfactory.field.Field

field type for list of serializable objects

Parameters
  • default – default value for field if unset

  • key – dictionary key to use for field serialization

  • field_type – specified type for list of nested objects

  • required – whether this field is required to deserialize an object

  • allow_none – whether null should be considered a valid value

marshmallow()

create generic marshmallow field to do actual serialization

Returns

associated marshmallow field

class objectfactory.field.Nested(default=None, key=None, field_type=None, required=False, allow_none=True)

Bases: objectfactory.field.Field

field type for nested serializable object

Parameters
  • default – default value for field if unset

  • key – dictionary key to use for field serialization

  • field_type – specified type for nested object

  • required – whether this field is required to deserialize an object

  • allow_none – whether null should be considered a valid value

marshmallow()

create generic marshmallow field to do actual serialization

Returns

associated marshmallow field

class objectfactory.field.String(default=None, key=None, required=False, allow_none=True)

Bases: objectfactory.field.Field

serializable field for string data

Parameters
  • default – default value for field if unset

  • key – dictionary key to use for field serialization

  • required – whether this field is required to deserialize an object

  • allow_none – whether null should be considered a valid value

marshmallow()

create generic marshmallow field to do actual serialization

Returns

associated marshmallow field

objectfactory.serializable

serializable module

implements base class and metaclass for serializable objects

class objectfactory.serializable.Meta(name, bases, attributes, schema=None)

Bases: abc.ABCMeta

metaclass for serializable classes

this is a metaclass to be used for collecting relevant field information when defining a new serializable class

define a new serializable object class, collect and register all field descriptors, construct marshmallow schema

Parameters
  • name – class name

  • bases – list of base classes to inherit from

  • attributes – dictionary of class attributes

  • schema – (optional) predefined marshmallow schema

Returns

newly defined class

class objectfactory.serializable.Serializable

Bases: objectfactory.base.SerializableABC

base class for serializable objects

deserialize(body: dict)

deserialize model from dictionary

Parameters

body – serialized data to load into object

classmethod from_dict(body: dict)

constructor to set data with dictionary

Parameters

body – dictionary

Returns

new instance of serializable object

classmethod from_kwargs(**kwargs)

constructor to set field data by keyword args

Parameters

kwargs – keyword arguments by field

Returns

new instance of serializable object

serialize(include_type: bool = True, use_full_type: bool = True) → dict

serialize model to dictionary

Parameters
  • include_type – if true, type information will be included in body

  • use_full_type – if true, the fully qualified path with be specified in body

Returns

serialized object as dict