Name | FastAPI-AutoCRUD JSON |
Version |
0.1.3
JSON |
| download |
home_page | None |
Summary | A powerful, enterprise-level FastAPI CRUD router factory that automatically generates REST endpoints with advanced features like filtering, pagination, searching, sorting, bulk operations, and custom endpoint decorators. |
upload_time | 2025-07-28 13:49:11 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.12 |
license | MIT |
keywords |
api
crud
fastapi
pydantic
rest
router
sqlalchemy
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# FastAPI-AutoCRUD
A powerful, enterprise-level FastAPI CRUD router factory for SQLAlchemy models. It automatically generates REST endpoints with advanced features: filtering, pagination, searching, sorting, bulk operations, custom endpoint decorators, and lifecycle hooks.
---
## Table of Contents
- [Overview](#overview)
- [Installation](#installation)
- [Quick Start](#quick-start)
- [Core Concepts & Features](#core-concepts--features)
- [Endpoint Reference](#endpoint-reference)
- [Advanced Usage](#advanced-usage)
- [Best Practices](#best-practices)
- [Troubleshooting](#troubleshooting)
---
## Overview
**FastAPI-AutoCRUD** eliminates boilerplate for CRUD APIs. It:
- Generates all CRUD endpoints for your SQLAlchemy models
- Supports advanced filtering, pagination, search, sorting, and bulk operations
- Lets you add custom endpoints and business logic with hooks and decorators
- Automatically generates Pydantic response models if you don't provide them
---
## Installation
```bash
pip install FastAPI-AutoCRUD
```
**Requirements:**
- Python 3.12+
- FastAPI 0.115.14+
- SQLAlchemy 2.0.41+ (with async support via greenlet)
- Pydantic 2.11.7+
---
## Quick Start
### 1. Define Your SQLAlchemy Model (2.0 style)
```python
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
from sqlalchemy.dialects.postgresql import UUID
import uuid
class Base(DeclarativeBase):
pass
class User(Base):
__tablename__ = "users"
id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
username: Mapped[str] = mapped_column(unique=True, index=True)
email: Mapped[str] = mapped_column(unique=True, index=True)
# ... other fields ...
```
**Why this matters:** Using `Mapped` and `mapped_column` ensures full SQLAlchemy 2.0 compatibility and type safety.
### 2. Create Pydantic Schemas
```python
from pydantic import BaseModel, EmailStr
from typing import Optional
class UserCreate(BaseModel):
username: str
email: EmailStr
class UserUpdate(BaseModel):
username: Optional[str] = None
email: Optional[EmailStr] = None
```
### 3. Set Up Async Database Session
```python
from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession
DATABASE_URL = "postgresql+asyncpg://user:password@localhost/dbname"
engine = create_async_engine(DATABASE_URL)
async_session = async_sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
async def get_session() -> AsyncSession:
async with async_session() as session:
yield session
```
### 4. Create CRUD and Router
```python
from auto_crud.core.crud.base import BaseCRUD
from auto_crud.core.crud.router import RouterFactory
user_crud = BaseCRUD[User, uuid.UUID, UserCreate, UserUpdate](model=User)
user_router_factory = RouterFactory(
crud=user_crud,
session_factory=get_session,
create_schema=UserCreate,
update_schema=UserUpdate,
prefix="/users",
tags=["users"],
enable_pagination=True,
enable_search=True,
enable_sorting=True,
enable_filters=True,
search_fields=["username", "email"],
sort_default="-created_at", # sort by created_at in descending order
page_size=20,
max_page_size=100,
)
user_router = user_router_factory.get_router()
```
### 5. Register the Router in FastAPI
```python
from fastapi import FastAPI
app = FastAPI()
app.include_router(user_router, prefix="/api/v1")
```
---
## Core Concepts & Features
### 1. CRUD Endpoints (Auto-Generated)
**All endpoints are generated for you:**
- `POST /users/` — Create
- `GET /users/` — List (with pagination, filtering, search, sorting)
- `GET /users/{id}` — Read by ID
- `PUT /users/{id}` — Update
- `PATCH /users/{id}` — Partial update
- `DELETE /users/{id}` — Delete
- `POST /users/bulk` — Bulk create
- `PUT /users/bulk` — Bulk update
- `DELETE /users/bulk` — Bulk delete
**Explanation:**
- **No need to write these endpoints yourself.** The router factory automatically generates all standard CRUD operations.
- **Bulk endpoints** accept lists of objects (for create/update) or IDs (for delete) for efficient batch operations.
- **All endpoints support dependency injection** for authentication, authorization, and other middleware.
- **HTTP methods are properly mapped:** PUT for full updates, PATCH for partial updates.
### 2. Automatic Pydantic Response Models
If you do **not** provide a response model for an operation, FastAPI-AutoCRUD will **dynamically generate** a Pydantic model from your SQLAlchemy model's columns. This ensures:
- All fields are included
- Types are inferred from your model
- Nullability and defaults are respected
**Best Practice:** For custom serialization or hiding fields, provide your own response model.
### 3. Advanced Filtering System
FastAPI-AutoCRUD provides a sophisticated filtering system with multiple operators and logical combinations.
**Supported Operators:**
- **Comparison:** `eq`, `ne`, `gt`, `ge`, `lt`, `le`
- **Text Search:** `like`, `ilike`, `contains`, `startswith`, `endswith`
- **Collections:** `in`, `not_in`
- **Null Handling:** `is_null`, `is_not_null`
- **Ranges:** `between`
- **Logical:** `and`, `or`, `not`
**Client Usage Examples:**
```
GET /users?filters=status__eq=active
GET /users?filters=age__gte=18,status__in=active,pending
GET /users?filters=created_at__between=2024-01-01,2024-01-31
GET /users?filters=name__ilike=%john%,email__contains=gmail
GET /users?filters=and(field1__eq=value1,field2__gt=10)
```
**Configuration:**
```python
user_router_factory = RouterFactory(
...,
enable_filters=True,
filter_spec={
"username": ("eq", "contains", "startswith"),
"email": ("eq", "ilike"),
"age": ("eq", "gt", "ge", "lt", "le", "between"),
"status": ("eq", "in", "not_in"),
},
)
```
**Explanation:**
- **Security:** Use `filter_spec` to whitelist allowed fields and operators, preventing exposure of sensitive data.
- **Performance:** Restricting operators helps optimize database queries.
- **Flexibility:** Support for complex logical expressions with `and`, `or`, `not` operators.
### 4. Pagination
Pagination is enabled by default and provides comprehensive metadata.
**Query Parameters:**
- `page`: Page number (1-based)
- `size`: Items per page (1-100, configurable)
**Response Structure:**
```json
{
"items": [...],
"total": 150,
"page": 2,
"size": 20,
"pages": 8,
"has_next": true,
"has_prev": true
}
```
**Configuration:**
```python
user_router_factory = RouterFactory(
...,
enable_pagination=True,
page_size=20,
max_page_size=100,
)
```
**Explanation:**
- **Consistent API:** All list endpoints return the same pagination structure.
- **Performance:** Limits result sets to prevent memory issues.
- **Metadata:** Provides all necessary information for building pagination UI.
### 5. Global Search
Global search allows searching across multiple fields simultaneously.
**Configuration:**
```python
user_router_factory = RouterFactory(
...,
enable_search=True,
search_fields=["username", "email", "full_name"],
)
```
**Client Usage:**
```
GET /users?search=john
```
**Explanation:**
- **Multi-field:** Searches across all specified fields using case-insensitive LIKE queries.
- **Simple Interface:** Single search parameter for complex queries.
- **Performance:** Uses database indexes for efficient searching.
### 6. Sorting
Sorting with configurable field and direction.
**Configuration:**
```python
user_router_factory = RouterFactory(
...,
enable_sorting=True,
sort_default="-created_at", # sort by created_at in descending order
)
```
**Client Usage:**
```
GET /users?sort_by=-created_at
```
**Explanation:**
- **Direction:** Prefix with `-` for descending order.
- **Default:** Falls back to `sort_default` if no sorting specified.
### 7. Bulk Operations
Efficient batch operations for creating, updating, and deleting multiple records.
**Endpoints:**
- `POST /users/bulk` — Bulk create
- `PUT /users/bulk` — Bulk update
- `DELETE /users/bulk` — Bulk delete
**Bulk Create Example:**
```json
POST /users/bulk
[
{"username": "user1", "email": "user1@example.com"},
{"username": "user2", "email": "user2@example.com"}
]
```
**Bulk Update Example:**
```json
PUT /users/bulk
[
{"id": "uuid1", "username": "updated1"},
{"id": "uuid2", "email": "updated2@example.com"}
]
```
**Bulk Delete Example:**
```json
DELETE /users/bulk
["uuid1", "uuid2", "uuid3"]
```
**Response Structure:**
```json
{
"created": 2,
"updated": 3,
"deleted": 1,
"items": [...],
"errors": [...]
}
```
**Explanation:**
- **Performance:** Batch operations are much faster than individual requests.
- **Transaction Safety:** All operations within a bulk request are atomic.
- **Error Handling:** Partial failures are reported with detailed error information.
### 8. Prefetching (Eager Loading)
Use the `prefetch` parameter to specify relationships to eager load for performance.
**Configuration:**
```python
user_router_factory = RouterFactory(
...,
prefetch=["posts", "profile"],
)
```
**Explanation:**
- **N+1 Problem:** Prevents the common N+1 query problem when accessing related data.
- **Performance:** Reduces database round trips significantly.
- **Flexibility:** Can be set globally or per-request.
### 9. Custom Actions
Use the `@action` decorator to add custom endpoints to your router factory class.
**Example:**
```python
from auto_crud.core.crud.decorators import action
class UserRouterFactory(RouterFactory[User, uuid.UUID, UserCreate, UserUpdate]):
@action(method="GET", detail=False, url_path="verified")
async def get_verified_users(self, session: AsyncSession):
filters = [
FilterParam(field="is_verified", operator="eq", value=True)
]
return await self.crud.list_objects(session, filters=filters)
user_router_factory = UserRouterFactory(
crud=user_crud,
session_factory=get_session,
create_schema=UserCreate,
update_schema=UserUpdate,
prefix="/users",
tags=["users"],
dependencies=[Depends(require_auth)],
enable_pagination=True,
enable_search=True,
enable_sorting=True,
enable_filters=True,
search_fields=["username", "email", "full_name"],
sort_default="-created_at", # sort by created_at in descending order
page_size=20,
max_page_size=100,
prefetch=["profile", "posts"],
filter_spec={
"username": ("eq", "contains", "startswith"),
"email": ("eq", "ilike"),
"status": ("eq", "in"),
"created_at": ("eq", "gt", "ge", "lt", "le", "between"),
},
response_schemas={
"create": UserResponse,
"update": UserResponse,
"read": UserResponse,
"list": UserResponse,
},
)
# 4. Get router and register
user_router = user_router_factory.get_router()
app.include_router(user_router, prefix="/api/v1")
```
---
**For more examples, see the `sample/` directory.**
---
## License
MIT
Raw data
{
"_id": null,
"home_page": null,
"name": "FastAPI-AutoCRUD",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.12",
"maintainer_email": null,
"keywords": "api, crud, fastapi, pydantic, rest, router, sqlalchemy",
"author": null,
"author_email": "FastAPI-AutoCRUD Contributors <support@autocrud.dev>",
"download_url": "https://files.pythonhosted.org/packages/46/54/ca38190ccb193bb3260ad88d22a1cfe2a297199f4438221852b047f6089a/fastapi_autocrud-0.1.3.tar.gz",
"platform": null,
"description": "# FastAPI-AutoCRUD\n\nA powerful, enterprise-level FastAPI CRUD router factory for SQLAlchemy models. It automatically generates REST endpoints with advanced features: filtering, pagination, searching, sorting, bulk operations, custom endpoint decorators, and lifecycle hooks.\n\n---\n\n## Table of Contents\n- [Overview](#overview)\n- [Installation](#installation)\n- [Quick Start](#quick-start)\n- [Core Concepts & Features](#core-concepts--features)\n- [Endpoint Reference](#endpoint-reference)\n- [Advanced Usage](#advanced-usage)\n- [Best Practices](#best-practices)\n- [Troubleshooting](#troubleshooting)\n\n---\n\n## Overview\n\n**FastAPI-AutoCRUD** eliminates boilerplate for CRUD APIs. It:\n- Generates all CRUD endpoints for your SQLAlchemy models\n- Supports advanced filtering, pagination, search, sorting, and bulk operations\n- Lets you add custom endpoints and business logic with hooks and decorators\n- Automatically generates Pydantic response models if you don't provide them\n\n---\n\n## Installation\n\n```bash\npip install FastAPI-AutoCRUD\n```\n\n**Requirements:**\n- Python 3.12+\n- FastAPI 0.115.14+\n- SQLAlchemy 2.0.41+ (with async support via greenlet)\n- Pydantic 2.11.7+\n\n---\n\n## Quick Start\n\n### 1. Define Your SQLAlchemy Model (2.0 style)\n\n```python\nfrom sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column\nfrom sqlalchemy.dialects.postgresql import UUID\nimport uuid\n\nclass Base(DeclarativeBase):\n pass\n\nclass User(Base):\n __tablename__ = \"users\"\n id: Mapped[uuid.UUID] = mapped_column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)\n username: Mapped[str] = mapped_column(unique=True, index=True)\n email: Mapped[str] = mapped_column(unique=True, index=True)\n # ... other fields ...\n```\n\n**Why this matters:** Using `Mapped` and `mapped_column` ensures full SQLAlchemy 2.0 compatibility and type safety.\n\n### 2. Create Pydantic Schemas\n\n```python\nfrom pydantic import BaseModel, EmailStr\nfrom typing import Optional\n\nclass UserCreate(BaseModel):\n username: str\n email: EmailStr\n\nclass UserUpdate(BaseModel):\n username: Optional[str] = None\n email: Optional[EmailStr] = None\n```\n\n### 3. Set Up Async Database Session\n\n```python\nfrom sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker, AsyncSession\n\nDATABASE_URL = \"postgresql+asyncpg://user:password@localhost/dbname\"\nengine = create_async_engine(DATABASE_URL)\nasync_session = async_sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)\n\nasync def get_session() -> AsyncSession:\n async with async_session() as session:\n yield session\n```\n\n### 4. Create CRUD and Router\n\n```python\nfrom auto_crud.core.crud.base import BaseCRUD\nfrom auto_crud.core.crud.router import RouterFactory\n\nuser_crud = BaseCRUD[User, uuid.UUID, UserCreate, UserUpdate](model=User)\nuser_router_factory = RouterFactory(\n crud=user_crud,\n session_factory=get_session,\n create_schema=UserCreate,\n update_schema=UserUpdate,\n prefix=\"/users\",\n tags=[\"users\"],\n enable_pagination=True,\n enable_search=True,\n enable_sorting=True,\n enable_filters=True,\n search_fields=[\"username\", \"email\"],\n sort_default=\"-created_at\", # sort by created_at in descending order\n page_size=20,\n max_page_size=100,\n)\nuser_router = user_router_factory.get_router()\n```\n\n### 5. Register the Router in FastAPI\n\n```python\nfrom fastapi import FastAPI\napp = FastAPI()\napp.include_router(user_router, prefix=\"/api/v1\")\n```\n\n---\n\n## Core Concepts & Features\n\n### 1. CRUD Endpoints (Auto-Generated)\n\n**All endpoints are generated for you:**\n- `POST /users/` \u2014 Create\n- `GET /users/` \u2014 List (with pagination, filtering, search, sorting)\n- `GET /users/{id}` \u2014 Read by ID\n- `PUT /users/{id}` \u2014 Update\n- `PATCH /users/{id}` \u2014 Partial update\n- `DELETE /users/{id}` \u2014 Delete\n- `POST /users/bulk` \u2014 Bulk create\n- `PUT /users/bulk` \u2014 Bulk update\n- `DELETE /users/bulk` \u2014 Bulk delete\n\n**Explanation:**\n- **No need to write these endpoints yourself.** The router factory automatically generates all standard CRUD operations.\n- **Bulk endpoints** accept lists of objects (for create/update) or IDs (for delete) for efficient batch operations.\n- **All endpoints support dependency injection** for authentication, authorization, and other middleware.\n- **HTTP methods are properly mapped:** PUT for full updates, PATCH for partial updates.\n\n### 2. Automatic Pydantic Response Models\n\nIf you do **not** provide a response model for an operation, FastAPI-AutoCRUD will **dynamically generate** a Pydantic model from your SQLAlchemy model's columns. This ensures:\n- All fields are included\n- Types are inferred from your model\n- Nullability and defaults are respected\n\n**Best Practice:** For custom serialization or hiding fields, provide your own response model.\n\n### 3. Advanced Filtering System\n\nFastAPI-AutoCRUD provides a sophisticated filtering system with multiple operators and logical combinations.\n\n**Supported Operators:**\n- **Comparison:** `eq`, `ne`, `gt`, `ge`, `lt`, `le`\n- **Text Search:** `like`, `ilike`, `contains`, `startswith`, `endswith`\n- **Collections:** `in`, `not_in`\n- **Null Handling:** `is_null`, `is_not_null`\n- **Ranges:** `between`\n- **Logical:** `and`, `or`, `not`\n\n**Client Usage Examples:**\n```\nGET /users?filters=status__eq=active\nGET /users?filters=age__gte=18,status__in=active,pending\nGET /users?filters=created_at__between=2024-01-01,2024-01-31\nGET /users?filters=name__ilike=%john%,email__contains=gmail\nGET /users?filters=and(field1__eq=value1,field2__gt=10)\n```\n\n**Configuration:**\n```python\nuser_router_factory = RouterFactory(\n ...,\n enable_filters=True,\n filter_spec={\n \"username\": (\"eq\", \"contains\", \"startswith\"),\n \"email\": (\"eq\", \"ilike\"),\n \"age\": (\"eq\", \"gt\", \"ge\", \"lt\", \"le\", \"between\"),\n \"status\": (\"eq\", \"in\", \"not_in\"),\n },\n)\n```\n\n**Explanation:**\n- **Security:** Use `filter_spec` to whitelist allowed fields and operators, preventing exposure of sensitive data.\n- **Performance:** Restricting operators helps optimize database queries.\n- **Flexibility:** Support for complex logical expressions with `and`, `or`, `not` operators.\n\n### 4. Pagination\n\nPagination is enabled by default and provides comprehensive metadata.\n\n**Query Parameters:**\n- `page`: Page number (1-based)\n- `size`: Items per page (1-100, configurable)\n\n**Response Structure:**\n```json\n{\n \"items\": [...],\n \"total\": 150,\n \"page\": 2,\n \"size\": 20,\n \"pages\": 8,\n \"has_next\": true,\n \"has_prev\": true\n}\n```\n\n**Configuration:**\n```python\nuser_router_factory = RouterFactory(\n ...,\n enable_pagination=True,\n page_size=20,\n max_page_size=100,\n)\n```\n\n**Explanation:**\n- **Consistent API:** All list endpoints return the same pagination structure.\n- **Performance:** Limits result sets to prevent memory issues.\n- **Metadata:** Provides all necessary information for building pagination UI.\n\n### 5. Global Search\n\nGlobal search allows searching across multiple fields simultaneously.\n\n**Configuration:**\n```python\nuser_router_factory = RouterFactory(\n ...,\n enable_search=True,\n search_fields=[\"username\", \"email\", \"full_name\"],\n)\n```\n\n**Client Usage:**\n```\nGET /users?search=john\n```\n\n**Explanation:**\n- **Multi-field:** Searches across all specified fields using case-insensitive LIKE queries.\n- **Simple Interface:** Single search parameter for complex queries.\n- **Performance:** Uses database indexes for efficient searching.\n\n### 6. Sorting\n\nSorting with configurable field and direction.\n\n**Configuration:**\n```python\nuser_router_factory = RouterFactory(\n ...,\n enable_sorting=True,\n sort_default=\"-created_at\", # sort by created_at in descending order\n)\n```\n\n**Client Usage:**\n```\nGET /users?sort_by=-created_at\n```\n\n**Explanation:**\n- **Direction:** Prefix with `-` for descending order.\n- **Default:** Falls back to `sort_default` if no sorting specified.\n\n### 7. Bulk Operations\n\nEfficient batch operations for creating, updating, and deleting multiple records.\n\n**Endpoints:**\n- `POST /users/bulk` \u2014 Bulk create\n- `PUT /users/bulk` \u2014 Bulk update \n- `DELETE /users/bulk` \u2014 Bulk delete\n\n**Bulk Create Example:**\n```json\nPOST /users/bulk\n[\n {\"username\": \"user1\", \"email\": \"user1@example.com\"},\n {\"username\": \"user2\", \"email\": \"user2@example.com\"}\n]\n```\n\n**Bulk Update Example:**\n```json\nPUT /users/bulk\n[\n {\"id\": \"uuid1\", \"username\": \"updated1\"},\n {\"id\": \"uuid2\", \"email\": \"updated2@example.com\"}\n]\n```\n\n**Bulk Delete Example:**\n```json\nDELETE /users/bulk\n[\"uuid1\", \"uuid2\", \"uuid3\"]\n```\n\n**Response Structure:**\n```json\n{\n \"created\": 2,\n \"updated\": 3,\n \"deleted\": 1,\n \"items\": [...],\n \"errors\": [...]\n}\n```\n\n**Explanation:**\n- **Performance:** Batch operations are much faster than individual requests.\n- **Transaction Safety:** All operations within a bulk request are atomic.\n- **Error Handling:** Partial failures are reported with detailed error information.\n\n### 8. Prefetching (Eager Loading)\n\nUse the `prefetch` parameter to specify relationships to eager load for performance.\n\n**Configuration:**\n```python\nuser_router_factory = RouterFactory(\n ...,\n prefetch=[\"posts\", \"profile\"],\n)\n```\n\n**Explanation:**\n- **N+1 Problem:** Prevents the common N+1 query problem when accessing related data.\n- **Performance:** Reduces database round trips significantly.\n- **Flexibility:** Can be set globally or per-request.\n\n### 9. Custom Actions\n\nUse the `@action` decorator to add custom endpoints to your router factory class.\n\n**Example:**\n```python\nfrom auto_crud.core.crud.decorators import action\n\nclass UserRouterFactory(RouterFactory[User, uuid.UUID, UserCreate, UserUpdate]):\n @action(method=\"GET\", detail=False, url_path=\"verified\")\n async def get_verified_users(self, session: AsyncSession):\n filters = [\n FilterParam(field=\"is_verified\", operator=\"eq\", value=True)\n ]\n return await self.crud.list_objects(session, filters=filters)\n\nuser_router_factory = UserRouterFactory(\n crud=user_crud,\n session_factory=get_session,\n create_schema=UserCreate,\n update_schema=UserUpdate,\n prefix=\"/users\",\n tags=[\"users\"],\n dependencies=[Depends(require_auth)],\n enable_pagination=True,\n enable_search=True,\n enable_sorting=True,\n enable_filters=True,\n search_fields=[\"username\", \"email\", \"full_name\"],\n sort_default=\"-created_at\", # sort by created_at in descending order\n page_size=20,\n max_page_size=100,\n prefetch=[\"profile\", \"posts\"],\n filter_spec={\n \"username\": (\"eq\", \"contains\", \"startswith\"),\n \"email\": (\"eq\", \"ilike\"),\n \"status\": (\"eq\", \"in\"),\n \"created_at\": (\"eq\", \"gt\", \"ge\", \"lt\", \"le\", \"between\"),\n },\n response_schemas={\n \"create\": UserResponse,\n \"update\": UserResponse,\n \"read\": UserResponse,\n \"list\": UserResponse,\n },\n)\n\n# 4. Get router and register\nuser_router = user_router_factory.get_router()\napp.include_router(user_router, prefix=\"/api/v1\")\n```\n\n---\n\n**For more examples, see the `sample/` directory.**\n\n---\n\n## License\nMIT",
"bugtrack_url": null,
"license": "MIT",
"summary": "A powerful, enterprise-level FastAPI CRUD router factory that automatically generates REST endpoints with advanced features like filtering, pagination, searching, sorting, bulk operations, and custom endpoint decorators.",
"version": "0.1.3",
"project_urls": null,
"split_keywords": [
"api",
" crud",
" fastapi",
" pydantic",
" rest",
" router",
" sqlalchemy"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "0c73a797e9c0ac262cecf740321d4cd416b7b38b575af1da40a02a5139c08e89",
"md5": "608c1b927a17ba60c3871c43a05e6c90",
"sha256": "172276e8ae809013a51c0bbe1bc99b6eedbb8f6adbaefd0ed5a91f357b66e970"
},
"downloads": -1,
"filename": "fastapi_autocrud-0.1.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "608c1b927a17ba60c3871c43a05e6c90",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.12",
"size": 31381,
"upload_time": "2025-07-28T13:49:10",
"upload_time_iso_8601": "2025-07-28T13:49:10.051105Z",
"url": "https://files.pythonhosted.org/packages/0c/73/a797e9c0ac262cecf740321d4cd416b7b38b575af1da40a02a5139c08e89/fastapi_autocrud-0.1.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4654ca38190ccb193bb3260ad88d22a1cfe2a297199f4438221852b047f6089a",
"md5": "929cdb9a7fa175b04bf95f6e1000fa98",
"sha256": "bc6c133c3c9cfc61f811c3b0a1fbba2674b4e77b13a82136a754e61e725c8559"
},
"downloads": -1,
"filename": "fastapi_autocrud-0.1.3.tar.gz",
"has_sig": false,
"md5_digest": "929cdb9a7fa175b04bf95f6e1000fa98",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.12",
"size": 28557,
"upload_time": "2025-07-28T13:49:11",
"upload_time_iso_8601": "2025-07-28T13:49:11.260971Z",
"url": "https://files.pythonhosted.org/packages/46/54/ca38190ccb193bb3260ad88d22a1cfe2a297199f4438221852b047f6089a/fastapi_autocrud-0.1.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-28 13:49:11",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "fastapi-autocrud"
}