fastapi-autoloader


Namefastapi-autoloader JSON
Version 0.1.1 PyPI version JSON
download
home_pagehttps://github.com/juanitomint/fastapi-autoloader.git
SummaryMVC style router autoload
upload_time2025-08-17 21:04:10
maintainerNone
docs_urlNone
authorJuan Borda
requires_python<4.0,>=3.13
licenseMIT
keywords fastapi autoloader dynamic-router mvc router autoload
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # fastapi-autoloader

A Python package for dynamic routing in FastAPI.

## Features

- Automatically loads and registers routers from your controllers directory.
- Supports multilevel directory structures (HMVC-style modules).
- Minimal configuration required.

## Installation

```sh
pip install fastapi-autoloader
```

## Usage

Suppose your project structure is:

```
example/
	main.py
	controllers/
		users/
			users.py
		orders/
			orders.py
```

Each controller module should define a FastAPI `APIRouter` named `router`:

**example/controllers/users/users.py**
```python
from fastapi import APIRouter

router = APIRouter()

@router.get("/users")
def list_users():
	return [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]
```

**example/controllers/orders/orders.py**
```python
from fastapi import APIRouter

router = APIRouter()

@router.get("/orders")
def list_orders():
	return [{"id": 1, "item": "Book"}, {"id": 2, "item": "Pen"}]
```

**example/main.py**
```python
from fastapi import FastAPI
from fastapi_dynamic_router import DynamicRouter

app = FastAPI()

# Automatically loads all routers from controllers/ and subdirectories
controllers = DynamicRouter("controllers")
controllers.load(app)

@app.get("/")
def root():
	return {"message": "Hello"}
```

## Running

Start your app with Uvicorn:

```sh
uvicorn example.main:app --reload
```

## How it works

- The package recursively scans the target directory (`controllers/` by default).
- For each `.py` file (excluding `__init__.py`), it imports the module and looks for a variable named `router` of type `APIRouter`.
- All found routers are automatically registered with your FastAPI app.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/juanitomint/fastapi-autoloader.git",
    "name": "fastapi-autoloader",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.13",
    "maintainer_email": null,
    "keywords": "fastapi, autoloader, dynamic-router, mvc, router, autoload",
    "author": "Juan Borda",
    "author_email": "juanignacioborda@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/e0/aa/cfc38d5f1ff718b6d1034deea04e78b24f350b88ca05a12858732e61765d/fastapi_autoloader-0.1.1.tar.gz",
    "platform": null,
    "description": "# fastapi-autoloader\n\nA Python package for dynamic routing in FastAPI.\n\n## Features\n\n- Automatically loads and registers routers from your controllers directory.\n- Supports multilevel directory structures (HMVC-style modules).\n- Minimal configuration required.\n\n## Installation\n\n```sh\npip install fastapi-autoloader\n```\n\n## Usage\n\nSuppose your project structure is:\n\n```\nexample/\n\tmain.py\n\tcontrollers/\n\t\tusers/\n\t\t\tusers.py\n\t\torders/\n\t\t\torders.py\n```\n\nEach controller module should define a FastAPI `APIRouter` named `router`:\n\n**example/controllers/users/users.py**\n```python\nfrom fastapi import APIRouter\n\nrouter = APIRouter()\n\n@router.get(\"/users\")\ndef list_users():\n\treturn [{\"id\": 1, \"name\": \"Alice\"}, {\"id\": 2, \"name\": \"Bob\"}]\n```\n\n**example/controllers/orders/orders.py**\n```python\nfrom fastapi import APIRouter\n\nrouter = APIRouter()\n\n@router.get(\"/orders\")\ndef list_orders():\n\treturn [{\"id\": 1, \"item\": \"Book\"}, {\"id\": 2, \"item\": \"Pen\"}]\n```\n\n**example/main.py**\n```python\nfrom fastapi import FastAPI\nfrom fastapi_dynamic_router import DynamicRouter\n\napp = FastAPI()\n\n# Automatically loads all routers from controllers/ and subdirectories\ncontrollers = DynamicRouter(\"controllers\")\ncontrollers.load(app)\n\n@app.get(\"/\")\ndef root():\n\treturn {\"message\": \"Hello\"}\n```\n\n## Running\n\nStart your app with Uvicorn:\n\n```sh\nuvicorn example.main:app --reload\n```\n\n## How it works\n\n- The package recursively scans the target directory (`controllers/` by default).\n- For each `.py` file (excluding `__init__.py`), it imports the module and looks for a variable named `router` of type `APIRouter`.\n- All found routers are automatically registered with your FastAPI app.\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "MVC style router autoload",
    "version": "0.1.1",
    "project_urls": {
        "Homepage": "https://github.com/juanitomint/fastapi-autoloader.git",
        "Repository": "https://github.com/juanitomint/fastapi-autoloader.git"
    },
    "split_keywords": [
        "fastapi",
        " autoloader",
        " dynamic-router",
        " mvc",
        " router",
        " autoload"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "c1ebc1c94f1404a570ee51681b768d67c2325259e9453162482d2acc1d3aeaa1",
                "md5": "dfffd716f4482039e66604ffbb9298c5",
                "sha256": "6a453288af6cad594340ed76075274c7c6dc6ff5e25bfeef4ec8724f64e2c50f"
            },
            "downloads": -1,
            "filename": "fastapi_autoloader-0.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "dfffd716f4482039e66604ffbb9298c5",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.13",
            "size": 2865,
            "upload_time": "2025-08-17T21:04:09",
            "upload_time_iso_8601": "2025-08-17T21:04:09.318853Z",
            "url": "https://files.pythonhosted.org/packages/c1/eb/c1c94f1404a570ee51681b768d67c2325259e9453162482d2acc1d3aeaa1/fastapi_autoloader-0.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e0aacfc38d5f1ff718b6d1034deea04e78b24f350b88ca05a12858732e61765d",
                "md5": "6841d6216fe18fae938c10fab3d86455",
                "sha256": "6d2c1179e08d6fe1099cd20e762b7984854faecfd47dd329757418dc96440352"
            },
            "downloads": -1,
            "filename": "fastapi_autoloader-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "6841d6216fe18fae938c10fab3d86455",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.13",
            "size": 2296,
            "upload_time": "2025-08-17T21:04:10",
            "upload_time_iso_8601": "2025-08-17T21:04:10.416476Z",
            "url": "https://files.pythonhosted.org/packages/e0/aa/cfc38d5f1ff718b6d1034deea04e78b24f350b88ca05a12858732e61765d/fastapi_autoloader-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-17 21:04:10",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "juanitomint",
    "github_project": "fastapi-autoloader",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "lcname": "fastapi-autoloader"
}
        
Elapsed time: 1.55164s