engin


Nameengin JSON
Version 0.0.20 PyPI version JSON
download
home_pageNone
SummaryAn async-first modular application framework
upload_time2025-06-18 08:23:30
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords application framework dependency injection
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            [![codecov](https://codecov.io/gh/invokermain/engin/graph/badge.svg?token=4PJOIMV6IB)](https://codecov.io/gh/invokermain/engin)

# Engin 🏎️

Engin is a zero-dependency application framework for modern Python.

**Documentation**: https://engin.readthedocs.io/

## Features ✨

- **Dependency Injection** - Engin includes a fully-featured Dependency Injection system,
  powered by type hints.
- **Lifecycle Management** - Engin provides a simple & portable approach for attaching
  startup and shutdown tasks to the application's lifecycle.
- **Code Reuse** - Engin's modular components, called Blocks, work great as distributed
  packages allowing zero boiler-plate code reuse across multiple applications. Perfect for
  maintaining many services across your organisation.
- **Ecosystem Compatability** - Engin ships with integrations for popular frameworks that
  provide their own Dependency Injection, for example FastAPI, allowing you to integrate
  Engin into existing code bases incrementally.
- **Async Native**: Engin is an async framework, meaning first class support for async
  dependencies. However Engin will happily run synchronous code as well.

## Installation

Engin is available on PyPI, install using your favourite dependency manager:

- **pip**:`pip install engin`
- **poetry**: `poetry add engin`
- **uv**: `uv add engin`

## Getting Started

A minimal example:

```python
import asyncio

from httpx import AsyncClient

from engin import Engin, Invoke, Provide


def httpx_client() -> AsyncClient:
    return AsyncClient()


async def main(http_client: AsyncClient) -> None:
    print(await http_client.get("https://httpbin.org/get"))

engin = Engin(Provide(httpx_client), Invoke(main))

asyncio.run(engin.run())
```


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "engin",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "Application Framework, Dependency Injection",
    "author": null,
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/e4/3d/f94d7f4e7c8b39d686651bfbaed2d4779e0d2cb746f53169353da7fe94f7/engin-0.0.20.tar.gz",
    "platform": null,
    "description": "[![codecov](https://codecov.io/gh/invokermain/engin/graph/badge.svg?token=4PJOIMV6IB)](https://codecov.io/gh/invokermain/engin)\n\n# Engin \ud83c\udfce\ufe0f\n\nEngin is a zero-dependency application framework for modern Python.\n\n**Documentation**: https://engin.readthedocs.io/\n\n## Features \u2728\n\n- **Dependency Injection** - Engin includes a fully-featured Dependency Injection system,\n  powered by type hints.\n- **Lifecycle Management** - Engin provides a simple & portable approach for attaching\n  startup and shutdown tasks to the application's lifecycle.\n- **Code Reuse** - Engin's modular components, called Blocks, work great as distributed\n  packages allowing zero boiler-plate code reuse across multiple applications. Perfect for\n  maintaining many services across your organisation.\n- **Ecosystem Compatability** - Engin ships with integrations for popular frameworks that\n  provide their own Dependency Injection, for example FastAPI, allowing you to integrate\n  Engin into existing code bases incrementally.\n- **Async Native**: Engin is an async framework, meaning first class support for async\n  dependencies. However Engin will happily run synchronous code as well.\n\n## Installation\n\nEngin is available on PyPI, install using your favourite dependency manager:\n\n- **pip**:`pip install engin`\n- **poetry**: `poetry add engin`\n- **uv**: `uv add engin`\n\n## Getting Started\n\nA minimal example:\n\n```python\nimport asyncio\n\nfrom httpx import AsyncClient\n\nfrom engin import Engin, Invoke, Provide\n\n\ndef httpx_client() -> AsyncClient:\n    return AsyncClient()\n\n\nasync def main(http_client: AsyncClient) -> None:\n    print(await http_client.get(\"https://httpbin.org/get\"))\n\nengin = Engin(Provide(httpx_client), Invoke(main))\n\nasyncio.run(engin.run())\n```\n\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "An async-first modular application framework",
    "version": "0.0.20",
    "project_urls": {
        "Changelog": "https://github.com/invokermain/engin/blob/main/CHANGELOG.md",
        "Documentation": "https://engin.readthedocs.io/en/latest/",
        "Homepage": "https://github.com/invokermain/engin",
        "Repository": "https://github.com/invokermain/engin.git"
    },
    "split_keywords": [
        "application framework",
        " dependency injection"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a689a90968ec4ddce973467e4eefe2b36a21a2a3f5d481ab5c0e67e3ccfb95f3",
                "md5": "5b51fbd090c5730035ace996a885f738",
                "sha256": "796d26e6b57463f20d705c762dcd5f5612a7b5b652eba943b0644a5724063e39"
            },
            "downloads": -1,
            "filename": "engin-0.0.20-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "5b51fbd090c5730035ace996a885f738",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 26810,
            "upload_time": "2025-06-18T08:23:29",
            "upload_time_iso_8601": "2025-06-18T08:23:29.050111Z",
            "url": "https://files.pythonhosted.org/packages/a6/89/a90968ec4ddce973467e4eefe2b36a21a2a3f5d481ab5c0e67e3ccfb95f3/engin-0.0.20-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e43df94d7f4e7c8b39d686651bfbaed2d4779e0d2cb746f53169353da7fe94f7",
                "md5": "526f06cba27c11d5d7076f7296bdf3e3",
                "sha256": "14196da42afb9ccd739d22a1d3281a2aa86ccb83db8c3f9d467256cac9f2e3b0"
            },
            "downloads": -1,
            "filename": "engin-0.0.20.tar.gz",
            "has_sig": false,
            "md5_digest": "526f06cba27c11d5d7076f7296bdf3e3",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 134576,
            "upload_time": "2025-06-18T08:23:30",
            "upload_time_iso_8601": "2025-06-18T08:23:30.063337Z",
            "url": "https://files.pythonhosted.org/packages/e4/3d/f94d7f4e7c8b39d686651bfbaed2d4779e0d2cb746f53169353da7fe94f7/engin-0.0.20.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-06-18 08:23:30",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "invokermain",
    "github_project": "engin",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "engin"
}
        
Elapsed time: 1.86905s