{ "info": { "author": "Chuck McCallum", "author_email": "", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python" ], "description": "# kompatible\n\n[![PyPI version](https://badge.fury.io/py/kompatible.svg)](https://badge.fury.io/py/kompatible)\n\nThis package exposes a subset of the\n[Kubernetes Python Client](https://github.com/kubernetes-client/python/)\nwith an interface which matches that of the\n[Docker SDK for Python](https://docker-py.readthedocs.io/en/stable/).\n\n## Examples\n\nFirst, checkout this project, and install dependencies:\n`pip install -r requirements-dev.txt`.\nThen, make sure you have installed and started\n[Docker](https://docs.docker.com/docker-for-mac/install/)\nand/or [Minikube](https://kubernetes.io/docs/tutorials/hello-minikube/#create-a-minikube-cluster)\n\nWith those tools in place, either\n`import docker as sdk` or `import kompatible as sdk`\nand the following examples will work, although in the first case\nit's Docker containers starting up,\nand in the latter it's Kubernetes pods.\n\n## \"Hello World!\": Run, list, remove\n\n```python\n>>> client = sdk.from_env()\n\n>>> [client.containers.run(\n... \"alpine\", \"echo hello world\",\n... name='foobar',\n... labels={'foo': 'bar'})]\n[...'hello world\\n']\n\n>>> def not_kube(containers): # Only needed for Docker, on Travis, with k8s started.\n... return [c for c in containers if 'kube' not in c.name]\n\n>>> containers = not_kube(client.containers.list(all=True, filters={}))\n>>> [c.name for c in containers]\n[...'foobar']\n>>> c = containers[0]\n\n>>> c.remove(force=True, v=True)\n>>> containers = not_kube(client.containers.list(all=True, filters={}))\n>>> assert len(containers) == 0\n\n```\n\n## Container properties\n\n```python\n>>> assert c.id\n>>> assert c.image\n>>> c.labels\n{...'foo': ...'bar'}\n>>> assert c.short_id\n>>> assert c.status\n\n```\n\n## `containers.run` kwargs\n\n```python\n\n```\n\n## Subclients\n\n```python\n>>> assert client.api\n>>> assert client.containers\n>>> assert client.images\n>>> assert client.volumes\n\n```\n\n## TODO\n\n```\nclient.api.base_url\n\nclient.containers.run(image_name,\n name=container_spec.container_name,\n ports={'{}/tcp'.format(container_spec.container_port): None},\n detach=True,\n labels=labels,\n volumes=volumes,\n nano_cpus=int(container_spec.cpus * 1e9),\n environment=environment,\n mem_reservation='{}M'.format(new_mem_reservation_mb))\nclient.containers.get(name_or_id)\n container.logs(timestamps=True)\n container.attrs['NetworkSettings']\n container.attrs['Config']['Labels']\n container.remove(force=True, v=True)\nclient.containers.list(all=True, filters=filters)\n\nclient.images\nclient.images.pull # Used by script, but not used by runtime.\n# For Kubernetes, consider https://kubernetes.io/docs/concepts/containers/images/#pre-pulling-images\n# We would need to make sure that every image is on every node we start up.\n# Mayber other Container registries are faster than DockerHub, in which\n# case pre-caching might be less important?\n\nclient.volumes\nclient.volumes.create(driver='local').name\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/refinery-platform/kompatible/", "keywords": "", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "kompatible", "package_url": "https://pypi.org/project/kompatible/", "platform": "", "project_url": "https://pypi.org/project/kompatible/", "project_urls": { "Homepage": "https://github.com/refinery-platform/kompatible/" }, "release_url": "https://pypi.org/project/kompatible/0.0.2/", "requires_dist": [ "kubernetes (>=4.0.0)" ], "requires_python": "", "summary": "Python wrapper for Kubernetes which matches the interface of Docker", "version": "0.0.2" }, "last_serial": 4360934, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "586095ee057d6ad09787558763dc6286", "sha256": "7444600d3e3cc51931eeee04ae3b3b5f25a4165f54ff8488c54123bf5d73e310" }, "downloads": -1, "filename": "kompatible-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "586095ee057d6ad09787558763dc6286", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 3474, "upload_time": "2018-10-04T23:33:35", "url": "https://files.pythonhosted.org/packages/7b/a2/27f51d1575a0af5c5817151c1a9b29ecc4fa7affe6443c764ce1a3e19043/kompatible-0.0.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "346a01a0a1dafccb70875d2aaf5f920e", "sha256": "e14054f7f497c981e037335a0640bca869e13daa6639787484d28f5ba48e6f9c" }, "downloads": -1, "filename": "kompatible-0.0.1.tar.gz", "has_sig": false, "md5_digest": "346a01a0a1dafccb70875d2aaf5f920e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2739, "upload_time": "2018-10-04T23:33:37", "url": "https://files.pythonhosted.org/packages/db/79/697693a9b0fbdf81a44b8a37f60cab516bc6ba3937c2e78eeec283e86c98/kompatible-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "9c253aa5685b8c4f539855b9baa463b4", "sha256": "f7a7cd56e07371e6bd69a559e7009906bb6da5dfe7e01f97b43ceee3da675201" }, "downloads": -1, "filename": "kompatible-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9c253aa5685b8c4f539855b9baa463b4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6223, "upload_time": "2018-10-10T17:27:26", "url": "https://files.pythonhosted.org/packages/a8/01/7af3cdb10a5de0f0b1138d97592f2581da3236ffe027abedb058105b5943/kompatible-0.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "12a334ec7e185e8645f546deab075190", "sha256": "aafecbc5ffb3319d8d2fb1faa4fa1babef2fa5fa5a0a0cbc41f2786ff9fe4f3f" }, "downloads": -1, "filename": "kompatible-0.0.2.tar.gz", "has_sig": false, "md5_digest": "12a334ec7e185e8645f546deab075190", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5049, "upload_time": "2018-10-10T17:27:27", "url": "https://files.pythonhosted.org/packages/fc/e2/12a51e86a74e76d0e5363b10d6c480ad81d483a18d65cbb0c482bbffc7c6/kompatible-0.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "9c253aa5685b8c4f539855b9baa463b4", "sha256": "f7a7cd56e07371e6bd69a559e7009906bb6da5dfe7e01f97b43ceee3da675201" }, "downloads": -1, "filename": "kompatible-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "9c253aa5685b8c4f539855b9baa463b4", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6223, "upload_time": "2018-10-10T17:27:26", "url": "https://files.pythonhosted.org/packages/a8/01/7af3cdb10a5de0f0b1138d97592f2581da3236ffe027abedb058105b5943/kompatible-0.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "12a334ec7e185e8645f546deab075190", "sha256": "aafecbc5ffb3319d8d2fb1faa4fa1babef2fa5fa5a0a0cbc41f2786ff9fe4f3f" }, "downloads": -1, "filename": "kompatible-0.0.2.tar.gz", "has_sig": false, "md5_digest": "12a334ec7e185e8645f546deab075190", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5049, "upload_time": "2018-10-10T17:27:27", "url": "https://files.pythonhosted.org/packages/fc/e2/12a51e86a74e76d0e5363b10d6c480ad81d483a18d65cbb0c482bbffc7c6/kompatible-0.0.2.tar.gz" } ] }