EarnORM 🚀
A powerful, async-first ORM framework for modern Python applications
📖 Description
EarnORM is a modern, async-first Object-Relational Mapping (ORM) framework designed to provide a flexible and type-safe interface for database operations in Python applications. Built with performance and developer experience in mind, it offers seamless integration with multiple databases and modern Python features.
🏗️ Project Status
Currently in Alpha stage. Core features are implemented and working, but the API may change as we gather feedback and improve the framework.
- Core ORM functionality
- MongoDB support
- Connection pooling
- Type safety
- PostgreSQL support (in progress)
- MySQL support (planned)
- Migration system (planned)
- Admin interface (planned)
✨ Key Highlights
- 🔄 Async/Await First: Built from the ground up for asynchronous operations
- 🔒 Type Safety: Full type hints support with runtime validation
- 🎯 Multiple Database Support: MongoDB, PostgreSQL (coming soon), MySQL (planned)
- 🌟 Modern Python: Leverages latest Python features and best practices
- 🛠️ Developer Friendly: Intuitive API with excellent IDE support
🎯 Features
Core Features
-
Async Operations
- Non-blocking database operations
- Async connection pooling
- Event-driven architecture
-
Type System
- Runtime type checking
- Custom type converters
- Validation framework
-
Connection Management
- Smart connection pooling
- Automatic recovery
- Health monitoring
-
Model System
- Declarative models
- Field validation
- Relationship management
- Event hooks
Advanced Features
-
Query Building
- Type-safe queries
- Complex filters
- Aggregations
- Joins
-
Transaction Support
- ACID compliance
- Nested transactions
- Savepoints
- Automatic rollback
📚 Documentation
💡 Examples
Basic Usage
from earnorm.base import BaseModel
from earnorm.fields import StringField, IntegerField
class User(BaseModel):
_name = 'data.user'
name = StringField(required=True)
age = IntegerField()
async def validate(self):
if self.age < 0:
raise ValueError("Age cannot be negative")
# Create record
user = await User.create({
"name": "John Doe",
"age": 30
})
# Query records
users = await User.search([
("age", ">=", 18),
("name", "like", "John%")
])
FastAPI Integration with Lifecycle
from fastapi import FastAPI
from earnorm.config import SystemConfig
from earnorm.di import container
app = FastAPI()
@app.on_event("startup")
async def startup():
# Load config
config = SystemConfig.load_env(".env")
# Initialize container
await container.init(config)
# Register services
container.register("config", config)
@app.on_event("shutdown")
async def shutdown():
await container.destroy()
@app.get("/users/{user_id}")
async def get_user(user_id: str):
User = await container.get_model("data.user")
return await User.read(user_id)
Django Integration
from django.apps import AppConfig
from earnorm.config import SystemConfig
from earnorm.di import container
class MyAppConfig(AppConfig):
name = 'myapp'
async def ready(self):
# Initialize EarnORM
config = SystemConfig.load_env(".env")
await container.init(config)
Flask Integration
from flask import Flask
from earnorm.config import SystemConfig
from earnorm.di import container
app = Flask(__name__)
@app.before_first_request
async def init_earnorm():
config = SystemConfig.load_env(".env")
await container.init(config)
@app.teardown_appcontext
async def shutdown_earnorm(exception=None):
await container.destroy()
🤝 Contributing
We welcome contributions! Please see our Contributing Guide for details.
- Fork the repository
- Create your feature branch
- Add tests for new features
- Submit a pull request
📄 License
This project is licensed under the MIT License - see the LICENSE file for details.
📞 Contact
- GitHub: @earnbase
- Email: contact@earnbase.io
- Twitter: @earnbase
🙏 Credits
EarnORM is built with inspiration from:
Special thanks to all our contributors!
Metadata
Release files for earnorm 0.1.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| earnorm-0.1.4.tar.gz | 199.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| earnorm-0.1.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 510.1 kB
Release files / earnorm-0.1.4.tar.gz
| Download URL | earnorm-0.1.4.tar.gz |
|---|---|
| Size | 199.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
64a2d5b38e6cd3657f3b02ff2f8c3452dd052e1c866964ab4b3f9860c851d430
|
|
BLAKE2b-256 checksum How to use checksums |
1197ddde3c20d5ea00baa39d9c8b62bdbca4ad10a8ae778a965614017aec8b33
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.0.1 CPython/3.10.16 Linux/6.8.0-49-generic
|
Release files / earnorm-0.1.4-py3-none-any.whl
| Download URL | earnorm-0.1.4-py3-none-any.whl |
|---|---|
| Size | 310.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
03c23ea560f755358c34a75119945ed2036303414bae18045a051f85b3817298
|
|
BLAKE2b-256 checksum How to use checksums |
ef248124c919c910ff593d08e2675d6da25588bb1487817274443e23e2faf7b9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
poetry/2.0.1 CPython/3.10.16 Linux/6.8.0-49-generic
|