Metadata-Version: 2.0
Name: drf-sideloading
Version: 0.1.10
Summary: Extension for Django Rest Framework to enable simple sideloading
Home-page: https://github.com/namespace-ee/drf-sideloading
Author: Demur Nodia
Author-email: demur@namespace.ee
License: MIT
Keywords: drf-sideloading
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Framework :: Django
Classifier: Framework :: Django :: 1.8
Classifier: Framework :: Django :: 1.9
Classifier: Framework :: Django :: 1.10
Classifier: Framework :: Django :: 1.11
Classifier: Framework :: Django :: 2.0
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: BSD License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.4
Classifier: Programming Language :: Python :: 3.5
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Requires-Dist: Django (>=1.8)
Requires-Dist: djangorestframework (>=3.1.0)

=============================
drf-sideloading
=============================

.. image:: https://badge.fury.io/py/drf-sideloading.svg
    :target: https://badge.fury.io/py/drf-sideloading
    :alt: Package Index

.. image:: https://travis-ci.org/namespace-ee/django-rest-framework-sideloading.svg?branch=master
    :target: https://travis-ci.org/namespace-ee/django-rest-framework-sideloading
    :alt: Build Status

.. image:: https://codecov.io/gh/namespace-ee/django-rest-framework-sideloading/branch/master/graph/badge.svg
    :target: https://codecov.io/gh/namespace-ee/django-rest-framework-sideloading
    :alt: Code Coverage

.. image:: https://readthedocs.org/projects/drf-sideloading/badge/?version=latest
    :target: http://drf-sideloading.readthedocs.io/en/latest/?badge=latest
    :alt: Documentation Status

.. image:: https://img.shields.io/github/license/mashape/apistatus.svg?maxAge=2592000
    :alt: License is MIT
    :target: https://github.com/namespace-ee/drf-sideloading/blob/master/LICENSE

Extension for Django Rest Framework to enable simple sideloading

Documentation
-------------

The full documentation is at https://drf-sideloading.readthedocs.io.

Quickstart
----------

Install drf-sideloading::

    pip install drf-sideloading

Import Mixin `SideloadableRelationsMixin`:

.. code-block:: python

    from drf_sideloading.mixins import SideloadableRelationsMixin


Include mixin in view and define serializers dict ``sideloadable_relations`` as shown in examples

It is ``required`` to define and indicate a ``primary`` relationship in ``sideloadable_relations`` dict

Example of using mixin in ViewSet

.. code-block:: python

    class ProductViewSet(SideloadableRelationsMixin, viewsets.ModelViewSet):
        """
        A simple ViewSet for viewing and editing products.
        """
        queryset = Product.objects.all()
        serializer_class = ProductSerializer

        sideloadable_relations = {
            'products': {'primary': True, 'serializer': ProductSerializer},
            'categories': {'serializer': CategorySerializer, 'source': 'category', 'prefetch': 'category'},
            'suppliers': {'serializer': SupplierSerializer, 'source': 'supplier', 'prefetch': 'supplier'},
            'partners': {'serializer': PartnerSerializer, 'source': 'partners', 'prefetch': 'partners'}
        }


Request::

    GET /product/?sideload=categories,partners,suppliers

Response::

    {
        "categories": [
            {
                "id": 1,
                ...
            }
        ],
        "partners": [
            {
                "id": 1,
                ...
            },
            {
                "id": 2,
                ...
            },
            {
                "id": 3,
                ...
            }
        ],
        "products": [
            {
                "id": 1,
                "name": "Product 1",
                "category": 1,
                "supplier": 1,
                "partner": [
                    1,
                    2,
                    3
                ]
            }
        ],
        "suppliers": [
            {
                "id": 1,
                ...
            }
        ]
    }




Example Project
-----------------------

    directory `example` includes example project
    you can setup and run int locally using following commands

::

    cd example
    sh scripts/devsetup.sh
    sh scripts/dev.sh


Contributing
-------------

For detailed description see `CONTRIBUTING Notes <https://github.com/namespace-ee/django-rest-framework-sideloading/blob/master/CONTRIBUTING.rst>`_

Setup for contribution


::

    source <YOURVIRTUALENV>/bin/activate
    (myenv) $ pip install -r requirements_dev.txt


Test with specific env

::

    $ tox --listenvs
    py27-django18-drf34
    py27-django19-drf34
    # ...
    $ tox -e py27-django19-drf34


Test coverage

::

    $ make coverage



Use `pyenv <https://github.com/pyenv/pyenv>`_ for testing using different versions locally

# TODO

* fix documentation
* improve coverage



Credits
-------

Tools used in rendering this package:

*  Cookiecutter_
*  `cookiecutter-djangopackage`_

.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`cookiecutter-djangopackage`: https://github.com/pydanny/cookiecutter-djangopackage




History
-------


0.1.10 (2017-07-20)
++++++++++++++++++

* Support for django2.0


0.1.8 (2017-07-20)
++++++++++++++++++

* change sideloadable_relations dict
* always required to define 'serializer'
* key is referenced to url and serialized in as rendered json
* add `source` which specifies original model field name


0.1.0 (2017-07-20)
++++++++++++++++++

* First release on PyPI.


