{ "info": { "author": "Tesorio", "author_email": "hello@tesorio.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: Django", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3" ], "description": "\n**django-anon** will help you anonymize your production database so it can be\nshared among developers, helping to reproduce bugs and make performance improvements\nin a production-like environment.\n\n.. image:: https://raw.githubusercontent.com/Tesorio/django-anon/master/django-anon-recording.gif\n\n.. start-features\n\nFeatures\n========\n\n.. start-features-table\n\n.. csv-table::\n\n \"\ud83d\ude80\", \"**Really fast** data anonymization and database operations using bulk updates to operate over huge tables\"\n \"\ud83c\udf70\", \"**Flexible** to use your own anonymization functions or external libraries like `Faker `_\"\n \"\ud83d\udc29\", \"**Elegant** solution following consolidated patterns from projects like `Django `_ and `Factory Boy `_\"\n \"\ud83d\udd28\", \"**Powerful**. It can be used on any projects, not only Django, not only Python. Really!\"\n\n.. end-features-table\n.. end-features\n.. start-table-of-contents\n\nTable of Contents\n=================\n.. contents::\n :local:\n\n.. end-table-of-contents\n.. start-introduction\n\n\nInstallation\n------------\n\n.. code::\n\n pip install django-anon\n\n\nSupported versions\n------------------\n\n* Python (2.7, 3.7)\n* Django (1.8, 1.11, 2.2, 3.0)\n\n\nLicense\n-------\n\n`MIT `_\n\n.. end-introduction\n.. start-usage\n\n\nUsage\n-----\n\nUse ``anon.BaseAnonymizer`` to define your anonymizer classes:\n\n.. code-block:: python\n\n import anon\n\n from your_app.models import Person\n\n class PersonAnonymizer(anon.BaseAnonymizer):\n email = anon.fake_email\n\n # You can use static values instead of callables\n is_admin = False\n\n class Meta:\n model = Person\n\n # run anonymizer: be cautious, this will affect your current database!\n PersonAnonymizer().run()\n\n\nBuilt-in functions\n~~~~~~~~~~~~~~~~~~\n\n.. code:: python\n\n import anon\n\n anon.fake_word(min_size=_min_word_size, max_size=20)\n anon.fake_text(max_size=255, max_diff_allowed=5, separator=' ')\n anon.fake_small_text(max_size=50)\n anon.fake_name(max_size=15)\n anon.fake_username(max_size=10, separator='')\n anon.fake_email(max_size=40, suffix='@example.com')\n anon.fake_url(max_size=50, scheme='http://', suffix='.com')\n anon.fake_phone_number(format='999-999-9999')\n\n\nLazy attributes\n~~~~~~~~~~~~~~~\n\nLazy attributes can be defined as inline lambdas or methods, as shown below,\nusing the ``anon.lazy_attribute`` function/decorator.\n\n.. code-block:: python\n\n import anon\n\n from your_app.models import Person\n\n class PersonAnonymizer(anon.BaseAnonymizer):\n name = anon.lazy_attribute(lambda o: 'x' * len(o.name))\n\n @lazy_attribute\n def date_of_birth(self):\n # keep year and month\n return self.date_of_birth.replace(day=1)\n\n class Meta:\n model = Person\n\n\nThe clean method\n~~~~~~~~~~~~~~~~\n\n.. code-block:: python\n\n import anon\n\n class UserAnonymizer(anon.BaseAnonymizer):\n class Meta:\n model = User\n\n def clean(self, obj):\n obj.set_password('test')\n obj.save()\n\n\nDefining a custom QuerySet\n~~~~~~~~~~~~~~~~~~~~~~~~~~\n\nA custom QuerySet can be used to select the rows that should be anonymized:\n\n.. code-block:: python\n\n import anon\n\n from your_app.models import Person\n\n class PersonAnonymizer(anon.BaseAnonymizer):\n email = anon.fake_email\n\n class Meta:\n model = Person\n\n def get_queryset(self):\n # keep admins unmodified\n return Person.objects.exclude(is_admin=True)\n\n\nHigh-quality fake data\n~~~~~~~~~~~~~~~~~~~~~~\n\nIn order to be really fast, **django-anon** uses it's own algorithm to generate fake data. It is\nreally fast, but the generated data is not pretty. If you need something prettier in terms of data,\nwe suggest using `Faker `_, which can be used\nout-of-the-box as the below:\n\n.. code-block:: python\n\n import anon\n\n from faker import Faker\n from your_app.models import Address\n\n faker = Faker()\n\n class PersonAnonymizer(anon.BaseAnonymizer):\n postalcode = faker.postalcode\n\n class Meta:\n model = Address\n\n.. end-usage\n\nChangelog\n---------\n\nCheck out `CHANGELOG.rst `_ for release notes\n\nContributing\n------------\n\nCheck out `CONTRIBUTING.rst `_ for information about getting involved\n\n----\n\n`Icon `_ made by `Eucalyp `_ from `www.flaticon.com `_\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Tesorio/django-anon", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "django-anon", "package_url": "https://pypi.org/project/django-anon/", "platform": "any", "project_url": "https://pypi.org/project/django-anon/", "project_urls": { "Homepage": "https://github.com/Tesorio/django-anon" }, "release_url": "https://pypi.org/project/django-anon/0.3.2/", "requires_dist": [ "django-bulk-update", "django-chunkator (<2)" ], "requires_python": "", "summary": "Anonymize production data so it can be safely used in not-so-safe environments", "version": "0.3.2", "yanked": false, "yanked_reason": null }, "last_serial": 11026557, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "175411d222d04e4c529d9daa7055358f", "sha256": "90e0bec39c08a68e31f7420d0e39aa2a69d28345f73053cc2f47ebcda3957f6b" }, "downloads": -1, "filename": "django_anon-0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "175411d222d04e4c529d9daa7055358f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10957, "upload_time": "2019-11-12T19:27:43", "upload_time_iso_8601": "2019-11-12T19:27:43.902789Z", "url": "https://files.pythonhosted.org/packages/75/e5/34756543757f1ffcdbf4f89c55b28f349cc3ee2be7762d92a034dd0e91e8/django_anon-0.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "96988259f2be6d9d8efcf5cbdee64195", "sha256": "527e408d9a1648fbed18cad99b2c58e4eb89adb0f3465d42a23f9c6114fc4a00" }, "downloads": -1, "filename": "django-anon-0.1.tar.gz", "has_sig": false, "md5_digest": "96988259f2be6d9d8efcf5cbdee64195", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10409, "upload_time": "2019-11-12T19:27:46", "upload_time_iso_8601": "2019-11-12T19:27:46.906328Z", "url": "https://files.pythonhosted.org/packages/fb/d7/0d38189c1bdb0ee43d5b02f9fe174b6fd9a79b2e77bb488d9677a52af28c/django-anon-0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2": [ { "comment_text": "", "digests": { "md5": "55f598391a9d385c05b6637763f1d4e0", "sha256": "beee9f201ff16d37404ac4a05a9eff6bcd81d663ecc49f3756c6853413392ddd" }, "downloads": -1, "filename": "django_anon-0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "55f598391a9d385c05b6637763f1d4e0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 11555, "upload_time": "2020-08-18T20:37:30", "upload_time_iso_8601": "2020-08-18T20:37:30.947394Z", "url": "https://files.pythonhosted.org/packages/7b/41/512893179372397f680a95661c56cda79737ebad37a704585b39f389eecf/django_anon-0.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "21cc2c58d6b37512c9bd3f70e31f946d", "sha256": "f2d77f8d3c88c3a20bee02be531c04466e9ec04a7fd779137b58fb8a529fdfe6" }, "downloads": -1, "filename": "django-anon-0.2.tar.gz", "has_sig": false, "md5_digest": "21cc2c58d6b37512c9bd3f70e31f946d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12315, "upload_time": "2020-08-18T20:37:32", "upload_time_iso_8601": "2020-08-18T20:37:32.737407Z", "url": "https://files.pythonhosted.org/packages/ce/bc/901b5374958473fe82ba0548278f173b258791645cfde224435b7c2d5c54/django-anon-0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3": [ { "comment_text": "", "digests": { "md5": "2aa576957fb56af0f29bc04287786c89", "sha256": "9068f52de39bcc48d39d4a37d03493c3e3b17467921eca2409ec061ab151b83a" }, "downloads": -1, "filename": "django_anon-0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2aa576957fb56af0f29bc04287786c89", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12575, "upload_time": "2020-12-18T16:21:26", "upload_time_iso_8601": "2020-12-18T16:21:26.731245Z", "url": "https://files.pythonhosted.org/packages/63/08/03612fdd4bbc036d1219f52bfd5e39178dce2021811de69f933a7cd476c5/django_anon-0.3-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9a4d30be5c39ec8237ddfd1d0e9472e9", "sha256": "a9fa5aa90c3ec8ee717c084e2882eeb440d36bf95963f79beb07269bcca837aa" }, "downloads": -1, "filename": "django-anon-0.3.tar.gz", "has_sig": false, "md5_digest": "9a4d30be5c39ec8237ddfd1d0e9472e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12812, "upload_time": "2020-12-18T16:21:28", "upload_time_iso_8601": "2020-12-18T16:21:28.571983Z", "url": "https://files.pythonhosted.org/packages/1a/c6/6827f333b45654a3f1234b6c671eb7319707f4d5b515810bff53708c5694/django-anon-0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "94474f8c62e8884a6f74daeb2df1dacf", "sha256": "596771ce608147fb6396ebed7d81dcc3d755d5e17d59fa7fb840fec46cadaa99" }, "downloads": -1, "filename": "django_anon-0.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "94474f8c62e8884a6f74daeb2df1dacf", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12690, "upload_time": "2021-03-09T14:59:32", "upload_time_iso_8601": "2021-03-09T14:59:32.554697Z", "url": "https://files.pythonhosted.org/packages/df/aa/b20511d9cef820b4719201f6fe0baa2e6cda0c666d7111fbcc7ce26aa7fd/django_anon-0.3.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9796b1bc29d463a2a7c2a15d80b2acb0", "sha256": "c4679c54e5d7d1954244a93cf55ce2ba07b7d974f7d330aa6012663ce4b8fcbe" }, "downloads": -1, "filename": "django-anon-0.3.1.tar.gz", "has_sig": false, "md5_digest": "9796b1bc29d463a2a7c2a15d80b2acb0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12669, "upload_time": "2021-03-09T14:59:34", "upload_time_iso_8601": "2021-03-09T14:59:34.321189Z", "url": "https://files.pythonhosted.org/packages/89/12/ce1a05fee2c5175005fa9e81f942402e1d9ebd4098f83d9c0605d246d4fd/django-anon-0.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "3ae2c6ca2969761454a27dd60f08f3f1", "sha256": "e3f946e20c5e987e98ad8c18d8669004d037d47ef608d3d733654c0a6c4f0e90" }, "downloads": -1, "filename": "django_anon-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3ae2c6ca2969761454a27dd60f08f3f1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12786, "upload_time": "2021-07-28T11:56:26", "upload_time_iso_8601": "2021-07-28T11:56:26.066150Z", "url": "https://files.pythonhosted.org/packages/df/13/0f8052c6fabf8ac77358ddf2ec78baa231610692823b2576ebd2e680f51f/django_anon-0.3.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5e6a6791d06b81a1a74de14c17bc5c5d", "sha256": "d263925790515e78990e64f79e5e2402bb447b7278102a6ca24bad13204f851c" }, "downloads": -1, "filename": "django-anon-0.3.2.tar.gz", "has_sig": false, "md5_digest": "5e6a6791d06b81a1a74de14c17bc5c5d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12766, "upload_time": "2021-07-28T11:56:29", "upload_time_iso_8601": "2021-07-28T11:56:29.290501Z", "url": "https://files.pythonhosted.org/packages/d6/6d/2033b393ff79d2d0842e2db670d67561726dd1d961e0e37471397d023d90/django-anon-0.3.2.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "3ae2c6ca2969761454a27dd60f08f3f1", "sha256": "e3f946e20c5e987e98ad8c18d8669004d037d47ef608d3d733654c0a6c4f0e90" }, "downloads": -1, "filename": "django_anon-0.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3ae2c6ca2969761454a27dd60f08f3f1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 12786, "upload_time": "2021-07-28T11:56:26", "upload_time_iso_8601": "2021-07-28T11:56:26.066150Z", "url": "https://files.pythonhosted.org/packages/df/13/0f8052c6fabf8ac77358ddf2ec78baa231610692823b2576ebd2e680f51f/django_anon-0.3.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "5e6a6791d06b81a1a74de14c17bc5c5d", "sha256": "d263925790515e78990e64f79e5e2402bb447b7278102a6ca24bad13204f851c" }, "downloads": -1, "filename": "django-anon-0.3.2.tar.gz", "has_sig": false, "md5_digest": "5e6a6791d06b81a1a74de14c17bc5c5d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12766, "upload_time": "2021-07-28T11:56:29", "upload_time_iso_8601": "2021-07-28T11:56:29.290501Z", "url": "https://files.pythonhosted.org/packages/d6/6d/2033b393ff79d2d0842e2db670d67561726dd1d961e0e37471397d023d90/django-anon-0.3.2.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }