gdmongolite


Namegdmongolite JSON
Version 1.0.3 PyPI version JSON
download
home_pageNone
Summary🚀 The World's Most Powerful and Easiest MongoDB Toolkit - Zero-boilerplate, schema-first MongoDB operations with automatic sync/async detection, advanced queries, real-time features, comprehensive security, caching, monitoring, FastAPI integration, and production-ready deployment tools.
upload_time2025-08-03 21:25:33
maintainerNone
docs_urlNone
authorGanesh Datta Padamata
requires_python<4.0,>=3.9
licenseMIT
keywords mongodb database orm async pydantic fastapi websockets caching security monitoring migrations real-time analytics aggregation joins cli production microservices api
VCS
bugtrack_url
requirements click motor pymongo python-dotenv pydantic fastapi uvicorn pyyaml aiohttp aioconsole rich bson
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # gdmongolite - The World's Most Powerful and Easiest MongoDB Toolkit

**Zero-boilerplate, schema-first MongoDB operations with automatic sync/async detection, advanced queries, real-time features, comprehensive security, intelligent caching, full monitoring, FastAPI integration, and production-ready deployment tools.**

[![PyPI version](https://badge.fury.io/py/gdmongolite.svg)](https://badge.fury.io/py/gdmongolite)
[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)

## Installation

```bash
pip install gdmongolite
```

## Quick Start (30 seconds to productivity!)

```python
from gdmongolite import DB, Schema, Email, FieldTypes

# 1. Define your data model
class User(Schema):
    name: FieldTypes.Name
    email: Email
    age: FieldTypes.Age
    role: str = "user"

# 2. Connect and register
db = DB()  # Auto-connects to MongoDB
db.register_schema(User)

# 3. Use it! (Works in both sync and async)
async def main():
    # Insert with automatic validation
    user = await db.User.insert({
        "name": "John Doe",
        "email": "john@example.com",
        "age": 30
    })
    
    # Query with advanced filtering
    users = await db.User.find(age__gte=18, role="user").to_list()
    
    # Update documents
    await db.User.update({"role": "user"}, {"$set": {"role": "member"}})
    
    # Aggregations made simple
    stats = await db.User.aggregate().group("$role", count={"$sum": 1}).execute()
```

## Complete Feature Guide

### 1. Schema Definition and Validation

```python
from gdmongolite import DB, Schema, Email, FieldTypes
from typing import List, Optional
from datetime import datetime

class User(Schema):
    # Built-in field types with validation
    name: FieldTypes.Name              # 1-100 chars
    email: Email                       # Email validation
    age: FieldTypes.Age               # 0-150 range
    username: FieldTypes.Username     # 3-30 chars, alphanumeric
    
    # Optional fields with defaults
    role: str = "user"
    is_active: bool = True
    tags: List[str] = []
    created_at: datetime = datetime.now()
    
    # Custom validation
    bio: Optional[FieldTypes.Description] = None  # Max 1000 chars

class Product(Schema):
    name: FieldTypes.Title
    price: FieldTypes.Price           # Non-negative float
    rating: FieldTypes.Rating         # 0-5 range
    category: str
    in_stock: bool = True

class Order(Schema):
    user_id: str
    product_ids: List[str]
    total: FieldTypes.Price
    status: str = "pending"
    order_date: datetime = datetime.now()
```

### 2. Database Connection and Setup

```python
# Basic connection (uses environment variables or defaults)
db = DB()

# Custom connection
db = DB(
    uri="mongodb://localhost:27017",
    database="myapp"
)

# Production connection with all options
db = DB(
    uri="mongodb+srv://user:pass@cluster.mongodb.net/",
    database="production"
)

# Register your schemas
db.register_schema(User)
db.register_schema(Product)
db.register_schema(Order)
```

### 3. CRUD Operations (Create, Read, Update, Delete)

#### Create (Insert)
```python
# Single document
user = await db.User.insert({
    "name": "Alice Johnson",
    "email": "alice@example.com",
    "age": 28,
    "role": "admin"
})

# Multiple documents
users = await db.User.insert([
    {"name": "Bob", "email": "bob@example.com", "age": 25},
    {"name": "Carol", "email": "carol@example.com", "age": 30}
])

# Using schema objects
user_obj = User(name="David", email="david@example.com", age=35)
result = await db.User.insert(user_obj)
```

#### Read (Find/Query)
```python
# Find all
all_users = await db.User.find().to_list()

# Find with filters
adults = await db.User.find(age__gte=18).to_list()
admins = await db.User.find(role="admin").to_list()

# Complex queries
active_adults = await db.User.find(
    age__gte=18,
    is_active=True,
    role__in=["user", "admin"]
).to_list()

# Find one
user = await db.User.find(email="alice@example.com").first()

# Pagination
page1 = await db.User.find().skip(0).limit(10).to_list()
page2 = await db.User.find().skip(10).limit(10).to_list()

# Sorting
newest = await db.User.find().sort("-created_at").to_list()
oldest = await db.User.find().sort("created_at").to_list()

# Count
total_users = await db.User.find().count()
adult_count = await db.User.find(age__gte=18).count()
```

#### Update
```python
# Update many documents
result = await db.User.update(
    {"role": "user"},                    # Filter
    {"$set": {"role": "member"}}         # Update
)

# Update with operators
await db.User.update(
    {"_id": user_id},
    {
        "$set": {"last_login": datetime.now()},
        "$inc": {"login_count": 1},
        "$push": {"tags": "active"}
    }
)

# Upsert (insert if not exists)
await db.User.update(
    {"email": "new@example.com"},
    {"$set": {"name": "New User", "age": 25}},
    upsert=True
)
```

#### Delete
```python
# Delete documents
result = await db.User.delete(role="inactive")
result = await db.User.delete(age__lt=13)  # Remove underage users

# Delete by ID
await db.User.delete(_id=user_id)
```

### 4. Advanced Queries and Aggregations

```python
# Complex aggregation pipeline
pipeline_result = await (
    db.Order.aggregate()
    .match(status="completed")
    .lookup("users", "user_id", "_id", "user_info")
    .unwind("user_info")
    .group(
        "$user_info.role",
        total_orders={"$sum": 1},
        total_revenue={"$sum": "$total"},
        avg_order={"$avg": "$total"}
    )
    .sort(total_revenue=-1)
    .execute()
)

# Statistical analysis
user_stats = await (
    db.User.aggregate()
    .group(
        None,
        total_users={"$sum": 1},
        avg_age={"$avg": "$age"},
        min_age={"$min": "$age"},
        max_age={"$max": "$age"}
    )
    .execute()
)

# Date-based grouping
monthly_signups = await (
    db.User.aggregate()
    .group(
        {"$dateToString": {"format": "%Y-%m", "date": "$created_at"}},
        count={"$sum": 1}
    )
    .sort(_id=1)
    .execute()
)
```

### 5. Data Import/Export

```python
from gdmongolite import DataImporter, DataExporter

# Export data
exporter = DataExporter(db)

# Export to JSON
await exporter.export_to_json(db.User, "users.json")
await exporter.export_to_json(
    db.User.find(role="admin"), 
    "admin_users.json"
)

# Export to CSV
await exporter.export_to_csv(db.User, "users.csv")

# Import data
importer = DataImporter(db)

# Import from JSON
await importer.import_from_json("users.json", User)

# Import from CSV with mapping
await importer.import_from_csv(
    "users.csv", 
    User,
    field_mapping={
        "full_name": "name",
        "email_address": "email",
        "user_age": "age"
    }
)

# Batch import with validation
await importer.batch_import(
    data_source="large_dataset.json",
    schema=User,
    batch_size=1000,
    validate=True
)
```

### 6. FastAPI Integration (Auto-Generated REST APIs)

```python
from gdmongolite import create_fastapi_app
from fastapi import FastAPI

# Create full REST API automatically
app = create_fastapi_app(
    db,
    schemas=[User, Product, Order],
    title="My Powerful API",
    version="1.0.0",
    enable_docs=True
)

# Automatically generates these endpoints:
# GET    /users/              - List users (with pagination, filtering, sorting)
# POST   /users/              - Create user
# GET    /users/{id}          - Get user by ID
# PUT    /users/{id}          - Update user
# DELETE /users/{id}          - Delete user
# POST   /users/search        - Advanced search
# GET    /users/count         - Count users
# Same for Product and Order...

# Add custom endpoints
@app.get("/analytics/dashboard")
async def analytics():
    return {
        "total_users": await db.User.find().count(),
        "total_orders": await db.Order.find().count(),
        "revenue": await db.Order.aggregate().group(
            None, total={"$sum": "$total"}
        ).execute()
    }

# Run the server
if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)
```

### 7. Real-time Features and WebSockets

```python
from gdmongolite import WebSocketManager
from fastapi import WebSocket

# Real-time data updates
@app.websocket("/ws/users")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    
    # Watch for changes in User collection
    async def on_user_change(change):
        await websocket.send_json({
            "type": "user_update",
            "operation": change["operationType"],
            "data": change.get("fullDocument", {})
        })
    
    # Subscribe to changes
    await db.User.watch_changes(on_user_change)

# Live queries that update automatically
live_query = db.User.live_query(is_active=True)
await live_query.subscribe(websocket)
```

### 8. Security and Authentication

```python
from gdmongolite import SecurityMiddleware, PasswordManager

# Setup security
security = SecurityMiddleware(db)

# Password hashing
password_manager = PasswordManager()
hashed = password_manager.hash_password("user_password")
is_valid = password_manager.verify_password("user_password", hashed)

# JWT tokens
from gdmongolite import JWTManager
jwt_manager = JWTManager(secret_key="your-secret-key")

@app.post("/login")
async def login(email: str, password: str):
    user = await db.User.find(email=email).first()
    if user and password_manager.verify_password(password, user["password"]):
        token = jwt_manager.create_token({"user_id": str(user["_id"])})
        return {"access_token": token}
    raise HTTPException(401, "Invalid credentials")

# Protected endpoints
@app.get("/protected")
async def protected_route(current_user=Depends(jwt_manager.get_current_user)):
    return {"message": f"Hello {current_user['email']}"}
```

### 9. Caching for Performance

```python
from gdmongolite import add_caching_to_db

# Enable caching
cached_db = add_caching_to_db(db)

# Cached queries (automatic)
users = await cached_db.User.find(role="admin").to_list()  # Cached
users = await cached_db.User.find(role="admin").to_list()  # From cache

# Manual caching
@cached_db.cached(ttl=300)  # Cache for 5 minutes
async def expensive_operation():
    return await db.Order.aggregate().complex_pipeline().execute()

# Cache statistics
cache_stats = cached_db.get_cache_stats()
print(f"Hit rate: {cache_stats['hit_rate']}")
```

### 10. Monitoring and Performance

```python
from gdmongolite import add_monitoring_to_db

# Enable monitoring
monitored_db = add_monitoring_to_db(db)

# Get performance metrics
stats = monitored_db.get_performance_stats()
print(f"Average query time: {stats['avg_query_time']}ms")
print(f"Slow queries: {len(stats['slow_queries'])}")

# Health check
health = monitored_db.health_check()
print(f"Database status: {health['status']}")
print(f"Connection pool: {health['connection_pool']}")

# Built-in monitoring dashboard
@app.get("/monitoring/dashboard")
async def monitoring_dashboard():
    return monitored_db.get_full_stats()
```

### 11. Sync Usage (Non-async)

```python
# All operations work in sync mode too
db = DB()
db.register_schema(User)

# Sync operations (automatically detected)
user = db.User.insert_sync({
    "name": "Sync User",
    "email": "sync@example.com",
    "age": 25
})

users = db.User.find(age__gte=18).to_list_sync()
db.User.update_sync({"role": "user"}, {"$set": {"updated": True}})
```

### 12. Environment Configuration

```python
# .env file
MONGO_URI=mongodb://localhost:27017
MONGO_DB=myapp
MONGO_MAX_POOL=50
MONGO_MIN_POOL=5
MONGO_TIMEOUT_MS=30000

# Advanced configuration
GDMONGO_CACHE_TTL=3600
GDMONGO_ENABLE_MONITORING=true
GDMONGO_LOG_SLOW_QUERIES=true
GDMONGO_SLOW_QUERY_THRESHOLD=500
```

### 13. Production Deployment

```python
# Production-ready setup
from gdmongolite import production_setup

db = production_setup(
    uri="mongodb+srv://user:pass@cluster.mongodb.net/",
    database="production"
)

# With all features enabled
app = create_fastapi_app(
    db,
    schemas=[User, Product, Order],
    enable_monitoring=True,
    enable_caching=True,
    enable_security=True,
    cors_origins=["https://myapp.com"]
)

# Docker deployment
# FROM python:3.11-slim
# COPY . /app
# WORKDIR /app
# RUN pip install gdmongolite
# CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
```

## Why Choose gdmongolite?

### vs PyMongo
- ❌ PyMongo: Manual everything, no validation, verbose syntax
- ✅ gdmongolite: Automatic validation, simple syntax, zero boilerplate

### vs MongoEngine  
- ❌ MongoEngine: Django-style (heavy), sync-only, limited features
- ✅ gdmongolite: Lightweight, sync+async, comprehensive features

### vs Motor
- ❌ Motor: Async-only, no validation, manual serialization
- ✅ gdmongolite: Universal, automatic validation, smart serialization

### vs Beanie
- ❌ Beanie: Async-only, complex setup, limited tooling
- ✅ gdmongolite: Universal, zero setup, rich tooling

## Complete Example: E-commerce API

```python
from gdmongolite import DB, Schema, Email, FieldTypes, create_fastapi_app
from datetime import datetime
from typing import List

# Define schemas
class User(Schema):
    name: FieldTypes.Name
    email: Email
    password_hash: str
    role: str = "customer"

class Product(Schema):
    name: FieldTypes.Title
    price: FieldTypes.Price
    category: str
    stock: int = 0

class Order(Schema):
    user_id: str
    items: List[dict]
    total: FieldTypes.Price
    status: str = "pending"
    created_at: datetime = datetime.now()

# Setup database
db = DB()
for schema in [User, Product, Order]:
    db.register_schema(schema)

# Create API
app = create_fastapi_app(db, [User, Product, Order])

# Custom business logic
@app.post("/orders/")
async def create_order(order_data: dict):
    # Validate stock
    for item in order_data["items"]:
        product = await db.Product.find(_id=item["product_id"]).first()
        if product["stock"] < item["quantity"]:
            raise HTTPException(400, "Insufficient stock")
    
    # Create order
    order = await db.Order.insert(order_data)
    
    # Update stock
    for item in order_data["items"]:
        await db.Product.update(
            {"_id": item["product_id"]},
            {"$inc": {"stock": -item["quantity"]}}
        )
    
    return order

@app.get("/analytics")
async def analytics():
    return {
        "total_users": await db.User.find().count(),
        "total_orders": await db.Order.find().count(),
        "revenue": await db.Order.aggregate().group(
            None, total={"$sum": "$total"}
        ).execute(),
        "top_products": await db.Product.find().sort("-rating").limit(5).to_list()
    }

# Run: uvicorn main:app --reload
```

## Support and Documentation

- **GitHub**: https://github.com/ganeshdatta23/gdmongolite
- **Documentation**: https://gdmongolite.readthedocs.io
- **PyPI**: https://pypi.org/project/gdmongolite/
- **Issues**: https://github.com/ganeshdatta23/gdmongolite/issues

## License

MIT License - see [LICENSE](LICENSE) file.

## Author

**Ganesh Datta Padamata**
- Email: ganeshdattapadamata@gmail.com
- GitHub: [@ganeshdatta23](https://github.com/ganeshdatta23)


---

**🚀 Transform your MongoDB development experience with gdmongolite!**

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "gdmongolite",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.9",
    "maintainer_email": null,
    "keywords": "mongodb, database, orm, async, pydantic, fastapi, websockets, caching, security, monitoring, migrations, real-time, analytics, aggregation, joins, cli, production, microservices, api",
    "author": "Ganesh Datta Padamata",
    "author_email": "ganeshdattapadamata@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/9e/e4/c0dad5142ca697cd9274d62deb174ddb70d332ea935d24028403215f73be/gdmongolite-1.0.3.tar.gz",
    "platform": null,
    "description": "# gdmongolite - The World's Most Powerful and Easiest MongoDB Toolkit\n\n**Zero-boilerplate, schema-first MongoDB operations with automatic sync/async detection, advanced queries, real-time features, comprehensive security, intelligent caching, full monitoring, FastAPI integration, and production-ready deployment tools.**\n\n[![PyPI version](https://badge.fury.io/py/gdmongolite.svg)](https://badge.fury.io/py/gdmongolite)\n[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n## Installation\n\n```bash\npip install gdmongolite\n```\n\n## Quick Start (30 seconds to productivity!)\n\n```python\nfrom gdmongolite import DB, Schema, Email, FieldTypes\n\n# 1. Define your data model\nclass User(Schema):\n    name: FieldTypes.Name\n    email: Email\n    age: FieldTypes.Age\n    role: str = \"user\"\n\n# 2. Connect and register\ndb = DB()  # Auto-connects to MongoDB\ndb.register_schema(User)\n\n# 3. Use it! (Works in both sync and async)\nasync def main():\n    # Insert with automatic validation\n    user = await db.User.insert({\n        \"name\": \"John Doe\",\n        \"email\": \"john@example.com\",\n        \"age\": 30\n    })\n    \n    # Query with advanced filtering\n    users = await db.User.find(age__gte=18, role=\"user\").to_list()\n    \n    # Update documents\n    await db.User.update({\"role\": \"user\"}, {\"$set\": {\"role\": \"member\"}})\n    \n    # Aggregations made simple\n    stats = await db.User.aggregate().group(\"$role\", count={\"$sum\": 1}).execute()\n```\n\n## Complete Feature Guide\n\n### 1. Schema Definition and Validation\n\n```python\nfrom gdmongolite import DB, Schema, Email, FieldTypes\nfrom typing import List, Optional\nfrom datetime import datetime\n\nclass User(Schema):\n    # Built-in field types with validation\n    name: FieldTypes.Name              # 1-100 chars\n    email: Email                       # Email validation\n    age: FieldTypes.Age               # 0-150 range\n    username: FieldTypes.Username     # 3-30 chars, alphanumeric\n    \n    # Optional fields with defaults\n    role: str = \"user\"\n    is_active: bool = True\n    tags: List[str] = []\n    created_at: datetime = datetime.now()\n    \n    # Custom validation\n    bio: Optional[FieldTypes.Description] = None  # Max 1000 chars\n\nclass Product(Schema):\n    name: FieldTypes.Title\n    price: FieldTypes.Price           # Non-negative float\n    rating: FieldTypes.Rating         # 0-5 range\n    category: str\n    in_stock: bool = True\n\nclass Order(Schema):\n    user_id: str\n    product_ids: List[str]\n    total: FieldTypes.Price\n    status: str = \"pending\"\n    order_date: datetime = datetime.now()\n```\n\n### 2. Database Connection and Setup\n\n```python\n# Basic connection (uses environment variables or defaults)\ndb = DB()\n\n# Custom connection\ndb = DB(\n    uri=\"mongodb://localhost:27017\",\n    database=\"myapp\"\n)\n\n# Production connection with all options\ndb = DB(\n    uri=\"mongodb+srv://user:pass@cluster.mongodb.net/\",\n    database=\"production\"\n)\n\n# Register your schemas\ndb.register_schema(User)\ndb.register_schema(Product)\ndb.register_schema(Order)\n```\n\n### 3. CRUD Operations (Create, Read, Update, Delete)\n\n#### Create (Insert)\n```python\n# Single document\nuser = await db.User.insert({\n    \"name\": \"Alice Johnson\",\n    \"email\": \"alice@example.com\",\n    \"age\": 28,\n    \"role\": \"admin\"\n})\n\n# Multiple documents\nusers = await db.User.insert([\n    {\"name\": \"Bob\", \"email\": \"bob@example.com\", \"age\": 25},\n    {\"name\": \"Carol\", \"email\": \"carol@example.com\", \"age\": 30}\n])\n\n# Using schema objects\nuser_obj = User(name=\"David\", email=\"david@example.com\", age=35)\nresult = await db.User.insert(user_obj)\n```\n\n#### Read (Find/Query)\n```python\n# Find all\nall_users = await db.User.find().to_list()\n\n# Find with filters\nadults = await db.User.find(age__gte=18).to_list()\nadmins = await db.User.find(role=\"admin\").to_list()\n\n# Complex queries\nactive_adults = await db.User.find(\n    age__gte=18,\n    is_active=True,\n    role__in=[\"user\", \"admin\"]\n).to_list()\n\n# Find one\nuser = await db.User.find(email=\"alice@example.com\").first()\n\n# Pagination\npage1 = await db.User.find().skip(0).limit(10).to_list()\npage2 = await db.User.find().skip(10).limit(10).to_list()\n\n# Sorting\nnewest = await db.User.find().sort(\"-created_at\").to_list()\noldest = await db.User.find().sort(\"created_at\").to_list()\n\n# Count\ntotal_users = await db.User.find().count()\nadult_count = await db.User.find(age__gte=18).count()\n```\n\n#### Update\n```python\n# Update many documents\nresult = await db.User.update(\n    {\"role\": \"user\"},                    # Filter\n    {\"$set\": {\"role\": \"member\"}}         # Update\n)\n\n# Update with operators\nawait db.User.update(\n    {\"_id\": user_id},\n    {\n        \"$set\": {\"last_login\": datetime.now()},\n        \"$inc\": {\"login_count\": 1},\n        \"$push\": {\"tags\": \"active\"}\n    }\n)\n\n# Upsert (insert if not exists)\nawait db.User.update(\n    {\"email\": \"new@example.com\"},\n    {\"$set\": {\"name\": \"New User\", \"age\": 25}},\n    upsert=True\n)\n```\n\n#### Delete\n```python\n# Delete documents\nresult = await db.User.delete(role=\"inactive\")\nresult = await db.User.delete(age__lt=13)  # Remove underage users\n\n# Delete by ID\nawait db.User.delete(_id=user_id)\n```\n\n### 4. Advanced Queries and Aggregations\n\n```python\n# Complex aggregation pipeline\npipeline_result = await (\n    db.Order.aggregate()\n    .match(status=\"completed\")\n    .lookup(\"users\", \"user_id\", \"_id\", \"user_info\")\n    .unwind(\"user_info\")\n    .group(\n        \"$user_info.role\",\n        total_orders={\"$sum\": 1},\n        total_revenue={\"$sum\": \"$total\"},\n        avg_order={\"$avg\": \"$total\"}\n    )\n    .sort(total_revenue=-1)\n    .execute()\n)\n\n# Statistical analysis\nuser_stats = await (\n    db.User.aggregate()\n    .group(\n        None,\n        total_users={\"$sum\": 1},\n        avg_age={\"$avg\": \"$age\"},\n        min_age={\"$min\": \"$age\"},\n        max_age={\"$max\": \"$age\"}\n    )\n    .execute()\n)\n\n# Date-based grouping\nmonthly_signups = await (\n    db.User.aggregate()\n    .group(\n        {\"$dateToString\": {\"format\": \"%Y-%m\", \"date\": \"$created_at\"}},\n        count={\"$sum\": 1}\n    )\n    .sort(_id=1)\n    .execute()\n)\n```\n\n### 5. Data Import/Export\n\n```python\nfrom gdmongolite import DataImporter, DataExporter\n\n# Export data\nexporter = DataExporter(db)\n\n# Export to JSON\nawait exporter.export_to_json(db.User, \"users.json\")\nawait exporter.export_to_json(\n    db.User.find(role=\"admin\"), \n    \"admin_users.json\"\n)\n\n# Export to CSV\nawait exporter.export_to_csv(db.User, \"users.csv\")\n\n# Import data\nimporter = DataImporter(db)\n\n# Import from JSON\nawait importer.import_from_json(\"users.json\", User)\n\n# Import from CSV with mapping\nawait importer.import_from_csv(\n    \"users.csv\", \n    User,\n    field_mapping={\n        \"full_name\": \"name\",\n        \"email_address\": \"email\",\n        \"user_age\": \"age\"\n    }\n)\n\n# Batch import with validation\nawait importer.batch_import(\n    data_source=\"large_dataset.json\",\n    schema=User,\n    batch_size=1000,\n    validate=True\n)\n```\n\n### 6. FastAPI Integration (Auto-Generated REST APIs)\n\n```python\nfrom gdmongolite import create_fastapi_app\nfrom fastapi import FastAPI\n\n# Create full REST API automatically\napp = create_fastapi_app(\n    db,\n    schemas=[User, Product, Order],\n    title=\"My Powerful API\",\n    version=\"1.0.0\",\n    enable_docs=True\n)\n\n# Automatically generates these endpoints:\n# GET    /users/              - List users (with pagination, filtering, sorting)\n# POST   /users/              - Create user\n# GET    /users/{id}          - Get user by ID\n# PUT    /users/{id}          - Update user\n# DELETE /users/{id}          - Delete user\n# POST   /users/search        - Advanced search\n# GET    /users/count         - Count users\n# Same for Product and Order...\n\n# Add custom endpoints\n@app.get(\"/analytics/dashboard\")\nasync def analytics():\n    return {\n        \"total_users\": await db.User.find().count(),\n        \"total_orders\": await db.Order.find().count(),\n        \"revenue\": await db.Order.aggregate().group(\n            None, total={\"$sum\": \"$total\"}\n        ).execute()\n    }\n\n# Run the server\nif __name__ == \"__main__\":\n    import uvicorn\n    uvicorn.run(app, host=\"0.0.0.0\", port=8000)\n```\n\n### 7. Real-time Features and WebSockets\n\n```python\nfrom gdmongolite import WebSocketManager\nfrom fastapi import WebSocket\n\n# Real-time data updates\n@app.websocket(\"/ws/users\")\nasync def websocket_endpoint(websocket: WebSocket):\n    await websocket.accept()\n    \n    # Watch for changes in User collection\n    async def on_user_change(change):\n        await websocket.send_json({\n            \"type\": \"user_update\",\n            \"operation\": change[\"operationType\"],\n            \"data\": change.get(\"fullDocument\", {})\n        })\n    \n    # Subscribe to changes\n    await db.User.watch_changes(on_user_change)\n\n# Live queries that update automatically\nlive_query = db.User.live_query(is_active=True)\nawait live_query.subscribe(websocket)\n```\n\n### 8. Security and Authentication\n\n```python\nfrom gdmongolite import SecurityMiddleware, PasswordManager\n\n# Setup security\nsecurity = SecurityMiddleware(db)\n\n# Password hashing\npassword_manager = PasswordManager()\nhashed = password_manager.hash_password(\"user_password\")\nis_valid = password_manager.verify_password(\"user_password\", hashed)\n\n# JWT tokens\nfrom gdmongolite import JWTManager\njwt_manager = JWTManager(secret_key=\"your-secret-key\")\n\n@app.post(\"/login\")\nasync def login(email: str, password: str):\n    user = await db.User.find(email=email).first()\n    if user and password_manager.verify_password(password, user[\"password\"]):\n        token = jwt_manager.create_token({\"user_id\": str(user[\"_id\"])})\n        return {\"access_token\": token}\n    raise HTTPException(401, \"Invalid credentials\")\n\n# Protected endpoints\n@app.get(\"/protected\")\nasync def protected_route(current_user=Depends(jwt_manager.get_current_user)):\n    return {\"message\": f\"Hello {current_user['email']}\"}\n```\n\n### 9. Caching for Performance\n\n```python\nfrom gdmongolite import add_caching_to_db\n\n# Enable caching\ncached_db = add_caching_to_db(db)\n\n# Cached queries (automatic)\nusers = await cached_db.User.find(role=\"admin\").to_list()  # Cached\nusers = await cached_db.User.find(role=\"admin\").to_list()  # From cache\n\n# Manual caching\n@cached_db.cached(ttl=300)  # Cache for 5 minutes\nasync def expensive_operation():\n    return await db.Order.aggregate().complex_pipeline().execute()\n\n# Cache statistics\ncache_stats = cached_db.get_cache_stats()\nprint(f\"Hit rate: {cache_stats['hit_rate']}\")\n```\n\n### 10. Monitoring and Performance\n\n```python\nfrom gdmongolite import add_monitoring_to_db\n\n# Enable monitoring\nmonitored_db = add_monitoring_to_db(db)\n\n# Get performance metrics\nstats = monitored_db.get_performance_stats()\nprint(f\"Average query time: {stats['avg_query_time']}ms\")\nprint(f\"Slow queries: {len(stats['slow_queries'])}\")\n\n# Health check\nhealth = monitored_db.health_check()\nprint(f\"Database status: {health['status']}\")\nprint(f\"Connection pool: {health['connection_pool']}\")\n\n# Built-in monitoring dashboard\n@app.get(\"/monitoring/dashboard\")\nasync def monitoring_dashboard():\n    return monitored_db.get_full_stats()\n```\n\n### 11. Sync Usage (Non-async)\n\n```python\n# All operations work in sync mode too\ndb = DB()\ndb.register_schema(User)\n\n# Sync operations (automatically detected)\nuser = db.User.insert_sync({\n    \"name\": \"Sync User\",\n    \"email\": \"sync@example.com\",\n    \"age\": 25\n})\n\nusers = db.User.find(age__gte=18).to_list_sync()\ndb.User.update_sync({\"role\": \"user\"}, {\"$set\": {\"updated\": True}})\n```\n\n### 12. Environment Configuration\n\n```python\n# .env file\nMONGO_URI=mongodb://localhost:27017\nMONGO_DB=myapp\nMONGO_MAX_POOL=50\nMONGO_MIN_POOL=5\nMONGO_TIMEOUT_MS=30000\n\n# Advanced configuration\nGDMONGO_CACHE_TTL=3600\nGDMONGO_ENABLE_MONITORING=true\nGDMONGO_LOG_SLOW_QUERIES=true\nGDMONGO_SLOW_QUERY_THRESHOLD=500\n```\n\n### 13. Production Deployment\n\n```python\n# Production-ready setup\nfrom gdmongolite import production_setup\n\ndb = production_setup(\n    uri=\"mongodb+srv://user:pass@cluster.mongodb.net/\",\n    database=\"production\"\n)\n\n# With all features enabled\napp = create_fastapi_app(\n    db,\n    schemas=[User, Product, Order],\n    enable_monitoring=True,\n    enable_caching=True,\n    enable_security=True,\n    cors_origins=[\"https://myapp.com\"]\n)\n\n# Docker deployment\n# FROM python:3.11-slim\n# COPY . /app\n# WORKDIR /app\n# RUN pip install gdmongolite\n# CMD [\"uvicorn\", \"main:app\", \"--host\", \"0.0.0.0\", \"--port\", \"8000\"]\n```\n\n## Why Choose gdmongolite?\n\n### vs PyMongo\n- \u274c PyMongo: Manual everything, no validation, verbose syntax\n- \u2705 gdmongolite: Automatic validation, simple syntax, zero boilerplate\n\n### vs MongoEngine  \n- \u274c MongoEngine: Django-style (heavy), sync-only, limited features\n- \u2705 gdmongolite: Lightweight, sync+async, comprehensive features\n\n### vs Motor\n- \u274c Motor: Async-only, no validation, manual serialization\n- \u2705 gdmongolite: Universal, automatic validation, smart serialization\n\n### vs Beanie\n- \u274c Beanie: Async-only, complex setup, limited tooling\n- \u2705 gdmongolite: Universal, zero setup, rich tooling\n\n## Complete Example: E-commerce API\n\n```python\nfrom gdmongolite import DB, Schema, Email, FieldTypes, create_fastapi_app\nfrom datetime import datetime\nfrom typing import List\n\n# Define schemas\nclass User(Schema):\n    name: FieldTypes.Name\n    email: Email\n    password_hash: str\n    role: str = \"customer\"\n\nclass Product(Schema):\n    name: FieldTypes.Title\n    price: FieldTypes.Price\n    category: str\n    stock: int = 0\n\nclass Order(Schema):\n    user_id: str\n    items: List[dict]\n    total: FieldTypes.Price\n    status: str = \"pending\"\n    created_at: datetime = datetime.now()\n\n# Setup database\ndb = DB()\nfor schema in [User, Product, Order]:\n    db.register_schema(schema)\n\n# Create API\napp = create_fastapi_app(db, [User, Product, Order])\n\n# Custom business logic\n@app.post(\"/orders/\")\nasync def create_order(order_data: dict):\n    # Validate stock\n    for item in order_data[\"items\"]:\n        product = await db.Product.find(_id=item[\"product_id\"]).first()\n        if product[\"stock\"] < item[\"quantity\"]:\n            raise HTTPException(400, \"Insufficient stock\")\n    \n    # Create order\n    order = await db.Order.insert(order_data)\n    \n    # Update stock\n    for item in order_data[\"items\"]:\n        await db.Product.update(\n            {\"_id\": item[\"product_id\"]},\n            {\"$inc\": {\"stock\": -item[\"quantity\"]}}\n        )\n    \n    return order\n\n@app.get(\"/analytics\")\nasync def analytics():\n    return {\n        \"total_users\": await db.User.find().count(),\n        \"total_orders\": await db.Order.find().count(),\n        \"revenue\": await db.Order.aggregate().group(\n            None, total={\"$sum\": \"$total\"}\n        ).execute(),\n        \"top_products\": await db.Product.find().sort(\"-rating\").limit(5).to_list()\n    }\n\n# Run: uvicorn main:app --reload\n```\n\n## Support and Documentation\n\n- **GitHub**: https://github.com/ganeshdatta23/gdmongolite\n- **Documentation**: https://gdmongolite.readthedocs.io\n- **PyPI**: https://pypi.org/project/gdmongolite/\n- **Issues**: https://github.com/ganeshdatta23/gdmongolite/issues\n\n## License\n\nMIT License - see [LICENSE](LICENSE) file.\n\n## Author\n\n**Ganesh Datta Padamata**\n- Email: ganeshdattapadamata@gmail.com\n- GitHub: [@ganeshdatta23](https://github.com/ganeshdatta23)\n\n\n---\n\n**\ud83d\ude80 Transform your MongoDB development experience with gdmongolite!**\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "\ud83d\ude80 The World's Most Powerful and Easiest MongoDB Toolkit - Zero-boilerplate, schema-first MongoDB operations with automatic sync/async detection, advanced queries, real-time features, comprehensive security, caching, monitoring, FastAPI integration, and production-ready deployment tools.",
    "version": "1.0.3",
    "project_urls": {
        "Bug Tracker": "https://github.com/ganeshdatta23/gdmongolite/issues",
        "Changelog": "https://github.com/ganeshdatta23/gdmongolite/blob/main/CHANGELOG.md",
        "Documentation": "https://gdmongolite.readthedocs.io",
        "Funding": "https://github.com/sponsors/ganeshdatta23",
        "Homepage": "https://github.com/ganeshdatta23/gdmongolite",
        "Repository": "https://github.com/ganeshdatta23/gdmongolite"
    },
    "split_keywords": [
        "mongodb",
        " database",
        " orm",
        " async",
        " pydantic",
        " fastapi",
        " websockets",
        " caching",
        " security",
        " monitoring",
        " migrations",
        " real-time",
        " analytics",
        " aggregation",
        " joins",
        " cli",
        " production",
        " microservices",
        " api"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2bdd0ddbce982980bea60d29d4300f6207bcb56010a78d8adfa23ac69ccf2991",
                "md5": "008a3d514b4d1e44309d0fe1fe5c3f69",
                "sha256": "936a5d814d2366aad6f2efd61033869b9bd96dda321d862cf06069b8f99032ce"
            },
            "downloads": -1,
            "filename": "gdmongolite-1.0.3-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "008a3d514b4d1e44309d0fe1fe5c3f69",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.9",
            "size": 60262,
            "upload_time": "2025-08-03T21:25:32",
            "upload_time_iso_8601": "2025-08-03T21:25:32.479094Z",
            "url": "https://files.pythonhosted.org/packages/2b/dd/0ddbce982980bea60d29d4300f6207bcb56010a78d8adfa23ac69ccf2991/gdmongolite-1.0.3-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9ee4c0dad5142ca697cd9274d62deb174ddb70d332ea935d24028403215f73be",
                "md5": "81495562c878f680d893d7ec77d51709",
                "sha256": "be9dfff44bd02e7ca8ff1185f7ad1934e9fb85b76e22eeaed8a3550da35a7561"
            },
            "downloads": -1,
            "filename": "gdmongolite-1.0.3.tar.gz",
            "has_sig": false,
            "md5_digest": "81495562c878f680d893d7ec77d51709",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.9",
            "size": 56048,
            "upload_time": "2025-08-03T21:25:33",
            "upload_time_iso_8601": "2025-08-03T21:25:33.926754Z",
            "url": "https://files.pythonhosted.org/packages/9e/e4/c0dad5142ca697cd9274d62deb174ddb70d332ea935d24028403215f73be/gdmongolite-1.0.3.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-03 21:25:33",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "ganeshdatta23",
    "github_project": "gdmongolite",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "click",
            "specs": [
                [
                    ">=",
                    "8.1.0"
                ]
            ]
        },
        {
            "name": "motor",
            "specs": [
                [
                    ">=",
                    "3.3.2"
                ]
            ]
        },
        {
            "name": "pymongo",
            "specs": [
                [
                    ">=",
                    "4.6.0"
                ]
            ]
        },
        {
            "name": "python-dotenv",
            "specs": [
                [
                    ">=",
                    "1.0.0"
                ]
            ]
        },
        {
            "name": "pydantic",
            "specs": [
                [
                    ">=",
                    "2.5.3"
                ]
            ]
        },
        {
            "name": "fastapi",
            "specs": [
                [
                    ">=",
                    "0.104.0"
                ]
            ]
        },
        {
            "name": "uvicorn",
            "specs": [
                [
                    ">=",
                    "0.24.0"
                ]
            ]
        },
        {
            "name": "pyyaml",
            "specs": [
                [
                    ">=",
                    "6.0.1"
                ]
            ]
        },
        {
            "name": "aiohttp",
            "specs": [
                [
                    ">=",
                    "3.9.0"
                ]
            ]
        },
        {
            "name": "aioconsole",
            "specs": [
                [
                    ">=",
                    "0.6.1"
                ]
            ]
        },
        {
            "name": "rich",
            "specs": [
                [
                    ">=",
                    "13.7.0"
                ]
            ]
        },
        {
            "name": "bson",
            "specs": [
                [
                    ">=",
                    "0.5.10"
                ]
            ]
        }
    ],
    "lcname": "gdmongolite"
}
        
Elapsed time: 1.21623s