{ "info": { "author": "Praekelt.org SRE team", "author_email": "sre@praekelt.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Pytest", "License :: OSI Approved :: BSD License", "Natural Language :: English", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3 :: Only", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Software Development :: Testing" ], "description": "Seaworthy\n=========\n\n.. image:: https://img.shields.io/pypi/v/seaworthy.svg\n :target: https://pypi.org/project/seaworthy/\n\n.. image:: https://readthedocs.org/projects/seaworthy/badge/?version=latest\n :target: http://seaworthy.readthedocs.io/en/latest/\n\n.. image:: https://travis-ci.org/praekeltfoundation/seaworthy.svg?branch=develop\n :target: https://travis-ci.org/praekeltfoundation/seaworthy\n\n.. image:: https://codecov.io/gh/praekeltfoundation/seaworthy/branch/develop/graph/badge.svg\n :target: https://codecov.io/gh/praekeltfoundation/seaworthy\n\n.. badges\n\nSeaworthy is a test harness for Docker container images. It allows you to use\nDocker containers and other Docker resources as fixtures for tests written in\nPython.\n\nSeaworthy supports Python 3.4 and newer. You can find more information in the\n`documentation`_.\n\nA `demo repository`_ is available with a set of Seaworthy tests for a\nsimple Django application. Seaworthy is also introduced in our `blog post`_ on\ncontinuous integration with Docker on Travis CI.\n\nFor more background on the design and purpose of Seaworthy, see our\n`PyConZA 2018 talk`_ (`slides`_).\n\n\nQuick demo\n----------\nFirst install Seaworthy along with pytest using pip::\n\n pip install seaworthy[pytest]\n\nWrite some tests in a file, for example, ``test_echo_container.py``:\n\n.. code-block:: python\n\n from seaworthy.definitions import ContainerDefinition\n\n container = ContainerDefinition(\n 'echo', 'jmalloc/echo-server',\n wait_patterns=[r'Echo server listening on port 8080'],\n create_kwargs={'ports': {'8080': None}})\n fixture = container.pytest_fixture('echo_container')\n\n\n def test_echo(echo_container):\n r = echo_container.http_client().get('/foo')\n assert r.status_code == 200\n assert 'HTTP/1.1 GET /foo' in r.text\n\nRun pytest::\n\n pytest -v test_echo_container.py\n\n\n\nProject status\n--------------\nSeaworthy should be considered alpha-level software. It is well-tested and\nworks well for the first few things we have used it for, but we would like to\nuse it for more of our Docker projects, which may require some parts of\nSeaworthy to evolve further. See the `project issues`_ for known\nissues/shortcomings.\n\nThe project was originally split out of the tests we wrote for our\n`docker-django-bootstrap`_ project. There are examples of Seaworthy in use\nthere.\n\n\n.. _`documentation`: http://seaworthy.readthedocs.io/en/latest/\n.. _`demo repository`: https://github.com/JayH5/seaworthy-demo\n.. _`blog post`: https://medium.com/mobileforgood/patterns-for-continuous-integration-with-docker-on-travis-ci-ba7e3a5ca2aa\n.. _`PyConZA 2018 talk`: https://www.youtube.com/watch?v=NY---NXXHjQ\n.. _`slides`: https://speakerdeck.com/jayh5/test-your-docker-images-with-python\n.. _`project issues`: https://github.com/praekeltfoundation/seaworthy/issues\n.. _`docker-django-bootstrap`: https://github.com/praekeltfoundation/docker-django-bootstrap\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/praekeltfoundation/seaworthy", "keywords": "", "license": "BSD", "maintainer": "", "maintainer_email": "", "name": "seaworthy", "package_url": "https://pypi.org/project/seaworthy/", "platform": "", "project_url": "https://pypi.org/project/seaworthy/", "project_urls": { "Homepage": "https://github.com/praekeltfoundation/seaworthy" }, "release_url": "https://pypi.org/project/seaworthy/0.4.2/", "requires_dist": [ "attrs (>=17.4.0)", "docker (<4,>=3.6)", "hyperlink", "requests", "doc8 ; extra == 'docstest'", "readme-renderer ; extra == 'docstest'", "Sphinx (<1.8,>=1.7) ; extra == 'docstest'", "sphinx-rtd-theme ; extra == 'docstest'", "flake8 (>=3.7.0) ; extra == 'pep8test'", "flake8-import-order ; extra == 'pep8test'", "pep8-naming ; extra == 'pep8test'", "pytest (>=3.0.0) ; extra == 'pytest'", "pytest (>=3.0.0) ; extra == 'test'", "responses ; extra == 'test'", "testtools ; extra == 'test'", "responses ; extra == 'test-core'", "testtools ; extra == 'testtools'" ], "requires_python": "", "summary": "Test Docker container images", "version": "0.4.2" }, "last_serial": 4760008, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "87e6a29b7239d22eb4519e25344006fa", "sha256": "eb1658aacde61cdeeaac007732fc0f07867f2d1702866d0eb48ff4bb164cd273" }, "downloads": -1, "filename": "seaworthy-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "87e6a29b7239d22eb4519e25344006fa", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 53566, "upload_time": "2017-11-20T13:13:48", "url": "https://files.pythonhosted.org/packages/b0/58/ee0b34524b451f016086305e92b01d12312bd5f14c697998bbe724465177/seaworthy-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "288cd10d03d53fe283e3deefb8a604ff", "sha256": "4ae7e8dd095c376ca3d0141c8789eef2e4e8f31b99c81a089dada18b1fa5f6c9" }, "downloads": -1, "filename": "seaworthy-0.1.0.tar.gz", "has_sig": false, "md5_digest": "288cd10d03d53fe283e3deefb8a604ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 41273, "upload_time": "2017-11-20T13:13:49", "url": "https://files.pythonhosted.org/packages/13/b6/02680ba3ab77bc395eb6e3d73d0d8173589781853aa91d14c9246ec611cc/seaworthy-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "3cda470d40ca1f47ba697d83c94ca968", "sha256": "0d189f04a590b1024a500f7eef7bf097a5793873fa042c4a998f9aa553b8b0bc" }, "downloads": -1, "filename": "seaworthy-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3cda470d40ca1f47ba697d83c94ca968", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 54552, "upload_time": "2017-11-22T09:38:35", "url": "https://files.pythonhosted.org/packages/ee/f7/c0b749204305659477f9bcda991a29f99e80b8c5aed5b2c6eb7f112b6d8d/seaworthy-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5afc1d61d9598937fab4ad4c4bbbaf85", "sha256": "4a1f1f71d057bee8486399f0c87c6db58be0855a8d2a89e5a324756a525b951b" }, "downloads": -1, "filename": "seaworthy-0.1.1.tar.gz", "has_sig": false, "md5_digest": "5afc1d61d9598937fab4ad4c4bbbaf85", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43151, "upload_time": "2017-11-22T09:38:37", "url": "https://files.pythonhosted.org/packages/c0/a1/fc709ade68ff6db2abc3a0c076c7787cd78f3344cf6429be8756cca30ff8/seaworthy-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "f5b9f4c728afdcb1ab901c4ef98c95ac", "sha256": "1a07e6577c7bdb10027117a4cc20c2f470b4db85ba4daad7c2117d31f3062981" }, "downloads": -1, "filename": "seaworthy-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "f5b9f4c728afdcb1ab901c4ef98c95ac", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 54738, "upload_time": "2017-11-23T14:31:09", "url": "https://files.pythonhosted.org/packages/f0/90/39ffedb52dd39d79e1e5d637fd431ab0bf375e2dd32f6a0ffcf468f95dbd/seaworthy-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e17bb389a4f196e21072a9fcd055c2ae", "sha256": "9091feafdea1c249c07fea0a5d94744d0e3e1c2d559cba908bc698678bad2263" }, "downloads": -1, "filename": "seaworthy-0.1.2.tar.gz", "has_sig": false, "md5_digest": "e17bb389a4f196e21072a9fcd055c2ae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43317, "upload_time": "2017-11-23T14:31:14", "url": "https://files.pythonhosted.org/packages/e9/50/5814b9847ac67e644d9ee9a91ef450863c70dedb79706e5a81d1f54473c2/seaworthy-0.1.2.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "5cca904304d67a7d36cd3678ffa7ccff", "sha256": "58298cc1762ad7b3166f6a8f1d6ed61f6b316a7af7c5f7dc5ad263557abc42e4" }, "downloads": -1, "filename": "seaworthy-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5cca904304d67a7d36cd3678ffa7ccff", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 55942, "upload_time": "2018-03-08T13:18:04", "url": "https://files.pythonhosted.org/packages/11/4a/2750ec51d55e4dcf1f63c90d743c80720dc59072ca74c7cec80dc12c5532/seaworthy-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "135c6dd4566ac61ee1a1eff4dd97ff61", "sha256": "06594cb98971ffcc41b8f7dfd9eb78e105fcff7623207c7cbce69c57bd488157" }, "downloads": -1, "filename": "seaworthy-0.2.0.tar.gz", "has_sig": false, "md5_digest": "135c6dd4566ac61ee1a1eff4dd97ff61", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43304, "upload_time": "2018-03-08T13:18:06", "url": "https://files.pythonhosted.org/packages/4f/83/c771307f74bfe238016e5b2d972a374a5ee61797abb472990dbb6f0b2cf2/seaworthy-0.2.0.tar.gz" } ], "0.2.1.2": [ { "comment_text": "", "digests": { "md5": "41f3fc291ceaeb9d9977f11ec73c007d", "sha256": "ef5b7570e56cf91173f821675908874377baf62a70d2576b1660263294856cfd" }, "downloads": -1, "filename": "seaworthy-0.2.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "41f3fc291ceaeb9d9977f11ec73c007d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 54233, "upload_time": "2018-04-17T10:08:02", "url": "https://files.pythonhosted.org/packages/d0/7d/a467666537371b47c9dcf169da4e0ef4397815b39daa9d39bcd8eb3c95fd/seaworthy-0.2.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d496eaa8aeab8e89ab58d79e2f322c92", "sha256": "07e1f12e274ca0468f36a18dc4447027b72d519121ef6513415d555bb7ca3b97" }, "downloads": -1, "filename": "seaworthy-0.2.1.2.tar.gz", "has_sig": false, "md5_digest": "d496eaa8aeab8e89ab58d79e2f322c92", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 43864, "upload_time": "2018-04-17T10:08:03", "url": "https://files.pythonhosted.org/packages/cf/de/754c0c10dfc7407a20f3be2ce717aa8e75e36ca73db66ba53063f81bd04d/seaworthy-0.2.1.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "f857051e8de1592ac3fb0023bcb515fb", "sha256": "ed188a15d6e832d3eeabb00ed4923eff761678d27ec5a01821feaf36dd44e741" }, "downloads": -1, "filename": "seaworthy-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "f857051e8de1592ac3fb0023bcb515fb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 52920, "upload_time": "2018-07-16T12:52:27", "url": "https://files.pythonhosted.org/packages/2f/69/9880a4bad45caf57c2a2c065d6264f316b65188f38f8758b172727d22d4d/seaworthy-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b4061617ec5bd1fdd6c451c3e685d575", "sha256": "26ef38cd5b6b07a435eb12741922ca88a5c7f3d76532ab021bd9b6452052b559" }, "downloads": -1, "filename": "seaworthy-0.3.0.tar.gz", "has_sig": false, "md5_digest": "b4061617ec5bd1fdd6c451c3e685d575", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42894, "upload_time": "2018-07-16T12:52:28", "url": "https://files.pythonhosted.org/packages/14/2a/ed45100b41fa5c65a061de3244e45a3713ef57839b0a665cdc3a96c73cec/seaworthy-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "64ed6ed40b5ce7135bbf4fcffbe70408", "sha256": "041f47bbb630d8c372b2d11bea4e2770c0bd2b034696268117bff1370a462ed9" }, "downloads": -1, "filename": "seaworthy-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "64ed6ed40b5ce7135bbf4fcffbe70408", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 52996, "upload_time": "2018-09-26T11:34:39", "url": "https://files.pythonhosted.org/packages/30/d9/5387e37798e5de1831cc9b94218f4ba43221adfda00a4432a636d2cae9c1/seaworthy-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fb121509585b7e7fd10908ff482d823d", "sha256": "83369a47f3a00bc0195e607191feef11a04e978a03ebb88b392accf442106439" }, "downloads": -1, "filename": "seaworthy-0.3.1.tar.gz", "has_sig": false, "md5_digest": "fb121509585b7e7fd10908ff482d823d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 42977, "upload_time": "2018-09-26T11:34:41", "url": "https://files.pythonhosted.org/packages/0c/28/0771f274d0444f6400dad09db25400c22694279892e33bdaf455cb736820/seaworthy-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "e5b6b73e785560f80a7e05df0c948dd5", "sha256": "f45f5cb6e98633ea9b68a66bd80e5f49d4d6f832950858040d4f00c9a08949dd" }, "downloads": -1, "filename": "seaworthy-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "e5b6b73e785560f80a7e05df0c948dd5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 58317, "upload_time": "2018-12-06T12:20:24", "url": "https://files.pythonhosted.org/packages/10/f0/2af855385abc49f4e5f903ead2335c47d98c84a3dbd8bdbb77fbb5fa41c2/seaworthy-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bc50b5723193105aa5b40191a7b56d89", "sha256": "d49204ed0b871b7e37b826480a152a4ae8b49f95240ff54b89fd3b30b2733a87" }, "downloads": -1, "filename": "seaworthy-0.4.0.tar.gz", "has_sig": false, "md5_digest": "bc50b5723193105aa5b40191a7b56d89", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46165, "upload_time": "2018-12-06T12:20:27", "url": "https://files.pythonhosted.org/packages/71/93/8e0274d3ddd08457a47ffd3cb3528c9c8a3bea913eee2aa98cefec5fc033/seaworthy-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "078d9c607f23db93a13a73f30d2dda5f", "sha256": "f3c5f913b1f32a11010225d96b3bcb6dc254e93a5268d0e4dfa2c157a444cdd5" }, "downloads": -1, "filename": "seaworthy-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "078d9c607f23db93a13a73f30d2dda5f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 58579, "upload_time": "2018-12-07T11:49:23", "url": "https://files.pythonhosted.org/packages/95/7d/c245d503c257718c20d0c65c76ac22f40b72f423a4fe6a32977fb4133bd4/seaworthy-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e3ab96662a417fde974e642fcf3aa5af", "sha256": "36cdc331fbdc5939793abbf5b794269b0687752c9af63fd703c359903145fa07" }, "downloads": -1, "filename": "seaworthy-0.4.1.tar.gz", "has_sig": false, "md5_digest": "e3ab96662a417fde974e642fcf3aa5af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46405, "upload_time": "2018-12-07T11:49:24", "url": "https://files.pythonhosted.org/packages/49/93/0b4c770a88d925ac6576dc6747511c972f166df3b17004a44e7bce8408ea/seaworthy-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "24b28963f3a2385d468446c561dc10c9", "sha256": "84b7a1884778b1e96e5d42b64078659974fe370936f88cc19965674ed1518781" }, "downloads": -1, "filename": "seaworthy-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "24b28963f3a2385d468446c561dc10c9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 58689, "upload_time": "2019-01-30T14:43:01", "url": "https://files.pythonhosted.org/packages/13/cd/37cbcf46651c75f5a7f12808e44ad01eeb5f9f475a426e24e0898be735fe/seaworthy-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "79b56a6773c8012f0081d48004bf74ab", "sha256": "2d9161e70bccea65220cf4026761eef49135d41fc704c2236ad3226d6a936598" }, "downloads": -1, "filename": "seaworthy-0.4.2.tar.gz", "has_sig": false, "md5_digest": "79b56a6773c8012f0081d48004bf74ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46525, "upload_time": "2019-01-30T14:43:03", "url": "https://files.pythonhosted.org/packages/6f/2b/f6e069e187d8bd1fd6da9a86295f04037804f8e98b5da176588ea445559a/seaworthy-0.4.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "24b28963f3a2385d468446c561dc10c9", "sha256": "84b7a1884778b1e96e5d42b64078659974fe370936f88cc19965674ed1518781" }, "downloads": -1, "filename": "seaworthy-0.4.2-py3-none-any.whl", "has_sig": false, "md5_digest": "24b28963f3a2385d468446c561dc10c9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 58689, "upload_time": "2019-01-30T14:43:01", "url": "https://files.pythonhosted.org/packages/13/cd/37cbcf46651c75f5a7f12808e44ad01eeb5f9f475a426e24e0898be735fe/seaworthy-0.4.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "79b56a6773c8012f0081d48004bf74ab", "sha256": "2d9161e70bccea65220cf4026761eef49135d41fc704c2236ad3226d6a936598" }, "downloads": -1, "filename": "seaworthy-0.4.2.tar.gz", "has_sig": false, "md5_digest": "79b56a6773c8012f0081d48004bf74ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 46525, "upload_time": "2019-01-30T14:43:03", "url": "https://files.pythonhosted.org/packages/6f/2b/f6e069e187d8bd1fd6da9a86295f04037804f8e98b5da176588ea445559a/seaworthy-0.4.2.tar.gz" } ] }