mixer


Namemixer JSON
Version 7.2.2 PyPI version JSON
download
home_pagehttps://github.com/klen/mixer
SummaryMixer -- Is a fixtures replacement. Supported Django ORM, SqlAlchemy ORM, Mongoengine ODM and custom python objects.
upload_time2022-03-23 14:39:33
maintainer
docs_urlhttps://pythonhosted.org/mixer/
authorKirill Klenov
requires_python>=3.7
licenseBSD
keywords django flask sqlalchemy testing mock stub mongoengine data
VCS
bugtrack_url
requirements Faker
Travis-CI
coveralls test coverage No coveralls.
            .. image:: https://raw.github.com/klen/mixer/develop/docs/_static/logo.png
    :width: 100px

The **Mixer** is a helper to generate instances of Django or SQLAlchemy models.
It's useful for testing and fixture replacement. Fast and convenient test-data
generation.

Mixer supports:

* Django_;
* SQLAlchemy_;
* Flask-SQLAlchemy_;
* Peewee_;
* Pony_;
* Mongoengine_;
* Marshmallow_;
* Custom schemes;

.. _badges:

.. image:: https://github.com/klen/mixer/workflows/tests/badge.svg?style=flat-square
    :target: https://github.com/klen/mixer/actions
    :alt: Tests Status

.. image:: http://img.shields.io/pypi/v/mixer.svg?style=flat-square
    :target: https://pypi.python.org/pypi/mixer
    :alt: Version

.. image:: http://img.shields.io/pypi/dm/mixer.svg?style=flat-square
    :target: https://pypi.python.org/pypi/mixer
    :alt: Downloads

.. image:: http://img.shields.io/pypi/l/mixer.svg?style=flat-square
    :target: https://pypi.python.org/pypi/mixer
    :alt: License

.. _documentation:


**Docs are available at https://mixer.readthedocs.org/. Pull requests with
documentation enhancements and/or fixes are awesome and most welcome.**

Описание на русском языке: http://klen.github.io/mixer.html

.. important::

   From version 6.2 the Mixer library doesn't support Python 2.
   The latest version with python<3 support is mixer 6.1.3


.. _contents:

.. contents::


Requirements
=============

- Python 3.7+
- Django (3.0, 3.1) for Django ORM support;
- Flask-SQLALchemy for SQLAlchemy ORM support and integration as Flask application;
- Faker >= 0.7.3
- Mongoengine for Mongoengine ODM support;
- SQLAlchemy for SQLAlchemy ORM support;
- Peewee ORM support;


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

**Mixer** should be installed using pip: ::

    pip install mixer


Usage
=====

 |   By default Mixer tries to generate fake (human-friendly) data.
 |   If you want to randomize the generated values initialize the Mixer
 |   by manual: Mixer(fake=False)


 |   By default Mixer saves the generated objects in a database. If you want to disable
 |   this, initialize the Mixer by manual like Mixer(commit=False)


Django workflow
---------------
Quick example:

.. code-block:: python

    from mixer.backend.django import mixer
    from customapp.models import User, UserMessage

    # Generate a random user
    user = mixer.blend(User)

    # Generate an UserMessage
    message = mixer.blend(UserMessage, user=user)

    # Generate an UserMessage and an User. Set username for generated user to 'testname'.
    message = mixer.blend(UserMessage, user__username='testname')

    # Generate SomeModel from SomeApp and select FK or M2M values from db
    some = mixer.blend('someapp.somemodel', somerelation=mixer.SELECT)

    # Generate SomeModel from SomeApp and force a value of money field from default to random
    some = mixer.blend('someapp.somemodel', money=mixer.RANDOM)
    
    # Generate SomeModel from SomeApp and skip the generation of money field
    some = mixer.blend('someapp.somemodel', money=mixer.SKIP)

    # Generate 5 SomeModel's instances and take company field's values from custom generator
    some_models = mixer.cycle(5).blend('somemodel', company=(name for name in company_names))


Flask, Flask-SQLAlchemy
-----------------------
Quick example:

