{ "info": { "author": "Jerome Twell", "author_email": "jtwell1@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3.6", "Topic :: Database" ], "description": "# pynonymizer\n\npynonymizer is a universal tool for translating sensitive production database dumps into anonymized copies.\n\nThis can help you support GDPR/Data Protection in your organization without compromizing on quality testing data.\n\n### Why are anonymized databases important?\nThe primary source of information on how your database is used is in _your production database_. In most situations, the production dataset is usually significantly larger than any development copy, and\nwould contain a wider range of data.\n\nFrom time to time, it is prudent to run a new feature or stage a test against this dataset, rather\nthan one that is artificially created by developers or by testing frameworks. Anonymized databases allow us to use the structures present in production, while stripping them of any personally identifiable data that would\nconsitute a breach of privacy for end-users and subsequently a breach of GDPR. \n\nWith Anonymized databases, copies can be processed regularly, and distributed easily, leaving your developers and testers with a rich source of information on the volume and general makeup of the system in production. It can\nbe used to run better staging environments, integration tests, and even simulate database migrations. \n\nbelow is an excerpt from an anonymized database:\n\n| id |salutation | firstname | surname | email | dob | \n| - | - | - | - | - | - | \n| 1 | Dr. | Bernard | Gough | tnelson@powell.com | 2000-07-03 | \n| 2 | Mr. | Molly | Bennett | clarkeharriet@price-fry.com | 2014-05-19 | \n| 3 | Mrs. | Chelsea | Reid | adamsamber@clayton.com | 1974-09-08 | \n| 4 | Dr. | Grace | Armstrong | tracy36@wilson-matthews.com | 1963-12-15 | \n| 5 | Dr. | Stanley | James | christine15@stewart.net | 1976-09-16 | \n| 6 | Dr. | Mark | Walsh | dgardner@ward.biz | 2004-08-28 | \n| 7 | Mrs. | Josephine | Chambers | hperry@allen.com | 1916-04-04 | \n| 8 | Dr. | Stephen | Thomas | thompsonheather@smith-stevens.com | 1995-04-17 | \n| 9 | Ms. | Damian | Thompson | yjones@cox.biz | 2016-10-02 | \n| 10 | Miss | Geraldine | Harris | porteralice@francis-patel.com | 1910-09-28 | \n| 11 | Ms. | Gemma | Jones | mandylewis@patel-thomas.net | 1990-06-03 | \n| 12 | Dr. | Glenn | Carr | garnervalerie@farrell-parsons.biz | 1998-04-19 | \n\n\n## How does it work?\n`pynonymizer` replaces personally identifiable data in your database with **realistic** pseudorandom data, from the `Faker` library or from other functions.\nThere are a wide variety of data types available which should suit the column in question, for example:\n\n* `unique_email`\n* `company`\n* `file_path`\n* `[...]`\n\nFor a full list of data generation strategies, see the docs on [strategyfiles](https://gitlab.com/jerometwell/pynonymizer/blob/master/doc/strategyfiles.md)\n\n### Process outline\n\n1. Restore from dumpfile to temporary database.\n1. Anonymize temporary database with strategy.\n1. Dump resulting data to file.\n1. Drop temporary database.\n\nIf this workflow doesnt work for you, see [process control](https://gitlab.com/jerometwell/pynonymizer/blob/master/doc/process-control.md) to see if it can be adjusted to suit your needs.\n\n## Requirements\n* Python >= 3.6\n\n### mysql\n* `mysql`/`mysqldump` Must be in $PATH\n* backup file in plain .sql/sql.gz (schema and data)\n* Local or remote mysql >= 5.5\n\n### mssql\n* Requires extra dependencies: install package `pynonymizer[mssql]`\n* MSSQL >= 2008\n* Due to backup/restore limitations, you must be running pynonymizer on the *same server* as the database engine.\n* A backup in `.bak` format\n\n### postgres\n* `psql`/`pg_dump` Must be in $PATH\n* backup file in plain .sql/sql.gz (schema and data)\n* Local or remote postgres server\n\n# Getting Started\n\n## Usage\n1. Write a [strategyfile](https://gitlab.com/jerometwell/pynonymizer/blob/master/doc/strategyfiles.md) for your database\n1. See below:\n```\nusage: pynonymizer [-h] [--input INPUT] [--strategy STRATEGYFILE]\n [--output OUTPUT] [--db-type DB_TYPE] [--db-host DB_HOST]\n [--db-name DB_NAME] [--db-user DB_USER]\n [--db-password DB_PASSWORD] [--fake-locale FAKE_LOCALE]\n [--start-at STEP] [--skip-steps STEP [STEP ...]]\n [--stop-at STEP] [--seed-rows SEED_ROWS]\n [--mssql-backup-compression] [-v]\n\nA tool for writing better anonymization strategies for your production\ndatabases.\n\noptional arguments:\n -h, --help show this help message and exit\n --input INPUT, -i INPUT\n The source dumpfile to read from. [$PYNONYMIZER_INPUT]\n --strategy STRATEGYFILE, -s STRATEGYFILE\n A strategyfile to use during anonymization.\n [$PYNONYMIZER_STRATEGY]\n --output OUTPUT, -o OUTPUT\n The destination to write the dumped output to.\n [$PYNONYMIZER_OUTPUT]\n --db-type DB_TYPE, -t DB_TYPE\n Type of database to interact with. More databases will\n be supported in future versions. default: mysql\n [$PYNONYMIZER_DB_TYPE]\n --db-host DB_HOST, -d DB_HOST\n Database hostname or IP address.\n [$PYNONYMIZER_DB_HOST]\n --db-name DB_NAME, -n DB_NAME\n Name of database to restore and anonymize in. If not\n provided, a unique name will be generated from the\n strategy name. This will be dropped at the end of the\n run. [$PYNONYMIZER_DB_NAME]\n --db-user DB_USER, -u DB_USER\n Database credentials: username. [$PYNONYMIZER_DB_USER]\n --db-password DB_PASSWORD, -p DB_PASSWORD\n Database credentials: password. Recommended: use\n environment variables to avoid exposing secrets in\n production environments. [$PYNONYMIZER_DB_PASSWORD]\n --fake-locale FAKE_LOCALE, -l FAKE_LOCALE\n Locale setting to initialize fake data generation.\n Affects Names, addresses, formats, etc.\n [$PYNONYMIZER_FAKE_LOCALE]\n --start-at STEP Choose a step to begin the process (inclusive).\n [$PYNONYMIZER_START_AT]\n --skip-steps STEP [STEP ...]\n Choose one or more steps to skip.\n [$PYNONYMIZER_SKIP_STEPS]\n --stop-at STEP Choose a step to stop at (inclusive).\n [$PYNONYMIZER_STOP_AT]\n --seed-rows SEED_ROWS\n Specify a number of rows to populate the fake data\n table used during anonymization.\n [$PYNONYMIZER_SEED_ROWS]\n --mssql-backup-compression\n [MSSQL] Use compression when backing up the database.\n [$PYNONYMIZER_MSSQL_BACKUP_COMPRESSION]\n -v, --version show program's version number and exit\n```\n\n## License\n\n[MIT](https://gitlab.com/jerometwell/pynonymizer/blob/master/LICENSE)\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://gitlab.com/jerometwell/pynonymizer", "keywords": "anonymization gdpr database mysql", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "pynonymizer", "package_url": "https://pypi.org/project/pynonymizer/", "platform": "", "project_url": "https://pypi.org/project/pynonymizer/", "project_urls": { "Homepage": "https://gitlab.com/jerometwell/pynonymizer" }, "release_url": "https://pypi.org/project/pynonymizer/1.6.2/", "requires_dist": [ "pyyaml (>=5)", "tqdm (>=4)", "faker (>=1)", "python-dotenv (>=0.10)", "pyodbc (>=4.0.26) ; extra == 'mssql'" ], "requires_python": "", "summary": "An anonymization tool for production databases", "version": "1.6.2" }, "last_serial": 5844014, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "4fb27bd0f7fe598f2b3e7f693a13ed55", "sha256": "c952dcd8aba17abc4cf68ab176ad78387bd199d428ad96e8ef9f0e220ddef770" }, "downloads": -1, "filename": "pynonymizer-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4fb27bd0f7fe598f2b3e7f693a13ed55", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15486, "upload_time": "2019-06-04T22:48:31", "url": "https://files.pythonhosted.org/packages/e5/a4/3b7879a722bc536be1798412936d78e80f724c73cd92265cdd2f2da1b1b0/pynonymizer-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f045f9e522753d6b84f1e739b4b15e4c", "sha256": "23664ec74f87edb59be51ecb6cb915ea889dcd214601d6fa53a8c27b94937513" }, "downloads": -1, "filename": "pynonymizer-1.0.0.tar.gz", "has_sig": false, "md5_digest": "f045f9e522753d6b84f1e739b4b15e4c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9186, "upload_time": "2019-06-04T22:48:33", "url": "https://files.pythonhosted.org/packages/78/f8/b55a116e196fbbe8d57c958a74f992f41df3b1ece7a4bd2635593d4a122b/pynonymizer-1.0.0.tar.gz" } ], "1.1.2": [ { "comment_text": "", "digests": { "md5": "b814e690426ebc5e5102fc1d76c37988", "sha256": "7c6f3debd1af15e242d6542d51d44be86e71469bdeda46d5bee7b95e59b0f7a8" }, "downloads": -1, "filename": "pynonymizer-1.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "b814e690426ebc5e5102fc1d76c37988", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 16764, "upload_time": "2019-06-08T01:51:59", "url": "https://files.pythonhosted.org/packages/cc/49/561d6e3e9d52dc6d7ac27334eec926f77f5e45c44abf41568a6776be3682/pynonymizer-1.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c1acb42efdbc764eaaaf9c53908944e3", "sha256": "2e899b81bc47f2b45131a3658d92c40574f0d09731035dae3e0409db4aafaf24" }, "downloads": -1, "filename": "pynonymizer-1.1.2.tar.gz", "has_sig": false, "md5_digest": "c1acb42efdbc764eaaaf9c53908944e3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10742, "upload_time": "2019-06-08T01:52:01", "url": "https://files.pythonhosted.org/packages/bc/aa/4bc7bc6e9c20546acf7c45dfca412912e7e61660e02a8ffa00c8d1168366/pynonymizer-1.1.2.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "3cfe1004690864567f8a0230a137f2ff", "sha256": "c45bf4b8b72877035bfc99a3a6f8e6b424c7f82e76076fa4f5e4d639d866bdf0" }, "downloads": -1, "filename": "pynonymizer-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "3cfe1004690864567f8a0230a137f2ff", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 19292, "upload_time": "2019-06-14T13:55:22", "url": "https://files.pythonhosted.org/packages/2b/e7/5f6316638bab91e1bec3c44e27d42a291ec5741af543f693d8bfcfaf339d/pynonymizer-1.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3dae12a49067e18d55ddd8ad122a00a6", "sha256": "77d94d81b8ba09679bb703dac45f9c378e2612812223c3797e8974e701e29dde" }, "downloads": -1, "filename": "pynonymizer-1.2.0.tar.gz", "has_sig": false, "md5_digest": "3dae12a49067e18d55ddd8ad122a00a6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14860, "upload_time": "2019-06-14T13:55:23", "url": "https://files.pythonhosted.org/packages/10/61/bbfa00f38d8cf7cd8247a7b10dab22d1f6097838eee4af3fab322fef42d4/pynonymizer-1.2.0.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "7615f28e7a3e5a5a18058c0a61c12d6f", "sha256": "1e063af6883ebbdbddc87bcfa6e9345eaad0d8cce06fe3cece48290cdbc89fff" }, "downloads": -1, "filename": "pynonymizer-1.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "7615f28e7a3e5a5a18058c0a61c12d6f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 21480, "upload_time": "2019-06-17T08:49:21", "url": "https://files.pythonhosted.org/packages/a1/2c/79e431742a92db2b3082bad5355898463b9da917396c4e0695b8ae14512a/pynonymizer-1.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ba5d1b939f1b05bf9fe58b3a0c43cefb", "sha256": "9020cd18389ce66611308bd69fc978ab310cabcaef5d6106a968c49836552575" }, "downloads": -1, "filename": "pynonymizer-1.3.0.tar.gz", "has_sig": false, "md5_digest": "ba5d1b939f1b05bf9fe58b3a0c43cefb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16633, "upload_time": "2019-06-17T08:49:23", "url": "https://files.pythonhosted.org/packages/c4/33/1e236c1c8c4e1913b6a27a9fc4b0c36efc016c29b6463c2cf19a4c6bf0ac/pynonymizer-1.3.0.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "5082b55a4e72ba35feba8da29b98b25b", "sha256": "4fffda63b1abb25e71fee953262cdd4dbd7dfb242ff16ca20d3e0490e736cae1" }, "downloads": -1, "filename": "pynonymizer-1.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5082b55a4e72ba35feba8da29b98b25b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23364, "upload_time": "2019-06-23T12:17:34", "url": "https://files.pythonhosted.org/packages/da/20/fdc288e95e2aa828b0d8bd0671de0d43947cdd2a716ac3bca534de2b3f55/pynonymizer-1.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "35464aa888a05125115152001e74beee", "sha256": "bb094b8290953ad32a10dd0d634daab13261ab1a6a5c226da9a85ac3f1a56a83" }, "downloads": -1, "filename": "pynonymizer-1.4.0.tar.gz", "has_sig": false, "md5_digest": "35464aa888a05125115152001e74beee", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18197, "upload_time": "2019-06-23T12:17:36", "url": "https://files.pythonhosted.org/packages/ae/e8/a1ebf927734de390088b14de4e871f23f6a6a4792645ec0fdc660e9b6738/pynonymizer-1.4.0.tar.gz" } ], "1.4.1": [ { "comment_text": "", "digests": { "md5": "b3333cd07d04ba24d06a5bd86ce9c3b9", "sha256": "e77438e0bb73b21160bff57c127b2e219469013edc99647d54835a5f5442ca69" }, "downloads": -1, "filename": "pynonymizer-1.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b3333cd07d04ba24d06a5bd86ce9c3b9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23324, "upload_time": "2019-06-29T21:43:28", "url": "https://files.pythonhosted.org/packages/28/86/8fadb2a1023e53dec5486cd0bf98451ebd881c86f77ef28b04ec5f2130bc/pynonymizer-1.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e18805a7fb3cd73a361be18eda4cad2c", "sha256": "f748943e4ff16b50d6b1f8b200f3eee3b16e1ce8f10722898472044bafd71e00" }, "downloads": -1, "filename": "pynonymizer-1.4.1.tar.gz", "has_sig": false, "md5_digest": "e18805a7fb3cd73a361be18eda4cad2c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18178, "upload_time": "2019-06-29T21:43:29", "url": "https://files.pythonhosted.org/packages/5a/08/7124ff7dc7da7df7ca032722a1fc51127ced9d098a8471eb817264f2e066/pynonymizer-1.4.1.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "582f98256a472fb41572ab2896f52f0a", "sha256": "834545b13c85eb7e9d64a4f577c5c8c233945ef3a4528223d6b86f6de2dfc0fd" }, "downloads": -1, "filename": "pynonymizer-1.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "582f98256a472fb41572ab2896f52f0a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 29188, "upload_time": "2019-07-13T15:16:54", "url": "https://files.pythonhosted.org/packages/db/1f/6d7317ae436b3711ef2da0564989a9d6c7a4c07b9d1350ce2817a4850448/pynonymizer-1.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dc50ecadb86fd5c3cb4019ae0d96352d", "sha256": "91cf4d2f7ecc83f00c60a44bb603b80d6c72d7fc88906abca9c103d25417d688" }, "downloads": -1, "filename": "pynonymizer-1.5.0.tar.gz", "has_sig": false, "md5_digest": "dc50ecadb86fd5c3cb4019ae0d96352d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22948, "upload_time": "2019-07-13T15:16:56", "url": "https://files.pythonhosted.org/packages/aa/2f/e85f5ced1e65a72629757f7f3ef72e16221f53222a4c34e389250d0fb10d/pynonymizer-1.5.0.tar.gz" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "dbe69b0481b13556b073ec7f52775752", "sha256": "2ebe42805c7f2fa04999345a0892c311917412f341d67f790504503770ed5ddf" }, "downloads": -1, "filename": "pynonymizer-1.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "dbe69b0481b13556b073ec7f52775752", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 59537, "upload_time": "2019-08-01T23:38:40", "url": "https://files.pythonhosted.org/packages/ef/8a/fce1bc00ff054f9b4d3d480e3329b30e8012345d50d927db33bad6ac6d3d/pynonymizer-1.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0afc36d2c619f85b6070acd7bb31d9f3", "sha256": "e9375413232c43be64c4c005cbce5c6590b34df997e23c1b78268f8c692a1682" }, "downloads": -1, "filename": "pynonymizer-1.6.0.tar.gz", "has_sig": false, "md5_digest": "0afc36d2c619f85b6070acd7bb31d9f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38406, "upload_time": "2019-08-01T23:38:42", "url": "https://files.pythonhosted.org/packages/c7/1a/cecf2ba08ab90f201523f80d43ebb5229ccbbd1dddaabb742969189e3e7b/pynonymizer-1.6.0.tar.gz" } ], "1.6.1": [ { "comment_text": "", "digests": { "md5": "2ef458caac76c7587c11009b3a2bd09e", "sha256": "326ede17117836002b53763da7cef9cb18c32d283764e24599690d632d99ca13" }, "downloads": -1, "filename": "pynonymizer-1.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2ef458caac76c7587c11009b3a2bd09e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 59541, "upload_time": "2019-08-02T00:05:34", "url": "https://files.pythonhosted.org/packages/6b/fe/4e4cc602f5ca7ad417f5126832d0af054fc69952291df9cafcd747024516/pynonymizer-1.6.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e2c4f9e40bfed525d2211db62a012ca0", "sha256": "9cf161f2ad4de0b5116c735b4439938adaa306421e3ab19362486ce1619c2af9" }, "downloads": -1, "filename": "pynonymizer-1.6.1.tar.gz", "has_sig": false, "md5_digest": "e2c4f9e40bfed525d2211db62a012ca0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38410, "upload_time": "2019-08-02T00:05:35", "url": "https://files.pythonhosted.org/packages/24/35/b4d85d813124528fc710754b82578b34f06d4d0574da7f29dce4ff0d3771/pynonymizer-1.6.1.tar.gz" } ], "1.6.2": [ { "comment_text": "", "digests": { "md5": "1d02b91ede99b8f947bc8cd8ab8532ec", "sha256": "99d935620a535851d589aed65d22d605e6bca8fc4a6baaa44160ebed871ebe64" }, "downloads": -1, "filename": "pynonymizer-1.6.2-py3-none-any.whl", "has_sig": false, "md5_digest": "1d02b91ede99b8f947bc8cd8ab8532ec", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 59519, "upload_time": "2019-09-17T20:47:38", "url": "https://files.pythonhosted.org/packages/ec/eb/39a9b1f14ae7d21819c494575a62c7ad3d0b07bf572e4c1be174bc99dd97/pynonymizer-1.6.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4b0ab6a92d4eb92be72e7d836bb3f99a", "sha256": "b33746eb94fdc97717b6e75d12c30b25dd7cb4e586b470e1911574a224567c01" }, "downloads": -1, "filename": "pynonymizer-1.6.2.tar.gz", "has_sig": false, "md5_digest": "4b0ab6a92d4eb92be72e7d836bb3f99a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38429, "upload_time": "2019-09-17T20:47:40", "url": "https://files.pythonhosted.org/packages/4a/3e/ded30c6c58dff3d0ac0926ad7a08840328d675551743e0afb7be9ba29040/pynonymizer-1.6.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "1d02b91ede99b8f947bc8cd8ab8532ec", "sha256": "99d935620a535851d589aed65d22d605e6bca8fc4a6baaa44160ebed871ebe64" }, "downloads": -1, "filename": "pynonymizer-1.6.2-py3-none-any.whl", "has_sig": false, "md5_digest": "1d02b91ede99b8f947bc8cd8ab8532ec", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 59519, "upload_time": "2019-09-17T20:47:38", "url": "https://files.pythonhosted.org/packages/ec/eb/39a9b1f14ae7d21819c494575a62c7ad3d0b07bf572e4c1be174bc99dd97/pynonymizer-1.6.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4b0ab6a92d4eb92be72e7d836bb3f99a", "sha256": "b33746eb94fdc97717b6e75d12c30b25dd7cb4e586b470e1911574a224567c01" }, "downloads": -1, "filename": "pynonymizer-1.6.2.tar.gz", "has_sig": false, "md5_digest": "4b0ab6a92d4eb92be72e7d836bb3f99a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 38429, "upload_time": "2019-09-17T20:47:40", "url": "https://files.pythonhosted.org/packages/4a/3e/ded30c6c58dff3d0ac0926ad7a08840328d675551743e0afb7be9ba29040/pynonymizer-1.6.2.tar.gz" } ] }