instant-crud


Nameinstant-crud JSON
Version 0.1.1 PyPI version JSON
download
home_pageNone
SummaryGenerate REST APIs instantly from SQLModel definitions
upload_time2025-08-01 19:43:54
maintainerNone
docs_urlNone
authorNone
requires_python>=3.12
licenseMIT
keywords code-generation crud database fastapi orm rest-api sqlmodel
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # instant-crud

> Generate REST APIs instantly from SQLModel definitions

[![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)
[![FastAPI](https://img.shields.io/badge/FastAPI-0.115+-green.svg)](https://fastapi.tiangolo.com/)
[![SQLModel](https://img.shields.io/badge/SQLModel-latest-orange.svg)](https://sqlmodel.tiangolo.com/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

**instant-crud** is a powerful Python library that automatically generates fully-featured REST APIs from your SQLModel definitions. With just a decorator, you get complete CRUD operations, pagination, search, filtering, and export capabilities.

## โœจ Features

- ๐Ÿš€ **Instant API Generation** - One decorator, full REST API
- ๐Ÿ“„ **Smart Pagination** - Multiple formats (offset, page-based, cursor, custom)
- ๐Ÿ” **Built-in Search** - Automatic text search across model fields
- ๐Ÿ” **Authentication Ready** - JWT/Bearer token support
- ๐Ÿ“Š **Export Capabilities** - Excel, CSV, PDF, JSON, Parquet
- ๐ŸŽฏ **Type Safe** - Full TypeScript-like autocompletion
- ๐Ÿ“š **Auto Documentation** - OpenAPI/Swagger docs generated
- โšก **High Performance** - Built on FastAPI and SQLModel
- ๐Ÿ”ง **Highly Configurable** - Environment variables + JSON config
- ๐Ÿงช **Test Friendly** - Comprehensive test fixtures included

## ๐Ÿš€ Quick Start

### Installation

```bash
# Basic installation
pip install instant-crud

# With all features
pip install instant-crud[full]

# Development installation
pip install instant-crud[dev]
```

### 5-Minute Example

```python
from typing import Optional
from fastapi import FastAPI
from sqlmodel import SQLModel, Field
from instant_crud import auto_crud_api, setup

# 1. Define your model with the decorator
@auto_crud_api(prefix="/users", tags=["Users"])
class User(SQLModel, table=True):
    id: Optional[int] = Field(primary_key=True)
    name: str
    email: str
    age: Optional[int] = None

# 2. Create FastAPI app and setup instant-crud
app = FastAPI(title="My API")
factory = setup(get_session=get_session)  # your session function

# 3. Register all decorated models
routers = factory.create_routers_for_registered_models()
for router in routers:
    app.include_router(router, prefix="/api/v1")

# ๐ŸŽ‰ That's it! You now have a full REST API with:
# GET    /api/v1/users         - List users (paginated)
# POST   /api/v1/users         - Create user  
# GET    /api/v1/users/{id}    - Get user by ID
# PUT    /api/v1/users/{id}    - Update user
# PATCH  /api/v1/users/{id}    - Partial update
# DELETE /api/v1/users/{id}    - Delete user
# GET    /api/v1/users/search  - Search users
# GET    /api/v1/users/count   - Count users
```

### What You Get Automatically

**CRUD Operations:**
```bash
curl http://localhost:8000/api/v1/users
curl -X POST http://localhost:8000/api/v1/users -d '{"name":"John","email":"john@example.com"}'
curl http://localhost:8000/api/v1/users/1
curl -X PUT http://localhost:8000/api/v1/users/1 -d '{"name":"Jane","email":"jane@example.com"}'
curl -X DELETE http://localhost:8000/api/v1/users/1
```

**Search & Filtering:**
```bash
curl http://localhost:8000/api/v1/users/search?q=john
curl http://localhost:8000/api/v1/users?age=25&limit=10
```

**Pagination (Multiple Formats):**
```json
{
  "items": [...],
  "total": 150,
  "skip": 20,
  "limit": 10
}
```

## ๐Ÿ“– Documentation

### Basic Usage Patterns

#### 1. Decorator Approach (Recommended)

```python
from instant_crud import auto_crud_api

@auto_crud_api(prefix="/products", tags=["Products"])
class Product(SQLModel, table=True):
    id: Optional[int] = Field(primary_key=True)
    name: str
    price: float
    in_stock: bool = True
```

#### 2. Factory Approach (Advanced)

```python
from instant_crud import CRUDFactory

factory = CRUDFactory(
    get_session=get_session,
    get_current_user=get_current_user,  # Optional auth
)

router = factory.create_crud_router(
    model=Product,
    prefix="/products",
    tags=["Products"],
    search_fields=["name", "description"],
    export_enabled=True
)

app.include_router(router)
```

### Configuration

#### Environment Variables

```bash
INSTANT_CRUD_DEBUG=true
INSTANT_CRUD_API_PREFIX=/api/v1
INSTANT_CRUD_DEFAULT_PAGE_SIZE=50
INSTANT_CRUD_MAX_PAGE_SIZE=1000
INSTANT_CRUD_ENABLE_EXPORT=true
INSTANT_CRUD_ENABLE_AUTH=false
INSTANT_CRUD_CONFIG_FILE=./config/crud.json
```

#### JSON Configuration

```json
{
  "response_format": "page_based",
  "formats": {
    "page_based": {
      "items_key": "data",
      "wrapper_key": "pagination",
      "current_page_key": "current_page",
      "per_page_key": "per_page",
      "total_pages_key": "total_pages",
      "total_count_key": "total_count",
      "has_next_key": "has_next",
      "has_prev_key": "has_prev"
    }
  }
}
```

### Authentication

```python
from fastapi import Depends, HTTPException
from fastapi.security import HTTPBearer

security = HTTPBearer()

def get_current_user(token = Depends(security)):
    # Validate JWT token
    return validate_token(token.credentials)

def get_user_with_roles(user = Depends(get_current_user)):
    # Add role checking
    return add_roles(user)

factory = CRUDFactory(
    get_session=get_session,
    get_current_user=get_current_user,
    get_user_with_roles=get_user_with_roles
)
```

### Custom Pagination Formats

#### Offset-based (Default)
```json
{
  "items": [...],
  "total": 100,
  "skip": 20,
  "limit": 10
}
```

#### Page-based
```json
{
  "data": [...],
  "pagination": {
    "current_page": 3,
    "per_page": 10,
    "total_pages": 10,
    "total_count": 100,
    "has_next": true,
    "has_prev": true
  }
}
```

#### Custom Template
```json
{
  "results": [...],
  "meta": {
    "count": 100,
    "page": 3,
    "size": 10,
    "links": {
      "first": "/api/users?page=1",
      "last": "/api/users?page=10",
      "next": "/api/users?page=4",
      "prev": "/api/users?page=2"
    }
  }
}
```

### Export Features

```python
# Enable exports (requires instant-crud[export])
@auto_crud_api(prefix="/users", export_enabled=True)
class User(SQLModel, table=True):
    # ... model definition

# Available export endpoints:
# GET /api/v1/users/export/excel
# GET /api/v1/users/export/csv  
# GET /api/v1/users/export/pdf
# GET /api/v1/users/export/json
# GET /api/v1/users/export/parquet
```

### Advanced Features

#### Read-Only APIs
```python
@auto_crud_api(prefix="/reports", read_only=True)
class Report(SQLModel, table=True):
    # Only GET endpoints will be created
    pass
```

#### Custom Search Fields
```python
@auto_crud_api(
    prefix="/articles",
    search_fields=["title", "content", "author"]
)
class Article(SQLModel, table=True):
    title: str
    content: str
    author: str
    # Search will work on these fields only
```

#### Batch Operations
```python
# Create multiple items
POST /api/v1/users/batch
[
  {"name": "User1", "email": "user1@example.com"},
  {"name": "User2", "email": "user2@example.com"}
]

# Delete multiple items  
DELETE /api/v1/users/batch
[1, 2, 3, 4, 5]
```

## ๐Ÿงช Testing

The library includes comprehensive test fixtures:

```python
import pytest
from fastapi.testclient import TestClient

def test_user_crud(client: TestClient):
    # Create user
    response = client.post("/users/", json={
        "name": "Test User",
        "email": "test@example.com"
    })
    assert response.status_code == 201
    
    # Get user
    user_id = response.json()["id"]
    response = client.get(f"/users/{user_id}")
    assert response.status_code == 200
```

## ๐Ÿ”ง Development

### Setup Development Environment

```bash
# Clone repository
git clone https://github.com/yourusername/instant-crud.git
cd instant-crud

# Create virtual environment with UV
uv venv --python 3.12
source .venv/bin/activate  # Linux/Mac
# .venv\Scripts\activate   # Windows

# Install dependencies
uv sync --extra dev --extra full

# Install in development mode
uv pip install -e .
```

### Run Tests

```bash
# Run all tests
uv run pytest

# Run with coverage
uv run pytest --cov=src --cov-report=html

# Run specific test file
uv run pytest tests/test_basic_crud.py -v
```

### Code Quality

```bash
# Format code
uv run black src/ tests/ examples/

# Lint code
uv run ruff check src/ tests/ examples/

# Fix linting issues
uv run ruff check --fix src/ tests/ examples/
```

### Run Examples

```bash
# Basic example
cd examples
uv run python basic_usage.py

# Advanced example with auth
uv run python advanced_usage.py

# Visit http://localhost:8000/docs for API documentation
```

## ๐Ÿ“š Examples

See the [`examples/`](examples/) directory for complete working examples:

- **[basic_usage.py](examples/basic_usage.py)** - Simple CRUD API with auto-generated endpoints
- **[advanced_usage.py](examples/advanced_usage.py)** - Authentication, custom pagination, exports
- **[custom_pagination.py](examples/custom_pagination.py)** - Custom pagination formats
- **[with_auth.py](examples/with_auth.py)** - JWT authentication integration

## ๐Ÿค API Reference

### Main Components

#### `@auto_crud_api` Decorator
```python
@auto_crud_api(
    prefix: str = None,                    # URL prefix
    tags: List[str] = None,               # OpenAPI tags
    search_fields: List[str] = None,      # Searchable fields
    export_enabled: bool = None,          # Enable exports
    auth_enabled: bool = None,            # Enable auth
    read_only: bool = False,              # Read-only API
)
```

#### `CRUDFactory` Class
```python
factory = CRUDFactory(
    get_session: Callable,                # DB session provider
    get_current_user: Callable = None,    # Auth function
    get_user_with_roles: Callable = None, # Role-based auth
    settings: InstantCRUDSettings = None, # Custom settings
    config_file: str = None,              # Config file path
)
```

#### `InstantCRUDSettings` Configuration
```python
settings = InstantCRUDSettings(
    debug: bool = False,
    api_prefix: str = "/api/v1", 
    default_page_size: int = 100,
    max_page_size: int = 1000,
    enable_export: bool = True,
    enable_auth: bool = False,
    pagination_format: str = "offset_based",
    config_file: str = None,
)
```

## ๐Ÿ› ๏ธ Optional Dependencies

```bash
# Core functionality (always installed)
fastapi>=0.115.8
sqlmodel>=0.0.22
pydantic>=2.0.0
pydantic-settings>=2.7.1

# Export features
pip install instant-crud[export]
# Adds: duckdb, pandas, xlsxwriter, weasyprint, jinja2

# Authentication
pip install instant-crud[auth]  
# Adds: python-jose, passlib

# Development tools
pip install instant-crud[dev]
# Adds: pytest, black, ruff, httpx

# Everything
pip install instant-crud[full]
```

## ๐Ÿค Contributing

We welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.

### Quick Contribution Setup

```bash
# Fork the repository on GitHub
git clone https://github.com/yourusername/instant-crud.git
cd instant-crud

# Setup development environment
uv sync --extra dev --extra full

# Make your changes
# Add tests for new features
uv run pytest

# Submit a pull request
```

## ๐Ÿ“„ License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## ๐Ÿ™ Acknowledgments

- **[FastAPI](https://fastapi.tiangolo.com/)** - The amazing web framework that makes this possible
- **[SQLModel](https://sqlmodel.tiangolo.com/)** - Perfect bridge between SQLAlchemy and Pydantic  
- **[Pydantic](https://pydantic.dev/)** - Data validation and serialization
- **[UV](https://github.com/astral-sh/uv)** - Ultra-fast Python package manager

## ๐Ÿ”— Links

- **Documentation**: [https://instant-crud.readthedocs.io](https://instant-crud.readthedocs.io)
- **PyPI Package**: [https://pypi.org/project/instant-crud/](https://pypi.org/project/instant-crud/)
- **Source Code**: [https://github.com/yourusername/instant-crud](https://github.com/yourusername/instant-crud)
- **Issue Tracker**: [https://github.com/yourusername/instant-crud/issues](https://github.com/yourusername/instant-crud/issues)

---

โญ **Star us on GitHub if instant-crud helps you build APIs faster!**
            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "instant-crud",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.12",
    "maintainer_email": null,
    "keywords": "code-generation, crud, database, fastapi, orm, rest-api, sqlmodel",
    "author": null,
    "author_email": "Massimo Ghiani <m.ghiani@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/e0/aa/b54ba3678db5431aa6620e2bf817f51a1658d44932dd41d06034c129e4a6/instant_crud-0.1.1.tar.gz",
    "platform": null,
    "description": "# instant-crud\n\n> Generate REST APIs instantly from SQLModel definitions\n\n[![Python 3.12+](https://img.shields.io/badge/python-3.12+-blue.svg)](https://www.python.org/downloads/)\n[![FastAPI](https://img.shields.io/badge/FastAPI-0.115+-green.svg)](https://fastapi.tiangolo.com/)\n[![SQLModel](https://img.shields.io/badge/SQLModel-latest-orange.svg)](https://sqlmodel.tiangolo.com/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n**instant-crud** is a powerful Python library that automatically generates fully-featured REST APIs from your SQLModel definitions. With just a decorator, you get complete CRUD operations, pagination, search, filtering, and export capabilities.\n\n## \u2728 Features\n\n- \ud83d\ude80 **Instant API Generation** - One decorator, full REST API\n- \ud83d\udcc4 **Smart Pagination** - Multiple formats (offset, page-based, cursor, custom)\n- \ud83d\udd0d **Built-in Search** - Automatic text search across model fields\n- \ud83d\udd10 **Authentication Ready** - JWT/Bearer token support\n- \ud83d\udcca **Export Capabilities** - Excel, CSV, PDF, JSON, Parquet\n- \ud83c\udfaf **Type Safe** - Full TypeScript-like autocompletion\n- \ud83d\udcda **Auto Documentation** - OpenAPI/Swagger docs generated\n- \u26a1 **High Performance** - Built on FastAPI and SQLModel\n- \ud83d\udd27 **Highly Configurable** - Environment variables + JSON config\n- \ud83e\uddea **Test Friendly** - Comprehensive test fixtures included\n\n## \ud83d\ude80 Quick Start\n\n### Installation\n\n```bash\n# Basic installation\npip install instant-crud\n\n# With all features\npip install instant-crud[full]\n\n# Development installation\npip install instant-crud[dev]\n```\n\n### 5-Minute Example\n\n```python\nfrom typing import Optional\nfrom fastapi import FastAPI\nfrom sqlmodel import SQLModel, Field\nfrom instant_crud import auto_crud_api, setup\n\n# 1. Define your model with the decorator\n@auto_crud_api(prefix=\"/users\", tags=[\"Users\"])\nclass User(SQLModel, table=True):\n    id: Optional[int] = Field(primary_key=True)\n    name: str\n    email: str\n    age: Optional[int] = None\n\n# 2. Create FastAPI app and setup instant-crud\napp = FastAPI(title=\"My API\")\nfactory = setup(get_session=get_session)  # your session function\n\n# 3. Register all decorated models\nrouters = factory.create_routers_for_registered_models()\nfor router in routers:\n    app.include_router(router, prefix=\"/api/v1\")\n\n# \ud83c\udf89 That's it! You now have a full REST API with:\n# GET    /api/v1/users         - List users (paginated)\n# POST   /api/v1/users         - Create user  \n# GET    /api/v1/users/{id}    - Get user by ID\n# PUT    /api/v1/users/{id}    - Update user\n# PATCH  /api/v1/users/{id}    - Partial update\n# DELETE /api/v1/users/{id}    - Delete user\n# GET    /api/v1/users/search  - Search users\n# GET    /api/v1/users/count   - Count users\n```\n\n### What You Get Automatically\n\n**CRUD Operations:**\n```bash\ncurl http://localhost:8000/api/v1/users\ncurl -X POST http://localhost:8000/api/v1/users -d '{\"name\":\"John\",\"email\":\"john@example.com\"}'\ncurl http://localhost:8000/api/v1/users/1\ncurl -X PUT http://localhost:8000/api/v1/users/1 -d '{\"name\":\"Jane\",\"email\":\"jane@example.com\"}'\ncurl -X DELETE http://localhost:8000/api/v1/users/1\n```\n\n**Search & Filtering:**\n```bash\ncurl http://localhost:8000/api/v1/users/search?q=john\ncurl http://localhost:8000/api/v1/users?age=25&limit=10\n```\n\n**Pagination (Multiple Formats):**\n```json\n{\n  \"items\": [...],\n  \"total\": 150,\n  \"skip\": 20,\n  \"limit\": 10\n}\n```\n\n## \ud83d\udcd6 Documentation\n\n### Basic Usage Patterns\n\n#### 1. Decorator Approach (Recommended)\n\n```python\nfrom instant_crud import auto_crud_api\n\n@auto_crud_api(prefix=\"/products\", tags=[\"Products\"])\nclass Product(SQLModel, table=True):\n    id: Optional[int] = Field(primary_key=True)\n    name: str\n    price: float\n    in_stock: bool = True\n```\n\n#### 2. Factory Approach (Advanced)\n\n```python\nfrom instant_crud import CRUDFactory\n\nfactory = CRUDFactory(\n    get_session=get_session,\n    get_current_user=get_current_user,  # Optional auth\n)\n\nrouter = factory.create_crud_router(\n    model=Product,\n    prefix=\"/products\",\n    tags=[\"Products\"],\n    search_fields=[\"name\", \"description\"],\n    export_enabled=True\n)\n\napp.include_router(router)\n```\n\n### Configuration\n\n#### Environment Variables\n\n```bash\nINSTANT_CRUD_DEBUG=true\nINSTANT_CRUD_API_PREFIX=/api/v1\nINSTANT_CRUD_DEFAULT_PAGE_SIZE=50\nINSTANT_CRUD_MAX_PAGE_SIZE=1000\nINSTANT_CRUD_ENABLE_EXPORT=true\nINSTANT_CRUD_ENABLE_AUTH=false\nINSTANT_CRUD_CONFIG_FILE=./config/crud.json\n```\n\n#### JSON Configuration\n\n```json\n{\n  \"response_format\": \"page_based\",\n  \"formats\": {\n    \"page_based\": {\n      \"items_key\": \"data\",\n      \"wrapper_key\": \"pagination\",\n      \"current_page_key\": \"current_page\",\n      \"per_page_key\": \"per_page\",\n      \"total_pages_key\": \"total_pages\",\n      \"total_count_key\": \"total_count\",\n      \"has_next_key\": \"has_next\",\n      \"has_prev_key\": \"has_prev\"\n    }\n  }\n}\n```\n\n### Authentication\n\n```python\nfrom fastapi import Depends, HTTPException\nfrom fastapi.security import HTTPBearer\n\nsecurity = HTTPBearer()\n\ndef get_current_user(token = Depends(security)):\n    # Validate JWT token\n    return validate_token(token.credentials)\n\ndef get_user_with_roles(user = Depends(get_current_user)):\n    # Add role checking\n    return add_roles(user)\n\nfactory = CRUDFactory(\n    get_session=get_session,\n    get_current_user=get_current_user,\n    get_user_with_roles=get_user_with_roles\n)\n```\n\n### Custom Pagination Formats\n\n#### Offset-based (Default)\n```json\n{\n  \"items\": [...],\n  \"total\": 100,\n  \"skip\": 20,\n  \"limit\": 10\n}\n```\n\n#### Page-based\n```json\n{\n  \"data\": [...],\n  \"pagination\": {\n    \"current_page\": 3,\n    \"per_page\": 10,\n    \"total_pages\": 10,\n    \"total_count\": 100,\n    \"has_next\": true,\n    \"has_prev\": true\n  }\n}\n```\n\n#### Custom Template\n```json\n{\n  \"results\": [...],\n  \"meta\": {\n    \"count\": 100,\n    \"page\": 3,\n    \"size\": 10,\n    \"links\": {\n      \"first\": \"/api/users?page=1\",\n      \"last\": \"/api/users?page=10\",\n      \"next\": \"/api/users?page=4\",\n      \"prev\": \"/api/users?page=2\"\n    }\n  }\n}\n```\n\n### Export Features\n\n```python\n# Enable exports (requires instant-crud[export])\n@auto_crud_api(prefix=\"/users\", export_enabled=True)\nclass User(SQLModel, table=True):\n    # ... model definition\n\n# Available export endpoints:\n# GET /api/v1/users/export/excel\n# GET /api/v1/users/export/csv  \n# GET /api/v1/users/export/pdf\n# GET /api/v1/users/export/json\n# GET /api/v1/users/export/parquet\n```\n\n### Advanced Features\n\n#### Read-Only APIs\n```python\n@auto_crud_api(prefix=\"/reports\", read_only=True)\nclass Report(SQLModel, table=True):\n    # Only GET endpoints will be created\n    pass\n```\n\n#### Custom Search Fields\n```python\n@auto_crud_api(\n    prefix=\"/articles\",\n    search_fields=[\"title\", \"content\", \"author\"]\n)\nclass Article(SQLModel, table=True):\n    title: str\n    content: str\n    author: str\n    # Search will work on these fields only\n```\n\n#### Batch Operations\n```python\n# Create multiple items\nPOST /api/v1/users/batch\n[\n  {\"name\": \"User1\", \"email\": \"user1@example.com\"},\n  {\"name\": \"User2\", \"email\": \"user2@example.com\"}\n]\n\n# Delete multiple items  \nDELETE /api/v1/users/batch\n[1, 2, 3, 4, 5]\n```\n\n## \ud83e\uddea Testing\n\nThe library includes comprehensive test fixtures:\n\n```python\nimport pytest\nfrom fastapi.testclient import TestClient\n\ndef test_user_crud(client: TestClient):\n    # Create user\n    response = client.post(\"/users/\", json={\n        \"name\": \"Test User\",\n        \"email\": \"test@example.com\"\n    })\n    assert response.status_code == 201\n    \n    # Get user\n    user_id = response.json()[\"id\"]\n    response = client.get(f\"/users/{user_id}\")\n    assert response.status_code == 200\n```\n\n## \ud83d\udd27 Development\n\n### Setup Development Environment\n\n```bash\n# Clone repository\ngit clone https://github.com/yourusername/instant-crud.git\ncd instant-crud\n\n# Create virtual environment with UV\nuv venv --python 3.12\nsource .venv/bin/activate  # Linux/Mac\n# .venv\\Scripts\\activate   # Windows\n\n# Install dependencies\nuv sync --extra dev --extra full\n\n# Install in development mode\nuv pip install -e .\n```\n\n### Run Tests\n\n```bash\n# Run all tests\nuv run pytest\n\n# Run with coverage\nuv run pytest --cov=src --cov-report=html\n\n# Run specific test file\nuv run pytest tests/test_basic_crud.py -v\n```\n\n### Code Quality\n\n```bash\n# Format code\nuv run black src/ tests/ examples/\n\n# Lint code\nuv run ruff check src/ tests/ examples/\n\n# Fix linting issues\nuv run ruff check --fix src/ tests/ examples/\n```\n\n### Run Examples\n\n```bash\n# Basic example\ncd examples\nuv run python basic_usage.py\n\n# Advanced example with auth\nuv run python advanced_usage.py\n\n# Visit http://localhost:8000/docs for API documentation\n```\n\n## \ud83d\udcda Examples\n\nSee the [`examples/`](examples/) directory for complete working examples:\n\n- **[basic_usage.py](examples/basic_usage.py)** - Simple CRUD API with auto-generated endpoints\n- **[advanced_usage.py](examples/advanced_usage.py)** - Authentication, custom pagination, exports\n- **[custom_pagination.py](examples/custom_pagination.py)** - Custom pagination formats\n- **[with_auth.py](examples/with_auth.py)** - JWT authentication integration\n\n## \ud83e\udd1d API Reference\n\n### Main Components\n\n#### `@auto_crud_api` Decorator\n```python\n@auto_crud_api(\n    prefix: str = None,                    # URL prefix\n    tags: List[str] = None,               # OpenAPI tags\n    search_fields: List[str] = None,      # Searchable fields\n    export_enabled: bool = None,          # Enable exports\n    auth_enabled: bool = None,            # Enable auth\n    read_only: bool = False,              # Read-only API\n)\n```\n\n#### `CRUDFactory` Class\n```python\nfactory = CRUDFactory(\n    get_session: Callable,                # DB session provider\n    get_current_user: Callable = None,    # Auth function\n    get_user_with_roles: Callable = None, # Role-based auth\n    settings: InstantCRUDSettings = None, # Custom settings\n    config_file: str = None,              # Config file path\n)\n```\n\n#### `InstantCRUDSettings` Configuration\n```python\nsettings = InstantCRUDSettings(\n    debug: bool = False,\n    api_prefix: str = \"/api/v1\", \n    default_page_size: int = 100,\n    max_page_size: int = 1000,\n    enable_export: bool = True,\n    enable_auth: bool = False,\n    pagination_format: str = \"offset_based\",\n    config_file: str = None,\n)\n```\n\n## \ud83d\udee0\ufe0f Optional Dependencies\n\n```bash\n# Core functionality (always installed)\nfastapi>=0.115.8\nsqlmodel>=0.0.22\npydantic>=2.0.0\npydantic-settings>=2.7.1\n\n# Export features\npip install instant-crud[export]\n# Adds: duckdb, pandas, xlsxwriter, weasyprint, jinja2\n\n# Authentication\npip install instant-crud[auth]  \n# Adds: python-jose, passlib\n\n# Development tools\npip install instant-crud[dev]\n# Adds: pytest, black, ruff, httpx\n\n# Everything\npip install instant-crud[full]\n```\n\n## \ud83e\udd1d Contributing\n\nWe welcome contributions! Please see our [Contributing Guide](CONTRIBUTING.md) for details.\n\n### Quick Contribution Setup\n\n```bash\n# Fork the repository on GitHub\ngit clone https://github.com/yourusername/instant-crud.git\ncd instant-crud\n\n# Setup development environment\nuv sync --extra dev --extra full\n\n# Make your changes\n# Add tests for new features\nuv run pytest\n\n# Submit a pull request\n```\n\n## \ud83d\udcc4 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## \ud83d\ude4f Acknowledgments\n\n- **[FastAPI](https://fastapi.tiangolo.com/)** - The amazing web framework that makes this possible\n- **[SQLModel](https://sqlmodel.tiangolo.com/)** - Perfect bridge between SQLAlchemy and Pydantic  \n- **[Pydantic](https://pydantic.dev/)** - Data validation and serialization\n- **[UV](https://github.com/astral-sh/uv)** - Ultra-fast Python package manager\n\n## \ud83d\udd17 Links\n\n- **Documentation**: [https://instant-crud.readthedocs.io](https://instant-crud.readthedocs.io)\n- **PyPI Package**: [https://pypi.org/project/instant-crud/](https://pypi.org/project/instant-crud/)\n- **Source Code**: [https://github.com/yourusername/instant-crud](https://github.com/yourusername/instant-crud)\n- **Issue Tracker**: [https://github.com/yourusername/instant-crud/issues](https://github.com/yourusername/instant-crud/issues)\n\n---\n\n\u2b50 **Star us on GitHub if instant-crud helps you build APIs faster!**",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "Generate REST APIs instantly from SQLModel definitions",
    "version": "0.1.1",
    "project_urls": {
        "Documentation": "https://instant-crud.readthedocs.io",
        "Homepage": "https://github.com/yourusername/instant-crud",
        "Issues": "https://github.com/yourusername/instant-crud/issues",
        "Repository": "https://github.com/yourusername/instant-crud"
    },
    "split_keywords": [
        "code-generation",
        " crud",
        " database",
        " fastapi",
        " orm",
        " rest-api",
        " sqlmodel"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "fee0232bc401f6ed9acb87a7b48d8ee4b0e5e5e1d20f5d91c68750884dbc8852",
                "md5": "11af97d946d1c123de411e968bd0811c",
                "sha256": "d689e3e0f64672c122acdd6c9ed0aeb703e33e1ee1f33d960c9f6c6202e1b0e1"
            },
            "downloads": -1,
            "filename": "instant_crud-0.1.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "11af97d946d1c123de411e968bd0811c",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.12",
            "size": 26985,
            "upload_time": "2025-08-01T19:43:52",
            "upload_time_iso_8601": "2025-08-01T19:43:52.748760Z",
            "url": "https://files.pythonhosted.org/packages/fe/e0/232bc401f6ed9acb87a7b48d8ee4b0e5e5e1d20f5d91c68750884dbc8852/instant_crud-0.1.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e0aab54ba3678db5431aa6620e2bf817f51a1658d44932dd41d06034c129e4a6",
                "md5": "69635e0b1685ff1ba16a251c56ff998e",
                "sha256": "8dea3ff500fada13b22937ab72a1017794aa8b6a6c5b7dd0a88c35b313752a62"
            },
            "downloads": -1,
            "filename": "instant_crud-0.1.1.tar.gz",
            "has_sig": false,
            "md5_digest": "69635e0b1685ff1ba16a251c56ff998e",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.12",
            "size": 32365,
            "upload_time": "2025-08-01T19:43:54",
            "upload_time_iso_8601": "2025-08-01T19:43:54.137733Z",
            "url": "https://files.pythonhosted.org/packages/e0/aa/b54ba3678db5431aa6620e2bf817f51a1658d44932dd41d06034c129e4a6/instant_crud-0.1.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-01 19:43:54",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "yourusername",
    "github_project": "instant-crud",
    "github_not_found": true,
    "lcname": "instant-crud"
}
        
Elapsed time: 0.97569s