Skip to main content

Package Python professionnel pour les données administratives du Burundi avec architecture hexagonale moderne

Project description

🇧🇮 TBurundiGeo - Données Administratives du Burundi

Python Version License PyPI Version PyPI Downloads Build Status Code Coverage Documentation Code Quality Open Source Contributors


TBurundiGeo est un package Python robuste et complet pour exploiter les données administratives du Burundi (provinces, communes, zones, quartiers) avec leurs capitales et chefs-lieux respectifs.

🏗️ Architecture : Hexagonale (Clean Architecture)
👨‍💻 Développeur : NIYOMWUNGERE Trésor (travail solo)
🏢 Organisation : TELONA
📜 Conformité : Loi organique n°1/C5 du 16 mars 2023
📊 Données : 3044 quartiers, 451 zones, 42 communes, 5 provinces


🌟 Nouveautés - Capitales et Chefs-lieux !

Capitales des provinces : Accédez aux capitales de chaque province
Chefs-lieux des zones : Obtenez les chefs-lieux de chaque zone
CLI enrichie : Options --with-capitals et --with-chief-towns
API étendue : Fonctions get_province_capital() et get_zone_chief_town()
Statistiques détaillées : Analyse par entité administrative
Validation intégrée : Vérification de l'intégrité des données

🚀 Installation

Avec pip (recommandé)

pip install tburundigeo

Avec uv (plus rapide)

uv add tburundigeo

Installation avec fonctionnalités optionnelles

# Support pandas
pip install tburundigeo[pandas]

# Support YAML
pip install tburundigeo[yaml]

# CLI avec click
pip install tburundigeo[click]

# Toutes les fonctionnalités
pip install tburundigeo[all]

📋 Caractéristiques

  • 🏛️ Capitales & Chefs-lieux : Accès aux capitales des provinces et chefs-lieux des zones
  • 🏗️ Architecture Hexagonale : Séparation claire entre domaine, application et infrastructure
  • 🔧 Principes SOLID : Code maintenable, testable et extensible
  • 🎯 API Intuitive : Interface simple et homogène pour toutes les opérations
  • 📝 Typage Strict : 100% typé avec mypy
  • ⚡ Zero Dependencies : Aucune dépendance obligatoire à l'exécution
  • 🧪 Tests Complets : Couverture > 90% avec pytest
  • 💻 CLI Puissante : Interface en ligne de commande complète
  • 📊 Export Multi-formats : JSON, CSV, YAML
  • ✅ Validation Intégrale : Vérification de l'intégrité référentielle
  • 📚 Documentation Complète : Documentation automatique avec Read the Docs

⚖️ Fiabilité des Données - Conformité Légale

📜 Base Légale

Les données administratives fournies dans TBurundiGeo sont 100% conformes à la loi organique n°1/C5 du 16 mars 2023 portant détermination et délimitation des provinces, des communes, des zones, des collines et/ou quartiers de la République du Burundi.

Validations Officielles

  • Promulguée par le Président de la République du Burundi
  • Adoptée par l'Assemblée Nationale et le Sénat après délibération du Conseil des Ministres
  • Validée par la Cour Constitutionnelle (Arrêt RCCR 419 du 1er février 2023)
  • En vigueur depuis le 6 mars 2023 (date de promulgation)

🎯 Fiabilité Garantie

  • ✅ Découpage administratif officiel en vigueur
  • ✅ Codes normalisés (BI-PR-01, BI-CO-01-01, BI-ZO-01-01-01,BI-QT-01-01-01-01) cohérents avec la hiérarchie
  • ✅ Références géoadministratives utilisables en toute confiance
  • ✅ Intégrité référentielle vérifiée et validée
  • ✅ Source officielle gouvernementale burundaise

🏛️ Niveaux Administratifs Couverts

Niveau Code Entité Nombre Champs disponibles
Provinces BI-PR-XX Province 5 code, name, capital
Communes BI-CO-XX-XX Commune 42 code, name, capital, province_code
Zones BI-ZO-XX-XX-XX Zone 451 code, name, chief_town, commune_code
Quartiers BI-QT-XX-XX-XX-XX Quartier 3044 code, name, zone_code

🔒 Certification

TBurundiGeo est le package Python de référence pour les données administratives du Burundi, avec une conformité légale garantie et une fiabilité professionnelle pour toutes vos applications géoadministratives.

