{"id":13501578,"url":"https://github.com/ethereum/lahja","last_synced_at":"2025-10-15T02:22:11.671Z","repository":{"id":62575009,"uuid":"146730940","full_name":"ethereum/lahja","owner":"ethereum","description":"Lahja is a generic multi process event bus implementation written in Python 3.6+ to enable lightweight inter-process communication, based on non-blocking asyncio","archived":false,"fork":false,"pushed_at":"2020-09-04T16:56:21.000Z","size":475,"stargazers_count":394,"open_issues_count":33,"forks_count":19,"subscribers_count":19,"default_branch":"master","last_synced_at":"2025-01-15T07:30:23.360Z","etag":null,"topics":["async","asyncio","eventbus","python","python3","trio"],"latest_commit_sha":null,"homepage":"","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/ethereum.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing.rst","funding":null,"license":"LICENSE","code_of_conduct":"docs/code_of_conduct.rst","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-08-30T10:02:06.000Z","updated_at":"2024-11-28T16:34:04.000Z","dependencies_parsed_at":"2022-11-03T18:38:57.166Z","dependency_job_id":null,"html_url":"https://github.com/ethereum/lahja","commit_stats":null,"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethereum%2Flahja","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethereum%2Flahja/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethereum%2Flahja/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ethereum%2Flahja/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ethereum","download_url":"https://codeload.github.com/ethereum/lahja/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235621547,"owners_count":19019520,"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":["async","asyncio","eventbus","python","python3","trio"],"created_at":"2024-07-31T22:01:42.170Z","updated_at":"2025-10-07T11:30:53.992Z","avatar_url":"https://github.com/ethereum.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"# Lahja\n\n[![Documentation Status](https://readthedocs.org/projects/lahja/badge/?version=latest)](http://lahja.readthedocs.io/en/latest/?badge=latest)\n\n[Documentation hosted by ReadTheDocs](http://lahja.readthedocs.io/en/latest/)\n\n**DISCLAIMER: This is alpha state software. Expect bugs.**\n\n*Lahja is a generic event bus implementation written in Python 3.6+ that enables lightweight inter-process communication, based on non-blocking asynchronous IO*\n\n## What is this for?\n\nLahja is tailored around one primary use case: enabling multi process Python applications to communicate via events between processes using non-blocking APIs\nbased on asyncio or trio.\n\nKey facts:\n\n- non-blocking APIs using asynchronous IO (asyncio / trio)\n- lightweight with zero dependencies\n- simple to use\n- easy multicasting of events (one event, many independent receivers)\n- easy event routing (e.g route event X only to certain receivers)\n- multiple consuming APIs to adapt to different use cases and styles\n\n\n## Developer Setup\n\nIf you would like to hack on lahja, please check out the [Snake Charmers\nTactical Manual](https://github.com/ethereum/snake-charmers-tactical-manual)\nfor information on how we do:\n\n- Testing\n- Pull Requests\n- Code Style\n- Documentation\n\n### Development Environment Setup\n\nYou can set up your dev environment with:\n\n```sh\ngit clone https://github.com/ethereum/lahja\ncd lahja\nvirtualenv -p python3 venv\n. venv/bin/activate\npip install -e .[dev]\n```\n\n### Testing Setup\n\nDuring development, you might like to have tests run on every file save.\n\nShow flake8 errors on file change:\n\n```sh\n# Test flake8\nwhen-changed -v -s -r -1 lahja/ tests/ -c \"clear; flake8 lahja tests \u0026\u0026 echo 'flake8 success' || echo 'error'\"\n```\n\nRun multi-process tests in one command, but without color:\n\n```sh\n# in the project root:\npytest --numprocesses=4 --looponfail --maxfail=1\n# the same thing, succinctly:\npytest -n 4 -f --maxfail=1\n```\n\nRun in one thread, with color and desktop notifications:\n\n```sh\ncd venv\nptw --onfail \"notify-send -t 5000 'Test failure ⚠⚠⚠⚠⚠' 'python 3 test on lahja failed'\" ../tests ../lahja\n```\n\n### Release setup\n\nFor Debian-like systems:\n```\napt install pandoc\n```\n\nTo release a new version:\n\n```sh\nmake release bump=$$VERSION_PART_TO_BUMP$$\n```\n\n#### How to bumpversion\n\nThe version format for this repo is `{major}.{minor}.{patch}` for stable, and\n`{major}.{minor}.{patch}-{stage}.{devnum}` for unstable (`stage` can be alpha or beta).\n\nTo issue the next version in line, specify which part to bump,\nlike `make release bump=minor` or `make release bump=devnum`.\n\nIf you are in a beta version, `make release bump=stage` will switch to a stable.\n\nTo issue an unstable version when the current version is stable, specify the\nnew version explicitly, like `make release bump=\"--new-version 4.0.0-alpha.1 devnum\"`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethereum%2Flahja","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fethereum%2Flahja","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethereum%2Flahja/lists"}