{ "info": { "author": "Petr Viktorin", "author_email": "pviktori@redhat.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Framework :: Pytest", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Topic :: Software Development :: Quality Assurance" ], "description": "A pytest plugin for multi-host testing.\n\n\nDownloading\n-----------\n\nRelease tarballs will be made available for download from Pagure Releases:\n https://pagure.io/releases/python-pytest-multihost/\n\nThe goal is to include this project in Fedora repositories. Until that happens,\nyou can use testing builds from COPR \u2013 see \"Developer links\" below.\n\nYou can also install using pip:\n https://pypi.python.org/pypi/pytest-multihost\n\n\nUsage\n-----\n\nThis plugin takes a description of your infrastructure,\nand provides, via a fixture, Host objects that commands can be called on.\n\nIt is intended as a general base for a framework; any project using it will\nneed to extend it for its own needs.\n\n\nThe object provided to tests is a Config object, which has (among others)\nthese attributes::\n\n test_dir \u2013 directory to store test-specific data in,\n defaults to /root/multihost_tests\n ipv6 \u2013 true if connecting via IPv6\n\n domains \u2013 the list of domains\n\nHosts to run on are arranged in domains, which have::\n\n name \u2013 the DNS name of the domain\n type \u2013 a string specifying the type of the domain ('default' by default)\n\n config \u2013 the Config this domain is part of\n hosts \u2013 list of hosts in this domain\n\nAnd the hosts have::\n\n role \u2013 type of this host; should encode the OS and installed packages\n hostname \u2013 fully qualified hostname, usually reachable from other hosts\n shortname \u2013 first component of hostname\n external_hostname \u2013 hostname used to connect to this host\n ip \u2013 IP address\n\n domain \u2013 the Domain this host is part of\n\n transport \u2013 allows operations like uploading and downloading files\n run_command() \u2013 runs the given command on the host\n\nFor each object \u2013 Config, Domain, Host \u2013 one can provide subclasses\nto modify the behavior (for example, FreeIPA would add Host methods\nto run a LDAP query or to install an IPA server).\nEach object has from_dict and to_dict methods, which can add additional\nattributes \u2013 for example, Config.ntp_server.\n\n\nTo use the multihost plugin in tests, create a fixture listing the domains\nand what number of which host role is needed::\n\n import pytest\n from pytest_multihost import make_multihost_fixture\n\n @pytest.fixture(scope='class')\n def multihost(request):\n mh = make_multihost_fixture(\n request,\n descriptions=[\n {\n 'type': 'ipa',\n 'hosts': {\n 'master': 1,\n 'replica': 2,\n },\n },\n ],\n )\n return mh\n\nIf not enough hosts are available, all tests that use the fixture are skipped.\n\nThe object returned from ``make_multihost_fixture`` only has the \"config\"\nattribute.\nUsers are expected to add convenience attributes.\nFor example, FreeIPA, which typically uses a single domain with one master,\nseveral replicas and some clients, would do::\n\n from pytest_multihost import make_multihost_fixture\n\n @pytest.fixture(scope='class')\n def multihost(request):\n mh = make_multihost_fixture(request, descriptions=[\n {\n 'type': 'ipa',\n 'hosts': {\n 'master': 1,\n 'replica': 1,\n 'client': 1,\n },\n },\n ],\n )\n\n # Set convenience attributes\n mh.domain = mh.config.domains[0]\n [mh.master] = mh.domain.hosts_by_role('master')\n mh.replicas = mh.domain.hosts_by_role('replica')\n mh.clients = mh.domain.hosts_by_role('client')\n\n # IPA-specific initialization/teardown of the hosts\n request.cls().install(mh)\n request.addfinalizer(lambda: request.cls().uninstall(mh))\n\n # Return the fixture\n return mh\n\n\nAs with any pytest fixture, this can be used by getting it as\na function argument.\nFor a simplified example, FreeIPA usage could look something like this::\n\n class TestMultihost(object):\n def install(self, multihost):\n multihost.master.run_command(['ipa-server-install'])\n\n def uninstall(self, multihost):\n multihost.master.run_command(['ipa-server-install', '--uninstall'])\n\n def test_installed(self, multihost):\n multihost.master.run_command(['ipa', 'ping'])\n\n\nThe description of infrastructure is provided in a JSON or YAML file,\nwhich is named on the py.test command line. For example::\n\n ssh_key_filename: ~/.ssh/id_rsa\n domains:\n - name: adomain.test\n type: test-a\n hosts:\n - name: master\n ip: 192.0.2.1\n role: master\n - name: replica1\n ip: 192.0.2.2\n role: replica\n - name: replica2\n ip: 192.0.2.3\n role: replica\n external_hostname: r2.adomain.test\n - name: client1\n ip: 192.0.2.4\n role: client\n - name: extra\n ip: 192.0.2.6\n role: extrarole\n - name: bdomain.test\n type: test-b\n hosts:\n - name: master.bdomain.test\n ip='192.0.2.65\n role: master\n\n$ py.test --multihost-config=/path/to/configfile.yaml\n\nTo use YAML files, the PyYAML package is required. Without it only JSON files\ncan be used.\n\n\nEncoding and bytes/text\n-----------------------\n\nWhen writing files or issuing commands, bytestrings are passed through\nunchanged, and text strings (``unicode`` in Python 2) are encoded using\na configurable encoding (``utf-8`` by default).\n\nWhen reading files, bytestrings are returned by default,\nbut an encoding can be given to get a test string.\n\nFor command output, separate ``stdout_bytes`` and ``stdout_text`` attributes\nare provided.\nThe latter uses a configurable encoding (``utf-8` by default).\n\n\nContributing\n------------\n\nThe project is happy to accept patches!\nPlease file any patches as Pull Requests on the project's `Pagure repo`_.\nAny development discussion should be in Pagure Pull Requests and Issues.\n\n\nDeveloper links\n---------------\n\n * Bug tracker: https://pagure.io/python-pytest-multihost/issues\n * Code browser: https://pagure.io/python-pytest-multihost/tree/master\n * git clone https://pagure.io/python-pytest-multihost.git\n * Unstable packages for Fedora: https://copr.fedoraproject.org/coprs/pviktori/pytest-plugins/\n\nTo release, update version in setup.py, add a Git tag like \"v0.3\",\nand run `make tarball`.\nRunning `make upload` will put the tarball to Fedora Hosted and PyPI,\nand a SRPM on Fedorapeople, if you have the rights.\nRunning `make release` will upload and fire a COPR build.\n\n.. _Pagure repo: https://pagure.io/python-pytest-multihost\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://pagure.io/python-pytest-multihost", "keywords": "", "license": "GPL", "maintainer": "", "maintainer_email": "", "name": "pytest-multihost", "package_url": "https://pypi.org/project/pytest-multihost/", "platform": "", "project_url": "https://pypi.org/project/pytest-multihost/", "project_urls": { "Homepage": "https://pagure.io/python-pytest-multihost" }, "release_url": "https://pypi.org/project/pytest-multihost/3.0/", "requires_dist": [ "pytest (>=2.4.0)" ], "requires_python": "", "summary": "Utility for writing multi-host tests for pytest", "version": "3.0" }, "last_serial": 3632618, "releases": { "0.2": [], "0.3": [ { "comment_text": "", "digests": { "md5": "4e95e837365194cdf5877994a2f07cd9", "sha256": "b712f7b90c1d76884c44ab17b49f053ec0fcf429e55b6146c11d02117d33f947" }, "downloads": -1, "filename": "pytest_multihost-0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4e95e837365194cdf5877994a2f07cd9", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 19357, "upload_time": "2014-11-26T16:19:34", "url": "https://files.pythonhosted.org/packages/68/97/e63e8d719347ed1428e683c9e14451a6560f85d46e67eb00ece257e6dda6/pytest_multihost-0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d73ff4afa33f5ea2bcc64be69e416fba", "sha256": "92cfc2ee87775bc396bca71ea01043147b1bc4f96c18462e687d48b998854e61" }, "downloads": -1, "filename": "pytest-multihost-0.3.tar.gz", "has_sig": false, "md5_digest": "d73ff4afa33f5ea2bcc64be69e416fba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16195, "upload_time": "2014-11-26T16:19:30", "url": "https://files.pythonhosted.org/packages/53/87/310bc6080e6d00c654ec55bb2c8a2cf163c5dcaf122f35f318dc35794fa5/pytest-multihost-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "2a3e8b568f3d4cebea641c194806e2ba", "sha256": "7bf45039785659355781a19d7ae18d0b58e85aac0998a629ec0a2f077716599c" }, "downloads": -1, "filename": "pytest_multihost-0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "2a3e8b568f3d4cebea641c194806e2ba", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 19450, "upload_time": "2014-12-09T14:34:14", "url": "https://files.pythonhosted.org/packages/4b/9e/9974ebbbb4d895c11b39b5e398fd713e48bc6c1d82eb3eea3c1b476d324c/pytest_multihost-0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b46622f74845b5f70d63a946baa64421", "sha256": "cdf37083682b4869bdd432a26e5be3b3fb43cb9c7641c2ccee78be5d75177642" }, "downloads": -1, "filename": "pytest-multihost-0.4.tar.gz", "has_sig": false, "md5_digest": "b46622f74845b5f70d63a946baa64421", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16270, "upload_time": "2014-12-09T14:34:11", "url": "https://files.pythonhosted.org/packages/d1/02/76338409c2ea15a9eaa0512467ac54a1d9097986baef8c01356815ae5dd2/pytest-multihost-0.4.tar.gz" } ], "0.5": [ { "comment_text": "", "digests": { "md5": "7b268dae76e226df916aa4593dfa1b63", "sha256": "7ccf6cd7802e7af3333612707d4f40f9d1f809080840fa973cc65dcb1e7f6836" }, "downloads": -1, "filename": "pytest_multihost-0.5-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7b268dae76e226df916aa4593dfa1b63", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 19524, "upload_time": "2014-12-15T12:54:00", "url": "https://files.pythonhosted.org/packages/f9/4f/ab1a6e64231f9419f62896b239020b34d03841c43ef07e98b42154eed373/pytest_multihost-0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "995c49cb02cbf0dcb68b8171af42efd9", "sha256": "9033be2b99ef6390d8cda8076ac04ffc92dd67730e52eaeda37ffa0e1be9cad9" }, "downloads": -1, "filename": "pytest-multihost-0.5.tar.gz", "has_sig": false, "md5_digest": "995c49cb02cbf0dcb68b8171af42efd9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16349, "upload_time": "2014-12-15T12:53:56", "url": "https://files.pythonhosted.org/packages/4d/7b/91634c9b50410b5f6a68efed63ce4fb75c2bcb47878db0bbb698e761f955/pytest-multihost-0.5.tar.gz" } ], "0.6": [ { "comment_text": "", "digests": { "md5": "330f7d797c77d44750ba96a8e6799381", "sha256": "e9832730c8bed48607086d50af15d217c1d5a2f2f21a03a8ad455dc2d8715dbe" }, "downloads": -1, "filename": "pytest_multihost-0.6-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "330f7d797c77d44750ba96a8e6799381", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 19525, "upload_time": "2015-01-26T12:50:33", "url": "https://files.pythonhosted.org/packages/28/fe/7ebfeff55349064c82cebd9676c90fb8d00cb71fdee2d919bb31aa925f3a/pytest_multihost-0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5745c64ac5b95756687df2b2a3b4fca3", "sha256": "a28b3ec2678e88e820f87c49c6430981349059071b99c505141cfee8feecd74d" }, "downloads": -1, "filename": "pytest-multihost-0.6.tar.gz", "has_sig": false, "md5_digest": "5745c64ac5b95756687df2b2a3b4fca3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16350, "upload_time": "2015-01-26T12:50:30", "url": "https://files.pythonhosted.org/packages/3d/4a/12a8eab6125c9b4770af4e35864275beaa4cd9626193085645a02b763fa3/pytest-multihost-0.6.tar.gz" } ], "0.8": [ { "comment_text": "", "digests": { "md5": "19d8c67fa6ee75d371973a94d2d78db2", "sha256": "d3719eb82f397595efa2d2000fdc630fd6533d76465aafb497101cde8fc4c2af" }, "downloads": -1, "filename": "pytest_multihost-0.8-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "19d8c67fa6ee75d371973a94d2d78db2", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 19551, "upload_time": "2015-03-06T08:56:18", "url": "https://files.pythonhosted.org/packages/38/31/a571760346c595b3612bb7ed8ad67428880c98a44d034ca037ef49568631/pytest_multihost-0.8-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "db087e3a9416b076b7bd52164bb0e391", "sha256": "ef26ec15f3c4d7a88912637705781ef70b8ee60bdfa997f54c8e9e7d49f25629" }, "downloads": -1, "filename": "pytest-multihost-0.8.tar.gz", "has_sig": false, "md5_digest": "db087e3a9416b076b7bd52164bb0e391", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16374, "upload_time": "2015-03-06T08:55:15", "url": "https://files.pythonhosted.org/packages/5c/9d/803e2e18c3a0554e884d4d1200e71980bd230590cfe0fe4da2144c476c21/pytest-multihost-0.8.tar.gz" } ], "0.9": [ { "comment_text": "", "digests": { "md5": "db0669838d6c4efa9fb12d6be2eac26d", "sha256": "9c693a783dc4bfcfc70488ae8ab2c9e41d9d7688692e43d930f5b6f77437a2db" }, "downloads": -1, "filename": "pytest_multihost-0.9-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "db0669838d6c4efa9fb12d6be2eac26d", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 19785, "upload_time": "2015-11-26T10:18:49", "url": "https://files.pythonhosted.org/packages/29/17/7180650918d5f81e6c523565044e993a17ee73f43d8e25211c6fdb0ee124/pytest_multihost-0.9-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "41de0565fdcb69c0383fabc375f6bc5a", "sha256": "29255913cba4e6de103dfdb5461f30630d0b7c7fbf3b69cc6e755052f25142c2" }, "downloads": -1, "filename": "pytest-multihost-0.9.tar.gz", "has_sig": false, "md5_digest": "41de0565fdcb69c0383fabc375f6bc5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16570, "upload_time": "2015-11-26T10:18:43", "url": "https://files.pythonhosted.org/packages/9d/e4/93404564acbc48f31272fa3b6a4167a3b5551395b7319e7c28d560441237/pytest-multihost-0.9.tar.gz" } ], "1.0": [ { "comment_text": "", "digests": { "md5": "682f8ad12354c880801474e042161970", "sha256": "d907d1328e3c6b005322704dc458553c1a5c9911661d1bbe8c111e92f9138390" }, "downloads": -1, "filename": "pytest_multihost-1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "682f8ad12354c880801474e042161970", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 20066, "upload_time": "2016-03-03T14:41:30", "url": "https://files.pythonhosted.org/packages/e3/c0/5313d7d4779148cb27e0759ab251ee02fd7317c6ad4a39a547bc4f1d9094/pytest_multihost-1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "584a7dcee4625d7a16958ddcee472b9e", "sha256": "c77480a8b4e11a67df443cd6addceb5d718635273f0769eaa9c83434c79c925d" }, "downloads": -1, "filename": "pytest-multihost-1.0.tar.gz", "has_sig": false, "md5_digest": "584a7dcee4625d7a16958ddcee472b9e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16818, "upload_time": "2016-03-03T14:41:21", "url": "https://files.pythonhosted.org/packages/e2/98/b977ff9ade67a19e997a8d5e8fca265733052569bfffea57edfe5c89abab/pytest-multihost-1.0.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "f1dcf1ff7e450aba5e75739f1f5b4c6a", "sha256": "367f0051b2aa5b9b832df4d0459d3e74eedf45517d7c18a06a5a1112e8b81cb1" }, "downloads": -1, "filename": "pytest_multihost-1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "f1dcf1ff7e450aba5e75739f1f5b4c6a", "packagetype": "bdist_wheel", "python_version": "2.7", "requires_python": null, "size": 20328, "upload_time": "2016-04-22T11:42:35", "url": "https://files.pythonhosted.org/packages/5c/d3/69a2925ae72618737f41c8d57bf8bee991466fc613380cdbcdfb973b4677/pytest_multihost-1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "52f2024d0ec47f53f405e9da3c1b4869", "sha256": "e5ab23e4c211d7c68619888b96f5506d097afd15abf0226a9a868cda3b93712e" }, "downloads": -1, "filename": "pytest-multihost-1.1.tar.gz", "has_sig": false, "md5_digest": "52f2024d0ec47f53f405e9da3c1b4869", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17133, "upload_time": "2016-04-22T11:42:12", "url": "https://files.pythonhosted.org/packages/6b/ad/d71a4e8cbcd0d5dfcca90562e17dddb0d1a137d9f35baa048fa7f08d6208/pytest-multihost-1.1.tar.gz" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "dc90bc0796b0a8de6cfe5682b29e2088", "sha256": "9ac945b4c35ef2de072eaebf1a9980d66557c1503e2bc11b8de24e3fae4609c9" }, "downloads": -1, "filename": "pytest_multihost-1.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "dc90bc0796b0a8de6cfe5682b29e2088", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20198, "upload_time": "2017-04-12T09:49:15", "url": "https://files.pythonhosted.org/packages/d2/08/9ae52b0172ec8b1a6e9ea159e41cd73b7918821d314a8edf32b3cd2318af/pytest_multihost-1.1.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dae6009b8847b28ccb9a6de6de169a98", "sha256": "b97259b71fe7103d37fbfdd09a06d8337b9562b2b089356460414bfe35b95867" }, "downloads": -1, "filename": "pytest-multihost-1.1.1.tar.gz", "has_sig": false, "md5_digest": "dae6009b8847b28ccb9a6de6de169a98", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16907, "upload_time": "2017-04-12T09:49:17", "url": "https://files.pythonhosted.org/packages/61/75/a5cc55b8e3afb4c4d918538cb672d9106f474ac599f8bef42658e61c3b4e/pytest-multihost-1.1.1.tar.gz" } ], "2.0": [ { "comment_text": "", "digests": { "md5": "99d32371f26eed565f5433e63780bc84", "sha256": "961b34f0419610020e15286722f8e9407f646c87c3a40cb61055e601cb082226" }, "downloads": -1, "filename": "pytest_multihost-2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "99d32371f26eed565f5433e63780bc84", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21678, "upload_time": "2018-02-12T12:48:19", "url": "https://files.pythonhosted.org/packages/84/23/c33f8351c501a8b1ec9818553acc3d22c14c245b91a5b058c9e78546b3ce/pytest_multihost-2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "596ddfc08cfa3fc998828331742b73b6", "sha256": "e0a75ab6ec8ceab80cde6cac5ff7c902ccf41eaaceaa8454417c138b43f1b965" }, "downloads": -1, "filename": "pytest-multihost-2.0.tar.gz", "has_sig": false, "md5_digest": "596ddfc08cfa3fc998828331742b73b6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18373, "upload_time": "2018-02-12T12:48:21", "url": "https://files.pythonhosted.org/packages/cc/23/1625ddf0713c3d842afaac46ffedcb6cfada951669ac05348576d6837008/pytest-multihost-2.0.tar.gz" } ], "3.0": [ { "comment_text": "", "digests": { "md5": "4ce47020cdee78602f051e8425738910", "sha256": "6fe111e92bc2259b5e8835167f12308c1ac424af5417c0ffd6232f376834bfd8" }, "downloads": -1, "filename": "pytest_multihost-3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4ce47020cdee78602f051e8425738910", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21673, "upload_time": "2018-03-02T17:41:26", "url": "https://files.pythonhosted.org/packages/ba/2c/f812e7df84426d4bfb84313b6ce35cd53eaadb7adc4901839117cc172546/pytest_multihost-3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "41d0613c48dce914b08fab9c8fb83d60", "sha256": "ee4894f028e3ad81eb2e4dccb69803d84d6140e5974ea0591d604654e329fb64" }, "downloads": -1, "filename": "pytest-multihost-3.0.tar.gz", "has_sig": false, "md5_digest": "41d0613c48dce914b08fab9c8fb83d60", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16048, "upload_time": "2018-03-02T17:41:28", "url": "https://files.pythonhosted.org/packages/91/a8/cf8d107256054369ad366c4a0975b451b7fee167ab98bccaca8812da69c7/pytest-multihost-3.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4ce47020cdee78602f051e8425738910", "sha256": "6fe111e92bc2259b5e8835167f12308c1ac424af5417c0ffd6232f376834bfd8" }, "downloads": -1, "filename": "pytest_multihost-3.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4ce47020cdee78602f051e8425738910", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 21673, "upload_time": "2018-03-02T17:41:26", "url": "https://files.pythonhosted.org/packages/ba/2c/f812e7df84426d4bfb84313b6ce35cd53eaadb7adc4901839117cc172546/pytest_multihost-3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "41d0613c48dce914b08fab9c8fb83d60", "sha256": "ee4894f028e3ad81eb2e4dccb69803d84d6140e5974ea0591d604654e329fb64" }, "downloads": -1, "filename": "pytest-multihost-3.0.tar.gz", "has_sig": false, "md5_digest": "41d0613c48dce914b08fab9c8fb83d60", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16048, "upload_time": "2018-03-02T17:41:28", "url": "https://files.pythonhosted.org/packages/91/a8/cf8d107256054369ad366c4a0975b451b7fee167ab98bccaca8812da69c7/pytest-multihost-3.0.tar.gz" } ] }