📊 Données Disponibles

Type Quantité Champs principaux Nouveaux champs
Provinces 5 code, name capital
Communes 42 code, name, province_code capital
Zones 451 code, name, commune_code chief_town
Quartiers 3044 code, name, zone_code -

🏗️ Architecture

Le package suit une architecture hexagonale (ports & adapters) :

src/tburundigeo/
├── domain/               # Cœur métier pur – entités, interfaces des repositories (ports)
├── application/          # Cas d'utilisation – services orchestrant la logique
├── infrastructure/       # Adaptateurs – implémentations concrètes des repositories
├── api/                 # API publique simplifiée (facade)
├── data/                # Données administratives du Burundi
└── cli/                 # Interface en ligne de commande

🎯 Utilisation Rapide

Importation

from tburundigeo import (
    get_all_provinces, 
    get_all_communes, 
    get_all_zones,
    get_province_capital,
    get_commune_capital,
    get_zone_chief_town
)

🏛️ Capitales et Chefs-lieux - NOUVEAU !

# Lister toutes les provinces avec leurs capitales
provinces = get_all_provinces()
for province in provinces:
    print(f"{province.name} - Capitale: {province.capital}")

# Obtenir la capitale d'une province spécifique
capital = get_province_capital("BI-PR-01")  # Bujumbura Mairie
print(f"Capitale: {capital}")  # "Bujumbura"

# Obtenir le chef-lieu d'une zone
chief_town = get_zone_chief_town("BI-ZO-01-01-01")
print(f"Chef-lieu: {chief_town}")

💻 CLI avec Capitales et Chefs-lieux

# Lister les provinces avec capitales
tburundigeo provinces list --with-capitals

# Lister les communes avec capitales  
tburundigeo communes list --with-capitals

# Lister les zones avec chefs-lieux
tburundigeo zones list --with-chief-towns

# Exporter en JSON avec capitales
tburundigeo provinces list --format json --with-capitals

Exemples de base

# Lister toutes les provinces
provinces = get_all_provinces()
for province in provinces:
    print(f"{province.code}: {province.name}")

# Obtenir les communes d'une province
communes = get_communes_by_province("BI-PR-01")
print(f"Communes dans Bujumbura Mairie: {len(communes)}")

# Obtenir des statistiques
stats = get_statistics()
print(f"Total: {stats['summary']}")

# Exporter en JSON
json_data = export_to_json(include_hierarchy=True)
with open("tburundigeo.json", "w", encoding="utf-8") as f:
    f.write(json_data)

Recherche avancée

from tburundigeo import search_provinces, search_communes

# Rechercher des provinces
results = search_provinces("bujumbura")
print(f"Provinces trouvées: {len(results)}")

# Rechercher des communes par capitale
results = search_communes("mukaza", search_by="capital")
print(f"Communes avec capitale 'mukaza': {len(results)}")

Navigation hiérarchique

from tburundigeo import (
    get_full_hierarchy,
    get_communes_by_province,
    get_zones_by_commune,
    get_quartiers_by_zone,
)

# Obtenir la hiérarchie complète
hierarchy = get_full_hierarchy()

# Navigation descendante
province = get_all_provinces()[0]
communes = get_communes_by_province(province.code)
if communes:
    zones = get_zones_by_commune(communes[0].code)
    if zones:
        quartiers = get_quartiers_by_zone(zones[0].code)

# Navigation ascendante
parent_province = get_parent_province("BI-CO-01-01")

🖥️ Interface en Ligne de Commande

Le package installe automatiquement la commande tburundigeo :

# Lister les provinces
tburundigeo provinces list

# Lister les communes d'une province
tburundigeo communes list --province BI-PR-01

# Rechercher
tburundigeo search --query "Bujumbura" --level provinces

# Statistiques
tburundigeo stats --detailed

# Exporter
tburundigeo export --format json --output burundi.json

# Hiérarchie
tburundigeo hierarchy --province BI-PR-01

# Validation
tburundigeo validate --detailed

Commandes disponibles

Provinces

tburundigeo provinces list [--format table|json]
tburundigeo provinces search <query> [--by name|code]

Communes

tburundigeo communes list [--province CODE] [--format table|json]
tburundigeo communes search <query> [--by name|capital|code]

Zones

tburundigeo zones list [--commune CODE] [--format table|json]
tburundigeo zones search <query> [--by name|code]

