MoP is a lightweight Python backend framework built on FastAPI and SQLAlchemy, providing core functionality modules for building modern web applications.
- Configuration Management: Flexible configuration system with easy-to-use settings
- Database Support: Both synchronous and asynchronous database sessions with SQLAlchemy
- Entity Framework: Base entity class for consistent data modeling
- Error Handling: Centralized error handling with business error codes
- Logging: Structured logging with structlog
- Response Formatting: Consistent API response formatting
- CRUD Operations: Generic CRUD operations with pagination support
- Utilities: Various utility functions for dates, strings, files, and more
- Snowflake ID Generation: Distributed unique ID generation
pip install moss-mop
Or using uv:
uv add moss-mop
- Python 3.12+
- FastAPI 0.124.4+
- SQLAlchemy 2.0.45+
- Pydantic 2.12.5+
- structlog 25.5.0+
- ascii-colors 0.11.6+
mop/
├── conf/ # Configuration management
├── db/ # Database connections
├── entity/ # Base entity class
├── error/ # Error handling
├── logging/ # Logging configuration
├── response/ # Response formatting
├── crud/ # CRUD operations
├── util/ # Utility functions
└── snowflake.py # Snowflake ID generation
from mop.conf import settings # Access configuration settings print(settings.APP_NAME) print(settings.DATABASE_URL)
from mop.db import session, async_session from sqlalchemy import select from your_model import User # Synchronous session with session() as db: users = db.execute(select(User)).scalars().all() print(users) # Asynchronous session async with async_session() as db: users = await db.execute(select(User)) users = users.scalars().all() print(users)
from mop.entity import Entity from sqlalchemy import Column, String class User(Entity): __tablename__ = "users" username = Column(String(50), unique=True, index=True) email = Column(String(100), unique=True, index=True)
from mop.error import BusinessError, ErrCode # Raise business error raise BusinessError(ErrCode.USER_NOT_FOUND, "User not found")
from mop.logging import logger # Log messages logger.info("User logged in", user_id=123) logger.error("Failed to process request", error="Invalid input")
from mop.response import Response, PageResponse from fastapi import FastAPI app = FastAPI() @app.get("/users") async def get_users(): users = [{"id": 1, "name": "John"}, {"id": 2, "name": "Jane"}] return Response(data=users, message="Success") @app.get("/users/page") async def get_users_page(): users = [{"id": 1, "name": "John"}, {"id": 2, "name": "Jane"}] return PageResponse(data=users, total=100, page=1, page_size=20)
from mop.crud import CRUDBase from your_model import User, UserCreate, UserUpdate # Create CRUD instance user_crud = CRUDBase(User) # Create user user = user_crud.create(db, obj_in=UserCreate(username="test", email="test@example.com")) # Get user by ID user = user_crud.get(db, id=1) # Update user user = user_crud.update(db, db_obj=user, obj_in=UserUpdate(email="new@example.com")) # Delete user user_crud.remove(db, id=1) # Get users with pagination users, total = user_crud.get_multi(db, page=1, page_size=10)
from mop.snowflake import SnowflakeGenerator # Create generator instance generator = SnowflakeGenerator(datacenter_id=1, worker_id=1) # Generate unique ID unique_id = generator.generate() print(unique_id)
from mop.util.dates import format_datetime, parse_datetime # Format datetime formatted = format_datetime(datetime.now()) print(formatted) # Parse datetime parsed = parse_datetime("2023-01-01 12:00:00") print(parsed)
from mop.util.strings import random_string, is_email_valid # Generate random string rand_str = random_string(10) print(rand_str) # Check if email is valid is_valid = is_email_valid("test@example.com") print(is_valid)
from mop.util.files import read_file, write_file # Read file content = read_file("test.txt") print(content) # Write file write_file("test.txt", "Hello, World!")
- Entity ID field ensures string type
- Entity ID type changed from Integer to String(32) for Snowflake ID compatibility
- Package name updated to moss-mop
- Initial release of MoP framework
- Configuration management module
- Database support with synchronous and asynchronous sessions
- Base entity class for data modeling
- Centralized error handling system
- Structured logging configuration
- Consistent API response formatting
- Generic CRUD operations with pagination
- Utility functions for dates, strings, files, and more
- Snowflake ID generation for distributed systems
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License
- puras - puras.he@gmail.com