Writing Anonymizers

For each model, you need a subclass of anonymizer.base.Anonymizer. They can be automatically generated using the create_anonymizers command.

The main attributes that must be set are model and attributes. You can also override other methods to customise the process.

class anonymizer.base.Anonymizer
model

This is the Django model that will be anonymized.

attributes

This should be a list of 2-tuples, where the first value is the name of an attribute on the model that need to be set (i.e. usually a field name), and the second value specifies a ‘replacer’ - a source of faked data. The replacer is either a string or a callable:

  • If the replacer is string, it will be interpreted as a function in the module anonymizer.replacers.
  • If the replacer is a callable, it should have a signature compatible with the callables in anonymizer.replacers - see the documentation in that module for writing your own replacers.

Note that the order the fields are listed can be important. If you have a username field with unique=True, for example, it will help if this comes before other fields like name (see anonymizer.base.DjangoFaker for more details).

For security in the case of new fields being added to the model, the list must contain all attributes corresponding to fields on the model. To specify that an attribute should not be altered, using the string “SKIP”.

order

Sometimes it is important that some anonymizers are run before others. By default, this value is zero, but you can set it to any other numeric value. The anonymizers will be sorted by this attribute before being run.

get_query_set(self)

Returns the QuerySet to be manipulated.

The default implementation uses the default manager for the model, and returns all objects, ordered by the ‘id’ field if it exists. You can override this method to change that.

alter_object(self, obj)

Alters the object (but does not save).

Override this method to add custom behaviour for altering an object. This is especially useful if for some fields/rows you want to add some logic that cannot easily be written as a ‘replacer’.

alter_object_attribute(self, obj, attname, replacer)

Alters the attribute ‘attname’ on object ‘obj’, using the replacement source ‘replacer’

Previous topic

Commands

Next topic

Replacers - fake data sources

This Page