.. code-block:: python

    from mixer.backend.flask import mixer
    from models import User, UserMessage

    mixer.init_app(self.app)

    # Generate a random user
    user = mixer.blend(User)

    # Generate an userMessage
    message = mixer.blend(UserMessage, user=user)

    # Generate an UserMessage and an User. Set username for generated user to 'testname'.
    message = mixer.blend(UserMessage, user__username='testname')

    # Generate SomeModel and select FK or M2M values from db
    some = mixer.blend('project.models.SomeModel', somerelation=mixer.SELECT)

    # Generate SomeModel from SomeApp and force a value of money field from default to random
    some = mixer.blend('project.models.SomeModel', money=mixer.RANDOM)
    
    # Generate SomeModel from SomeApp and skip the generation of money field
    some = mixer.blend('project.models.SomeModel', money=mixer.SKIP)

    # Generate 5 SomeModel's instances and take company field's values from custom generator
    some_models = mixer.cycle(5).blend('project.models.SomeModel', company=(company for company in companies))


Support for Flask-SQLAlchemy models that have `__init__` arguments
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

For support this scheme, just create your own mixer class, like this:

.. code-block:: python

    from mixer.backend.sqlalchemy import Mixer

    class MyOwnMixer(Mixer):

        def populate_target(self, values):
            target = self.__scheme(**values)
            return target

    mixer = MyOwnMixer()


SQLAlchemy workflow
-------------------

Example of initialization:

.. code-block:: python

    from mixer.backend.sqlalchemy import Mixer

    ENGINE = create_engine('sqlite:///:memory:')
    BASE = declarative_base()
    SESSION = sessionmaker(bind=ENGINE)

    mixer = Mixer(session=SESSION(), commit=True)
    role = mixer.blend('package.models.Role')


Also, see `Flask`_, `Flask-SQLAlchemy`_.


Mongoengine workflow
--------------------

Example usage:

.. code-block:: python

    from mixer.backend.mongoengine import mixer

    class User(Document):
        created_at = DateTimeField(default=datetime.datetime.now)
        email = EmailField(required=True)
        first_name = StringField(max_length=50)
        last_name = StringField(max_length=50)
        username = StringField(max_length=50)

    class Post(Document):
        title = StringField(max_length=120, required=True)
        author = ReferenceField(User)
        tags = ListField(StringField(max_length=30))

    post = mixer.blend(Post, author__username='foo')

Marshmallow workflow
--------------------

Example usage:

.. code-block:: python

    from mixer.backend.marshmallow import mixer
    import marshmallow as ma

    class User(ma.Schema):
        created_at = ma.fields.DateTime(required=True)
        email = ma.fields.Email(required=True)
        first_name = ma.fields.String(required=True)
        last_name = ma.fields.String(required=True)
        username = ma.fields.String(required=True)

    class Post(ma.Schema):
        title = ma.fields.String(required=True)
        author = ma.fields.Nested(User, required=True)

    post = mixer.blend(Post, author__username='foo')


Common usage
------------
Quick example:

.. code-block:: python

    from mixer.main import mixer

    class Test:
        one = int
        two = int
        name = str

    class Scheme:
        name = str
        money = int
        male = bool
        prop = Test

    scheme = mixer.blend(Scheme, prop__one=1)


DB commits
----------

By default 'django', 'flask', 'mongoengine' backends tries to save objects in
database. For preventing this behavior init `mixer` manually:

.. code-block:: python

    from mixer.backend.django import Mixer

    mixer = Mixer(commit=False)


Or you can temporary switch context use the mixer as context manager:

.. code-block:: python

    from mixer.backend.django import mixer

    # Will be save to db
    user1 = mixer.blend('auth.user')

    # Will not be save to db
    with mixer.ctx(commit=False):
        user2 = mixer.blend('auth.user')


.. _custom:

Custom fields
-------------

The mixer allows you to define generators for fields by manually.
Quick example:

.. code-block:: python

        from mixer.main import mixer

        class Test:
            id = int
            name = str

        mixer.register(Test,
            name=lambda: 'John',
            id=lambda: str(mixer.faker.small_positive_integer())
        )

        test = mixer.blend(Test)
        test.name == 'John'
        isinstance(test.id, str)

        # You could pinned just a value to field
        mixer.register(Test, name='Just John')
        test = mixer.blend(Test)
        test.name == 'Just John'

Also, you can make your own factory for field types:

.. code-block:: python

    from mixer.backend.django import Mixer, GenFactory

    def get_func(*args, **kwargs):
        return "Always same"

    class MyFactory(GenFactory):
        generators = {
            models.CharField: get_func
        }

    mixer = Mixer(factory=MyFactory)

Middlewares
-----------

You can add middleware layers to process generation:

.. code-block:: python

    from mixer.backend.django import mixer

    # Register middleware to model
    @mixer.middleware('auth.user')
    def encrypt_password(user):
        user.set_password('test')
        return user

You can add several middlewares. Each middleware should get one argument
(generated value) and return them.

It's also possible to unregister a middleware:

.. code-block:: python

    mixer.unregister_middleware(encrypt_password)


Locales
-------

By default mixer uses 'en' locale. You could switch mixer default locale by
creating your own mixer:

.. code-block:: python

    from mixer.backend.django import Mixer

    mixer = Mixer(locale='it')
    mixer.faker.name()          ## u'Acchisio Conte'

At any time you could switch mixer current locale:

.. code-block:: python

    mixer.faker.locale = 'cz'
    mixer.faker.name()          ## u'Miloslava Urbanov\xe1 CSc.'

    mixer.faker.locale = 'en'
    mixer.faker.name()          ## u'John Black'

    # Use the mixer context manager
    mixer.faker.phone()         ## u'1-438-238-1116'
    with mixer.ctx(locale='fr'):
        mixer.faker.phone()     ## u'08 64 92 11 79'

    mixer.faker.phone()         ## u'1-438-238-1116'

.. _bugtracker:

Bug tracker
===========

If you have any suggestions, bug reports or
annoyances please report them to the issue tracker
at https://github.com/klen/mixer/issues


Contributing
============

Development of mixer happens at Github: https://github.com/klen/mixer


Contributors
=============

