BMB - Backend Framework utilisant BMDB ORM
Project description
BMB - Backend Framework
🚀 BMB est un framework backend Flask qui utilise BMDB (ORM Python) pour créer des API RESTful en quelques minutes.
✨ Fonctionnalités
🔐 Authentification JWT complète
- Inscription utilisateur (
POST /api/auth/register) - Connexion (
POST /api/auth/login) - Profil utilisateur (
GET /api/auth/me) - Renouvellement de token (
POST /api/auth/refresh) - Déconnexion (
POST /api/auth/logout)
👥 CRUD Utilisateurs avec BMDB
Utilise toutes les méthodes BMDB :
- ✅
save()- Créer/modifier - ✅
delete()- Supprimer - ✅
get(id)- Récupérer par ID - ✅
all()- Lister tous - ✅
filter(**kwargs)- Filtrer - ✅
first(**kwargs)- Premier résultat - ✅
count(**kwargs)- Compter - ✅
to_dict()- Sérialiser en JSON
📊 Endpoints disponibles
Authentification
POST /api/auth/register - Inscription
POST /api/auth/login - Connexion
GET /api/auth/me - Profil (protégé)
POST /api/auth/refresh - Renouveler token (protégé)
POST /api/auth/logout - Déconnexion (protégé)
Utilisateurs
GET /api/users - Liste avec filtres & pagination
GET /api/users/:id - Détails utilisateur
PUT /api/users/:id - Modifier utilisateur
DELETE /api/users/:id - Supprimer utilisateur
GET /api/users/search - Rechercher par email
GET /api/users/stats - Statistiques
Monitoring
GET /api/health - Health check
GET /api/info - Informations app
🚀 Installation rapide
1. Installer BMB
pip install bmb
2. Créer les modèles BMDB
# Créer le fichier models.bmdb
bmdb create-model User
bmdb add-fields User name:string email:string:unique password:string age:integer
# Générer les modèles Python
bmdb generate
3. Configuration
# Copier le fichier d'exemple
cp .env.example .env
# Éditer .env avec votre configuration
nano .env
Configuration minimale dans .env :
DB_CONNECTION=sqlite:///./database.db
SECRET_KEY=your-secret-key
JWT_SECRET=your-jwt-secret
4. Lancer l'application
# run.py
from bmb import create_app
app = create_app()
if __name__ == '__main__':
app.run(debug=True)
python run.py
🎉 Votre API est prête sur http://localhost:5000 !
📁 Structure du projet
mon-projet/
│
├── bmdb/ # Modèles BMDB
│ ├── models/
│ │ ├── generated/
│ │ │ └── models.py # Généré par BMDB
│ │ └── models.bmdb # Définition des modèles
│ └── __init__.py
│
├── bmb/ # Framework BMB
│ ├── __init__.py
│ ├── app.py # Factory Flask
│ ├── models_loader.py # Chargement modèles BMDB
│ ├── database.py # Gestionnaire DB
│ │
│ ├── config/ # Configuration séparée
│ │ ├── __init__.py
│ │ ├── app_config.py # Config Flask/JWT
│ │ └── bmdb_config.py # Config BMDB
│ │
│ ├── routes/ # Routes (blueprints)
│ │ ├── __init__.py
│ │ ├── auth.py # Authentification
│ │ ├── users.py # CRUD utilisateurs
│ │ └── health.py # Monitoring
│ │
│ ├── utils/ # Utilitaires
│ │ ├── __init__.py
│ │ ├── jwt_utils.py # Gestion JWT
│ │ ├── validators.py # Validateurs
│ │ └── responses.py # Réponses API
│ │
│ └── middleware/ # Middleware
│ ├── __init__.py
│ ├── logging.py # Logging requests
│ └── error_handlers.py # Gestion erreurs
│
├── .env # Configuration (ne pas commiter)
├── .env.example # Exemple de configuration
├── requirements.txt # Dépendances
├── setup.py # Installation
└── run.py # Point d'entrée
🔧 Architecture modulaire
Séparation des configurations
# Config Flask (bmb/config/app_config.py)
class AppConfig:
SECRET_KEY = os.getenv('SECRET_KEY')
JWT_SECRET_KEY = os.getenv('JWT_SECRET')
# ...
# Config BMDB (bmb/config/bmdb_config.py)
class BMDBConfig:
DB_CONNECTION = os.getenv('DB_CONNECTION')
MODELS_DIR = Path.cwd() / "bmdb" / "models" / "generated"
# ...
Chargement dynamique des modèles
from bmb import load_models
# Charger tous les modèles BMDB
models = load_models()
# Accéder à un modèle
User = models['User']
Post = models['Post']
# Utiliser les méthodes BMDB
users = User.all()
user = User.get(1)
new_user = User(name="Alice").save()
Factory Pattern pour Flask
from bmb import create_app
# Créer l'application avec configuration
app = create_app()
# Les modèles sont automatiquement chargés
# La DB est automatiquement initialisée
💡 Exemples d'utilisation
Inscription d'un utilisateur
curl -X POST http://localhost:5000/api/auth/register \
-H "Content-Type: application/json" \
-d '{
"name": "Alice Johnson",
"email": "alice@example.com",
"password": "secure123",
"age": 25
}'
Réponse :
{
"message": "Utilisateur créé avec succès",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": 1,
"name": "Alice Johnson",
"email": "alice@example.com",
"age": 25
}
}
}
Connexion
curl -X POST http://localhost:5000/api/auth/login \
-H "Content-Type: application/json" \
-d '{
"email": "alice@example.com",
"password": "secure123"
}'
Récupérer son profil
curl http://localhost:5000/api/auth/me \
-H "Authorization: Bearer YOUR_TOKEN"
Lister les utilisateurs (avec filtres)
curl "http://localhost:5000/api/users?age=25&page=1&page_size=10" \
-H "Authorization: Bearer YOUR_TOKEN"
Rechercher un utilisateur
curl "http://localhost:5000/api/users/search?email=alice@example.com" \
-H "Authorization: Bearer YOUR_TOKEN"
🎯 Points forts
✅ Installation ultra-rapide - pip install bmb
✅ Configuration simple - Un seul fichier .env
✅ Authentification JWT incluse - Prête à l'emploi
✅ CRUD automatique - Utilise BMDB ORM
✅ Architecture modulaire - Code propre et organisé
✅ Chargement dynamique - Modèles chargés automatiquement
✅ Pagination intégrée - Pages de résultats
✅ Validation des données - Sécurité renforcée
✅ Gestion d'erreurs - Messages clairs
✅ Logging automatique - Suivi des requêtes
✅ Health checks - Monitoring inclus
🔌 Intégration avec BMDB
BMB utilise intelligemment toutes les fonctionnalités de BMDB :
# Dans vos routes
from bmb import load_models
models = load_models()
User = models['User']
# Utiliser les méthodes BMDB
user = User.get(user_id) # Récupérer par ID
users = User.all() # Tous les utilisateurs
filtered = User.filter(age=25) # Filtrer
first = User.first(email="x@y.z") # Premier résultat
count = User.count(age=25) # Compter
user_dict = user.to_dict() # Sérialiser
# Créer/Modifier
new_user = User(name="Bob").save()
user.age = 30
user.save()
# Supprimer
user.delete()
🗄️ Bases de données supportées
Via BMDB, BMB supporte :
- PostgreSQL - Production recommandée
- MySQL - Alternative solide
- SQLite - Développement rapide
🛠️ Développement
Tests
# Installer les dépendances de dev
pip install -e ".[dev]"
# Lancer les tests
pytest
# Avec couverture
pytest --cov=bmb
Linting
# Formater le code
black bmb/
# Vérifier le style
flake8 bmb/
# Type checking
mypy bmb/
📦 Publier sur PyPI
# Build
python setup.py sdist bdist_wheel
# Upload
twine upload dist/*
🤝 Contribution
Les contributions sont les bienvenues ! Ouvrez une issue ou un PR sur GitHub.
📄 Licence
MIT License - Voir LICENSE pour plus de détails.
🔗 Liens
- GitHub: https://github.com/BM-Framework/bmb
- PyPI: https://pypi.org/project/bmb
- BMDB: https://github.com/BM-Framework/bmdb
- Documentation: https://bm-framework.github.io
Développé avec ❤️ par BM Framework | Marouan Bouchettoy
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 bmb-1.0.1.tar.gz.
File metadata
- Download URL: bmb-1.0.1.tar.gz
- Upload date:
- Size: 37.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9cd3bce5d010d33df720c6ca8cc479ed83643b32aeded9229b18244585e6d731
|
|
| MD5 |
a121dd3ebe42923fe3712f0eedfdbf6d
|
|
| BLAKE2b-256 |
81a26dbf76a0ee053ef5af6f2bfba98ff66dddab40b409731aab55972c2aefc7
|
File details
Details for the file bmb-1.0.1-py3-none-any.whl.
File metadata
- Download URL: bmb-1.0.1-py3-none-any.whl
- Upload date:
- Size: 46.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d4c3e8525672a5c47757f332ed4a4e438eee83521b04e28b8a9ad449682c01ba
|
|
| MD5 |
0d136257425a89c49ad39e909b608804
|
|
| BLAKE2b-256 |
75df6c5dc2b5cdfb265ffcf574bcedaee7cbe0a77815169bab5b5f8839a4aa2c
|