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.1.tar.gz (37.4 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.1-py3-none-any.whl (46.7 kB view details)

Uploaded Python 3

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

Hashes for bmb-1.0.1.tar.gz
Algorithm Hash digest
SHA256 9cd3bce5d010d33df720c6ca8cc479ed83643b32aeded9229b18244585e6d731
MD5 a121dd3ebe42923fe3712f0eedfdbf6d
BLAKE2b-256 81a26dbf76a0ee053ef5af6f2bfba98ff66dddab40b409731aab55972c2aefc7

See more details on using hashes here.

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

Hashes for bmb-1.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 d4c3e8525672a5c47757f332ed4a4e438eee83521b04e28b8a9ad449682c01ba
MD5 0d136257425a89c49ad39e909b608804
BLAKE2b-256 75df6c5dc2b5cdfb265ffcf574bcedaee7cbe0a77815169bab5b5f8839a4aa2c

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