django-fakery


Namedjango-fakery JSON
Version 4.1.2 PyPI version JSON
download
home_pagehttps://github.com/fcurella/django-fakery/
SummaryA model instances generator for Django
upload_time2024-06-17 22:28:23
maintainerNone
docs_urlNone
authorFlavio Curella
requires_python>=3.8
licenseMIT
keywords
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage
            Django-fakery
=============

.. image:: https://badge.fury.io/py/django-fakery.svg
    :target: https://badge.fury.io/py/django-fakery

.. image:: https://travis-ci.org/fcurella/django-fakery.svg?branch=master
    :target: https://travis-ci.org/fcurella/django-fakery


.. image:: https://coveralls.io/repos/fcurella/django-fakery/badge.svg?branch=master&service=github
  :target: https://coveralls.io/github/fcurella/django-fakery?branch=master

An easy-to-use implementation of `Creation Methods`_ (aka Object Factory) for Django, backed by ``Faker``.

.. _Creation Methods: http://xunitpatterns.com/Creation%20Method.html

``django_fakery`` will try to guess the field's value based on the field's name and type.

Installation
------------

Install with::

    $ pip install django-fakery

QuickStart
----------

.. code-block:: python

    from django_fakery import factory
    from myapp.models import MyModel

    factory.m(MyModel)(field='value')

If you're having issues with circular imports, you can also reference a model by using the ``M`` utility function:

.. code-block:: python

    from django_fakery import factory, M

    factory.m(M("myapp.MyModel"))(field="value")


If you really don't want to import things, you could also just reference a model by using the ``<app_label>.<ModelName>`` syntax. This is not encouraged, as it will likely break type-hinting:

.. code-block:: python

    from django_fakery import factory

    factory.m("myapp.MyModel")(field="value")


