Librairie générique pour les proxies DevTools permettant l'enregistrement et la relecture d'événements PubSub.
pip install -e /path/to/Python.PubSub.DevTools.Consumers
- Player Proxy: Reçoit et rejoue les événements depuis DevTools
- Recorder Proxy: Enregistre les événements vers DevTools
- Port Utils: Utilitaires pour trouver des ports libres automatiquement
- Configuration injectable: Tous les paramètres (URLs, ports, endpoints) sont configurables
from python_pubsub_devtools_consumers import DevToolsPlayerProxy def my_publish_callback(event_name: str, payload: dict, producer: str): """Callback appelée lors de la réception d'événements.""" print(f"Received event {event_name} from {producer}: {payload}") # Configuration basique (port automatique) player = DevToolsPlayerProxy( publish_callback=my_publish_callback, consumer_name="my-consumer", devtools_url="http://localhost:5556" ) # Démarrer le serveur et s'enregistrer if player.start(): print(f"Player running on {player.player_url}") # Le serveur tourne en background... # Désenregistrer quand terminé player.unregister()
player = DevToolsPlayerProxy( publish_callback=my_publish_callback, consumer_name="my-consumer", devtools_url="http://devtools.example.com:8080", player_port=9000, # Port fixe au lieu d'auto player_host="192.168.1.10", # Hôte personnalisé player_endpoint="/custom/replay", # Endpoint personnalisé register_endpoint="/custom/player/register", unregister_endpoint="/custom/player/unregister", port_range=(20000, 30000), # Plage de ports personnalisée auto_find_port=False # Désactiver la recherche auto de port )
from python_pubsub_devtools_consumers import DevToolsRecorderProxy # Configuration basique recorder = DevToolsRecorderProxy( devtools_url="http://localhost:5556" ) # Démarrer une session d'enregistrement recorder.start_session("test-session") # Enregistrer des événements recorder.record_event("user.created", {"id": 123, "name": "John"}, "my-service") recorder.record_event("user.updated", {"id": 123, "email": "john@example.com"}, "my-service") # Arrêter et sauvegarder recorder.stop_session()
recorder = DevToolsRecorderProxy( devtools_url="http://devtools.example.com:8080", start_endpoint="/custom/record/start", event_endpoint="/custom/record/event", stop_endpoint="/custom/record/stop", timeout=10 # Timeout personnalisé )
from python_pubsub_devtools_consumers import find_free_port from python_pubsub_devtools_consumers.port_utils import is_port_available # Trouver un port libre port = find_free_port(start_port=8000, end_port=9000) print(f"Port libre trouvé: {port}") # Vérifier si un port est disponible if is_port_available(8080): print("Port 8080 disponible")
python_pubsub_devtools_consumers/
├── __init__.py # API publique
├── player_proxy.py # Proxy pour rejouer les événements
├── recorder_proxy.py # Proxy pour enregistrer les événements
└── port_utils.py # Utilitaires de gestion des ports
- Réutilisabilité: Utilisez les proxies DevTools dans n'importe quel projet
- Configuration flexible: Tous les paramètres sont injectables
- Auto-configuration: Recherche automatique de ports libres
- Endpoints personnalisables: Adaptez-vous à différentes implémentations DevTools
- Logging intégré: Utilise le système de logging Python standard
- Type hints: Support complet des annotations de type
from python_pubsub_devtools_consumers import DevToolsPlayerProxy, DevToolsRecorderProxy class MyPubSubClient: def __init__(self): self.recorder = DevToolsRecorderProxy() self.player = DevToolsPlayerProxy( publish_callback=self._handle_replayed_event, consumer_name="my-client" ) def _handle_replayed_event(self, event_name, payload, producer): # Publier l'événement rejoué self.publish(event_name, payload) def publish(self, event_name, payload): # Logique de publication... # Enregistrer dans DevTools if self.recorder.is_recording: self.recorder.record_event(event_name, payload, "my-client")
- Flask >= 2.0.0
- requests >= 2.25.0
- Python >= 3.8
MIT