{"id":13468673,"url":"https://github.com/miketheman/pytest-socket","last_synced_at":"2025-05-14T02:07:23.812Z","repository":{"id":37978887,"uuid":"93013711","full_name":"miketheman/pytest-socket","owner":"miketheman","description":"Pytest Plugin to disable socket calls during tests","archived":false,"fork":false,"pushed_at":"2025-03-31T21:38:20.000Z","size":712,"stargazers_count":309,"open_issues_count":9,"forks_count":47,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-04-14T10:42:34.113Z","etag":null,"topics":["pytest-plugin","python","socket","testing","testing-tools"],"latest_commit_sha":null,"homepage":"https://pypi.org/project/pytest-socket/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/miketheman.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"miketheman"}},"created_at":"2017-06-01T03:43:01.000Z","updated_at":"2025-04-06T02:19:04.000Z","dependencies_parsed_at":"2023-10-03T01:08:37.600Z","dependency_job_id":"37723766-1276-4187-a1b1-b29c9b44df85","html_url":"https://github.com/miketheman/pytest-socket","commit_stats":{"total_commits":239,"total_committers":27,"mean_commits":8.851851851851851,"dds":0.5815899581589958,"last_synced_commit":"c78b94674965de1d4f536ad4934cf348c866cca5"},"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miketheman%2Fpytest-socket","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miketheman%2Fpytest-socket/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miketheman%2Fpytest-socket/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/miketheman%2Fpytest-socket/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/miketheman","download_url":"https://codeload.github.com/miketheman/pytest-socket/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254052802,"owners_count":22006717,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["pytest-plugin","python","socket","testing","testing-tools"],"created_at":"2024-07-31T15:01:16.460Z","updated_at":"2025-05-14T02:07:18.800Z","avatar_url":"https://github.com/miketheman.png","language":"Python","funding_links":["https://github.com/sponsors/miketheman"],"categories":["Python","Plugins"],"sub_categories":[],"readme":"# pytest-socket\n\n[![PyPI current version](https://img.shields.io/pypi/v/pytest-socket.svg)](https://pypi.python.org/pypi/pytest-socket)\n[![Python Support](https://img.shields.io/pypi/pyversions/pytest-socket.svg)](https://pypi.python.org/pypi/pytest-socket)\n[![Tests](https://github.com/miketheman/pytest-socket/workflows/Python%20Tests/badge.svg)](https://github.com/miketheman/pytest-socket/actions?query=workflow%3A%22Python+Tests%22)\n[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/miketheman/pytest-socket/main.svg)](https://results.pre-commit.ci/latest/github/miketheman/pytest-socket/main)\n[![Maintainability](https://api.codeclimate.com/v1/badges/1608a75b1c3a20211992/maintainability)](https://codeclimate.com/github/miketheman/pytest-socket/maintainability)\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket.svg?type=shield)](https://app.fossa.io/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket?ref=badge_shield)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\nA plugin to use with Pytest to disable or restrict `socket` calls during\ntests to ensure network calls are prevented.\n\n---\n\n## Features\n\n- Disables all network calls flowing through Python\\'s `socket` interface.\n\n## Requirements\n\n- [Pytest](https://github.com/pytest-dev/pytest) 7.0 or greater\n\n## Installation\n\nYou can install `pytest-socket` via [pip](https://pypi.python.org/pypi/pip/)\nfrom [PyPI](https://pypi.python.org/pypi):\n\n```console\npip install pytest-socket\n```\n\nor add to your `pyproject.toml` for [poetry](https://python-poetry.org/):\n\n```ini\n[tool.poetry.dev-dependencies]\npytest-socket = \"*\"\n```\n\n## Usage\n\nRun `pytest --disable-socket`, tests should fail on any access to `socket` or\nlibraries using socket with a `SocketBlockedError`.\n\nTo add this flag as the default behavior, add this section to your\n[`pytest.ini`](https://docs.pytest.org/en/stable/reference/customize.html#pytest-ini):\n\n```ini\n[pytest]\naddopts = --disable-socket\n```\n\nor add this to your [`setup.cfg`](https://docs.pytest.org/en/stable/reference/customize.html#setup-cfg):\n\n```ini\n[tool:pytest]\naddopts = --disable-socket\n```\n\nor update your [`conftest.py`](https://docs.pytest.org/en/stable/how-to/writing_plugins.html#conftest-py-local-per-directory-plugins) to include:\n\n```python\nfrom pytest_socket import disable_socket\n\ndef pytest_runtest_setup():\n    disable_socket()\n```\n\nIf you exceptionally want to enable socket for one particular execution\npass `--force-enable-socket`. It takes precedence over `--disable-socket`.\n\nTo enable Unix sockets during the test run (e.g. for async), add this option:\n\n```ini\n[pytest]\naddopts = --disable-socket --allow-unix-socket\n```\n\nTo enable specific tests use of `socket`, pass in the fixture to the test or\nuse a marker:\n\n```python\ndef test_explicitly_enable_socket(socket_enabled):\n    assert socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n\n\n@pytest.mark.enable_socket\ndef test_explicitly_enable_socket_with_mark():\n    assert socket.socket(socket.AF_INET, socket.SOCK_STREAM)\n```\n\nTo allow only specific hosts per-test:\n\n```python\n@pytest.mark.allow_hosts(['127.0.0.1'])\ndef test_explicitly_enable_socket_with_mark():\n    assert socket.socket.connect(('127.0.0.1', 80))\n```\n\nor for whole test run\n\n```ini\n[pytest]\naddopts = --allow-hosts=127.0.0.1,127.0.1.1\n```\n\n### Frequently Asked Questions\n\nQ: Why is network access disabled in some of my tests but not others?\n\nA: pytest's default fixture scope is \"function\", which `socket_enabled` uses.\nIf you create another fixture that creates a socket usage that has a \"higher\"\ninstantiation order, such as at the module/class/session, then the higher order\nfixture will be resolved first, and won't be disabled during the tests.\nRead more in [this excellent example](https://github.com/miketheman/pytest-socket/issues/45#issue-679835420)\nand more about [pytest fixture order here](https://docs.pytest.org/en/stable/fixture.html#fixture-instantiation-order).\n\nThis behavior may change in the future, as we learn more about pytest\nfixture order, and what users expect to happen.\n\n## Contributing\n\nContributions are very welcome. Tests can be run with\n[pytest](https://github.com/pytest-dev/pytest), please ensure the\ncoverage at least stays the same before you submit a pull request.\n\n## License\n\nDistributed under the terms of the\n[MIT](http://opensource.org/licenses/MIT) license, \"pytest-socket\" is\nfree and open source software\n\n[![FOSSA Status](https://app.fossa.io/api/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket.svg?type=large)](https://app.fossa.io/projects/git%2Bgithub.com%2Fmiketheman%2Fpytest-socket?ref=badge_large)\n\n## Issues\n\nIf you encounter any problems, please [file an issue](https://github.com/miketheman/pytest-socket/issues)\nalong with a detailed description.\n\n## References\n\nThis [Pytest](https://github.com/pytest-dev/pytest) plugin was generated with\n[Cookiecutter](https://github.com/audreyr/cookiecutter) along with\n[\\@hackebrot](https://github.com/hackebrot)\\'s\n[Cookiecutter-pytest-plugin](https://github.com/pytest-dev/cookiecutter-pytest-plugin)\ntemplate.\n\nThis plugin came about due to the efforts by\n[\\@hangtwenty](https://github.com/hangtwenty) solving a [StackOverflow\nquestion](https://stackoverflow.com/a/30064664), then converted into a\npytest plugin by [\\@miketheman](https://github.com/miketheman).\n\n## Star History\n[![Star History Chart](https://api.star-history.com/svg?repos=miketheman/pytest-socket)](https://star-history.com/#miketheman/pytest-socket\u0026Date)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiketheman%2Fpytest-socket","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmiketheman%2Fpytest-socket","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmiketheman%2Fpytest-socket/lists"}