Metadata-Version: 2.1
Name: fastapix-py
Version: 0.5.1
Summary: A FastAPI plugin that quickly builds CRUD-API based on SQLAlchemy
Project-URL: Homepage, https://gitee.com/kaiqione/fastapix
Project-URL: Repository, https://gitee.com/kaiqione/fastapix
Project-URL: Source, https://gitee.com/kaiqione/fastapix
Author-email: zhangzhanqi <zzq120203@163.com>
License-Expression: Apache-2.0
License-File: LICENSE
Requires-Python: >=3.7
Requires-Dist: fastapi
Requires-Dist: loguru
Requires-Dist: pydantic[email]
Requires-Dist: sqlalchemy-database
Requires-Dist: sqlmodel
Requires-Dist: uvicorn[standard]
Provides-Extra: casdoor
Requires-Dist: aiohttp; extra == 'casdoor'
Requires-Dist: casdoor; extra == 'casdoor'
Requires-Dist: cryptography; extra == 'casdoor'
Requires-Dist: itsdangerous; extra == 'casdoor'
Requires-Dist: pyjwt; extra == 'casdoor'
Requires-Dist: requests; extra == 'casdoor'
Provides-Extra: sso
Requires-Dist: itsdangerous; extra == 'sso'
Requires-Dist: python-cas; extra == 'sso'
Description-Content-Type: text/markdown

<h2 align="center">
  FastAPIX
</h2>
<p align="center">
    <em>FastAPIX 为 FastAPI 提供的基于 SQLAlchemy ORM 快速构建数据库操作的插件.</em><br/>
</p>

## 安装
```shell
pip3 install fastapix-py
# or
pip3 install fastapix_py-<version>-py3-none-any.whl
```

## fastapi
```python
from fastapi import FastAPI

app = FastAPI()
```

## 离线挂载 openapi
```python
from fastapix import offline

offline.register_offline_openapi(app)
```

## 修改异常返回结果
```python
from fastapix import handlers

handlers.register_exception_handlers(app)
```

## ORM模型
```python
from uuid import UUID, uuid4

from fastapix.crud import SQLModel, Field

# 继承 SQLModel
class Category(SQLModel, table=True):
    id: UUID = Field(default_factory=uuid4, primary_key=True, nullable=False, create=False, update=False)
    name: str = Field(..., title='名称', max_length=100, index=True, nullable=False, unique=True, update=False)
    description: str | None = Field(None, title='描述', max_length=255)
    test_list: list[str] | None = Field(None, title='test list')
    test_dict: dict[str, str] | None = Field(None, title='test dict')
```

## 创建连接
### AsyncDatabase
```python
from sqlalchemy.ext.asyncio import AsyncEngine, create_async_engine

database_url = 'sqlite+aiosqlite:///test.db'
engine: AsyncEngine = create_async_engine(database_url)
```

### Database
```python
from sqlalchemy.engine import create_engine, Engine

database_url = 'sqlite+aiosqlite:///test.db'
engine: Engine = create_engine(database_url)
```
## 注册
```python
from fastapix.crud import SQLAlchemyCrud, EngineDatabase

database = EngineDatabase(engine)

cate_router = SQLAlchemyCrud(Category, database).router_manager()

# 挂载中间件
app.add_middleware(database.asgi_middleware)
# 挂载路由
app.include_router(cate_router.create_object_router())
app.include_router(cate_router.read_object_router())
app.include_router(cate_router.update_object_router())
app.include_router(cate_router.delete_object_router())
```

## OpenAPI Docs
http://localhost:8000/docs