{ "info": { "author": "Caleb Hattingh", "author_email": "caleb.hattingh@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "dockerctx\n=========\n\n`dockerctx` is a context manager for managing the lifetime of a docker container.\n\nThe main use case is for setting up scaffolding for running tests, where you want\nsomething a little broader than *unit tests*, but less heavily integrated than,\nsay, what you might write using `Robot framework`_.\n\n.. _Robot framework: http://robotframework.org/\n\nInstall\n-------\n\n.. code-block:: bash\n\n $ pip install dockerctx\n\nFor dev, you have to use flit_:\n\n.. code-block:: bash\n\n $ pip install flit\n $ flit install\n\nThe development-specific requirements will be installed automatically.\n\n.. _flit: https://flit.readthedocs.io/en/latest/\n\nDemo\n----\n\nThis is taken from one of the tests:\n\n.. code-block:: python\n\n import time\n import redis\n import pytest\n from dockerctx import new_container\n\n # First make a pytest fixture\n\n @pytest.fixture(scope='function')\n def f_redis():\n\n # This is the new thing! It's pretty clear. The `ready_test` provides\n # a way to customize what \"ready\" means for each container. Here,\n # we simply pause for a bit.\n\n with new_container(\n image_name='redis:latest',\n ports={'6379/tcp': 56379},\n ready_test=lambda: time.sleep(0.5) or True) as container:\n yield container\n\n # Here is the test. Since the fixture is at the \"function\" level, a fully\n # new Redis container will be created for each test that uses this fixture.\n # After the test completes, the container will be removed.\n\n def test_redis_a(f_redis):\n # The container object comes from the `docker` python package. Here we\n # access only the \"name\" attribute, but there are many others.\n print('Container %s' % f_redis.name)\n r = redis.StrictRedis(host='localhost', port=56379, db=0)\n r.set('foo', 'bar')\n assert r.get('foo') == b'bar'\n\nNote that a brand new Redis container is created here, used within the\ncontext of the context manager (which is wrapped into a *pytest* fixture\nhere), and then the container is destroyed after the context manager\nexits.\n\n\nIn the src, there is another, much more elaborate test which\n\n#. runs a *postgres* container;\n#. waits for postgres to begin accepting connections;\n#. creates a database;\n#. creates tables (using the SQLAlchemy_ ORM);\n#. performs database operations;\n#. tears down and removes the container afterwards.\n\n.. _SQLAlchemy: http://www.sqlalchemy.org/\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/cjrh/dockerctx", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "dockerctx", "package_url": "https://pypi.org/project/dockerctx/", "platform": "", "project_url": "https://pypi.org/project/dockerctx/", "project_urls": { "Homepage": "https://github.com/cjrh/dockerctx" }, "release_url": "https://pypi.org/project/dockerctx/2018.11.1/", "requires_dist": [ "docker", "typing; python_version < '3.5'", "psycopg2", "sqlalchemy; extra == \"dev\"", "sqlalchemy_utils; extra == \"dev\"", "sqllogformatter; extra == \"dev\"", "pytest; extra == \"dev\"", "redis; extra == \"dev\"" ], "requires_python": "", "summary": "A context manager for a docker container. ", "version": "2018.11.1" }, "last_serial": 4488189, "releases": { "2017.3.1": [ { "comment_text": "", "digests": { "md5": "3fd12e864405c423c4253bbce8777484", "sha256": "a5d6144ba24282a71568fa3e4ad52b240dd234934f2bedfa818836e126a6195d" }, "downloads": -1, "filename": "dockerctx-2017.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3fd12e864405c423c4253bbce8777484", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5237, "upload_time": "2017-03-05T06:51:44", "url": "https://files.pythonhosted.org/packages/0a/54/6a601c9755c72e4ba13fc1057c12f18a92d3a9fffcfdbd660d3a3c1377bb/dockerctx-2017.3.1-py2.py3-none-any.whl" } ], "2017.3.2": [ { "comment_text": "", "digests": { "md5": "7d9548107d14fed449cd6eeed3e2ff72", "sha256": "cc23afd20c957e2684c8fe911c2a31487d00cf65fa8195e1ec19e05dd3e2be0e" }, "downloads": -1, "filename": "dockerctx-2017.3.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7d9548107d14fed449cd6eeed3e2ff72", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5236, "upload_time": "2017-03-05T06:54:19", "url": "https://files.pythonhosted.org/packages/14/1d/0f829fc8d03429e8ed461275a98460a801ac7b67946a1aaeb820b5836dcd/dockerctx-2017.3.2-py2.py3-none-any.whl" } ], "2017.3.3": [ { "comment_text": "", "digests": { "md5": "4a900c37d13ec61861f23d476a635095", "sha256": "7c22e5dc6a874817645a84cf87432fc51ec9684fbffd1c1ef119d94dcaf3d00f" }, "downloads": -1, "filename": "dockerctx-2017.3.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4a900c37d13ec61861f23d476a635095", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5232, "upload_time": "2017-03-13T05:50:17", "url": "https://files.pythonhosted.org/packages/9a/1d/ef6589043add6356d927c66e76b9b7fbdfd79037e2116b6b45de37d3dd65/dockerctx-2017.3.3-py2.py3-none-any.whl" } ], "2017.3.4": [ { "comment_text": "", "digests": { "md5": "f1bd2e074fd846f16d08ee2029d336f5", "sha256": "e770a24e51ce4c6eea7e66da78c75dfc05b1de9755b4094f352b900c4f20282a" }, "downloads": -1, "filename": "dockerctx-2017.3.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f1bd2e074fd846f16d08ee2029d336f5", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6732, "upload_time": "2017-03-25T03:54:26", "url": "https://files.pythonhosted.org/packages/f2/67/7b676b575856d90558d3eb2b1b78e3984006c39d83de864e7de08a0645f5/dockerctx-2017.3.4-py2.py3-none-any.whl" } ], "2017.3.5": [ { "comment_text": "", "digests": { "md5": "b64b53360eef521630213ed8f67ea6ad", "sha256": "04e0be66d7f790b2e6a242738c11fa23aad7b59b2f124a1af151a0af4d887885" }, "downloads": -1, "filename": "dockerctx-2017.3.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "b64b53360eef521630213ed8f67ea6ad", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7258, "upload_time": "2017-03-25T04:09:28", "url": "https://files.pythonhosted.org/packages/82/51/a6f35b16af5f281a7103aff3c397bfdd983467500a69487948f3de3c6007/dockerctx-2017.3.5-py2.py3-none-any.whl" } ], "2017.3.6": [ { "comment_text": "", "digests": { "md5": "3387dd61d028e3881b2c96f783daacd9", "sha256": "ca73993f3fe20544fab3215f08501a7650de45eaa97413b2de1bd0179feef0f2" }, "downloads": -1, "filename": "dockerctx-2017.3.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "3387dd61d028e3881b2c96f783daacd9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7322, "upload_time": "2017-03-25T04:21:57", "url": "https://files.pythonhosted.org/packages/03/00/c60ca0193ab684660f78b557cf7d5d1562137f13bf99bd7789672405ad18/dockerctx-2017.3.6-py2.py3-none-any.whl" } ], "2017.3.7": [ { "comment_text": "", "digests": { "md5": "fdb799bfb23b4f16817259c0a7644a84", "sha256": "14e33cb4e8d164e8b843892cef5138c3915e05d4e77fbbfbc45988b43d4980de" }, "downloads": -1, "filename": "dockerctx-2017.3.7-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "fdb799bfb23b4f16817259c0a7644a84", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 7582, "upload_time": "2017-03-25T22:27:20", "url": "https://files.pythonhosted.org/packages/5c/80/bf2d573d9d31a968f5ef372b51f12883eeda5265d32caa2d0c6bb6dcf920/dockerctx-2017.3.7-py2.py3-none-any.whl" } ], "2017.5.1": [ { "comment_text": "", "digests": { "md5": "99200da1dc97011670740ac2a72fcb7b", "sha256": "9a8187ea21a6ccd3ad580873bd1f2c621ae6fd62aa65ac7c055f0cfa6f3a7241" }, "downloads": -1, "filename": "dockerctx-2017.5.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "99200da1dc97011670740ac2a72fcb7b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8024, "upload_time": "2017-05-12T02:58:26", "url": "https://files.pythonhosted.org/packages/61/29/41f64ee78f17c4b0cbf8dae8e6273555a07ea15d4f89ea9f117559bf9be8/dockerctx-2017.5.1-py2.py3-none-any.whl" } ], "2017.8.1": [ { "comment_text": "", "digests": { "md5": "586d7f355876e56bbbe3eed8341d28c1", "sha256": "332e9a484ef0fef4de327a3cc27126c1f74e0c8a2e674014187f079804813265" }, "downloads": -1, "filename": "dockerctx-2017.8.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "586d7f355876e56bbbe3eed8341d28c1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9664, "upload_time": "2017-08-10T08:13:44", "url": "https://files.pythonhosted.org/packages/3c/4e/94f7cdd436cf2b44449974750b5153b4c19bcf6d373ed6885a4d8a60468d/dockerctx-2017.8.1-py2.py3-none-any.whl" } ], "2017.8.2": [ { "comment_text": "", "digests": { "md5": "f5f0a97476bf10684105d20cc0dfc942", "sha256": "62f70ba9586d7999b6641e000515f44a0935136f65e23449047f88132d000d44" }, "downloads": -1, "filename": "dockerctx-2017.8.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f5f0a97476bf10684105d20cc0dfc942", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9614, "upload_time": "2017-08-17T05:58:46", "url": "https://files.pythonhosted.org/packages/d5/b4/6f54bf5c21a479270c46a7993d354741013bcfe667fc338adba6eaceb96f/dockerctx-2017.8.2-py2.py3-none-any.whl" } ], "2018.11.1": [ { "comment_text": "", "digests": { "md5": "a0618c7f5278e52b4b08e9326c6e9886", "sha256": "5e7d6cb3a40075478c6d356b2cb4237487d6038d31eed8dbedb5a32deddc903e" }, "downloads": -1, "filename": "dockerctx-2018.11.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a0618c7f5278e52b4b08e9326c6e9886", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10202, "upload_time": "2018-11-15T04:26:43", "url": "https://files.pythonhosted.org/packages/5c/ca/269b42359061eea5cd06ede841f0029934e93ae78e62e68e312ab61b5ced/dockerctx-2018.11.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6d5d86f575cab111008f530d0d915606", "sha256": "f2f7f0869f74a0bf2cf407c9863d7aeae60fa9f06adcbf8fe8c8dafe8f4e35fc" }, "downloads": -1, "filename": "dockerctx-2018.11.1.tar.gz", "has_sig": false, "md5_digest": "6d5d86f575cab111008f530d0d915606", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8419, "upload_time": "2018-11-15T04:26:52", "url": "https://files.pythonhosted.org/packages/06/06/62cd6943ceb9b7bce194cb409e2a7e778eb6ef4e1bfa6e84a83cd3370859/dockerctx-2018.11.1.tar.gz" } ], "2018.3.1": [ { "comment_text": "", "digests": { "md5": "e1e945ad0fed1fbc26f9296673dbeb17", "sha256": "666f7c0279b7e05269ba6286a07b2e479cf7fe5d0f2fc39689c9750927fd7454" }, "downloads": -1, "filename": "dockerctx-2018.3.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e1e945ad0fed1fbc26f9296673dbeb17", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10068, "upload_time": "2018-03-11T03:59:13", "url": "https://files.pythonhosted.org/packages/0d/41/eeb37838106f002d17262f42a556c58a17a636ae76fc6eead9e83d3d4d14/dockerctx-2018.3.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "671f69ec2e2e2c00cc44ce0af391b28b", "sha256": "178d10f12198ceff6c8d90905c6cd9c56d04e58137708f04b86b86f7a53a0a06" }, "downloads": -1, "filename": "dockerctx-2018.3.1.tar.gz", "has_sig": false, "md5_digest": "671f69ec2e2e2c00cc44ce0af391b28b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8333, "upload_time": "2018-03-11T03:59:20", "url": "https://files.pythonhosted.org/packages/26/c6/d96d1ab30e22315a0eaa919f94b110e5ef9292af465aa29a5cadf634404d/dockerctx-2018.3.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a0618c7f5278e52b4b08e9326c6e9886", "sha256": "5e7d6cb3a40075478c6d356b2cb4237487d6038d31eed8dbedb5a32deddc903e" }, "downloads": -1, "filename": "dockerctx-2018.11.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a0618c7f5278e52b4b08e9326c6e9886", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 10202, "upload_time": "2018-11-15T04:26:43", "url": "https://files.pythonhosted.org/packages/5c/ca/269b42359061eea5cd06ede841f0029934e93ae78e62e68e312ab61b5ced/dockerctx-2018.11.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6d5d86f575cab111008f530d0d915606", "sha256": "f2f7f0869f74a0bf2cf407c9863d7aeae60fa9f06adcbf8fe8c8dafe8f4e35fc" }, "downloads": -1, "filename": "dockerctx-2018.11.1.tar.gz", "has_sig": false, "md5_digest": "6d5d86f575cab111008f530d0d915606", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8419, "upload_time": "2018-11-15T04:26:52", "url": "https://files.pythonhosted.org/packages/06/06/62cd6943ceb9b7bce194cb409e2a7e778eb6ef4e1bfa6e84a83cd3370859/dockerctx-2018.11.1.tar.gz" } ] }