Contribution¶
Merci de votre intérêt pour la contribution à Tenxyte !
Sommaire¶
- Configuration du développement
- Exécution des tests
- Structure des tests
- Style de code
- Effectuer des changements
- Directives pour les Pull Requests
- Documentation
- Signaler des problèmes
- Versions supportées
- Code de conduite
- Des questions ?
Configuration du développement¶
1. Fork et Clone¶
2. Créer un environnement virtuel¶
3. Installer les dépendances¶
Cela installe le package en mode éditable avec tous les outils de développement : - pytest + pytest-django + pytest-asyncio — framework de test - pytest-cov — rapports de couverture - black — formateur de code - ruff — linter - mypy — vérification de type
4. Exécuter les tests¶
Exécution des tests¶
Tous les tests¶
Tests spécifiques¶
# Par répertoire
pytest tests/unit/
# Par fichier
pytest tests/unit/test_jwt.py
# Par classe
pytest tests/unit/test_validators.py::TestPasswordValidator
# Par nom
pytest tests/unit/test_jwt.py::TestJWTService::test_generate_access_token
# Par mot-clé
pytest tests/ -k "password"
Avec couverture¶
Le rapport HTML est généré dans htmlcov/index.html. Le projet impose un seuil de couverture de 90 % (configuré dans pyproject.toml).
Cibler un module spécifique¶
Options avancées¶
pytest -v # Sortie verbeuse
pytest -s # Afficher la sortie de print()
pytest --pdb # Débogage en cas d'échec
pytest --durations=10 # Afficher les 10 tests les plus lents
pytest --lf # Réexécuter uniquement les derniers échecs
Structure des tests¶
tests/
├── unit/ # Services Core, Validateurs — rapides et isolés
├── integration/
│ ├── django/ # Adaptateur Django : Modèles, Signaux, Vues, contraintes DB
│ └── fastapi/ # Adaptateur FastAPI : Modèles, Repositories, Routeurs
├── security/ # Attaques temporelles, détection de brèches, limitation de débit
├── multidb/ # Compatibilité des backends multi-bases de données
├── conftest.py # Fixtures partagées
├── settings.py # Paramètres de test Django
└── test_dashboard.py # Tests de la vue Dashboard
Tests multi-bases de données¶
pytest tests/multidb/ -o "DJANGO_SETTINGS_MODULE=tests.multidb.settings_sqlite"
pytest tests/multidb/ -o "DJANGO_SETTINGS_MODULE=tests.multidb.settings_pgsql"
pytest tests/multidb/ -o "DJANGO_SETTINGS_MODULE=tests.multidb.settings_mongodb"
Style de code¶
Nous utilisons black pour le formatage et ruff pour le peluchage (linting), tous deux configurés avec une longueur de ligne maximale de 120 caractères.
Formater le code¶
Vérifier le formatage (mode CI)¶
Peluchage (Lint)¶
Vérification de type¶
Configuration¶
Voir pyproject.toml pour la configuration de black et ruff :
[tool.black]
line-length = 120
target-version = ["py310", "py311", "py312"]
[tool.ruff]
line-length = 120
target-version = "py310"
Effectuer des changements¶
1. Créer une branche¶
2. Effectuer vos changements¶
- Écrivez un code clair et documenté
- Suivez les modèles et conventions existants
- Ajoutez des tests pour les nouvelles fonctionnalités
- Mettez à jour la documentation si nécessaire
3. Exécuter les tests et le peluchage¶
4. Commiter vos changements¶
Écrivez des messages de commit clairs :
5. Pousser et créer une Pull Request¶
Ensuite, ouvrez une pull request sur GitHub ciblant la branche main ou develop.
Directives pour les Pull Requests¶
Vérifications CI¶
Les pull requests sont automatiquement testées par GitHub Actions sur une matrice de : - Python : 3.10, 3.11, 3.12, 3.13 - Django : 4.2, 5.0, 5.1, 5.2, 6.0 - FastAPI : dernière version stable
La couverture est rapportée via Codecov sur Python 3.12 / Django 6.0.
Ce que nous recherchons¶
- [ ] Les tests passent sur toutes les versions Python/Django supportées
- [ ] Le code est formaté avec black (
black --checkpasse) - [ ] Aucune erreur de peluchage (
ruff checkpasse) - [ ] Les nouvelles fonctionnalités incluent des tests
- [ ] La couverture reste supérieure à 90 %
- [ ] La documentation est mise à jour si nécessaire
- [ ] Les messages de commit sont clairs et descriptifs
Ce qu'il faut inclure¶
- Description claire du changement
- Lien vers l'issue liée (le cas échéant)
- Captures d'écran pour les changements d'interface utilisateur
- Notes de migration pour les changements majeurs (breaking changes)
Documentation¶
La documentation est organisée dans le répertoire docs/ :
| Fichier | Contenu |
|---|---|
quickstart.md |
Guide de démarrage rapide |
settings.md |
Toutes les options de configuration |
endpoints.md |
Référence des points de terminaison de l'API REST |
rbac.md |
Contrôle d'accès basé sur les rôles |
airs.md |
Responsabilité et Sécurité de l'IA |
organizations.md |
Organisations multi-locataires |
security.md |
Architecture de sécurité |
schemas.md |
Schémas de base de données |
architecture.md |
Architecture Core & Adapters |
custom_adapters.md |
Création d'adaptateurs personnalisés |
TESTING.md |
Guide de test |
MIGRATION_GUIDE.md |
Migration depuis d'autres packages |
troubleshooting.md |
Problèmes courants et solutions |
Lors de l'ajout ou de la modification d'une fonctionnalité, mettez à jour le ou les fichiers de documentation correspondants.
[!IMPORTANT]
Cohérence des schémas (tous les modèles)¶
Tenxyte est agnostique au framework. Chaque objet de réponse (
User,Organization,Role,TokenPair,AuditLog, etc.) doit être identique sur tous les adaptateurs (Django, FastAPI, personnalisé). C'est une valeur fondamentale du projet.Règles : - Les schémas canoniques sont définis dans
schemas.mdet danstenxyte.core.schemas(source). Toute modification de modèle doit commencer par ces fichiers de référence. - Pas de champs alias. N'ajoutez pas de champs qui dupliquent des champs existants (ex :is_verifiedcomme alias deis_email_verified, oudate_joinedcomme alias decreated_at). Chaque information ne doit apparaître qu'une seule fois. - Pas d'état dans les sous-objets de préférences. Les objets commepreferencescontiennent uniquement des préférences utilisateur. L'état des fonctionnalités (ex :is_2fa_enabled) appartient à des champs dédiés de premier niveau. - Lors de la modification d'un modèle, mettez à jour toutes les occurrences :tenxyte.core.schemas.py, les sérialiseurs adaptateurs (auth_serializers.py, etc.),schemas.md(EN + FR), et chaque exemple JSON concerné dansendpoints.md(EN + FR). - Obligation de test : après toute modification de modèle, tous les tests impliquant le modèle modifié doivent être repris et doivent passer sans erreur. Aucune PR modifiant un schéma ne sera acceptée si des tests échouent.
Signaler des problèmes¶
Rapports de bugs¶
Incluez :
- Version de Tenxyte (pip show tenxyte)
- Version de Python
- Version de Django
- Version de Django REST Framework
- Étapes pour reproduire
- Comportement attendu vs comportement réel
- Trace complète (si applicable)
Demandes de fonctionnalités¶
- Décrivez le cas d'utilisation
- Expliquez pourquoi cela ne peut pas être fait avec les fonctionnalités actuelles
- Proposez une solution si vous en avez une
Versions supportées¶
| Composant | Versions |
|---|---|
| Python | 3.10, 3.11, 3.12, 3.13 |
| Django | 4.2, 5.0, 5.1, 5.2, 6.0 |
| DRF | ≥ 3.16 |
| FastAPI | Dernière version stable |
Code de conduite¶
- Soyez respectueux et inclusif
- Concentrez-vous sur des commentaires constructifs
- Aidez les autres à apprendre et à grandir
Des questions ?¶
Ouvrez une Issue GitHub pour les rapports de bugs et les demandes de fonctionnalités, ou lancez une Discussion GitHub pour les questions générales.