Quartiers

tburundigeo quartiers list [--zone CODE] [--format table|json]
tburundigeo quartiers search <query> [--by name|code]

Utilitaires

tburundigeo search <query> [--level all|provinces|communes|zones|quartiers]
tburundigeo stats [--detailed]
tburundigeo export --format json|csv|yaml [--output FILE] [--entity TYPE] [--hierarchy]
tburundigeo hierarchy [--province CODE] [--format tree|json]
tburundigeo parent <CODE> [--level province|commune|zone]
tburundigeo validate [--detailed]

📊 API Complète

Provinces

# Liste et recherche
get_all_provinces() -> List[Province]
get_province(code: str) -> Optional[Province]
search_provinces(query: str, search_by: str = "name") -> List[Province]
count_provinces() -> int

Communes

# Liste et recherche
get_all_communes() -> List[Commune]
get_commune(code: str) -> Optional[Commune]
get_communes_by_province(province_code: str) -> List[Commune]
search_communes(query: str, search_by: str = "name") -> List[Commune]
count_communes() -> int
count_communes_in_province(province_code: str) -> int

Zones

# Liste et recherche
get_all_zones() -> List[Zone]
get_zone(code: str) -> Optional[Zone]
get_zones_by_commune(commune_code: str) -> List[Zone]
search_zones(query: str, search_by: str = "name") -> List[Zone]
count_zones() -> int
count_zones_in_commune(commune_code: str) -> int

Quartiers

# Liste et recherche
get_all_quartiers() -> List[Quartier]
get_quartier(code: str) -> Optional[Quartier]
get_quartiers_by_zone(zone_code: str) -> List[Quartier]
search_quartiers(query: str, search_by: str = "name") -> List[Quartier]
count_quartiers() -> int
count_quartiers_in_zone(zone_code: str) -> int

Hiérarchie

# Navigation hiérarchique
get_full_hierarchy() -> Dict
get_parent_province(commune_code: str) -> Optional[Province]
get_parent_commune(zone_code: str) -> Optional[Commune]
get_parent_zone(quartier_code: str) -> Optional[Zone]

Statistiques

# Statistiques et analyses
get_statistics() -> Dict  # Complet avec moyennes et distribution
get_summary() -> Dict      # Résumé simple

Export

# Export dans différents formats
export_to_json(include_hierarchy: bool = False, entity_types: Optional[List[str]] = None) -> str
export_to_csv(entity_type: str, include_headers: bool = True) -> str
export_to_yaml(include_hierarchy: bool = False, entity_types: Optional[List[str]] = None) -> str

Validation

# Validation et intégrité
validate_code(code: str, expected_level: Optional[str] = None) -> bool
check_referential_integrity() -> Dict[str, List[str]]

Configuration

# Changer la source de données
set_data_source(data_source: str) -> None

🔧 Configuration

Source de données personnalisée

Par défaut, le package utilise les données incluses. Vous pouvez spécifier une source personnalisée :

from tburundigeo import set_data_source

# Utiliser vos propres fichiers Python
set_data_source("my_project.data")

# Ou via variable d'environnement
import os
os.environ["TBURUNDIGEO_DATA_SOURCE"] = "my_project.data"

Format des données

Les données doivent suivre ce format :

# my_project/data/provinces.py
data = [
    {"code": "BI-PR-01", "name": "BUHU MUZA", "capital": "Cankuzo"},
    {"code": "BI-PR-02", "name": "BUJUMBURA", "capital": "Bujumbura"},
    {"code": "BI-PR-03", "name": "BURUNGA", "capital": "Mwaro"},
    {"code": "BI-PR-04", "name": "BUTANYERERA", "capital": "Ngozi"},
    {"code": "BI-PR-05", "name": "GITEGA", "capital": "Gitega"},
]

# my_project/data/communes.py
data = [
    {"code": "BI-CO-01-01", "name": "Butaganzwa", "capital": "Butaganzwa", "province_code": "BI-PR-01"},
    {"code": "BI-CO-02-01", "name": "Muha", "capital": "Muha", "province_code": "BI-PR-02"},
    # ...
]

🧪 Tests

# Installer les dépendances de test
pip install tburundigeo[dev]

# Exécuter tous les tests
pytest

# Avec couverture
pytest --cov=tburundigeo --cov-report=html

