{ "info": { "author": "Nick Gashkov", "author_email": "nick@gashkov.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 2 - Pre-Alpha", "Framework :: Django", "Framework :: Django :: 1.11", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Testing" ], "description": "# AutoFactoryBoy\n\n[![Build Status](https://travis-ci.org/nickgashkov/autofactoryboy.svg?branch=master)](https://travis-ci.org/nickgashkov/autofactoryboy)\n[![PyPI Package](https://img.shields.io/pypi/v/autofactory.svg)](https://pypi.org/project/autofactory/)\n\n> **Warning!** *AutoFactoryBoy* supports only \n[Django](https://github.com/django/django) ORM for now.\n\n*AutoFactoryBoy* introspects ORM models and generates factories.\n\n## Contents\n* [Installation](#installation)\n* [Quickstart](#quickstart)\n* [Compatibility](#compatibility)\n* [Q & A](#q--a)\n* [Contributing](#contributing)\n* [License](#license)\n* [Acknowledgments](#acknowledgments)\n\n## Installation\n\nInstall from PyPI:\n\n```bash\n$ pip install autofactory\n```\n\nBuild from source:\n\n```bash\n$ git clone git://github.com/nickgashkov/autofactoryboy/\n$ python setup.py install\n```\n\n## Quickstart\n\nThere are a couple of options to create an `AutoFactory` for a model:\n\n1. Subclass a `DjangoModelAutoFactory`:\n\n ```python\n from autofactory.django import DjangoModelAutoFactory\n \n from models import Model\n \n class ModelFactory(DjangoModelAutoFactory):\n class Meta:\n model = Model\n autofields = \"__all__\"\n \n model = ModelFactory.create(some__field__to__change=42)\n ```\n\n2. Make a factory right from the model with the help of a\nshortcut:\n\n ```python\n from autofactory.django import autofactory\n \n from models import Model\n \n model_factory = autofactory(Model)\n model = model_factory.create(some__field__to__change=42)\n ```\n\n## Compatibility\n\n| Python | Django | SQLAlchemy | Mogo | mongoengine |\n| ------ | -------------- | ---------- | ---- | ----------- |\n| 2.7 | 1.11 | \u2014 | \u2014 | \u2014 |\n| 3.4 | 1.11, 2.0 | \u2014 | \u2014 | \u2014 |\n| 3.5 | 1.11, 2.0, 2.1 | \u2014 | \u2014 | \u2014 |\n| 3.6 | 1.11, 2.0, 2.1 | \u2014 | \u2014 | \u2014 |\n| 3.7 | 1.11, 2.0, 2.1 | \u2014 | \u2014 | \u2014 |\n\n## Q & A\n\n### How do I make an autofactory with specific fields?\n\n*AutoFactoryBoy* will generate a `ModelFactory` for a model with fields, \ndeclared in the `ModelFactory.Meta`:\n\n```python\nclass ModelFactory(DjangoModelAutoFactory):\n class Meta:\n model = Model\n autofields = (\"integer\", \"string\")\n```\n\nThe code snippet above is identical to:\n\n```python\nclass ModelFactory(DjangoModelFactory):\n integer = factory.Faker(\"pyint\")\n string = factory.Faker(\"text\")\n\n class Meta:\n model = Model\n```\n\n### How do I make an autofactory with all model fields?\n\nYou can set `fields` to a special value (i.e. `__all__`) and all fields with \n`blank=False` and without `default` will be generated automatically:\n\n```python\n# models.py\nclass Model(models.Model):\n integer = models.IntegerField(blank=True, null=True)\n text = models.TextField(default=\"Default\")\n string = models.CharField(max_length=20)\n\n# factories.py\nclass ModelFactory(DjangoModelAutoFactory):\n class Meta:\n model = Model\n autofields = \"__all__\"\n```\n\nThe code snippet above is identical to:\n\n```python\nclass ModelFactory(DjangoModelFactory):\n string = factory.Faker(\"text\", max_nb_chars=20)\n\n class Meta:\n model = Model\n```\n\n### How do I make an autofactory with all model fields except one\n\nYou can add the field you want to exclude to the `Meta.autoexclude` tuple:\n\n```python\n# models.py\nclass Model(models.Model):\n field = models.IntegerField(blank=False, null=True)\n field_to_exclude = models.IntegerField(blank=False, null=True)\n\n# factories.py\nclass ModelFactory(DjangoModelAutoFactory):\n class Meta:\n model = Model\n autoexclude = (\"field_to_exclude\",)\n```\n\nThe code snippet above is identical to:\n\n```python\nclass ModelFactory(DjangoModelFactory):\n field = factory.Faker(\"pyint\")\n\n class Meta:\n model = Model\n```\n\n> **Warning!** One cannot set `autofields` and `autoexclude` for one factory at\nthe same time.\n\n### How do I teach AutoFactoryBoy how to generate my custom field \n\nMake a custom builder and register it with decorator or as a function:\n\n```python\n# models.py\nclass Model:\n custom = CustomField()\n\n# builders.py\nfrom autofactory.django.builders import registry\n\n@registry.register(CustomField)\ndef build_custom_field(field_cls):\n ...\n\nregistry.register(CustomField, build_custom_field)\n```\n\n**Warning!** Order is important. Make sure, that you register all \ncustom fields *before* any factory declaration. I.e.:\n\n```python\nfrom autofactory.django.builders import registry, FROM_DEFAULT\nfrom autofactory.django import autofactory, DjangoModelAutoFactory\n\nfrom models import Model\n\n\n# Register first.\nregistry.register(FROM_DEFAULT, lambda x: \"Default for everything\")\n\n\n# Declare second.\nclass ModelFactory(DjangoModelAutoFactory):\n class Meta:\n model = Model\n autofields = \"__all__\"\n\nmodel_factory = autofactory(Model)\n``` \n\n### How do I override AutoFactoryBoy field builder \n\n`autofactory.django.builders.registry` for the rescue! Using the \napproach above, you can redeclare builder for any field:\n\n```python\nfrom autofactory.django.builders import registry\n\nfrom django.db import models\n\n\n@registry.register(models.CharField)\ndef custom_char_field_builder(field_cls):\n ...\n```\n\n## Contributing\n\n### Dependencies\n\nTo install dev dependencies, run:\n\n```bash\n$ pip install pip-tools\n$ make upgrade\n```\n\n### Code formatting\n\nTo format the code, run:\n\n```bash\n$ make \n```\n\n### Testing\n\nTo test, run:\n\n```bash\n$ make test # Current environment\n$ make test-tox # All tox environments\n```\n\n## License\n\nThis project is licensed under the MIT License \u2014 see the [LICENSE](LICENSE) \nfile for details.\n\n## Acknowledgments\n\n* [factory_boy](https://github.com/FactoryBoy/factory_boy)", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/nickgashkov/autofactoryboy", "keywords": "autofactory", "license": "MIT license", "maintainer": "", "maintainer_email": "", "name": "autofactory", "package_url": "https://pypi.org/project/autofactory/", "platform": "", "project_url": "https://pypi.org/project/autofactory/", "project_urls": { "Homepage": "https://github.com/nickgashkov/autofactoryboy" }, "release_url": "https://pypi.org/project/autofactory/0.3.0/", "requires_dist": null, "requires_python": "", "summary": "AutoFactoryBoy generates factories for you.", "version": "0.3.0" }, "last_serial": 4799599, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "eac8e161040fd18b3d8dee128b6ae04d", "sha256": "4775a455353ba0169e2daed54119beccf1c13813bb6aa2d4565a70a9b45ada92" }, "downloads": -1, "filename": "autofactory-0.1.0.tar.gz", "has_sig": false, "md5_digest": "eac8e161040fd18b3d8dee128b6ae04d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6879, "upload_time": "2019-02-03T11:01:06", "url": "https://files.pythonhosted.org/packages/92/90/c9dc77786cf8a875d7b6387804a38374d461491f2b6b2a456242cdbcbc58/autofactory-0.1.0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "87dc02a186e74231d5c3f74d06b5aff9", "sha256": "f8ddcf7bf07391b4ddc8dc0a4a5bbe0cd1dfbb6a0ec4ea609748240c736110cd" }, "downloads": -1, "filename": "autofactory-0.2.0.tar.gz", "has_sig": false, "md5_digest": "87dc02a186e74231d5c3f74d06b5aff9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9815, "upload_time": "2019-02-08T12:07:20", "url": "https://files.pythonhosted.org/packages/9c/36/5575ce565049d8878db0599ea9526dfe578d4a029972b437ccdfc27def07/autofactory-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "b919a3324dacb6e5737e0499cb9b42c1", "sha256": "5df8ced5ad8cef67c9f0d8769fcaaed2f7b691ab20f4d84755671a25f674f594" }, "downloads": -1, "filename": "autofactory-0.3.0.tar.gz", "has_sig": false, "md5_digest": "b919a3324dacb6e5737e0499cb9b42c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10371, "upload_time": "2019-02-09T15:49:42", "url": "https://files.pythonhosted.org/packages/48/4c/18c5494fc0334fbd1d35185f65451737a338d1ced28de004c1f14bd6bf7e/autofactory-0.3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b919a3324dacb6e5737e0499cb9b42c1", "sha256": "5df8ced5ad8cef67c9f0d8769fcaaed2f7b691ab20f4d84755671a25f674f594" }, "downloads": -1, "filename": "autofactory-0.3.0.tar.gz", "has_sig": false, "md5_digest": "b919a3324dacb6e5737e0499cb9b42c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10371, "upload_time": "2019-02-09T15:49:42", "url": "https://files.pythonhosted.org/packages/48/4c/18c5494fc0334fbd1d35185f65451737a338d1ced28de004c1f14bd6bf7e/autofactory-0.3.0.tar.gz" } ] }