Skip to main content

django-anon will help you anonymize your production database so it can be shared among developers, helping to reproduce bugs and make performance improvements in a production-like environment.

https://raw.githubusercontent.com/Tesorio/django-anon/master/django-anon-recording.gif

Features

🚀

Really fast data anonymization and database operations using bulk updates to operate over huge tables

🍰

Flexible to use your own anonymization functions or external libraries like Faker

🐩

Elegant solution following consolidated patterns from projects like Django and Factory Boy

🔨

Powerful. It can be used on any projects, not only Django, not only Python. Really!

Table of Contents

Installation

pip install django-anon

Supported versions

  • Python (2.7, 3.7)

  • Django (1.8, 1.11, 2.2, 3.0)

License

MIT

Usage

Use anon.BaseAnonymizer to define your anonymizer classes:

import anon

from your_app.models import Person

class PersonAnonymizer(anon.BaseAnonymizer):
   email = anon.fake_email

   # You can use static values instead of callables
   is_admin = False

   class Meta:
      model = Person

# run anonymizer: be cautious, this will affect your current database!
PersonAnonymizer().run()

Built-in functions

import anon

anon.fake_word(min_size=_min_word_size, max_size=20)
anon.fake_text(max_size=255, max_diff_allowed=5, separator=' ')
anon.fake_small_text(max_size=50)
anon.fake_name(max_size=15)
anon.fake_username(max_size=10, separator='')
anon.fake_email(max_size=40, suffix='@example.com')
anon.fake_url(max_size=50, scheme='http://', suffix='.com')
anon.fake_phone_number(format='999-999-9999')

Lazy attributes

Lazy attributes can be defined as inline lambdas or methods, as shown below, using the anon.lazy_attribute function/decorator.

import anon

from your_app.models import Person

class PersonAnonymizer(anon.BaseAnonymizer):
   name = anon.lazy_attribute(lambda o: 'x' * len(o.name))

   @lazy_attribute
   def date_of_birth(self):
      # keep year and month
      return self.date_of_birth.replace(day=1)

   class Meta:
      model = Person

The clean method

import anon

class UserAnonymizer(anon.BaseAnonymizer):
   class Meta:
      model = User

   def clean(self, obj):
      obj.set_password('test')
      obj.save()

Defining a custom QuerySet

A custom QuerySet can be used to select the rows that should be anonymized:

import anon

from your_app.models import Person

class PersonAnonymizer(anon.BaseAnonymizer):
   email = anon.fake_email

   class Meta:
      model = Person

   def get_queryset(self):
      # keep admins unmodified
      return Person.objects.exclude(is_admin=True)

High-quality fake data

In order to be really fast, django-anon uses it’s own algorithm to generate fake data. It is really fast, but the generated data is not pretty. If you need something prettier in terms of data, we suggest using Faker, which can be used out-of-the-box as the below:

import anon

from faker import Faker
from your_app.models import Address

faker = Faker()

class PersonAnonymizer(anon.BaseAnonymizer):
   postalcode = faker.postalcode

   class Meta:
      model = Address

Changelog

Check out CHANGELOG.rst for release notes

Contributing

Check out CONTRIBUTING.rst for information about getting involved


Icon made by Eucalyp from www.flaticon.com

Metadata

Release files for django-anon 0.3.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-anon 0.3.2
File Size Uploaded
django-anon-0.3.2.tar.gz 12.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for django-anon 0.3.2
File Interpreter ABI Platform
django_anon-0.3.2-py2.py3-none-any.whl Python 3, Python 2 none any Details

Total release size: 25.6 kB

Release files / django-anon-0.3.2.tar.gz

Download URL django-anon-0.3.2.tar.gz
Size 12.8 kB
Tags Source
SHA-256 checksum
How to use checksums
d263925790515e78990e64f79e5e2402bb447b7278102a6ca24bad13204f851c
BLAKE2b-256 checksum
How to use checksums
d66d2033b393ff79d2d0842e2db670d67561726dd1d961e0e37471397d023d90
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.6.1 requests/2.25.1 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.7.7

Release files / django_anon-0.3.2-py2.py3-none-any.whl

Download URL django_anon-0.3.2-py2.py3-none-any.whl
Size 12.8 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
e3f946e20c5e987e98ad8c18d8669004d037d47ef608d3d733654c0a6c4f0e90
BLAKE2b-256 checksum
How to use checksums
df130f8052c6fabf8ac77358ddf2ec78baa231610692823b2576ebd2e680f51f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.6.1 requests/2.25.1 setuptools/41.2.0 requests-toolbelt/0.9.1 tqdm/4.54.1 CPython/3.7.7

Release history Release notifications | RSS feed

This release

0.3.2 This release

2 release files

0.3.1

2 release files

0.3

2 release files

0.2

2 release files

0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page