pydent.relationships.BaseRelationship

class pydent.relationships.BaseRelationship(nested, callback, ref, attr, callback_args=None, callback_kwargs=None, many=None, allow_none=True)[source]

Bases: pydent.marshaller.fields.Relationship

Base class for relationships.

By default, if the value is None, attempt a callback. If that fails, fallback to None. If successful, deserialize data to the nested model.

Relationship initializer.

Parameters
  • nested (SchemaModel) – the nested name of nested field. Should exist in the ModelRegistery.

  • callback (callable|basestring) – name of the callback function or a callable. If a name, the name should exist as a function in the owner instance. Invalid callback signatures are captures on class creation.

  • callback_args (tuple) – a tuple of arguments to use in the callback. If any of the callback arguments or values of the callback kwargs are callable, the owner will be passed to the callable. The owner instance will replace any arguments that are Callback.self

  • callback_kwargs (dict) – a dictionary of kwargs to use in the callback

  • cache (bool) – whether to cache the result using setattr on the owner instance. This will initialize the serialization and deserialization procedures detailed in the corresponding field/descriptor.

  • many (bool) – whether to treat serializaations and deserializations as a per-item basis in a list

  • data_key – the data_key, or attribute name, of this field. Calling this as an attribute to the registered nested should return this field’s descriptor.

__init__(nested, callback, ref, attr, callback_args=None, callback_kwargs=None, many=None, allow_none=True)[source]

Relationship initializer.

Parameters
  • nested (SchemaModel) – the nested name of nested field. Should exist in the ModelRegistery.

  • callback (callable|basestring) – name of the callback function or a callable. If a name, the name should exist as a function in the owner instance. Invalid callback signatures are captures on class creation.

  • callback_args (tuple) – a tuple of arguments to use in the callback. If any of the callback arguments or values of the callback kwargs are callable, the owner will be passed to the callable. The owner instance will replace any arguments that are Callback.self

  • callback_kwargs (dict) – a dictionary of kwargs to use in the callback

  • cache (bool) – whether to cache the result using setattr on the owner instance. This will initialize the serialization and deserialization procedures detailed in the corresponding field/descriptor.

  • many (bool) – whether to treat serializaations and deserializations as a per-item basis in a list

  • data_key – the data_key, or attribute name, of this field. Calling this as an attribute to the registered nested should return this field’s descriptor.

Methods

__init__(nested, callback, ref, attr[, …])

Relationship initializer.

build_query(models)

Bundles all of the callback args for the models into a single query.

cache_result(owner, val)

deserialize(owner, val)

fullfill(owner[, cache, extra_args, …])

Calls the callback function using the owner object.

get_callback_args(owner[, extra_args])

Processes the callback args.

get_callback_kwargs(owner, extra_kwargs)

Processes the callback kwargs.

register(name, objtype)

Registers the field to a nested class.

serialize(owner, obj)

set_data_key(key)

Attributes

QUERY_TYPE

SELF

ACCESSOR

alias of BaseRelationshipAccessor

_Callback__FLAGS

alias of pydent.marshaller.fields.Callback.__FLAGS

_get_ref_attr(nested=None, ref=None, attr=None)[source]

Sets the ‘ref’ and ‘attr’ attributes. These attributes are used to defined parameters for.

pydent.marshaller.Relation classes.

For example:

relation # HasOne, HasMany, or HasManyGeneric, etc.
relation.set_ref(ref="parent_id")
relation.ref    # "parent_id"
relation.attr   # "id"

relation.set_ref(model="SampleType")
relation.ref   # "sample_type_id"
relation.attr  # "id"

relation.set_ref(attr="name", model="OperationType")
relation.ref   # "operation_type_name
relation.attr  # "name"
build_query(models)[source]

Bundles all of the callback args for the models into a single query.

fullfill(owner, cache=None, extra_args=None, extra_kwargs=None)[source]

Calls the callback function using the owner object. A Callback.SELF arg value will be replaced to be equivalent to the owner instance model.

Parameters
  • owner – the owning object

  • cache – if True, will cache the return in the deserialized data. On next call, the cached result will be returned.

  • extra_args – extra args to pass to the callback function

  • extra_kwargs – extra kwargs to pass to the callback function

Returns

function result

Return type

any

get_callback_args(owner, extra_args=None)

Processes the callback args.

Return type

List[Any]

get_callback_kwargs(owner, extra_kwargs)

Processes the callback kwargs.

Return type

dict

register(name, objtype)

Registers the field to a nested class. Instantiates the corresponding descriptor (i.e. accessor)

Parameters
  • name (str) – name of the field

  • objtype (Type) – the nested class to register the field to

Returns

None

Return type

None