===================================
Django Children Models Dependencies
===================================

Purpose
=======

This is a small app that allow to get the children of a base model, in an dependency order from
the model with the less dependencies, to the model with the more dependencies, each model coming
after its own dependencies

For example, for theses models:

.. code-block:: python

    class BaseModel(models.Model):
        class Meta:
            abstract = True

    class ChildModel1(BaseModel):
        pass

    class ChildModel2(BaseModel):
        link = models.ForeignKey('myapp.ChildModel3', on_delete=models.CASCADE)


    class ChildModel3(BaseModel):
        pass


The order will be:

.. code-block:: python

        from django_children_models_dependencies.manager import ChildrenDependenciesManager

        self.assertListEqual(ChildrenDependenciesManager.get_children_dependencies(BaseModel), [
            ChildModel1,  # first model without dependencies
            ChildModel3,  # dependency of ChildModel2, so it comes before
            ChildModel2,  # last one, which must come after its own dependencies
        ])


Installation
============

The ``django-children-models-dependencies`` package is only available on the Magency private pypi
server.

.. code-block:: sh

    pip install -i https://login:password@pypi.magency.ninja/some/index django-children-models-dependencies


Developement
============

The code can be found on the `Magency mtp-back-modules repository
<https://gitlab.com/magency/products/mtp-back-modules/-/tree/master/django-children-models-dependencies>`_

Install the required packages:

.. code-block:: sh

    pip install -i https://login:password@pypi.magency.ninja/some/index -e .[dev]

To run tests, simply launch the ``runtests.sh`` script.

And for pylint:

.. code-block:: sh

    PYTHONPATH="$PYTHONPATH:." pylint django_children_models_dependencies tests


When ready, update the version in ``setup.cfg`` then create
the package:

.. code-block:: sh

    ./setup.py sdist bdist_wheel

You can now upload it to ``devpi``:

.. code-block:: sh

    devpi use https://login:password@pypi.magency.ninja
    devpi login yourlogin
    devpi use yourlogin/dev
    devpi upload dist/django_children_models_dependencies-*VERSION*


Support
=======

python>=3.6
django>=2.2