If you use ``pytest``, you can use the ``fakery`` and ``fakery_shortcuts` fixtures
(requires ``pytest`` and ``pytest-django``):

.. code-block:: python

    import pytest
    from myapp.models import MyModel

    @pytest.mark.django_db
    def test_mymodel(fakery, fakery_shortcuts):
        fakery.m(MyModel)(field=fakery_shortcuts.future_datetime())



If you'd rather, you can use a more wordy API:

.. code-block:: python

    from django_fakery import factory
    from myapp.models import MyModel

    factory.make(
        MyModel,
        fields={
            'field': 'value',
        }
    )

We will use the short API thorough the documentation.

The value of a field can be any python object, a callable, or a lambda:

.. code-block:: python

    from django.utils import timezone
    from django_fakery import factory
    from myapp.models import MyModel

    factory.m(MyModel)(created=timezone.now)

When using a lambda, it will receive two arguments: ``n`` is the iteration number, and ``f`` is an instance of ``faker``:

.. code-block:: python

    from django.contrib.auth.models import User

    user = factory.m(User)(
        username=lambda n, f: 'user_{}'.format(n),
    )

``django-fakery`` includes some pre-built lambdas for common needs. See shortcuts_  for more info.

You can create multiple objects by using the ``quantity`` parameter:

.. code-block:: python

    from django_fakery import factory
    from django.contrib.auth.models import User

    factory.m(User, quantity=4)

For convenience, when the value of a field is a string, it will be interpolated with the iteration number:

.. code-block:: python

    from myapp.models import MyModel

    user = factory.m(User, quantity=4)(
        username='user_{}',        
    )

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

You can add support for custom fields by adding your
custom field class and a function in ``factory.field_types``:

.. code-block:: python

  from django_fakery import factory

  from my_fields import CustomField

  def func(faker, field, count, *args, **kwargs):
      return 43


  factory.field_types.add(
      CustomField, (func, [], {})
  )


As a shortcut, you can specified any Faker function by its name:

.. code-block:: python

  from django_fakery import factory

  from my_fields import CustomField


  factory.field_types.add(
      CustomField, ("random_int", [], {"min": 0, "max": 60})
  )

Foreign keys
------------

Non-nullable ``ForeignKey`` s create related objects automatically.

If you want to explicitly create a related object, you can pass a factory like any other value:

.. code-block:: python

    from django.contrib.auth.models import User
    from food.models import Pizza

    pizza = factory.m(Pizza)(
        chef=factory.m(User)(username='Gusteau'),
    )

If you'd rather not create related objects and reuse the same value for a foreign key, you can use the special value ``django_fakery.rels.SELECT``:

.. code-block:: python

    from django_fakery import factory, rels
    from food.models import Pizza

    pizza = factory.m(Pizza, quantity=5)(
        chef=rels.SELECT,
    )

``django-fakery`` will always use the first instance of the related model, creating one if necessary.

ManyToManies
------------

Because ``ManyToManyField`` s are implicitly nullable (ie: they're always allowed to have their ``.count()`` equal to ``0``), related objects on those fields are not automatically created for you.

If you want to explicitly create a related objects, you can pass a list as the field's value:

.. code-block:: python

    from food.models import Pizza, Topping

    pizza = factory.m(Pizza)(
        toppings=[
            factory.m(Topping)(name='Anchovies')
        ],
    )

You can also pass a factory, to create multiple objects:

.. code-block:: python

    from food.models import Pizza, Topping

    pizza = factory.m(Pizza)(
        toppings=factory.m(Topping, quantity=5),
    )

.. _shortcuts:

Shortcuts
---------

``django-fakery`` includes some shortcut functions to generate commonly needed values.


``future_datetime(end='+30d')``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Returns a ``datetime`` object in the future (that is, 1 second from now) up to the specified ``end``. ``end`` can be a string, anotther datetime, or a timedelta. If it's a string, it must start with `+`, followed by and integer and a unit, Eg: ``'+30d'``. Defaults to ``'+30d'``

Valid units are:

* ``'years'``, ``'y'``
* ``'weeks'``, ``'w'``
* ``'days'``, ``'d'``
* ``'hours'``, ``'hours'``
* ``'minutes'``, ``'m'``
* ``'seconds'``, ``'s'``

Example:

.. code-block:: python

    from django_fakery import factory, shortcuts
    from myapp.models import MyModel

    factory.m(MyModel)(field=shortcuts.future_datetime('+1w'))


``future_date(end='+30d')``
~~~~~~~~~~~~~~~~~~~~~~~~~~~

Returns a ``date`` object in the future (that is, 1 day from now) up to the specified ``end``. ``end`` can be a string, another date, or a timedelta. If it's a string, it must start with `+`, followed by and integer and a unit, Eg: ``'+30d'``. Defaults to ``'+30d'``

``past_datetime(start='-30d')``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Returns a ``datetime`` object in the past between 1 second ago and the specified ``start``. ``start`` can be a string, another datetime, or a timedelta. If it's a string, it must start with `-`, followed by and integer and a unit, Eg: ``'-30d'``. Defaults to ``'-30d'``

``past_date(start='-30d')``
~~~~~~~~~~~~~~~~~~~~~~~~~~~

Returns a ``date`` object in the past between 1 day ago and the specified ``start``. ``start`` can be a string, another date, or a timedelta. If it's a string, it must start with `-`, followed by and integer and a unit, Eg: ``'-30d'``. Defaults to ``'-30d'``


Lazies
------

You can refer to the created instance's own attributes or method by using `Lazy` objects.

For example, if you'd like to create user with email as username, and have them always match, you could do:

.. code-block:: python

    from django_fakery import factory, Lazy
    from django.contrib.auth.models import User

    factory.m(auth.User)(
        username=Lazy('email'),
    )


If you want to assign a value returned by a method on the instance, you can pass the method's arguments to the ``Lazy`` object:

.. code-block:: python

    from django_fakery import factory, Lazy
    from myapp.models import MyModel

    factory.m(MyModel)(
        myfield=Lazy('model_method', 'argument', keyword='keyword value'),
    )

Pre-save and Post-save hooks
----------------------------

You can define functions to be called right before the instance is saved or right after:

.. code-block:: python

    from django.contrib.auth.models import User
    from django_fakery import factory

    factory.m(
        User,
        pre_save=[
            lambda u: u.set_password('password')
        ],
    )(username='username')

Since settings a user's password is such a common case, we special-cased that scenario, so you can just pass it as a field:

.. code-block:: python

    from django.contrib.auth.models import User
    from django_fakery import factory

    factory.m(User)(
        username='username',
        password='password',
    )

Get or Make
-----------

You can check for existance of a model instance and create it if necessary by using the ``g_m`` (short for ``get_or_make``) method:

.. code-block:: python

    from myapp.models import MyModel

    myinstance, created = factory.g_m(
        MyModel,
        lookup={
            'myfield': 'myvalue',
        }
    )(myotherfield='somevalue')

If you're looking for a more explicit API, you can use the ``.get_or_make()`` method:

.. code-block:: python

    from myapp.models import MyModel

    myinstance, created = factory.get_or_make(
        MyModel,
        lookup={
            'myfield': 'myvalue',
        },
        fields={
            'myotherfield': 'somevalue',
        },
    )

Get or Update
-------------

You can check for existence of a model instance and update it by using the ``g_u`` (short for ``get_or_update``) method:

.. code-block:: python

    from myapp.models import MyModel

    myinstance, created = factory.g_u(
        MyModel,
        lookup={
            'myfield': 'myvalue',
        }
    )(myotherfield='somevalue')

If you're looking for a more explicit API, you can use the ``.get_or_update()`` method:

.. code-block:: python

    from myapp.models import MyModel

    myinstance, created = factory.get_or_update(
        MyModel,
        lookup={
            'myfield': 'myvalue',
        },
        fields={
            'myotherfield': 'somevalue',
        },
    )

Non-persistent instances
------------------------

You can build instances that are not saved to the database by using the ``.b()`` method, just like you'd use ``.m()``:

.. code-block:: python

    from django_fakery import factory
    from myapp.models import MyModel

    factory.b(MyModel)(
        field='value',
    )

Note that since the instance is not saved to the database, ``.build()`` does not support ManyToManies or post-save hooks.

If you're looking for a more explicit API, you can use the ``.build()`` method:

.. code-block:: python

    from django_fakery import factory
    from myapp.models import MyModel

    factory.build(
        MyModel,
        fields={
            'field': 'value',
        }
    )


Blueprints
----------

Use a blueprint:

.. code-block:: python

    from django.contrib.auth.models import User
    from django_fakery import factory

    user = factory.blueprint(User)

    user.make(quantity=10)

Blueprints can refer other blueprints:

.. code-block:: python

    from food.models import Pizza

    pizza = factory.blueprint(Pizza).fields(
            chef=user,
        )
    )

You can also override the field values you previously specified:

.. code-block:: python

    from food.models import Pizza

    pizza = factory.blueprint(Pizza).fields(
            chef=user,
            thickness=1
        )
    )

    pizza.m(quantity=10)(thickness=2)

Or, if you'd rather use the explicit api:

.. code-block:: python

    from food.models import Pizza

    pizza = factory.blueprint(Pizza).fields(
            chef=user,
            thickness=1
        )
    )

    thicker_pizza = pizza.fields(thickness=2)
    thicker_pizza.make(quantity=10)


Seeding the faker
-----------------

.. code-block:: python

    from django.contrib.auth.models import User
    from django_fakery import factory

    factory.m(User, seed=1234, quantity=4)(
        username='regularuser_{}'
    )

Credits
-------

The API is heavily inspired by `model_mommy`_.

.. _model_mommy: https://github.com/vandersonmota/model_mommy

License
-------

This software is released under the MIT License.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/fcurella/django-fakery/",
    "name": "django-fakery",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": null,
    "author": "Flavio Curella",
    "author_email": "flavio.curella@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/fc/2c/aad10072a4574015aba247404573c7d90b1d7ae8b8676325275b6fcdb92b/django_fakery-4.1.2.tar.gz",
    "platform": "any",
    "description": "Django-fakery\n=============\n\n.. image:: https://badge.fury.io/py/django-fakery.svg\n    :target: https://badge.fury.io/py/django-fakery\n\n.. image:: https://travis-ci.org/fcurella/django-fakery.svg?branch=master\n    :target: https://travis-ci.org/fcurella/django-fakery\n\n\n.. image:: https://coveralls.io/repos/fcurella/django-fakery/badge.svg?branch=master&service=github\n  :target: https://coveralls.io/github/fcurella/django-fakery?branch=master\n\nAn easy-to-use implementation of `Creation Methods`_ (aka Object Factory) for Django, backed by ``Faker``.\n\n.. _Creation Methods: http://xunitpatterns.com/Creation%20Method.html\n\n``django_fakery`` will try to guess the field's value based on the field's name and type.\n\nInstallation\n------------\n\nInstall with::\n\n    $ pip install django-fakery\n\nQuickStart\n----------\n\n.. code-block:: python\n\n    from django_fakery import factory\n    from myapp.models import MyModel\n\n    factory.m(MyModel)(field='value')\n\nIf you're having issues with circular imports, you can also reference a model by using the ``M`` utility function:\n\n.. code-block:: python\n\n    from django_fakery import factory, M\n\n    factory.m(M(\"myapp.MyModel\"))(field=\"value\")\n\n\nIf you really don't want to import things, you could also just reference a model by using the ``<app_label>.<ModelName>`` syntax. This is not encouraged, as it will likely break type-hinting:\n\n.. code-block:: python\n\n    from django_fakery import factory\n\n    factory.m(\"myapp.MyModel\")(field=\"value\")\n\n\nIf you use ``pytest``, you can use the ``fakery`` and ``fakery_shortcuts` fixtures\n(requires ``pytest`` and ``pytest-django``):\n\n.. code-block:: python\n\n    import pytest\n    from myapp.models import MyModel\n\n    @pytest.mark.django_db\n    def test_mymodel(fakery, fakery_shortcuts):\n        fakery.m(MyModel)(field=fakery_shortcuts.future_datetime())\n\n\n\nIf you'd rather, you can use a more wordy API:\n\n.. code-block:: python\n\n    from django_fakery import factory\n    from myapp.models import MyModel\n\n    factory.make(\n        MyModel,\n        fields={\n            'field': 'value',\n        }\n    )\n\nWe will use the short API thorough the documentation.\n\nThe value of a field can be any python object, a callable, or a lambda:\n\n.. code-block:: python\n\n    from django.utils import timezone\n    from django_fakery import factory\n    from myapp.models import MyModel\n\n    factory.m(MyModel)(created=timezone.now)\n\nWhen using a lambda, it will receive two arguments: ``n`` is the iteration number, and ``f`` is an instance of ``faker``:\n\n.. code-block:: python\n\n    from django.contrib.auth.models import User\n\n    user = factory.m(User)(\n        username=lambda n, f: 'user_{}'.format(n),\n    )\n\n``django-fakery`` includes some pre-built lambdas for common needs. See shortcuts_  for more info.\n\nYou can create multiple objects by using the ``quantity`` parameter:\n\n.. code-block:: python\n\n    from django_fakery import factory\n    from django.contrib.auth.models import User\n\n    factory.m(User, quantity=4)\n\nFor convenience, when the value of a field is a string, it will be interpolated with the iteration number:\n\n.. code-block:: python\n\n    from myapp.models import MyModel\n\n    user = factory.m(User, quantity=4)(\n        username='user_{}',        \n    )\n\nCustom fields\n-------------\n\nYou can add support for custom fields by adding your\ncustom field class and a function in ``factory.field_types``:\n\n.. code-block:: python\n\n  from django_fakery import factory\n\n  from my_fields import CustomField\n\n  def func(faker, field, count, *args, **kwargs):\n      return 43\n\n\n  factory.field_types.add(\n      CustomField, (func, [], {})\n  )\n\n\nAs a shortcut, you can specified any Faker function by its name:\n\n.. code-block:: python\n\n  from django_fakery import factory\n\n  from my_fields import CustomField\n\n\n  factory.field_types.add(\n      CustomField, (\"random_int\", [], {\"min\": 0, \"max\": 60})\n  )\n\nForeign keys\n------------\n\nNon-nullable ``ForeignKey`` s create related objects automatically.\n\nIf you want to explicitly create a related object, you can pass a factory like any other value:\n\n.. code-block:: python\n\n    from django.contrib.auth.models import User\n    from food.models import Pizza\n\n    pizza = factory.m(Pizza)(\n        chef=factory.m(User)(username='Gusteau'),\n    )\n\nIf you'd rather not create related objects and reuse the same value for a foreign key, you can use the special value ``django_fakery.rels.SELECT``:\n\n.. code-block:: python\n\n    from django_fakery import factory, rels\n    from food.models import Pizza\n\n    pizza = factory.m(Pizza, quantity=5)(\n        chef=rels.SELECT,\n    )\n\n``django-fakery`` will always use the first instance of the related model, creating one if necessary.\n\nManyToManies\n------------\n\nBecause ``ManyToManyField`` s are implicitly nullable (ie: they're always allowed to have their ``.count()`` equal to ``0``), related objects on those fields are not automatically created for you.\n\nIf you want to explicitly create a related objects, you can pass a list as the field's value:\n\n.. code-block:: python\n\n    from food.models import Pizza, Topping\n\n    pizza = factory.m(Pizza)(\n        toppings=[\n            factory.m(Topping)(name='Anchovies')\n        ],\n    )\n\nYou can also pass a factory, to create multiple objects:\n\n.. code-block:: python\n\n    from food.models import Pizza, Topping\n\n    pizza = factory.m(Pizza)(\n        toppings=factory.m(Topping, quantity=5),\n    )\n\n.. _shortcuts:\n\nShortcuts\n---------\n\n``django-fakery`` includes some shortcut functions to generate commonly needed values.\n\n\n``future_datetime(end='+30d')``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nReturns a ``datetime`` object in the future (that is, 1 second from now) up to the specified ``end``. ``end`` can be a string, anotther datetime, or a timedelta. If it's a string, it must start with `+`, followed by and integer and a unit, Eg: ``'+30d'``. Defaults to ``'+30d'``\n\nValid units are:\n\n* ``'years'``, ``'y'``\n* ``'weeks'``, ``'w'``\n* ``'days'``, ``'d'``\n* ``'hours'``, ``'hours'``\n* ``'minutes'``, ``'m'``\n* ``'seconds'``, ``'s'``\n\nExample:\n\n.. code-block:: python\n\n    from django_fakery import factory, shortcuts\n    from myapp.models import MyModel\n\n    factory.m(MyModel)(field=shortcuts.future_datetime('+1w'))\n\n\n``future_date(end='+30d')``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nReturns a ``date`` object in the future (that is, 1 day from now) up to the specified ``end``. ``end`` can be a string, another date, or a timedelta. If it's a string, it must start with `+`, followed by and integer and a unit, Eg: ``'+30d'``. Defaults to ``'+30d'``\n\n``past_datetime(start='-30d')``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nReturns a ``datetime`` object in the past between 1 second ago and the specified ``start``. ``start`` can be a string, another datetime, or a timedelta. If it's a string, it must start with `-`, followed by and integer and a unit, Eg: ``'-30d'``. Defaults to ``'-30d'``\n\n``past_date(start='-30d')``\n~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nReturns a ``date`` object in the past between 1 day ago and the specified ``start``. ``start`` can be a string, another date, or a timedelta. If it's a string, it must start with `-`, followed by and integer and a unit, Eg: ``'-30d'``. Defaults to ``'-30d'``\n\n\nLazies\n------\n\nYou can refer to the created instance's own attributes or method by using `Lazy` objects.\n\nFor example, if you'd like to create user with email as username, and have them always match, you could do:\n\n.. code-block:: python\n\n    from django_fakery import factory, Lazy\n    from django.contrib.auth.models import User\n\n    factory.m(auth.User)(\n        username=Lazy('email'),\n    )\n\n\nIf you want to assign a value returned by a method on the instance, you can pass the method's arguments to the ``Lazy`` object:\n\n.. code-block:: python\n\n    from django_fakery import factory, Lazy\n    from myapp.models import MyModel\n\n    factory.m(MyModel)(\n        myfield=Lazy('model_method', 'argument', keyword='keyword value'),\n    )\n\nPre-save and Post-save hooks\n----------------------------\n\nYou can define functions to be called right before the instance is saved or right after:\n\n.. code-block:: python\n\n    from django.contrib.auth.models import User\n    from django_fakery import factory\n\n    factory.m(\n        User,\n        pre_save=[\n            lambda u: u.set_password('password')\n        ],\n    )(username='username')\n\nSince settings a user's password is such a common case, we special-cased that scenario, so you can just pass it as a field:\n\n.. code-block:: python\n\n    from django.contrib.auth.models import User\n    from django_fakery import factory\n\n    factory.m(User)(\n        username='username',\n        password='password',\n    )\n\nGet or Make\n-----------\n\nYou can check for existance of a model instance and create it if necessary by using the ``g_m`` (short for ``get_or_make``) method:\n\n.. code-block:: python\n\n    from myapp.models import MyModel\n\n    myinstance, created = factory.g_m(\n        MyModel,\n        lookup={\n            'myfield': 'myvalue',\n        }\n    )(myotherfield='somevalue')\n\nIf you're looking for a more explicit API, you can use the ``.get_or_make()`` method:\n\n.. code-block:: python\n\n    from myapp.models import MyModel\n\n    myinstance, created = factory.get_or_make(\n        MyModel,\n        lookup={\n            'myfield': 'myvalue',\n        },\n        fields={\n            'myotherfield': 'somevalue',\n        },\n    )\n\nGet or Update\n-------------\n\nYou can check for existence of a model instance and update it by using the ``g_u`` (short for ``get_or_update``) method:\n\n.. code-block:: python\n\n    from myapp.models import MyModel\n\n    myinstance, created = factory.g_u(\n        MyModel,\n        lookup={\n            'myfield': 'myvalue',\n        }\n    )(myotherfield='somevalue')\n\nIf you're looking for a more explicit API, you can use the ``.get_or_update()`` method:\n\n.. code-block:: python\n\n    from myapp.models import MyModel\n\n    myinstance, created = factory.get_or_update(\n        MyModel,\n        lookup={\n            'myfield': 'myvalue',\n        },\n        fields={\n            'myotherfield': 'somevalue',\n        },\n    )\n\nNon-persistent instances\n------------------------\n\nYou can build instances that are not saved to the database by using the ``.b()`` method, just like you'd use ``.m()``:\n\n.. code-block:: python\n\n    from django_fakery import factory\n    from myapp.models import MyModel\n\n    factory.b(MyModel)(\n        field='value',\n    )\n\nNote that since the instance is not saved to the database, ``.build()`` does not support ManyToManies or post-save hooks.\n\nIf you're looking for a more explicit API, you can use the ``.build()`` method:\n\n.. code-block:: python\n\n    from django_fakery import factory\n    from myapp.models import MyModel\n\n    factory.build(\n        MyModel,\n        fields={\n            'field': 'value',\n        }\n    )\n\n\nBlueprints\n----------\n\nUse a blueprint:\n\n.. code-block:: python\n\n    from django.contrib.auth.models import User\n    from django_fakery import factory\n\n    user = factory.blueprint(User)\n\n    user.make(quantity=10)\n\nBlueprints can refer other blueprints:\n\n.. code-block:: python\n\n    from food.models import Pizza\n\n    pizza = factory.blueprint(Pizza).fields(\n            chef=user,\n        )\n    )\n\nYou can also override the field values you previously specified:\n\n.. code-block:: python\n\n    from food.models import Pizza\n\n    pizza = factory.blueprint(Pizza).fields(\n            chef=user,\n            thickness=1\n        )\n    )\n\n    pizza.m(quantity=10)(thickness=2)\n\nOr, if you'd rather use the explicit api:\n\n.. code-block:: python\n\n    from food.models import Pizza\n\n    pizza = factory.blueprint(Pizza).fields(\n            chef=user,\n            thickness=1\n        )\n    )\n\n    thicker_pizza = pizza.fields(thickness=2)\n    thicker_pizza.make(quantity=10)\n\n\nSeeding the faker\n-----------------\n\n.. code-block:: python\n\n    from django.contrib.auth.models import User\n    from django_fakery import factory\n\n    factory.m(User, seed=1234, quantity=4)(\n        username='regularuser_{}'\n    )\n\nCredits\n-------\n\nThe API is heavily inspired by `model_mommy`_.\n\n.. _model_mommy: https://github.com/vandersonmota/model_mommy\n\nLicense\n-------\n\nThis software is released under the MIT License.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A model instances generator for Django",
    "version": "4.1.2",
    "project_urls": {
        "Homepage": "https://github.com/fcurella/django-fakery/"
    },
    "split_keywords": [],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f54b36c6f58471232d3e55cc724826064133f845bac74f84354fdb3be3539187",
                "md5": "9539f78d08ad299b8857d34e90df5cb7",
                "sha256": "f943cda59eb17b1106f22aaa9262c66ac8c2abc012661fab3d867fd1fdafb339"
            },
            "downloads": -1,
            "filename": "django_fakery-4.1.2-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "9539f78d08ad299b8857d34e90df5cb7",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": ">=3.8",
            "size": 17545,
            "upload_time": "2024-06-17T22:28:21",
            "upload_time_iso_8601": "2024-06-17T22:28:21.278312Z",
            "url": "https://files.pythonhosted.org/packages/f5/4b/36c6f58471232d3e55cc724826064133f845bac74f84354fdb3be3539187/django_fakery-4.1.2-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fc2caad10072a4574015aba247404573c7d90b1d7ae8b8676325275b6fcdb92b",
                "md5": "2e6b0991d86708b7cbd23431945a2de5",
                "sha256": "5723a725a87d87e93ddd8f09024842c24be539c3adca0e00b3304f14bd594868"
            },
            "downloads": -1,
            "filename": "django_fakery-4.1.2.tar.gz",
            "has_sig": false,
            "md5_digest": "2e6b0991d86708b7cbd23431945a2de5",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 17503,
            "upload_time": "2024-06-17T22:28:23",
            "upload_time_iso_8601": "2024-06-17T22:28:23.993701Z",
            "url": "https://files.pythonhosted.org/packages/fc/2c/aad10072a4574015aba247404573c7d90b1d7ae8b8676325275b6fcdb92b/django_fakery-4.1.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-06-17 22:28:23",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "fcurella",
    "github_project": "django-fakery",
    "travis_ci": false,
    "coveralls": true,
    "github_actions": true,
    "lcname": "django-fakery"
}
        
Elapsed time: 0.76207s