{ "info": { "author": "Michael Hausenblas", "author_email": "michael.hausenblas@gmail.com", "bugtrack_url": null, "classifiers": [], "description": "# Datadots API for Python\n\n[![PyPI](https://img.shields.io/pypi/v/nine.svg)](https://pypi.org/project/datadots-api/) [![Build Status](https://drone.app.cloud.dotscience.net/api/badges/dotmesh-io/python-sdk/status.svg)](https://drone.app.cloud.dotscience.net/dotmesh-io/python-sdk)\n\n\n**STATUS: What you currently see here is WIP, do not use in production!** \n\nThis is the Datadots API for Python, allowing you to access and manipulate dots against any Dotmesh cluster. Note that only Python 3 is supported.\n\n- [Install](#install)\n- [Use](#use)\n - [Create a dot](#create-a-dot)\n - [Create a dot in a namespace](#create-a-dot-in-a-namespace)\n - [Look up a dot by name](#look-up-a-dot-by-name)\n - [Commit to branch, show log](#commit-to-a-branch-and-show-the-log)\n - [Create new branch based on latest master](#create-new-branch-based-on-latest-master)\n - [End-to-end example](#end-to-end-example)\n- [Test](#test)\n- [Release](#release)\n\n## Install\n\nYou must have Python 3 installed, this is the only version supported.\nThen do:\n\n```bash\n$ pip3 install datadots-api==0.1.4\n```\n\n## Use\n\nSome usage examples below.\n\n### Create a dot\n\n```python\nfrom dotmesh.client import DotmeshClient\nd = DotmeshClient(cluster_url=cluster_url, username=user, api_key=api_key)\ndot = dmclient.createDot(dotname=\"test\")\n```\n\n### Create a dot in a namespace\n\n```python\nfrom dotmesh.client import DotmeshClient\nd = DotmeshClient(cluster_url=cluster_url, username=user, api_key=api_key)\ndot = dmclient.createDot(dotname=\"test\", ns=\"mynamespace\")\n```\n\n### Look up a dot by name\n\n```python\nfrom dotmesh.client import DotmeshClient\nd = DotmeshClient(cluster_url=cluster_url, username=user, api_key=api_key)\nprint(d.getDot(dotname=\"test\"))\n```\n\n### Commit to a branch and show the log\n\n```python\nfrom dotmesh.client import DotmeshClient\nd = DotmeshClient(cluster_url=cluster_url, username=user, api_key=api_key)\ndot = dmclient.createDot(dotname=\"test\")\nbranch = dot.getBranch(\"master\")\nbranch.commit(\"just a test commit\")\nprint(branch.log())\n```\n\n### Commit to a branch with some extra metadata\n\n```python\nfrom dotmesh.client import DotmeshClient\nd = DotmeshClient(cluster_url=cluster_url, username=user, api_key=api_key)\ndot = dmclient.createDot(dotname=\"test\")\nbranch = dot.getBranch(\"master\")\nbranch.commit(\"a commit with some extra metadata\", {\"fruit\": \"apples\", \"color\": \"red\"})\nprint(branch.log())\n```\n\n### Create new branch based on latest master\n\n```python\nfrom dotmesh.client import DotmeshClient\nd = DotmeshClient(cluster_url=cluster_url, username=user, api_key=api_key)\ndot = dmclient.createDot(dotname=\"test\")\nbranch = dot.getBranch(\"master\")\nbranch.commit(\"just a test commit\")\nmybranch = branch.createBranch(\"mybranch\", \"master\")\nmybranch.commit(\"the first commit in my branch\")\nprint(mybranch.log())\n```\n\n### End-to-end example\n\nYou can see this API in action, for a local setup with Docker running and after you've created a cluster using `dm cluster init`, by running the following [example](example.py):\n\n```bash\n$ DOTMESH_APIKEY=$(cat ~/.dotmesh/config | jq -r .Remotes.local.ApiKey)\n$ DOTMESH_APIKEY=$DOTMESH_APIKEY python3 example.py\n== Create dot:\n--> {\"jsonrpc\": \"2.0\", \"method\": \"DotmeshRPC.Create\", \"params\": {\"Namespace\": \"admin\", \"Name\": \"test\"}, \"id\": 1}\n<-- {\"jsonrpc\":\"2.0\",\"result\":true,\"id\":1} (200 OK)\n--> {\"jsonrpc\": \"2.0\", \"method\": \"DotmeshRPC.Lookup\", \"params\": {\"Namespace\": \"admin\", \"Name\": \"test\", \"Branch\": \"\"}, \"id\": 2}\n<-- {\"jsonrpc\":\"2.0\",\"result\":\"32965cef-4310-4291-6f36-c86106655d10\",\"id\":2} (200 OK)\n\nID=32965cef-4310-4291-6f36-c86106655d10, name=test\n\n== Get master branch:\n--> {\"jsonrpc\": \"2.0\", \"method\": \"DotmeshRPC.Lookup\", \"params\": {\"Namespace\": \"admin\", \"Name\": \"test\", \"Branch\": \"\"}, \"id\": 3}\n<-- {\"jsonrpc\":\"2.0\",\"result\":\"32965cef-4310-4291-6f36-c86106655d10\",\"id\":3} (200 OK)\n\nmaster\n\n== Do some commit and show log:\n--> {\"jsonrpc\": \"2.0\", \"method\": \"DotmeshRPC.Commit\", \"params\": {\"Namespace\": \"admin\", \"Name\": \"test\", \"Branch\": \"\", \"Message\": \"just a test commit\"}, \"id\": 4}\n<-- {\"jsonrpc\":\"2.0\",\"result\":true,\"id\":4} (200 OK)\n--> {\"jsonrpc\": \"2.0\", \"method\": \"DotmeshRPC.Commit\", \"params\": {\"Namespace\": \"admin\", \"Name\": \"test\", \"Branch\": \"\", \"Message\": \"and another commit, who would have thought\"}, \"id\": 5}\n<-- {\"jsonrpc\":\"2.0\",\"result\":true,\"id\":5} (200 OK)\n--> {\"jsonrpc\": \"2.0\", \"method\": \"DotmeshRPC.Commits\", \"params\": {\"Namespace\": \"admin\", \"Name\": \"test\", \"Branch\": \"\"}, \"id\": 6}\n<-- {\"jsonrpc\":\"2.0\",\"result\":[{\"Id\":\"1007db99-11cb-4bd7-747e-1d121bb9b11a\",\"Metadata\":{\"author\":\"admin\",\"message\":\"just a test commit\",\"timestamp\":\"1521214312285694689\"}},{\"Id\":\"67bb6184-430b-46d7-4337-b858ee85eb1c\",\"Metadata\":{\"author\":\"admin\",\"message\":\"and another commit, who would have thought\",\"timestamp\":\"1521214312418429042\"}}],\"id\":6} (200 OK)\n\n\n1521214312285694689: just a test commit\n1521214312418429042: and another commit, who would have thought\n\n== Create new branch, commit and show log:\n--> {\"jsonrpc\": \"2.0\", \"method\": \"DotmeshRPC.Commits\", \"params\": {\"Namespace\": \"admin\", \"Name\": \"test\", \"Branch\": \"\"}, \"id\": 7}\n<-- {\"jsonrpc\":\"2.0\",\"result\":[{\"Id\":\"1007db99-11cb-4bd7-747e-1d121bb9b11a\",\"Metadata\":{\"author\":\"admin\",\"message\":\"just a test commit\",\"timestamp\":\"1521214312285694689\"}},{\"Id\":\"67bb6184-430b-46d7-4337-b858ee85eb1c\",\"Metadata\":{\"author\":\"admin\",\"message\":\"and another commit, who would have thought\",\"timestamp\":\"1521214312418429042\"}}],\"id\":7} (200 OK)\n--> {\"jsonrpc\": \"2.0\", \"method\": \"DotmeshRPC.Branch\", \"params\": {\"Namespace\": \"admin\", \"Name\": \"test\", \"SourceBranch\": \"master\", \"NewBranchName\": \"mybranch\", \"SourceCommitId\": \"67bb6184-430b-46d7-4337-b858ee85eb1c\"}, \"id\": 8}\n<-- {\"jsonrpc\":\"2.0\",\"result\":true,\"id\":8} (200 OK)\n--> {\"jsonrpc\": \"2.0\", \"method\": \"DotmeshRPC.Commit\", \"params\": {\"Namespace\": \"admin\", \"Name\": \"test\", \"Branch\": \"mybranch\", \"Message\": \"the first commit in my branch\"}, \"id\": 9}\n<-- {\"jsonrpc\":\"2.0\",\"result\":true,\"id\":9} (200 OK)\n--> {\"jsonrpc\": \"2.0\", \"method\": \"DotmeshRPC.Commits\", \"params\": {\"Namespace\": \"admin\", \"Name\": \"test\", \"Branch\": \"mybranch\"}, \"id\": 10}\n<-- {\"jsonrpc\":\"2.0\",\"result\":[{\"Id\":\"565b04ab-abae-476a-75bd-203bce2a56b2\",\"Metadata\":{\"author\":\"admin\",\"message\":\"the first commit in my branch\",\"timestamp\":\"1521214312967840418\"}}],\"id\":10} (200 OK)\n\n\n1521214312967840418: the first commit in my branch\n```\n\nNote that the default behavior of the example above is to leave the dot in place, that is, if you do a `dm dot show test` you should see both the `master` branch and `mybranch` with the commits. If you want to automatically clean up, execute it as follows: `python3 example.py cleanup`:\n\n```bash\n$ dm list\nCurrent remote: local (use 'dm remote -v' to list and 'dm remote switch' to switch)\n\n DOT BRANCH SERVER CONTAINERS SIZE COMMITS DIRTY\n* test master 995e5c821c38e7f5 1.00 kiB 1 -\n\n$ dm dot show test\nDot admin/test:\nMaster branch ID: 7f4a4d67-5bc7-47aa-7829-31d5a02ff70f\nDot is current.\nDot size: 1.00 kiB (all clean)\nBranches:\n* master\n mybranch\n\n$ dm checkout mybranch && dm log\ncommit 565b04ab-abae-476a-75bd-203bce2a56b2\nAuthor: admin\nDate: 1521214312967840418\n\n the first commit in my branch\n```\n\n## Test\n\nLocally, you can test the Dotmesh JSON-RPC API like shown in the following. It assumes you've got [http](https://httpie.org/) installed (or alternatively you can use `curl`) as well as that Docker is running (note: tested on v18.03):\n\n```bash\n$ dm cluster init\n$ DOTMESH_CLUSTERURL=http://localhost:6969/rpc\n$ DOTMESH_APIKEY=$(cat ~/.dotmesh/config | jq -r .Remotes.local.ApiKey)\n$ http -a admin:$DOTMESH_APIKEY POST $DOTMESH_CLUSTERURL < test/ping.json\nHTTP/1.1 200 OK\nContent-Length: 57\nContent-Type: application/json; charset=utf-8\nDate: Fri, 16 Mar 2018 07:06:44 GMT\nX-Content-Type-Options: nosniff\n\n{\n \"id\": 6129484611666146000,\n \"jsonrpc\": \"2.0\",\n \"result\": true\n}\n```\n\n## Release\nTo release this project to pypi, check the version (git tag and find the highest one, or check setup.py) then run `bump2version --new-version && git push --tags`", "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/dotmesh-io/python-sdk", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "datadots-api", "package_url": "https://pypi.org/project/datadots-api/", "platform": "", "project_url": "https://pypi.org/project/datadots-api/", "project_urls": { "Homepage": "https://github.com/dotmesh-io/python-sdk" }, "release_url": "https://pypi.org/project/datadots-api/0.2.4/", "requires_dist": null, "requires_python": "", "summary": "Datadots API", "version": "0.2.4", "yanked": false, "yanked_reason": null }, "last_serial": 6013276, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "555def4346c4d85d0a737f6b827cf964", "sha256": "9edcd205f8a7b0950a5eec8398e027a74adb4beb24f249881350aa2ceefe2b36" }, "downloads": -1, "filename": "datadots-api-0.1.2.tar.gz", "has_sig": false, "md5_digest": "555def4346c4d85d0a737f6b827cf964", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9524, "upload_time": "2018-03-17T07:05:05", "upload_time_iso_8601": "2018-03-17T07:05:05.359735Z", "url": "https://files.pythonhosted.org/packages/7d/87/949f84849d2d3b445db76dfd9b3c0e079602dfb78dac79099f49574d77a5/datadots-api-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "404d7573992492c365958af180b0fad5", "sha256": "a3f15d299fa8989982e0cc6e8d763b86c4052ff0123be08a4c79220b6784760d" }, "downloads": -1, "filename": "datadots_api-0.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "404d7573992492c365958af180b0fad5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10392, "upload_time": "2018-05-24T11:36:48", "upload_time_iso_8601": "2018-05-24T11:36:48.002646Z", "url": "https://files.pythonhosted.org/packages/bf/73/c1f03fa3055675a02f15d1f01520d4f30614394d9805741689aded095254/datadots_api-0.1.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "3ce81f4651cda0b5f2a9050290f546df", "sha256": "6f2d36204a1e34d2692e635566f3f270744d5c59378fe03f5fc5bc693241b848" }, "downloads": -1, "filename": "datadots-api-0.1.4.tar.gz", "has_sig": false, "md5_digest": "3ce81f4651cda0b5f2a9050290f546df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9790, "upload_time": "2018-05-24T11:36:52", "upload_time_iso_8601": "2018-05-24T11:36:52.170307Z", "url": "https://files.pythonhosted.org/packages/5a/34/fd53131c8cd2babd37096d864d583cd42748cde7561bd54c18c1fde79d2d/datadots-api-0.1.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "3c57e836651066e4d5895b4c791bda5c", "sha256": "0cfe64657381a1b4f4ac9f86bee577707e2d6cf8797f574cb644a4a2a6b7a720" }, "downloads": -1, "filename": "datadots_api-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3c57e836651066e4d5895b4c791bda5c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10031, "upload_time": "2019-10-09T06:58:24", "upload_time_iso_8601": "2019-10-09T06:58:24.962221Z", "url": "https://files.pythonhosted.org/packages/05/ab/7c9e3b5089888808defb43dfb4fbb87a95d1d4e908dd8b00fe30bdc958b7/datadots_api-0.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "290ef48ba57b14a8163f9be75588d305", "sha256": "a3c466dadf94310fcfdb0b90bb5d972e701b24f093c19bd45272d69db69578b7" }, "downloads": -1, "filename": "datadots-api-0.2.1.tar.gz", "has_sig": false, "md5_digest": "290ef48ba57b14a8163f9be75588d305", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9591, "upload_time": "2019-10-09T06:58:28", "upload_time_iso_8601": "2019-10-09T06:58:28.156072Z", "url": "https://files.pythonhosted.org/packages/4d/24/c633bbfea9d72157a8dcacd359da16aee8df0cdf5ef75f8595fe1d762545/datadots-api-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "51b5d83027915064da7a2f2276efd79a", "sha256": "88d24654921af51b5c3c12f53186afc0ebe1e808286b06645a133bc670f00fa4" }, "downloads": -1, "filename": "datadots-api-0.2.2.tar.gz", "has_sig": false, "md5_digest": "51b5d83027915064da7a2f2276efd79a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9919, "upload_time": "2019-10-21T11:22:53", "upload_time_iso_8601": "2019-10-21T11:22:53.719966Z", "url": "https://files.pythonhosted.org/packages/f3/f6/088c973efc1cb2b2146b005df6a82bd2c499052a8de15a5c7810a9d7d97d/datadots-api-0.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "471d39bbeb433cf8d49595db742e1cd0", "sha256": "3d7f073851f36ab7c76790aeb4bf3a6ac4b4e25504e0f30e8ed72548da4aeabc" }, "downloads": -1, "filename": "datadots-api-0.2.4.tar.gz", "has_sig": false, "md5_digest": "471d39bbeb433cf8d49595db742e1cd0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9870, "upload_time": "2019-10-22T14:52:55", "upload_time_iso_8601": "2019-10-22T14:52:55.327628Z", "url": "https://files.pythonhosted.org/packages/7f/be/82ae081b2eaf8e67bbcc7f8b2fcd8f73322e110fee019a8f0c6e4683a93a/datadots-api-0.2.4.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "471d39bbeb433cf8d49595db742e1cd0", "sha256": "3d7f073851f36ab7c76790aeb4bf3a6ac4b4e25504e0f30e8ed72548da4aeabc" }, "downloads": -1, "filename": "datadots-api-0.2.4.tar.gz", "has_sig": false, "md5_digest": "471d39bbeb433cf8d49595db742e1cd0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9870, "upload_time": "2019-10-22T14:52:55", "upload_time_iso_8601": "2019-10-22T14:52:55.327628Z", "url": "https://files.pythonhosted.org/packages/7f/be/82ae081b2eaf8e67bbcc7f8b2fcd8f73322e110fee019a8f0c6e4683a93a/datadots-api-0.2.4.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }