{ "info": { "author": "Vi Engineering", "author_email": "voiceai-eng@dialpad.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Internet" ], "description": "Asyncio Python Client for Google Cloud Datastore\n================================================\n\n|aio-pypi| |aio-pythons| |rest-pypi| |rest-pythons|\n\nInstallation\n------------\n\n.. code-block:: console\n\n $ pip install --upgrade gcloud-rest-datastore\n # or\n $ pip install --upgrade gcloud-rest-datastore\n\nUsage\n-----\n\nWe're still working on documentation; for now, this should help get you\nstarted:\n\n.. code-block:: python\n\n from gcloud.rest.datastore import Datastore\n from gcloud.rest.datastore import Direction\n from gcloud.rest.datastore import Filter\n from gcloud.rest.datastore import GQLQuery\n from gcloud.rest.datastore import Key\n from gcloud.rest.datastore import PathElement\n from gcloud.rest.datastore import PropertyFilter\n from gcloud.rest.datastore import PropertyFilterOperator\n from gcloud.rest.datastore import PropertyOrder\n from gcloud.rest.datastore import Query\n from gcloud.rest.datastore import Value\n\n ds = Datastore('my-gcloud-project', '/path/to/creds.json')\n key1 = Key('my-gcloud-project', [PathElement('Kind', 'entityname')])\n key2 = Key('my-gcloud-project', [PathElement('Kind', 'entityname2')])\n\n # batched lookups\n entities = await ds.lookup([key1, key2])\n\n # convenience functions for any datastore mutations\n await ds.insert(key1, {'a_boolean': True, 'meaning_of_life': 41})\n await ds.update(key1, {'a_boolean': True, 'meaning_of_life': 42})\n await ds.upsert(key1, {'animal': 'aardvark'})\n await ds.delete(key1)\n\n # or build your own mutation sequences with full transaction support\n transaction = await ds.beginTransaction()\n try:\n mutations = [\n ds.make_mutation(Operation.INSERT, key1, properties={'animal': 'sloth'}),\n ds.make_mutation(Operation.UPSERT, key1, properties={'animal': 'aardvark'}),\n ds.make_mutation(Operation.INSERT, key2, properties={'animal': 'aardvark'}),\n ]\n await ds.commit(transaction, mutations=[mutation])\n except Exception:\n await ds.rollback(transaction)\n\n # support for partial keys\n partial_key = Key('my-gcloud-project', [PathElement('Kind')])\n # and ID allocation or reservation\n allocated_keys = await ds.allocateIds([partial_key])\n await ds.reserveIds(allocated_keys)\n\n # query support\n property_filter = PropertyFilter(prop='answer',\n operator=PropertyFilterOperator.EQUAL,\n value=Value(42))\n property_order = PropertyOrder(prop='length',\n direction=Direction.DESCENDING)\n query = Query(kind='the_meaning_of_life',\n query_filter=Filter(property_filter),\n order=property_order)\n results = await ds.runQuery(query, session=s)\n\n # alternatively, query support using GQL\n gql_query = GQLQuery('SELECT * FROM the_meaning_of_life WHERE answer = @answer',\n named_bindings={'answer': 42})\n results = await ds.runQuery(gql_query, session=s)\n\nCustom Subclasses\n~~~~~~~~~~~~~~~~~\n\n``gcloud-rest-datastore`` provides class interfaces mirroring all official\nGoogle API types, ie. ``Key`` and ``PathElement``, ``Entity`` and\n``EntityResult``, ``QueryResultBatch``, and ``Value``. These types will be\nreturned from arbitrary Datastore operations, for example\n``Datastore.allocateIds(...)`` will return a list of ``Key`` entities.\n\nFor advanced usage, all of these datatypes may be overloaded. A common use-case\nmay be to deserialize entities into more specific classes. For example, given a\ncustom entity class such as:\n\n.. code-block:: python\n\n class MyEntityKind(gcloud.rest.datastore.Entity):\n def __init__(self, key, properties = None) -> None:\n self.key = key\n self.is_an_aardvark = (properties or {}).get('aardvark', False)\n\n def __repr__(self):\n return \"I'm an aardvark!\" if self.is_an_aardvark else \"Sorry, nope\"\n\nWe can then configure ``gcloud-rest-datastore`` to serialize/deserialize from\nthis custom entity class with:\n\n.. code-block:: python\n\n class MyCustomDatastore(gcloud.rest.datastore.Datastore):\n entity_result_kind.entity_kind = MyEntityKind\n\nThe full list of classes which may be overridden in this way is:\n\n.. code-block:: python\n\n class MyVeryCustomDatastore(gcloud.rest.datastore.Datastore):\n datastore_operation_kind = DatastoreOperation\n entity_result_kind = EntityResult\n entity_result_kind.entity_kind = Entity\n entity_result_kind.entity_kind.key_kind = Key\n key_kind = Key\n key_kind.path_element_kind = PathElement\n query_result_batch_kind = QueryResultBatch\n query_result_batch_kind.entity_result_kind = EntityResult\n value_kind = Value\n value_kind.key_kind = Key\n\n class MyVeryCustomQuery(gcloud.rest.datastore.Query):\n value_kind = Value\n\n class MyVeryCustomGQLQuery(gcloud.rest.datastore.GQLQuery):\n value_kind = Value\n\nYou can then drop-in the ``MyVeryCustomDatastore`` class anywhere where you\npreviously used ``Datastore`` and do the same for ``Query`` and ``GQLQuery``.\n\nTo override any sub-key, you'll need to override any parents which use it. For\nexample, if you want to use a custom Key kind and be able to use queries with\nit, you will need to implement your own ``Value``, ``Query``, and ``GQLQuery``\nclasses and wire them up to the rest of the custom classes:\n\n.. code-block:: python\n\n class MyKey(gcloud.rest.datastore.Key):\n pass\n\n class MyValue(gcloud.rest.datastore.Value):\n key_kind = MyKey\n\n class MyEntity(gcloud.rest.datastore.Entity):\n key_kind = MyKey\n value_kind = MyValue\n\n class MyEntityResult(gcloud.rest.datastore.EntityResult):\n entity_kind = MyEntity\n\n class MyQueryResultBatch(gcloud.rest.datastore.QueryResultBatch):\n entity_result_kind = MyEntityResult\n\n class MyDatastore(gcloud.rest.datastore.Datastore):\n key_kind = MyKey\n entity_result_kind = MyEntityResult\n query_result_batch = MyQueryResultBatch\n value_kind = MyValue\n\n class MyQuery(gcloud.rest.datastore.Query):\n value_kind = MyValue\n\n class MyGQLQuery(gcloud.rest.datastore.GQLQuery):\n value_kind = MyValue\n\nContributing\n------------\n\nPlease see our `contributing guide`_.\n\n.. _contributing guide: https://github.com/talkiq/gcloud-rest/blob/master/.github/CONTRIBUTING.rst\n\n.. |aio-pypi| image:: https://img.shields.io/pypi/v/gcloud-rest-datastore.svg?style=flat-square&label=pypi (aio)\n :alt: Latest PyPI Version (gcloud-rest-datastore)\n :target: https://pypi.org/project/gcloud-rest-datastore/\n\n.. |aio-pythons| image:: https://img.shields.io/pypi/pyversions/gcloud-rest-datastore.svg?style=flat-square&label=python (aio)\n :alt: Python Version Support (gcloud-rest-datastore)\n :target: https://pypi.org/project/gcloud-rest-datastore/\n\n.. |rest-pypi| image:: https://img.shields.io/pypi/v/gcloud-rest-datastore.svg?style=flat-square&label=pypi (rest)\n :alt: Latest PyPI Version (gcloud-rest-datastore)\n :target: https://pypi.org/project/gcloud-rest-datastore/\n\n.. |rest-pythons| image:: https://img.shields.io/pypi/pyversions/gcloud-rest-datastore.svg?style=flat-square&label=python (rest)\n :alt: Python Version Support (gcloud-rest-datastore)\n :target: https://pypi.org/project/gcloud-rest-datastore/\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/talkiq/gcloud-rest", "keywords": "", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "gcloud-rest-datastore", "package_url": "https://pypi.org/project/gcloud-rest-datastore/", "platform": "Posix; MacOS X; Windows", "project_url": "https://pypi.org/project/gcloud-rest-datastore/", "project_urls": { "Homepage": "https://github.com/talkiq/gcloud-rest" }, "release_url": "https://pypi.org/project/gcloud-rest-datastore/5.0.0/", "requires_dist": [ "gcloud-rest-auth (<4.0.0,>=3.0.0)" ], "requires_python": ">= 2.7", "summary": "Python Client for Google Cloud Datastore", "version": "5.0.0" }, "last_serial": 5974463, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "45681722decd79dab389955950735142", "sha256": "8e718497b3dcede9b284794b43c63833683490a49961362fd6b9fdeacc030443" }, "downloads": -1, "filename": "gcloud_rest_datastore-1.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "45681722decd79dab389955950735142", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 23859, "upload_time": "2019-07-09T18:51:46", "url": "https://files.pythonhosted.org/packages/b2/67/90cf64e4624c1239082796e1507020f045fc11d7b19d6987dbfb50f9efde/gcloud_rest_datastore-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8043a533c36ecc937bd9548af88e8097", "sha256": "fbcff1dcb8ed7e9d1c18d09ed688fb0f00da7933dfd9cf310c8c9ac080df40cb" }, "downloads": -1, "filename": "gcloud-rest-datastore-1.0.0.tar.gz", "has_sig": false, "md5_digest": "8043a533c36ecc937bd9548af88e8097", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18150, "upload_time": "2019-07-09T18:51:48", "url": "https://files.pythonhosted.org/packages/5a/14/53d94f8d4312e4fd32ae383d914f7c8e38ad4f9fd0f1a0c2a4776cf38f7e/gcloud-rest-datastore-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "ab5b7170b59e85d85336ce8348fadea4", "sha256": "14f231d5288b19c455a66ef4204e1f220084404f276f1a21628cbc2aa37abdd2" }, "downloads": -1, "filename": "gcloud_rest_datastore-1.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ab5b7170b59e85d85336ce8348fadea4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 25769, "upload_time": "2019-07-22T22:43:47", "url": "https://files.pythonhosted.org/packages/8e/ce/3dbf040a64dfd15bd271f498ae4f1cf6c54738a0ac7d59f88d877700d268/gcloud_rest_datastore-1.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b7276e3441dd3df5daca5b6a081dd92e", "sha256": "427526fb164c60139b909e586a1036e1a7cd4d0794bc34a7d7691b7d9520f3ac" }, "downloads": -1, "filename": "gcloud-rest-datastore-1.1.0.tar.gz", "has_sig": false, "md5_digest": "b7276e3441dd3df5daca5b6a081dd92e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18798, "upload_time": "2019-07-22T22:43:49", "url": "https://files.pythonhosted.org/packages/d5/14/1ea0cc04931a7acdd772115dd6d10128b3c5fbe84d1df6099d9eb2da4e0c/gcloud-rest-datastore-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "93db38286b9786ae6f672612f38d1102", "sha256": "ed603dadd4ac93e4484eac926a1c48b62c8fa4251475a7bb1c1b192453b8435e" }, "downloads": -1, "filename": "gcloud_rest_datastore-1.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "93db38286b9786ae6f672612f38d1102", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 26864, "upload_time": "2019-08-28T22:37:08", "url": "https://files.pythonhosted.org/packages/20/fe/7fd53aef5cd6d0b822c75f41dbf2e053fdce92dea313fcd8d3faaa5d033c/gcloud_rest_datastore-1.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5ed4cb36258577ef80da01eb7d6ec48d", "sha256": "ff9660c9af9b2c87c2b644d945faa07bbdf5f855094d2f82f0e792ffda65ecc1" }, "downloads": -1, "filename": "gcloud-rest-datastore-1.2.0.tar.gz", "has_sig": false, "md5_digest": "5ed4cb36258577ef80da01eb7d6ec48d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19371, "upload_time": "2019-08-28T22:37:10", "url": "https://files.pythonhosted.org/packages/64/6a/70aa78eaf562ec7885b5cfc9b22ee1e39fe97d1039069a0f7713a5344482/gcloud-rest-datastore-1.2.0.tar.gz" } ], "5.0.0": [ { "comment_text": "", "digests": { "md5": "8ed21a7f73269f3e6888b1b5a6f29902", "sha256": "c367d20295389967e0b6b262ddbcdbf74bbb0b1146cdb5d90592525c7bc9aa8e" }, "downloads": -1, "filename": "gcloud_rest_datastore-5.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8ed21a7f73269f3e6888b1b5a6f29902", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">= 2.7", "size": 27604, "upload_time": "2019-10-15T02:51:44", "url": "https://files.pythonhosted.org/packages/ea/dc/780c184ede599469fc25bafdb99b211d61dbb06db7b6ec6fe951edcef561/gcloud_rest_datastore-5.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "821b8b617ca620748a9d38798711534f", "sha256": "94d2335809ed6a1e89a3293305c090b83cf46694ebfe8a06d32375bcc675efcb" }, "downloads": -1, "filename": "gcloud-rest-datastore-5.0.0.tar.gz", "has_sig": false, "md5_digest": "821b8b617ca620748a9d38798711534f", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 2.7", "size": 19877, "upload_time": "2019-10-15T02:51:45", "url": "https://files.pythonhosted.org/packages/0a/23/f73c942f42280a8f264d070d1414b987bc23bc2ff77f7f1b80422d46dd68/gcloud-rest-datastore-5.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8ed21a7f73269f3e6888b1b5a6f29902", "sha256": "c367d20295389967e0b6b262ddbcdbf74bbb0b1146cdb5d90592525c7bc9aa8e" }, "downloads": -1, "filename": "gcloud_rest_datastore-5.0.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "8ed21a7f73269f3e6888b1b5a6f29902", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">= 2.7", "size": 27604, "upload_time": "2019-10-15T02:51:44", "url": "https://files.pythonhosted.org/packages/ea/dc/780c184ede599469fc25bafdb99b211d61dbb06db7b6ec6fe951edcef561/gcloud_rest_datastore-5.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "821b8b617ca620748a9d38798711534f", "sha256": "94d2335809ed6a1e89a3293305c090b83cf46694ebfe8a06d32375bcc675efcb" }, "downloads": -1, "filename": "gcloud-rest-datastore-5.0.0.tar.gz", "has_sig": false, "md5_digest": "821b8b617ca620748a9d38798711534f", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 2.7", "size": 19877, "upload_time": "2019-10-15T02:51:45", "url": "https://files.pythonhosted.org/packages/0a/23/f73c942f42280a8f264d070d1414b987bc23bc2ff77f7f1b80422d46dd68/gcloud-rest-datastore-5.0.0.tar.gz" } ] }