Skip to main content

Dead simple library for object serialization

Project description

.. Voyeur documentation master file, created by
sphinx-quickstart on Mon Feb 24 13:55:51 2014.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.

Voyeur
======

.. image:: https://api.travis-ci.org/gilles/voyeur.png?branch=master
:target: https://api.travis-ci.org/gilles/voyeur


Voyeur is an simple library to serialize an object into another object.

The goal is to create a representation that is easily `json.dumps()` friendly.

I've made it while working with datastore such as Riak, MongoDB or CouchBase where the response is a dict and
I wanted to transform it into another dict for API output.

Quickstart
----------

It's as easy as this:

.. code-block:: python

from voyeur import view

definition = {
'id': int
}

data = {
'id': '1'
}

result = view(data, definition)
assert result = {'id' : 1}

The definition is a dictionary with key/callable pairs. Voyeur will use the key to get the value from the data then apply the callable.

Using objects
-------------

That works too:

.. code-block:: python

from voyeur import view

definition = {
'id': int
'prop': int
}

class Data(object):
id = 1

@property
def prop(self):
return "12"

result = view(Data(), definition)
assert result = {'id' : 1, 'prop' : 12}


Using runtime parameters
------------------------

A callable can take any kwargs and use them

.. code-block:: python

from voyeur import view

def mycallable(value, test=None):
return "foo:%s:%s" % (value, test)

definition = {
'id': int
'prop': mycallable
}

class Data(object):
id = 1

@property
def prop(self):
return "12"

result = view(Data(), definition, test='bar')
assert result = {'id' : 1, 'prop' : 'foo:12:bar'}

More complex types
------------------

Voyeur can take a class as a callable if it inherits from :py:class:`voyeur.types.Type`. This allows building more complex serializer.

A good example is the :py:class:`voyeur.types.Type` that reads the value from a different field.

.. code-block:: python

from voyeur import view
definition = {
'field': DeferredType('anotherfield', int),
}

data = {'anotherfield': '2'}
result = view(data, definition)
assert result == {'field':2}


Indices and tables
==================

.. toctree::
:maxdepth: 2

api

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

voyeur-0.1.1.tar.gz (3.6 kB view details)

Uploaded Source

File details

Details for the file voyeur-0.1.1.tar.gz.

File metadata

  • Download URL: voyeur-0.1.1.tar.gz
  • Upload date:
  • Size: 3.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for voyeur-0.1.1.tar.gz
Algorithm Hash digest
SHA256 6dacded1f9ba1beb942c542399af4079196cfe9f931d3d952e5f79f9cddf08d7
MD5 c90afbba6ec9138a8c21799266004393
BLAKE2b-256 0d38984bed084973d4055448760cb210926678d0f2b7d9473c72f17b4d259b32

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page