{ "info": { "author": "javdrher", "author_email": "joachim@ml2grow.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6" ], "description": "# \u03bcDatastore: ODM for Google Cloud Datastore\nImplemented as framework in the [\u03bcMongo](https://github.com/Scille/umongo) library (a python ODM for MongoDB)\n\nWhile working Google Cloud Datastore, most of our code uses the `google-cloud-datastore` package, \nfor creating, updating and querying entities. We often find ourselves writing code to export objects\nto `datastore.Entity`, and import from entities to objects. On AppEngine, there is `ndb` which avoids this,\nso the idea emerged to create an ODM for datastore ourselves. \n\nHaving worked with \u03bcMongo before, a prototype was created which implements an additional framework based on \nfollowing conventions:\n* A datastore partition (project/namespace) corresponds to a mongo database\n* A datastore entity kind corresponds to a mongo collection\n* The datastore `__key__` field corresponds to the mongo `_id` field\n\n## Install\n\n pip install udatastore\n\n## Example\n```python\nfrom datetime import datetime\nfrom google.cloud import datastore\nfrom udatastore import DataStoreInstance\nfrom umongo import Document, fields, validate\n\n\ndb = datastore.Client(project=\"dummy\", namespace='abcd')\ninstance = DataStoreInstance()\ninstance.init(db)\n\n\n@instance.register\nclass User(Document):\n email = fields.EmailField(required=True, unique=True)\n birthday = fields.DateTimeField(validate=validate.Range(min=datetime(1900, 1, 1)))\n friends = fields.ListField(fields.ReferenceField(\"User\"))\n\ngoku = User(email='goku@sayen.com', birthday=datetime(1984, 11, 20))\ngoku.commit()\nvegeta = User(email='vegeta@over9000.com', friends=[goku])\nvegeta.commit()\n\nvegeta.friends\n# )>])>\nvegeta.dump()\n# {'email': 'vegeta@over9000.com', 'id': '4477', 'friends': []}\nUser.find_one({\"email\": 'goku@sayen.com'})\n# ,\n# 'birthday': datetime.datetime(1984, 11, 20, 0, 0)})>\n```\n\n## Limitations:\nNot all features of \u03bcMongo are available or work exactly the same in \u03bcDatastore:\n* No indexes\n* We do not currently support all field types\n* Datastore converts any `datetime` to UTC timezone. For now, \u03bcDatastore overrides this behaviour and always works with\nunaware datetimes.\n* We bring our own `ReferenceField` implementation. You are free to use `umongo.fields.ReferenceField`, as the `DataStoreBuilder` \nwill automatically replace these fields with our implementation. We also disable the io_validation on reference fields.\nBecause datastore is eventually consistent this may report errors when creating references to previously created entities.\n\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://github.com/ml2grow/udatastore", "keywords": "udatastore umongo pymongo datastore", "license": "Apache License 2.0", "maintainer": "", "maintainer_email": "", "name": "udatastore", "package_url": "https://pypi.org/project/udatastore/", "platform": "", "project_url": "https://pypi.org/project/udatastore/", "project_urls": { "Homepage": "https://github.com/ml2grow/udatastore" }, "release_url": "https://pypi.org/project/udatastore/0.1.7/", "requires_dist": [ "umongo (<1.3,>=1.2.0)", "pymongo (<3.8,>=3.7.2)", "google-cloud-datastore (<1.8,>=1.7.0)", "nox ; extra == 'test'" ], "requires_python": "", "summary": "Datastore framework implementation for umongo", "version": "0.1.7" }, "last_serial": 5262927, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "269f3a4f4559f4402434be1bef9054ee", "sha256": "572d9ae2acc44eeafc36a25a4abee5707b5c0ff5ec3add15a3de9e844db5b905" }, "downloads": -1, "filename": "udatastore-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "269f3a4f4559f4402434be1bef9054ee", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17212, "upload_time": "2018-11-20T13:25:01", "url": "https://files.pythonhosted.org/packages/25/b2/6569209fc70a9cfd3abea8db1201de0c1e75beeb95ba3e5d2e94c484ded9/udatastore-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d3d8141d8022f8bc115666a2752c8a76", "sha256": "33b75cecef87163cff259b96c1f9aebd5c44ad2207a3f953fa5c53a4bf8c6dda" }, "downloads": -1, "filename": "udatastore-0.1.0.tar.gz", "has_sig": false, "md5_digest": "d3d8141d8022f8bc115666a2752c8a76", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9457, "upload_time": "2018-11-20T13:25:03", "url": "https://files.pythonhosted.org/packages/e7/89/1a20c0f77be4954cd24b27759f645ed2c49a53e952e4e069d5fbcdf93677/udatastore-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "dbce9f2605a3600000b0b05d9d29591d", "sha256": "8ec17da405c910d4ce1b83e6d80a70f91244da35b651365ea227697689cb58e3" }, "downloads": -1, "filename": "udatastore-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dbce9f2605a3600000b0b05d9d29591d", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17434, "upload_time": "2018-12-18T14:53:43", "url": "https://files.pythonhosted.org/packages/ba/e1/8b447d2953a0c047e8677f792475094a3c5f47cd326c9320b1d0fafdbea4/udatastore-0.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e4b986d9ee739196d76d028b4c5a84cc", "sha256": "5e70b7e893b6e77ee6b849042fd7988420ea4d24f5bebfaf6e2384b8074d181d" }, "downloads": -1, "filename": "udatastore-0.1.1.tar.gz", "has_sig": false, "md5_digest": "e4b986d9ee739196d76d028b4c5a84cc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9646, "upload_time": "2018-12-18T14:53:45", "url": "https://files.pythonhosted.org/packages/e8/2e/e53ede0618318e9223aba5d9e4d14f0262ed5efef82b405376047c087178/udatastore-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "00a0ecacc6145cfa21ca1fed8dbf9b23", "sha256": "921d4a287a0f2f12ee711ec9ae152b5a0ece5fe65d6afa4b1faa8f5be75755b3" }, "downloads": -1, "filename": "udatastore-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "00a0ecacc6145cfa21ca1fed8dbf9b23", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17440, "upload_time": "2018-12-18T16:33:02", "url": "https://files.pythonhosted.org/packages/cd/ba/e639a444509b95e4249b0b0d85a491ff5c4e02aab1a3add5336822915021/udatastore-0.1.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "93545749389cefec894d5e2ee32e0d3e", "sha256": "0335192c03642d2ef67c516d4a0f0e8ac9a4e04f59a6689829516d96ae81bc16" }, "downloads": -1, "filename": "udatastore-0.1.2.tar.gz", "has_sig": false, "md5_digest": "93545749389cefec894d5e2ee32e0d3e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9641, "upload_time": "2018-12-18T16:33:03", "url": "https://files.pythonhosted.org/packages/96/07/8019fc7e960c8eb625c95da88644b44e6e9190109080dba7b25e71d9d59d/udatastore-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "b024fa5e2b374800c4fef895a718f4f5", "sha256": "a88a926bbc86ee83272cbd0d5661e83be86149839e7c3142fdcca3b3a771ad6c" }, "downloads": -1, "filename": "udatastore-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b024fa5e2b374800c4fef895a718f4f5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17523, "upload_time": "2019-01-28T09:02:37", "url": "https://files.pythonhosted.org/packages/dd/c7/8c6343407bca508f6d9f1a9ef3b3c6396b1d0e339ed45a5d94f5042cd6e8/udatastore-0.1.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cf8435e2150800d531cd7a98355bd97a", "sha256": "2189b35e1ec16bf0ef580bda7bcec9dcb9cac8cbaa661b38602764e0ae669564" }, "downloads": -1, "filename": "udatastore-0.1.3.tar.gz", "has_sig": false, "md5_digest": "cf8435e2150800d531cd7a98355bd97a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9724, "upload_time": "2019-01-28T09:02:39", "url": "https://files.pythonhosted.org/packages/bc/84/585f2309376e18336ce5df8a4d8820ee90d007283a19d099d998a39e388c/udatastore-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "68556a93b6f3bfdc98107b1ec6d93206", "sha256": "60ff119de96f3a6c763145beaecdc4055c2ff5d220b7fcd2be93c9f6f65a1016" }, "downloads": -1, "filename": "udatastore-0.1.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "68556a93b6f3bfdc98107b1ec6d93206", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17590, "upload_time": "2019-01-28T16:06:47", "url": "https://files.pythonhosted.org/packages/ad/04/b736bd896646b93b7acd7d889dab9e762bcc761cc18e6f1dc92d9c1c4c19/udatastore-0.1.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "712543535baea8b0ef932f6ee7a75a14", "sha256": "78c377d5891e6aa6307d8f97b3b317f783f347aa41dc6db844d8e22066aacedd" }, "downloads": -1, "filename": "udatastore-0.1.4.tar.gz", "has_sig": false, "md5_digest": "712543535baea8b0ef932f6ee7a75a14", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9774, "upload_time": "2019-01-28T16:06:48", "url": "https://files.pythonhosted.org/packages/8b/e1/811bd022c8747fd6a5a16f0b58695b1e0d2d1570b0982fcc8645317e83e7/udatastore-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "e8f854c3817324ab07311fa66878651f", "sha256": "f6289c51c7aa68273e93d0fa24bd8a3301345bf6ef7c9ed22ed6947a5a04ace0" }, "downloads": -1, "filename": "udatastore-0.1.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e8f854c3817324ab07311fa66878651f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17591, "upload_time": "2019-03-19T13:51:58", "url": "https://files.pythonhosted.org/packages/a1/c2/884ae281c6eedc5fa298961645a0db6d18e366b9069608f500bc11f58ab2/udatastore-0.1.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5f430b5e166ed0fa23103d69bd63ea16", "sha256": "cfd0d22ee245218f816d7af351e84e3af9ac824600de5d766f49b304ffab74d5" }, "downloads": -1, "filename": "udatastore-0.1.5.tar.gz", "has_sig": false, "md5_digest": "5f430b5e166ed0fa23103d69bd63ea16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9803, "upload_time": "2019-03-19T13:51:59", "url": "https://files.pythonhosted.org/packages/29/27/8a404e0f23b10ef0bafbfc27dfee7469c4d09ff8204b587d4e394e7de548/udatastore-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "f0fcabc21f16ddb36614bca210fee9a8", "sha256": "de6903582e530d20ba9eebdd802c5e60f88708719e1945a958c39de34b6f2d78" }, "downloads": -1, "filename": "udatastore-0.1.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f0fcabc21f16ddb36614bca210fee9a8", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17697, "upload_time": "2019-05-13T11:30:15", "url": "https://files.pythonhosted.org/packages/4a/1f/f123c96f00d02858d01cdc2104ab6be2f6c28d0436bad450e927425ffd4c/udatastore-0.1.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0419eba7729c225fc5fd955e0b347daa", "sha256": "7171ccd352809f3356b42da6083d3ec09a447f3594eda118da07bd4fbd84591d" }, "downloads": -1, "filename": "udatastore-0.1.6.tar.gz", "has_sig": false, "md5_digest": "0419eba7729c225fc5fd955e0b347daa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9893, "upload_time": "2019-05-13T11:30:16", "url": "https://files.pythonhosted.org/packages/88/65/09a056b1aea5e0a1c88afb03caf0ef7025bd8709f232eb08e0741dabf0fe/udatastore-0.1.6.tar.gz" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "16abbac02fba07e87379e820fdffc5af", "sha256": "b409cbbf1c6ae793e2af5822b9a1a3c01b71f3a2ba6b34182c2e956e0527f7dd" }, "downloads": -1, "filename": "udatastore-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "16abbac02fba07e87379e820fdffc5af", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17772, "upload_time": "2019-05-13T15:16:12", "url": "https://files.pythonhosted.org/packages/a9/a5/c38414af6fe1b48025e916c2be278a35fe1e2f408a07e71829cf43829805/udatastore-0.1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fd36b42ec6ec4f04ca4fd263367f1202", "sha256": "608eb2d49f504f309c0f3c07dd4a182c720c0526348d252fb35d374f6f130ddd" }, "downloads": -1, "filename": "udatastore-0.1.7.tar.gz", "has_sig": false, "md5_digest": "fd36b42ec6ec4f04ca4fd263367f1202", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9955, "upload_time": "2019-05-13T15:16:13", "url": "https://files.pythonhosted.org/packages/32/88/72fa762661e10fab4fab607bae13d567ec8c1cb65d1c921c37412465efa6/udatastore-0.1.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "16abbac02fba07e87379e820fdffc5af", "sha256": "b409cbbf1c6ae793e2af5822b9a1a3c01b71f3a2ba6b34182c2e956e0527f7dd" }, "downloads": -1, "filename": "udatastore-0.1.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "16abbac02fba07e87379e820fdffc5af", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 17772, "upload_time": "2019-05-13T15:16:12", "url": "https://files.pythonhosted.org/packages/a9/a5/c38414af6fe1b48025e916c2be278a35fe1e2f408a07e71829cf43829805/udatastore-0.1.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fd36b42ec6ec4f04ca4fd263367f1202", "sha256": "608eb2d49f504f309c0f3c07dd4a182c720c0526348d252fb35d374f6f130ddd" }, "downloads": -1, "filename": "udatastore-0.1.7.tar.gz", "has_sig": false, "md5_digest": "fd36b42ec6ec4f04ca4fd263367f1202", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9955, "upload_time": "2019-05-13T15:16:13", "url": "https://files.pythonhosted.org/packages/32/88/72fa762661e10fab4fab607bae13d567ec8c1cb65d1c921c37412465efa6/udatastore-0.1.7.tar.gz" } ] }