# Tests spécifiques
pytest tests/domain/
pytest tests/application/
pytest tests/infrastructure/
pytest tests/api/

📈 Performance

  • Indexation O(1) : Recherche par code instantanée
  • Chargement unique : Données chargées et indexées une seule fois
  • Cache intégré : Repositories utilisent du cache mémoire
  • Lazy loading : Services créés à la demande

🤝 Contribuer

Nous apprécions les contributions ! Voici comment participer :

  1. Fork le repository
  2. Créer une branche (git checkout -b feature/amazing-feature)
  3. Committer vos changements (git commit -m 'Add amazing feature')
  4. Push vers la branche (git push origin feature/amazing-feature)
  5. Ouvrir une Pull Request

Développement local

# Cloner le repository
git clone https://github.com/tresor2004/tburundigeo.git
cd tburundigeo

# Installer en mode développement avec uv
uv sync --dev

# Ou avec pip
pip install -e .[dev]

# Exécuter les tests
pytest

# Formatter le code
black src/ tests/
isort src/ tests/

# Vérifier les types
mypy src/

Normes de code

  • Black pour le formatage
  • isort pour les imports
  • mypy pour la vérification des types
  • pytest pour les tests
  • Couverture > 90% requise

📄 License

Ce projet est sous license MIT. Voir le fichier LICENSE pour plus de détails.

🙏 Remerciements

Projet développé en travail solo par NIYOMWUNGERE Tresor sous l'entité TELONA.

  • Développeur principal: NIYOMWUNGERE Tresor
  • Email: tresor.getintouch@outlook.com
  • WhatsApp: +25767594226
  • GitHub: https://github.com/tresor2004
  • Nationalité: Burundaise

Merci à la communauté burundaise pour la validation des données administratives et aux contributeurs open source pour les outils utilisés.

📞 Support & Contact

🗺️ Roadmap

  • API REST : Serveur web pour accès via HTTP
  • Base de données : Support PostgreSQL/MySQL
  • Interface web : Dashboard administratif
  • Géolocalisation : Coordonnées GPS et cartes
  • Historique : Suivi des changements administratifs
  • Multilingue : Support français/kirundi/anglais
  • Performance : Optimisations et cache distribué

TBurundiGeo avec TELONA - La référence pour les données administratives du Burundi 🇧🇮

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

tburundigeo-1.0.2.tar.gz (89.2 kB view details)

Uploaded Source

Built Distribution

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

tburundigeo-1.0.2-py3-none-any.whl (75.8 kB view details)

Uploaded Python 3

File details

Details for the file tburundigeo-1.0.2.tar.gz.

File metadata

  • Download URL: tburundigeo-1.0.2.tar.gz
  • Upload date:
  • Size: 89.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.12.1.2 readme-renderer/44.0 requests/2.32.5 requests-toolbelt/1.0.0 urllib3/2.6.0 tqdm/4.67.1 importlib-metadata/8.7.1 keyring/25.7.0 rfc3986/2.0.0 colorama/0.4.6 CPython/3.12.10

File hashes

Hashes for tburundigeo-1.0.2.tar.gz
Algorithm Hash digest
SHA256 657c9aa215d2ab610ad1e58e0fbd8b2a7cb56a4b35b5b0870538db9e144a62d9
MD5 095237d1be8b7aa31b6c4aa68e8c93c6
BLAKE2b-256 7522075e686bd1f7c0f750390ddd76dbc04b24548ab2c0979535a4ddc44479ac

See more details on using hashes here.

File details

Details for the file tburundigeo-1.0.2-py3-none-any.whl.

File metadata

  • Download URL: tburundigeo-1.0.2-py3-none-any.whl
  • Upload date:
  • Size: 75.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.12.1.2 readme-renderer/44.0 requests/2.32.5 requests-toolbelt/1.0.0 urllib3/2.6.0 tqdm/4.67.1 importlib-metadata/8.7.1 keyring/25.7.0 rfc3986/2.0.0 colorama/0.4.6 CPython/3.12.10

File hashes

Hashes for tburundigeo-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8e888af3ebc9570d03b7716901d439185e07b558af230d3e7cb6d506acdad97c
MD5 f49aa613dcff8269719cf212800eed1f
BLAKE2b-256 8282235e479e2fd2a9ba9e09df60018e4f99d76450d28876d506512bbfc03962

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