{
"info": {
"author": "Jason Jones",
"author_email": "jason@gaincompliance.com",
"bugtrack_url": null,
"classifiers": [
"Programming Language :: Python",
"Programming Language :: Python :: 2"
],
"description": "|Build Status|\n\nAdds an immutable audit trail to any\n`NDB `__ entity\n(including\n`Expando `__-based\nmodels) built by the `engineering team at Gain Compliance `__.\n\nData structures are optimized for write performance and query-ability at\nthe expense of read performance and size of data. However, it is\nminimally invasive on the entity you add it to. It only adds two\nproperties to the main entity totalling 32 characters and does not\nprevent you from doing normal get by key\n\nYou should read the below description of the data model (and especially\nentity groups) to ensure you don't cause datastore contention problems\nwith EGs that are too big\n\nFeatures\n--------\n\n- Full history of an entity's changes are recorded in a way that should\n be easily query-able\n- Audit history is atomically updated when the entity is put, even if\n all the entity's properties are the same\n- Supports account (string), timestamp (datetime), data\\_hash (SHA-1 of\n properties) tracking\n- Strongly consistent retrieval of audit history\n- (WIP)Flexible \"tagging\" system to track progress along the chain of\n changes by a user, system, etc\n- (Future) \"at revision\" fetching of data\n- (Future) Diffing between revisions\n- (Future) Collision detection and merging\n\nData Model\n----------\n\nFor a given entity 'E' of kind 'EKind', ndb\\_audit will monitor all puts\nto entities who include the AuditMixin. Upon put a new Audit entity 'A'\nwill be created which will be a complete copy of the entity. The entity\nA will have the following:\n\n- A will be of kind 'Audit'\n- A will carry the namespace if the\n `namespace\\_manager `__\n is used\n- A will contain a copy of every datastore property of E as it was when\n it was put\n- The parent entity of A will be E\n- The key of A will be ndb.Key(parent=, pairs=[('Audit', )])\n- An attribute will be added to E called 'd', and a python property\n will be added to your class to access this value as data\\_hash. This\n value is added to your entity to allow caching based on the\n data\\_hash by all clients. At a given value for data\\_hash E will\n always be the same. The data\\_hash is a truncated SHA-1 hash of\n properties of the entity\n- An attribute will be added to E called 'h', and a python property\n will be added to your class to access this value as rev\\_hash. This\n value is added to your entity to allow you to track which revision\n the current entity is at. The rev\\_hash is a truncated SHA-1 hash of\n parent rev\\_hash, account string, and data\\_hash properties of the\n entity\n- No other properties will be added to E, instead you will have to\n fetch the audit entities -- this is to keep overhead on E as small as\n possible\n\n\nUsage\n-----\n\nTODO\n\n.. |Build Status| image:: https://travis-ci.org/GainCompliance/ndb_audit.svg\n :target: https://travis-ci.org/GainCompliance/ndb_audit\n\n\n",
"description_content_type": "",
"docs_url": null,
"download_url": "",
"downloads": {
"last_day": -1,
"last_month": -1,
"last_week": -1
},
"home_page": "https://github.com/GainCompliance/ndb-audit",
"keywords": "google,appengine,datastore,NDB,audit",
"license": "MIT",
"maintainer": "",
"maintainer_email": "",
"name": "ndb-audit",
"package_url": "https://pypi.org/project/ndb-audit/",
"platform": "",
"project_url": "https://pypi.org/project/ndb-audit/",
"project_urls": {
"Homepage": "https://github.com/GainCompliance/ndb-audit"
},
"release_url": "https://pypi.org/project/ndb-audit/1.1.10/",
"requires_dist": null,
"requires_python": "",
"summary": "Adds audit trail to any Google Datastore NDB entity",
"version": "1.1.10"
},
"last_serial": 3978955,
"releases": {
"0.1.1": [
{
"comment_text": "",
"digests": {
"md5": "f3d25834126b8124ffe034727328fa51",
"sha256": "9c753c5476de972027c69677bf4b3a198838fd7b7f9af156c7424c5b0b585dfd"
},
"downloads": -1,
"filename": "ndb_audit-0.1.1-py2-none-any.whl",
"has_sig": false,
"md5_digest": "f3d25834126b8124ffe034727328fa51",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 7875,
"upload_time": "2017-02-24T05:48:51",
"url": "https://files.pythonhosted.org/packages/23/24/af9411bb2abe3afd48d826d977690940e5c6235f051bf8de0a21d0a13de3/ndb_audit-0.1.1-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "b779df968809d42fcf19ba0aeafc0e79",
"sha256": "959427914c30b33e7a31055c97f4725625a80f0ca7e16b62eb1c2f63b3c26db0"
},
"downloads": -1,
"filename": "ndb_audit-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "b779df968809d42fcf19ba0aeafc0e79",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7452,
"upload_time": "2017-02-24T05:48:53",
"url": "https://files.pythonhosted.org/packages/56/4e/4404314ba9617ffeb745077d841acafe71fb36061bd63203bfbc8a1a1212/ndb_audit-0.1.1.tar.gz"
}
],
"1.0.0": [
{
"comment_text": "",
"digests": {
"md5": "508dd878efbc9ee635b446d6c4fe8bf4",
"sha256": "e1679e2c198e4dd69d1c3b75fdb00f3f717453848815a78106f959851fa75787"
},
"downloads": -1,
"filename": "ndb_audit-1.0.0-py2-none-any.whl",
"has_sig": false,
"md5_digest": "508dd878efbc9ee635b446d6c4fe8bf4",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 8106,
"upload_time": "2017-03-01T20:10:55",
"url": "https://files.pythonhosted.org/packages/0c/de/07f9085daaa7c8f03ec33ad9b2de2eb29eacca54b1f883a47890f2f78e7a/ndb_audit-1.0.0-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "743562cfa9617f243c1e51ac22a34f87",
"sha256": "a3d2d74f18cd87d5d8f34e26245d6f37b67e738a35e5cea7b116b5ec04f30fad"
},
"downloads": -1,
"filename": "ndb_audit-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "743562cfa9617f243c1e51ac22a34f87",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7896,
"upload_time": "2017-03-01T20:10:56",
"url": "https://files.pythonhosted.org/packages/3b/31/dbcf20fec71d2386b5577f8197dbedb489db2a2eaf3934468c9ccc671423/ndb_audit-1.0.0.tar.gz"
}
],
"1.1.0": [],
"1.1.1": [
{
"comment_text": "",
"digests": {
"md5": "ff98f3e02692f9f3de6dc9293c90c70f",
"sha256": "afcc46f2a4caea2f57609c777b4ad26d068c98412bba65c2393a791beca15140"
},
"downloads": -1,
"filename": "ndb_audit-1.1.1-py2-none-any.whl",
"has_sig": false,
"md5_digest": "ff98f3e02692f9f3de6dc9293c90c70f",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 8137,
"upload_time": "2017-03-01T20:42:19",
"url": "https://files.pythonhosted.org/packages/a7/5f/c2383464f6addc84a5d704ef0aa1ca1e2a3207db45332fb93267e00c01d9/ndb_audit-1.1.1-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "92efc5d99b228dc9335d466c964f5321",
"sha256": "bf0f10d45d58df4dc8d321eb8a1a9503bfd78663966be0567daf0095d4c1e729"
},
"downloads": -1,
"filename": "ndb_audit-1.1.1.tar.gz",
"has_sig": false,
"md5_digest": "92efc5d99b228dc9335d466c964f5321",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7965,
"upload_time": "2017-03-01T20:42:21",
"url": "https://files.pythonhosted.org/packages/94/4c/89d9e7d682577f9b83d63932b78bb049570db96757fdb32705d74101e771/ndb_audit-1.1.1.tar.gz"
}
],
"1.1.10": [
{
"comment_text": "",
"digests": {
"md5": "4fa5f3eff96f621ce54e7391df4ce9d0",
"sha256": "9209d7de0e5b8f3e331ab8f0df62d57690950029dd20ab7eabee4cbaac192aae"
},
"downloads": -1,
"filename": "ndb_audit-1.1.10-py2-none-any.whl",
"has_sig": false,
"md5_digest": "4fa5f3eff96f621ce54e7391df4ce9d0",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 6046,
"upload_time": "2018-06-19T20:32:05",
"url": "https://files.pythonhosted.org/packages/b5/0e/6c6eb971500cd84d90f8fc752dae061029a1e83fd72dc1ece7982842b77d/ndb_audit-1.1.10-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "579f7339dce9a007422dbc7aa4a36d52",
"sha256": "215f82eaf5d52920a86e4d8fc636011f6a239e9dbbd18234ba212ebeb433cfce"
},
"downloads": -1,
"filename": "ndb_audit-1.1.10.tar.gz",
"has_sig": false,
"md5_digest": "579f7339dce9a007422dbc7aa4a36d52",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8246,
"upload_time": "2018-06-19T20:32:06",
"url": "https://files.pythonhosted.org/packages/48/a8/288baac0db1b3d23df1ff74b51e4e9e309c87c96dab5104a531b2e76c371/ndb_audit-1.1.10.tar.gz"
}
],
"1.1.2": [
{
"comment_text": "",
"digests": {
"md5": "615d30762991ef544aedd676e797d62b",
"sha256": "49710e5521b26e1216bd5f6467f6fc6c4c10ea3f869f2ccd923d2ee7f0d80c96"
},
"downloads": -1,
"filename": "ndb_audit-1.1.2-py2-none-any.whl",
"has_sig": false,
"md5_digest": "615d30762991ef544aedd676e797d62b",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 8206,
"upload_time": "2017-03-08T01:35:06",
"url": "https://files.pythonhosted.org/packages/ec/d7/b5e9c1809c9cd79d03c4140c65ca0698571aecaf0630358f229c8f95c0bf/ndb_audit-1.1.2-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "489a6ab6396c5abbf58461eacaad8633",
"sha256": "d2fd80a8fe8cc5aebc62c8eff78c374d00b38abe3bff0e92520d1986306af1a3"
},
"downloads": -1,
"filename": "ndb_audit-1.1.2.tar.gz",
"has_sig": false,
"md5_digest": "489a6ab6396c5abbf58461eacaad8633",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7992,
"upload_time": "2017-03-08T01:35:07",
"url": "https://files.pythonhosted.org/packages/bd/35/112d6a0cea3fe2a03369f294bbed05910d71e5291b70a0c18c574b9aa7c1/ndb_audit-1.1.2.tar.gz"
}
],
"1.1.4": [
{
"comment_text": "",
"digests": {
"md5": "f774a7134e73ba67d42233be6a82e1a0",
"sha256": "fd8bf00a5c277396becb1b39a1eb07f93cf12e3e1d6baa364f11dbd671368bee"
},
"downloads": -1,
"filename": "ndb_audit-1.1.4-py2-none-any.whl",
"has_sig": false,
"md5_digest": "f774a7134e73ba67d42233be6a82e1a0",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 8109,
"upload_time": "2017-03-09T22:27:36",
"url": "https://files.pythonhosted.org/packages/6b/39/c3f97955d9cfb1b420e38434787ba6783693187369220d6aa51e4a923b2d/ndb_audit-1.1.4-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "603f7990c5e74b6f581999b023395895",
"sha256": "49bfa59e168a2393891d16a0e6c2c80b5f5417124c5220275c6cfca3c574bffb"
},
"downloads": -1,
"filename": "ndb_audit-1.1.4.tar.gz",
"has_sig": false,
"md5_digest": "603f7990c5e74b6f581999b023395895",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 7932,
"upload_time": "2017-03-09T22:27:38",
"url": "https://files.pythonhosted.org/packages/7d/c9/c5af26e0454712fc2833c933a61f2375c8d64dce819310423f02b9458e9e/ndb_audit-1.1.4.tar.gz"
}
],
"1.1.5": [
{
"comment_text": "",
"digests": {
"md5": "47bbae168f87c977c4b3f27dd2fd20c0",
"sha256": "92e247cde291b750e9f8eed368efc01b4ba854099e2a97e7a9bd9035c603ca5d"
},
"downloads": -1,
"filename": "ndb_audit-1.1.5-py2-none-any.whl",
"has_sig": false,
"md5_digest": "47bbae168f87c977c4b3f27dd2fd20c0",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 8217,
"upload_time": "2017-04-27T19:49:45",
"url": "https://files.pythonhosted.org/packages/6a/77/577ddc134a365c5eee312bdf7ae5d71b18c1ca62db0fef3503623341d697/ndb_audit-1.1.5-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "2611bc2ea86e7f0a406adbdea4278523",
"sha256": "f68b0e0e308eddb0d4060a802ac8d9ddc43f6261a1518833cedd424aa6151af7"
},
"downloads": -1,
"filename": "ndb_audit-1.1.5.tar.gz",
"has_sig": false,
"md5_digest": "2611bc2ea86e7f0a406adbdea4278523",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8129,
"upload_time": "2017-04-27T19:49:47",
"url": "https://files.pythonhosted.org/packages/8b/9e/74c00bd58e1c37b9bd5254daeec375e7c59c924780af348fce198539e6c0/ndb_audit-1.1.5.tar.gz"
}
],
"1.1.7": [
{
"comment_text": "",
"digests": {
"md5": "c9bd215d711eaa244e29b2ef4c855ba2",
"sha256": "f2c40b846a68bf06969a8f7106e778e1563724b427bf7b68217879d7f07145b8"
},
"downloads": -1,
"filename": "ndb_audit-1.1.7-py2-none-any.whl",
"has_sig": false,
"md5_digest": "c9bd215d711eaa244e29b2ef4c855ba2",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 8152,
"upload_time": "2017-05-10T17:59:06",
"url": "https://files.pythonhosted.org/packages/25/35/b33d63939fc71b3e290794af36d34080af68c033d34e853f60dbba9d660a/ndb_audit-1.1.7-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "a95c6ff4919eb875acef64047d0533ce",
"sha256": "3654ef2e3e7808e824e62cf71ab67aac823338492f21179f538204ed694a1e75"
},
"downloads": -1,
"filename": "ndb_audit-1.1.7.tar.gz",
"has_sig": false,
"md5_digest": "a95c6ff4919eb875acef64047d0533ce",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8163,
"upload_time": "2017-05-10T17:59:08",
"url": "https://files.pythonhosted.org/packages/dc/08/4ee519d6a55b6bfde5267ab640d2f2bc3e2a55e23d998ffd73b0c1a11d40/ndb_audit-1.1.7.tar.gz"
}
],
"1.1.8": [
{
"comment_text": "",
"digests": {
"md5": "3897fa934acf5bdff2837cd4f8c81b70",
"sha256": "4ce3d6de8076335748f6b8023824e645f741bb702bc99e1f72a68cd8189e56a7"
},
"downloads": -1,
"filename": "ndb_audit-1.1.8-py2-none-any.whl",
"has_sig": false,
"md5_digest": "3897fa934acf5bdff2837cd4f8c81b70",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 8203,
"upload_time": "2017-05-16T20:15:07",
"url": "https://files.pythonhosted.org/packages/7e/e5/fddf64d7fdf05c71ea7b1379284d496ce4022fd985eee8c94cf55c8371d6/ndb_audit-1.1.8-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "ddce836eb0e47b232cf7c02f083c76ce",
"sha256": "d6b5ef331361919d8ea8148abbc5918e52bb76de1cea7af9012de1a0a64b3c3d"
},
"downloads": -1,
"filename": "ndb_audit-1.1.8.tar.gz",
"has_sig": false,
"md5_digest": "ddce836eb0e47b232cf7c02f083c76ce",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8213,
"upload_time": "2017-05-16T20:15:09",
"url": "https://files.pythonhosted.org/packages/7a/e4/1e9f995f73555649efa33fafb503471e5162962ac98f5b3785b127ee67ca/ndb_audit-1.1.8.tar.gz"
}
],
"1.1.9": [
{
"comment_text": "",
"digests": {
"md5": "c16e38012392da93205c7538320a75a2",
"sha256": "45d863963a24e324c350b6c04b4691ef2f6e19e149cca9c4680b204b9a4dcc9f"
},
"downloads": -1,
"filename": "ndb_audit-1.1.9-py2-none-any.whl",
"has_sig": false,
"md5_digest": "c16e38012392da93205c7538320a75a2",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 8223,
"upload_time": "2017-08-30T13:36:05",
"url": "https://files.pythonhosted.org/packages/b0/a6/007a707312a3c1b0b19dfa19acc003c07d3261064f13d8af0855b07c07e5/ndb_audit-1.1.9-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "afa83af3eb3b77e7609445bd08ef99de",
"sha256": "1f7d081477f9ff76437c3483755edb987bb806172c4daf87d299d3570e0c09db"
},
"downloads": -1,
"filename": "ndb_audit-1.1.9.tar.gz",
"has_sig": false,
"md5_digest": "afa83af3eb3b77e7609445bd08ef99de",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8227,
"upload_time": "2017-08-30T13:36:08",
"url": "https://files.pythonhosted.org/packages/ae/be/88fcfd571dff4d07a358e16f643dfca7fdb6c30e390d61e2753192b337f6/ndb_audit-1.1.9.tar.gz"
}
]
},
"urls": [
{
"comment_text": "",
"digests": {
"md5": "4fa5f3eff96f621ce54e7391df4ce9d0",
"sha256": "9209d7de0e5b8f3e331ab8f0df62d57690950029dd20ab7eabee4cbaac192aae"
},
"downloads": -1,
"filename": "ndb_audit-1.1.10-py2-none-any.whl",
"has_sig": false,
"md5_digest": "4fa5f3eff96f621ce54e7391df4ce9d0",
"packagetype": "bdist_wheel",
"python_version": "py2",
"requires_python": null,
"size": 6046,
"upload_time": "2018-06-19T20:32:05",
"url": "https://files.pythonhosted.org/packages/b5/0e/6c6eb971500cd84d90f8fc752dae061029a1e83fd72dc1ece7982842b77d/ndb_audit-1.1.10-py2-none-any.whl"
},
{
"comment_text": "",
"digests": {
"md5": "579f7339dce9a007422dbc7aa4a36d52",
"sha256": "215f82eaf5d52920a86e4d8fc636011f6a239e9dbbd18234ba212ebeb433cfce"
},
"downloads": -1,
"filename": "ndb_audit-1.1.10.tar.gz",
"has_sig": false,
"md5_digest": "579f7339dce9a007422dbc7aa4a36d52",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 8246,
"upload_time": "2018-06-19T20:32:06",
"url": "https://files.pythonhosted.org/packages/48/a8/288baac0db1b3d23df1ff74b51e4e9e309c87c96dab5104a531b2e76c371/ndb_audit-1.1.10.tar.gz"
}
]
}