Package: py-obfuscate
Py_ObfuscateA module for obfuscating a mysqldump fileThis project is a partial-port ofMy_Obfusicate. Under the hood it mostly usesFakerfor generating fake data.Example usageThis package exposes apy_obfuscatemodule which containsObfuscatorclass with a very simple inteface.
It'sobfuscatemethod expects two streams: a read string (e.g. the mysqldump file) and write stream (e.g. the file to write the obfuscated dump to).obfuscatator.obfuscate(streamIn, streamOut)As a more practical example, create the fileobfuscate.pyimport sys
import yaml
import py_obfuscate

config = yaml.safe_load(open("obfuscator.yaml"))
obfuscatator = py_obfuscate.Obfuscator(config)

src = sys.stdin
out = sys.stdout

obfuscatator.obfuscate(src, out)Now create a config file (obfuscate.yaml), e.g.:tables:
  users:
    name:
      type: "name"
    email:
      type: "email"
    accountno:
      type: "string"
      chars: "1234567890"
      length: 10You should change this config to reflect the tables and columns you wish to obfuscate.Now you can run:mysqldump -c --add-drop-table --hex-blob -u user -ppassword database | python obfuscate.py > obfuscated_dump.sqlNotethat the-coption on mysqldump isrequiredto use py_obfuscate. Additionally, the default behavior of mysqldump is to output special characters. This may cause trouble, so you can request hex-encoded blob content with–hex-blob. If you get MySQL errors due to very long lines, try some combination of–max_allowed_packet=128M,–single-transaction,–skip-extended-insert, and–quick.ConfigurationIn the above example we've used YAML as the configuration format; since you passpy_obfuscate.Obfuscatora config object (dictionary) you can
use any format you wish, so long as parses into the same structure. The basic structure is:locale: <local string (optional): defaults "en_GB">
tables:
  <table>:
    truncate: <boolean - set to true to remove insert for this table. Defaults `false`>
    <column>:
      type: <type - how to obfusciate this column>
      <type-specific-option>: <type-specific-option-value>Tables or columns which are ommitted from the config are ignored. Currently no warning is given.Localetype:stringdefault:"en_GB"This is the locale string passed toFaker.TruncateSettingtruncate: truefor a table will remove the insert from the mysqldump.TypesThese are the following types supported:stringOptions:chars(string) The character list to choose from (defaults"1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_+-=[{]}/?|!@#$%^&*()``~")length(integer) The length of the string (defaults10)fixedOptions:value(string|array) Replace column entries with this value or one of the values in the specified array (defaults"")integerOptions:min(string) Replace column entries with a random integer greater than or equal to this value (defaults0)max(string) Replace column entries with a random integer less than or equal to this value (defaults100)emailnamefirst_namelast_nameusernameaddressstreet_addresssecondary_addresscitypostcodecompanyipurlsortcodebank_accountmobileuk_landlinenullUnit testespython -m unittest discover -s py_obfuscateLicenseThis work is provided under the MIT License. See the included LICENSE file.