Preparers

restless.preparers

class restless.preparers.FieldsPreparer(fields)

A more complex preparation object, this will return a given set of fields.

This takes a fields parameter, which should be a dictionary of keys (fieldnames to expose to the user) & values (a dotted lookup path to the desired attribute/key on the object).

Example:

preparer = FieldsPreparer(fields={
    # ``user`` is the key the client will see.
    # ``author.pk`` is the dotted path lookup ``FieldsPreparer``
    # will traverse on the data to return a value.
    'user': 'author.pk',
})
lookup_data(lookup, data)

Given a lookup string, attempts to descend through nested data looking for the value.

Can work with either dictionary-alikes or objects (or any combination of those).

Lookups should be a string. If it is a dotted path, it will be split on . & it will traverse through to find the final value. If not, it will simply attempt to find either a key or attribute of that name & return it.

Example:

>>> data = {
...     'type': 'message',
...     'greeting': {
...         'en': 'hello',
...         'fr': 'bonjour',
...         'es': 'hola',
...     },
...     'person': Person(
...         name='daniel'
...     )
... }
>>> lookup_data('type', data)
'message'
>>> lookup_data('greeting.en', data)
'hello'
>>> lookup_data('person.name', data)
'daniel'
prepare(data)

Handles transforming the provided data into the fielded data that should be exposed to the end user.

Uses the lookup_data method to traverse dotted paths.

Returns a dictionary of data as the response.

class restless.preparers.Preparer

A plain preparation object which just passes through data.

It also is relevant as the protocol subclasses should implement to work with Restless.

prepare(data)

Handles actually transforming the data.

By default, this does nothing & simply returns the data passed to it.