Skip to main content

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


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

bmb-1.0.0.tar.gz (37.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

bmb-1.0.0-py3-none-any.whl (46.7 kB view details)

Uploaded Python 3

File details

Details for the file bmb-1.0.0.tar.gz.

File metadata

  • Download URL: bmb-1.0.0.tar.gz
  • Upload date:
  • Size: 37.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for bmb-1.0.0.tar.gz
Algorithm Hash digest
SHA256 c8146eede2e27699fb17025d3119e46cc55d008f8422a435c4be813f7bafcf6c
MD5 e3d2c066b5f1e0d186442c75869bbbd5
BLAKE2b-256 8144dac55e7ecc9bec734dc0d72572abb47e79613b0ee57e543b03444294b78e

See more details on using hashes here.

File details

Details for the file bmb-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: bmb-1.0.0-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

Hashes for bmb-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 351efc38e61990a568ba52c36a8bd75a637fd1b50e50c1f56c69eff2fad00c33
MD5 0bcb6fa8702c1f8969fa5ba44d5c02a8
BLAKE2b-256 c20ab9569b95e417c49b5b05350e02cef7870eb533cd7a420540a2e96862c242

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page