Advanced Toolkit for Application Management System - Universal toolkit for AURA projects
Project description
ATAMS - Advanced Toolkit for Application Management System
Universal toolkit untuk semua AURA (Atams Universal Runtime Architecture) projects.
Features
- ๐ Instant CRUD Generation - Generate full boilerplate in seconds
- ๐๏ธ Clean Architecture - Enforced separation of concerns
- ๐ Security by Default - Atlas SSO, encryption, RBAC
- ๐ฆ Reusable Components - Database, middleware, logging, etc.
- ๐จ CLI Tool - Project initialization & code generation
- ๐ CORS Protection - Default to
*.atamsindonesia.com
Installation
pip install atams
Quick Start
1. Initialize New Project
atams init my-app
cd my-app
cp .env.example .env
# Edit .env with your configuration
pip install -r requirements.txt
uvicorn app.main:app --reload
2. Generate CRUD
atams generate department
Generates:
- โ Model (SQLAlchemy)
- โ Schema (Pydantic)
- โ Repository (data access)
- โ Service (business logic)
- โ Endpoint (API routes)
- โ
Auto-registered to
api.py
3. Customize & Run
Edit generated files to add custom logic, then test:
# Access API docs
http://localhost:8000/docs
# Test endpoints
GET /api/v1/departments
GET /api/v1/departments/{id}
POST /api/v1/departments
PUT /api/v1/departments/{id}
DELETE /api/v1/departments/{id}
Components
Core Components
- Database Layer - BaseRepository with ORM & Native SQL
- Atlas SSO - Authentication & authorization
- Response Encryption - AES-256 for GET endpoints
- Exception Handling - Standardized error responses
- Middleware - Request ID tracking, rate limiting
- Logging - Structured logging with JSON format
- Transaction Management - Context managers for complex operations
- Common Schemas - Response & pagination schemas
Configuration
ATAMS provides AtamsBaseSettings with sensible defaults:
from atams import AtamsBaseSettings
class Settings(AtamsBaseSettings):
APP_NAME: str = "MyApp"
APP_VERSION: str = "1.0.0"
DEBUG: bool = True
# App-specific encryption
ENCRYPTION_KEY: str = "your-key-32-chars"
ENCRYPTION_IV: str = "your-iv-16-char"
settings = Settings()
CORS Default: Hanya *.atamsindonesia.com + localhost (development)
Override via .env:
CORS_ORIGINS=["https://myapp.atamsindonesia.com"]
CLI Commands
atams init <project_name>
Initialize new AURA project with complete structure.
Options:
--app-name, -a- Application name (default: project_name)--version, -v- Application version (default: 1.0.0)--schema, -s- Database schema (default: aura)
Example:
atams init my-new-app
atams generate <resource>
Generate full CRUD boilerplate for a resource.
Options:
--schema, -s- Database schema (default: aura)--skip-api- Skip auto-registration to api.py
Example:
atams generate department
atams generate user --schema=public
atams --version
Show toolkit version.
Project Structure
my-app/
โโโ app/
โ โโโ core/ # Configuration
โ โ โโโ config.py
โ โโโ db/ # Database
โ โโโ models/ # SQLAlchemy models
โ โโโ schemas/ # Pydantic schemas
โ โโโ repositories/ # Data access layer
โ โโโ services/ # Business logic layer
โ โโโ api/ # API endpoints
โ โโโ v1/
โ โโโ api.py
โ โโโ endpoints/
โโโ tests/ # Test files
โโโ .env.example # Environment template
โโโ requirements.txt # Dependencies
โโโ README.md
Usage Examples
Using BaseRepository
BaseRepository menyediakan 20+ methods untuk operasi database yang lengkap:
Basic CRUD Operations
| Method | Description |
|---|---|
get(db, id) |
Get single record by ID |
get_multi(db, skip, limit) |
Get multiple records with pagination |
create(db, obj_in) |
Create new record |
update(db, db_obj, obj_in) |
Update existing record |
delete(db, id) |
Delete record by ID |
Advanced Query Methods
| Method | Description |
|---|---|
exists(db, id) |
Fast existence check (returns bool) |
filter(db, filters, skip, limit, order_by) |
Dynamic filtering with pagination & ordering |
first(db, filters, order_by) |
Get first matching record |
count_filtered(db, filters) |
Count records with conditions |
get_or_create(db, defaults, **filters) |
Get existing or create new (atomic) |
update_or_create(db, filters, defaults) |
Update existing or create (upsert) |
Bulk Operations (High Performance)
| Method | Description |
|---|---|
bulk_create(db, objects) |
Batch insert (100x faster than loop) |
bulk_update(db, objects) |
Batch update multiple records |
delete_many(db, ids) |
Batch delete by IDs |
partial_update(db, id, data) |
Update without fetching first |
Soft Delete Pattern
| Method | Description |
|---|---|
soft_delete(db, id, deleted_at_field) |
Logical deletion with timestamp |
restore(db, id, deleted_at_field) |
Restore soft-deleted record |
Native SQL Execution
| Method | Description |
|---|---|
execute_raw_sql(db, query, params) |
Execute raw SQL, returns result |
execute_raw_sql_dict(db, query, params) |
Execute SQL, returns list of dicts |
execute_raw_sql_commit(db, query, params) |
Execute SQL with auto-commit |
Example Usage:
from atams import BaseRepository
from app.models.user import User
class UserRepository(BaseRepository[User]):
def __init__(self):
super().__init__(User)
def example_usage(self, db):
# Basic CRUD
user = self.get(db, id=1)
users = self.get_multi(db, skip=0, limit=10)
new_user = self.create(db, {"name": "John", "email": "john@example.com"})
# Advanced queries
if self.exists(db, id=1):
print("User exists!")
active_users = self.filter(db,
filters={"status": "active"},
skip=0, limit=50,
order_by="-created_at" # descending
)
first_admin = self.first(db,
filters={"role": "admin"},
order_by="created_at"
)
total = self.count_filtered(db, {"status": "active"})
# Get or create pattern
user, created = self.get_or_create(db,
defaults={"status": "pending"},
email="new@example.com"
)
# Bulk operations (very fast!)
users_data = [
{"name": "User1", "email": "user1@example.com"},
{"name": "User2", "email": "user2@example.com"},
]
self.bulk_create(db, users_data)
# Soft delete
self.soft_delete(db, id=1, deleted_at_field="deleted_at")
self.restore(db, id=1, deleted_at_field="deleted_at")
# Native SQL
query = "SELECT * FROM users WHERE status = :status"
active_users = self.execute_raw_sql_dict(db, query, {"status": "active"})
Using Atlas SSO
Configure Atlas SSO in .env:
ATLAS_SSO_URL=https://api.atlas-microapi.atamsindonesia.com/api/v1
ATLAS_APP_CODE=your_app_code
ATLAS_ENCRYPTION_KEY=your_encryption_key
ATLAS_ENCRYPTION_IV=your_encryption_iv
Then use in endpoints:
from atams.sso import require_auth, require_min_role_level
@router.get("/admin", dependencies=[Depends(require_min_role_level(50))])
async def admin_dashboard(current_user: dict = Depends(require_auth)):
# Only users with role level >= 50 can access
return {"user": current_user}
Using Response Encryption
from atams.encryption import encrypt_response_data
from atams.schemas import DataResponse
@router.get("/users/{user_id}")
async def get_user(user_id: int):
user = get_user_from_db(user_id)
response = DataResponse(
success=True,
message="User retrieved",
data=user
)
# Auto-encrypt if ENCRYPTION_ENABLED=true
return encrypt_response_data(response)
Development
Setup
git clone https://github.com/GratiaManullang03/atams.git
cd atams
pip install -e ".[dev]"
Run Tests
pytest tests/ -v
pytest tests/ --cov=atams --cov-report=html
Build Package
python -m build
Versioning
ATAMS follows Semantic Versioning:
- MAJOR version for incompatible API changes
- MINOR version for new functionality (backwards compatible)
- PATCH version for bug fixes
Current version: 1.1.0
Contributing
Contributions welcome! Please read CONTRIBUTING.md first.
License
MIT License - see LICENSE file for details.
Links
- GitHub: https://github.com/GratiaManullang03/atams
- PyPI: https://pypi.org/project/atams
- Issues: https://github.com/GratiaManullang03/atams/issues
Support
For support, email gratiamanullang03@gmail.com or open an issue on GitHub.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file atams-1.1.3.tar.gz.
File metadata
- Download URL: atams-1.1.3.tar.gz
- Upload date:
- Size: 46.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5c787922f6509127c9304943ce3174c8c3b22542b81760b0cb5dbe4f72d01562
|
|
| MD5 |
dd69193db85cd69a0d07e5d3bbebf731
|
|
| BLAKE2b-256 |
18200f02b0c5adc4e44eafab5def510929725790a58354a31bd8d6b14cd7e8b1
|
File details
Details for the file atams-1.1.3-py3-none-any.whl.
File metadata
- Download URL: atams-1.1.3-py3-none-any.whl
- Upload date:
- Size: 53.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4fb57e1dfce63cd787455ecc766ad80e77b977571d1a6265b3aa1a7c2d6cc8f
|
|
| MD5 |
be11130751689568de43efe33fdfc3b5
|
|
| BLAKE2b-256 |
88a05647d268ae4b7682355af7b46c4c39d6293bd32ad15784dfc80cf8190af0
|