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.3.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.3-py3-none-any.whl (46.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: bmb-1.0.3.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.3.tar.gz
Algorithm Hash digest
SHA256 4fae14f44b141824ff0141efc3339b08bd9b438e3dff3433ee0da915cdb295b1
MD5 a219b5759d7e6f7fa57d6b498539000e
BLAKE2b-256 c26b8fd7aa810643e0d7bc80ec659e6b3dde5a019f1364bb6625f7a46a3b7cfb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: bmb-1.0.3-py3-none-any.whl
  • Upload date:
  • Size: 46.6 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.3-py3-none-any.whl
Algorithm Hash digest
SHA256 90d8d15b839d0a15858e0ccb6932d5d22eb88b6805d9ebdeabaea7349a1d3947
MD5 dcc298534e8635e7bf84cc3f746255f5
BLAKE2b-256 5ef624835e74c9864700487af72938e60c3315ce6db541ca6dd83e80c9d2d5fb

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