* Antoine Bertin            (https://github.com/Diaoul)
* Benjamin Port             (https://github.com/bport)
* Dmitriy Moseev            (https://github.com/DmitriyMoseev)
* Eelke Hermens             (https://github.com/eelkeh)
* Esteban J. G. Gabancho    (https://github.com/egabancho)
* Felix Dreissig            (https://github.com/F30)
* Illia Volochii            (https://github.com/illia-v)
* Jannis                    (https://github.com/jnns)
* Kirill Pavlov             (https://github.com/pavlov99)
* Kwok-kuen Cheung          (https://github.com/cheungpat)
* Mahdi Yusuf               (https://github.com/myusuf3)
* Marek Baczyński           (https://github.com/imbaczek)
* Marigold                  (https://github.com/Marigold)
* Matt Caldwell             (https://github.com/mattcaldwell)
* Mikhail Porokhovnichenko  (https://github.com/marazmiki)
* Skylar Saveland           (https://github.com/skyl)
* Suriya Subramanian        (https://github.com/suriya)
* Gram                      (https://github.com/orsinium)
* Joshua                    (https://github.com/jomasti)
* Lucas Rangel Cezimbra     (https://github.com/lucasrcezimbra)
* avi-pomicell              (https://github.com/avi-pomicell)
* Jochen Brissier           (https://github.com/jbrissier)


License
========

Licensed under a `BSD license`_.


.. _links:

.. _Django: http://djangoproject.com/
.. _Flask: https://flask.palletsprojects.com/en/1.1.x/
.. _Flask-SQLAlchemy: http://flask-sqlalchemy.pocoo.org/
.. _SQLAlchemy: http://www.sqlalchemy.org/
.. _Marshmallow: http://marshmallow.readthedocs.io/en/latest/
.. _Mongoengine: http://mongoengine.org/
.. _Peewee: http://peewee.readthedocs.org/en/latest/
.. _Pony: http://ponyorm.com/
.. _klen: http://klen.github.io
.. _BSD license: http://www.linfo.org/bsdlicense.html



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/klen/mixer",
    "name": "mixer",
    "maintainer": "",
    "docs_url": "https://pythonhosted.org/mixer/",
    "requires_python": ">=3.7",
    "maintainer_email": "",
    "keywords": "django,flask,sqlalchemy,testing,mock,stub,mongoengine,data",
    "author": "Kirill Klenov",
    "author_email": "horneds@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/dd/7b/95e5ee5d6e5d9764b57bb0ec7aa823896740954c5a048568780943052770/mixer-7.2.2.tar.gz",
    "platform": null,
    "description": ".. image:: https://raw.github.com/klen/mixer/develop/docs/_static/logo.png\n    :width: 100px\n\nThe **Mixer** is a helper to generate instances of Django or SQLAlchemy models.\nIt's useful for testing and fixture replacement. Fast and convenient test-data\ngeneration.\n\nMixer supports:\n\n* Django_;\n* SQLAlchemy_;\n* Flask-SQLAlchemy_;\n* Peewee_;\n* Pony_;\n* Mongoengine_;\n* Marshmallow_;\n* Custom schemes;\n\n.. _badges:\n\n.. image:: https://github.com/klen/mixer/workflows/tests/badge.svg?style=flat-square\n    :target: https://github.com/klen/mixer/actions\n    :alt: Tests Status\n\n.. image:: http://img.shields.io/pypi/v/mixer.svg?style=flat-square\n    :target: https://pypi.python.org/pypi/mixer\n    :alt: Version\n\n.. image:: http://img.shields.io/pypi/dm/mixer.svg?style=flat-square\n    :target: https://pypi.python.org/pypi/mixer\n    :alt: Downloads\n\n.. image:: http://img.shields.io/pypi/l/mixer.svg?style=flat-square\n    :target: https://pypi.python.org/pypi/mixer\n    :alt: License\n\n.. _documentation:\n\n\n**Docs are available at https://mixer.readthedocs.org/. Pull requests with\ndocumentation enhancements and/or fixes are awesome and most welcome.**\n\n\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043d\u0430 \u0440\u0443\u0441\u0441\u043a\u043e\u043c \u044f\u0437\u044b\u043a\u0435: http://klen.github.io/mixer.html\n\n.. important::\n\n   From version 6.2 the Mixer library doesn't support Python 2.\n   The latest version with python<3 support is mixer 6.1.3\n\n\n.. _contents:\n\n.. contents::\n\n\nRequirements\n=============\n\n- Python 3.7+\n- Django (3.0, 3.1) for Django ORM support;\n- Flask-SQLALchemy for SQLAlchemy ORM support and integration as Flask application;\n- Faker >= 0.7.3\n- Mongoengine for Mongoengine ODM support;\n- SQLAlchemy for SQLAlchemy ORM support;\n- Peewee ORM support;\n\n\nInstallation\n=============\n\n**Mixer** should be installed using pip: ::\n\n    pip install mixer\n\n\nUsage\n=====\n\n |   By default Mixer tries to generate fake (human-friendly) data.\n |   If you want to randomize the generated values initialize the Mixer\n |   by manual: Mixer(fake=False)\n\n\n |   By default Mixer saves the generated objects in a database. If you want to disable\n |   this, initialize the Mixer by manual like Mixer(commit=False)\n\n\nDjango workflow\n---------------\nQuick example:\n\n.. code-block:: python\n\n    from mixer.backend.django import mixer\n    from customapp.models import User, UserMessage\n\n    # Generate a random user\n    user = mixer.blend(User)\n\n    # Generate an UserMessage\n    message = mixer.blend(UserMessage, user=user)\n\n    # Generate an UserMessage and an User. Set username for generated user to 'testname'.\n    message = mixer.blend(UserMessage, user__username='testname')\n\n    # Generate SomeModel from SomeApp and select FK or M2M values from db\n    some = mixer.blend('someapp.somemodel', somerelation=mixer.SELECT)\n\n    # Generate SomeModel from SomeApp and force a value of money field from default to random\n    some = mixer.blend('someapp.somemodel', money=mixer.RANDOM)\n    \n    # Generate SomeModel from SomeApp and skip the generation of money field\n    some = mixer.blend('someapp.somemodel', money=mixer.SKIP)\n\n    # Generate 5 SomeModel's instances and take company field's values from custom generator\n    some_models = mixer.cycle(5).blend('somemodel', company=(name for name in company_names))\n\n\nFlask, Flask-SQLAlchemy\n-----------------------\nQuick example:\n\n.. code-block:: python\n\n    from mixer.backend.flask import mixer\n    from models import User, UserMessage\n\n    mixer.init_app(self.app)\n\n    # Generate a random user\n    user = mixer.blend(User)\n\n    # Generate an userMessage\n    message = mixer.blend(UserMessage, user=user)\n\n    # Generate an UserMessage and an User. Set username for generated user to 'testname'.\n    message = mixer.blend(UserMessage, user__username='testname')\n\n    # Generate SomeModel and select FK or M2M values from db\n    some = mixer.blend('project.models.SomeModel', somerelation=mixer.SELECT)\n\n    # Generate SomeModel from SomeApp and force a value of money field from default to random\n    some = mixer.blend('project.models.SomeModel', money=mixer.RANDOM)\n    \n    # Generate SomeModel from SomeApp and skip the generation of money field\n    some = mixer.blend('project.models.SomeModel', money=mixer.SKIP)\n\n    # Generate 5 SomeModel's instances and take company field's values from custom generator\n    some_models = mixer.cycle(5).blend('project.models.SomeModel', company=(company for company in companies))\n\n\nSupport for Flask-SQLAlchemy models that have `__init__` arguments\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nFor support this scheme, just create your own mixer class, like this:\n\n.. code-block:: python\n\n    from mixer.backend.sqlalchemy import Mixer\n\n    class MyOwnMixer(Mixer):\n\n        def populate_target(self, values):\n            target = self.__scheme(**values)\n            return target\n\n    mixer = MyOwnMixer()\n\n\nSQLAlchemy workflow\n-------------------\n\nExample of initialization:\n\n.. code-block:: python\n\n    from mixer.backend.sqlalchemy import Mixer\n\n    ENGINE = create_engine('sqlite:///:memory:')\n    BASE = declarative_base()\n    SESSION = sessionmaker(bind=ENGINE)\n\n    mixer = Mixer(session=SESSION(), commit=True)\n    role = mixer.blend('package.models.Role')\n\n\nAlso, see `Flask`_, `Flask-SQLAlchemy`_.\n\n\nMongoengine workflow\n--------------------\n\nExample usage:\n\n.. code-block:: python\n\n    from mixer.backend.mongoengine import mixer\n\n    class User(Document):\n        created_at = DateTimeField(default=datetime.datetime.now)\n        email = EmailField(required=True)\n        first_name = StringField(max_length=50)\n        last_name = StringField(max_length=50)\n        username = StringField(max_length=50)\n\n    class Post(Document):\n        title = StringField(max_length=120, required=True)\n        author = ReferenceField(User)\n        tags = ListField(StringField(max_length=30))\n\n    post = mixer.blend(Post, author__username='foo')\n\nMarshmallow workflow\n--------------------\n\nExample usage:\n\n.. code-block:: python\n\n    from mixer.backend.marshmallow import mixer\n    import marshmallow as ma\n\n    class User(ma.Schema):\n        created_at = ma.fields.DateTime(required=True)\n        email = ma.fields.Email(required=True)\n        first_name = ma.fields.String(required=True)\n        last_name = ma.fields.String(required=True)\n        username = ma.fields.String(required=True)\n\n    class Post(ma.Schema):\n        title = ma.fields.String(required=True)\n        author = ma.fields.Nested(User, required=True)\n\n    post = mixer.blend(Post, author__username='foo')\n\n\nCommon usage\n------------\nQuick example:\n\n.. code-block:: python\n\n    from mixer.main import mixer\n\n    class Test:\n        one = int\n        two = int\n        name = str\n\n    class Scheme:\n        name = str\n        money = int\n        male = bool\n        prop = Test\n\n    scheme = mixer.blend(Scheme, prop__one=1)\n\n\nDB commits\n----------\n\nBy default 'django', 'flask', 'mongoengine' backends tries to save objects in\ndatabase. For preventing this behavior init `mixer` manually:\n\n.. code-block:: python\n\n    from mixer.backend.django import Mixer\n\n    mixer = Mixer(commit=False)\n\n\nOr you can temporary switch context use the mixer as context manager:\n\n.. code-block:: python\n\n    from mixer.backend.django import mixer\n\n    # Will be save to db\n    user1 = mixer.blend('auth.user')\n\n    # Will not be save to db\n    with mixer.ctx(commit=False):\n        user2 = mixer.blend('auth.user')\n\n\n.. _custom:\n\nCustom fields\n-------------\n\nThe mixer allows you to define generators for fields by manually.\nQuick example:\n\n.. code-block:: python\n\n        from mixer.main import mixer\n\n        class Test:\n            id = int\n            name = str\n\n        mixer.register(Test,\n            name=lambda: 'John',\n            id=lambda: str(mixer.faker.small_positive_integer())\n        )\n\n        test = mixer.blend(Test)\n        test.name == 'John'\n        isinstance(test.id, str)\n\n        # You could pinned just a value to field\n        mixer.register(Test, name='Just John')\n        test = mixer.blend(Test)\n        test.name == 'Just John'\n\nAlso, you can make your own factory for field types:\n\n.. code-block:: python\n\n    from mixer.backend.django import Mixer, GenFactory\n\n    def get_func(*args, **kwargs):\n        return \"Always same\"\n\n    class MyFactory(GenFactory):\n        generators = {\n            models.CharField: get_func\n        }\n\n    mixer = Mixer(factory=MyFactory)\n\nMiddlewares\n-----------\n\nYou can add middleware layers to process generation:\n\n.. code-block:: python\n\n    from mixer.backend.django import mixer\n\n    # Register middleware to model\n    @mixer.middleware('auth.user')\n    def encrypt_password(user):\n        user.set_password('test')\n        return user\n\nYou can add several middlewares. Each middleware should get one argument\n(generated value) and return them.\n\nIt's also possible to unregister a middleware:\n\n.. code-block:: python\n\n    mixer.unregister_middleware(encrypt_password)\n\n\nLocales\n-------\n\nBy default mixer uses 'en' locale. You could switch mixer default locale by\ncreating your own mixer:\n\n.. code-block:: python\n\n    from mixer.backend.django import Mixer\n\n    mixer = Mixer(locale='it')\n    mixer.faker.name()          ## u'Acchisio Conte'\n\nAt any time you could switch mixer current locale:\n\n.. code-block:: python\n\n    mixer.faker.locale = 'cz'\n    mixer.faker.name()          ## u'Miloslava Urbanov\\xe1 CSc.'\n\n    mixer.faker.locale = 'en'\n    mixer.faker.name()          ## u'John Black'\n\n    # Use the mixer context manager\n    mixer.faker.phone()         ## u'1-438-238-1116'\n    with mixer.ctx(locale='fr'):\n        mixer.faker.phone()     ## u'08 64 92 11 79'\n\n    mixer.faker.phone()         ## u'1-438-238-1116'\n\n.. _bugtracker:\n\nBug tracker\n===========\n\nIf you have any suggestions, bug reports or\nannoyances please report them to the issue tracker\nat https://github.com/klen/mixer/issues\n\n\nContributing\n============\n\nDevelopment of mixer happens at Github: https://github.com/klen/mixer\n\n\nContributors\n=============\n\n* Antoine Bertin            (https://github.com/Diaoul)\n* Benjamin Port             (https://github.com/bport)\n* Dmitriy Moseev            (https://github.com/DmitriyMoseev)\n* Eelke Hermens             (https://github.com/eelkeh)\n* Esteban J. G. Gabancho    (https://github.com/egabancho)\n* Felix Dreissig            (https://github.com/F30)\n* Illia Volochii            (https://github.com/illia-v)\n* Jannis                    (https://github.com/jnns)\n* Kirill Pavlov             (https://github.com/pavlov99)\n* Kwok-kuen Cheung          (https://github.com/cheungpat)\n* Mahdi Yusuf               (https://github.com/myusuf3)\n* Marek Baczy\u0144ski           (https://github.com/imbaczek)\n* Marigold                  (https://github.com/Marigold)\n* Matt Caldwell             (https://github.com/mattcaldwell)\n* Mikhail Porokhovnichenko  (https://github.com/marazmiki)\n* Skylar Saveland           (https://github.com/skyl)\n* Suriya Subramanian        (https://github.com/suriya)\n* Gram                      (https://github.com/orsinium)\n* Joshua                    (https://github.com/jomasti)\n* Lucas Rangel Cezimbra     (https://github.com/lucasrcezimbra)\n* avi-pomicell              (https://github.com/avi-pomicell)\n* Jochen Brissier           (https://github.com/jbrissier)\n\n\nLicense\n========\n\nLicensed under a `BSD license`_.\n\n\n.. _links:\n\n.. _Django: http://djangoproject.com/\n.. _Flask: https://flask.palletsprojects.com/en/1.1.x/\n.. _Flask-SQLAlchemy: http://flask-sqlalchemy.pocoo.org/\n.. _SQLAlchemy: http://www.sqlalchemy.org/\n.. _Marshmallow: http://marshmallow.readthedocs.io/en/latest/\n.. _Mongoengine: http://mongoengine.org/\n.. _Peewee: http://peewee.readthedocs.org/en/latest/\n.. _Pony: http://ponyorm.com/\n.. _klen: http://klen.github.io\n.. _BSD license: http://www.linfo.org/bsdlicense.html\n\n\n",
    "bugtrack_url": null,
    "license": "BSD",
    "summary": "Mixer -- Is a fixtures replacement. Supported Django ORM, SqlAlchemy ORM, Mongoengine ODM and custom python objects.",
    "version": "7.2.2",
    "split_keywords": [
        "django",
        "flask",
        "sqlalchemy",
        "testing",
        "mock",
        "stub",
        "mongoengine",
        "data"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "md5": "c0c7a96df50eab9b511c4406ee88c984",
                "sha256": "8089b8e2d00288c77e622936198f5dd03c8ac1603a1530a4f870dc213363b2ae"
            },
            "downloads": -1,
            "filename": "mixer-7.2.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "c0c7a96df50eab9b511c4406ee88c984",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.7",
            "size": 38481,
            "upload_time": "2022-03-23T14:39:31",
            "upload_time_iso_8601": "2022-03-23T14:39:31.520883Z",
            "url": "https://files.pythonhosted.org/packages/81/73/60ab9b2a61a98f84f71f567a835dc877a9608fcff617e047ff96687c3796/mixer-7.2.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "md5": "0960f5164e58914667a7bde3b98aeaa3",
                "sha256": "9b3f1a261b56d8f2394f39955f83adbc7ff3ab4bb1065ebfec19a10d3e8501e0"
            },
            "downloads": -1,
            "filename": "mixer-7.2.2.tar.gz",
            "has_sig": false,
            "md5_digest": "0960f5164e58914667a7bde3b98aeaa3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 49639,
            "upload_time": "2022-03-23T14:39:33",
            "upload_time_iso_8601": "2022-03-23T14:39:33.528215Z",
            "url": "https://files.pythonhosted.org/packages/dd/7b/95e5ee5d6e5d9764b57bb0ec7aa823896740954c5a048568780943052770/mixer-7.2.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2022-03-23 14:39:33",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "klen",
    "github_project": "mixer",
    "travis_ci": true,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "Faker",
            "specs": [
                [
                    "<",
                    "12.1"
                ],
                [
                    ">=",
                    "5.4.0"
                ]
            ]
        }
    ],
    "lcname": "mixer"
}
        
Elapsed time: 0.03181s