from typing import Dict, List from django_components import Component, register, types DESCRIPTION = "Track component errors or success rates to send them to Sentry or other services." # A mock analytics service analytics_events: List[Dict] = [] error_rate = { "error": 0, "success": 0, } @register("api_widget") class ApiWidget(Component): class Kwargs: simulate_error: bool = False def get_template_data(self, args, kwargs: Kwargs, slots, context): if kwargs.simulate_error: raise ConnectionError("API call failed") return {"data": "Mock API response data"} template: types.django_html = """

API Widget

Data: {{ data }}

""" @register("sentry_error_tracker") class SentryErrorTracker(Component): def on_render_after(self, context, template, result, error): if error: event = { "type": "error", "component": self.registered_name, "error": error, } analytics_events.append(event) print(f"SENTRY: Captured error in component {self.registered_name}: {error}") template: types.django_html = """ {% load component_tags %} {% slot "default" / %} """ @register("success_rate_tracker") class SuccessRateTracker(Component): def on_render_after(self, context, template, result, error): # Track error if error: error_rate["error"] += 1 # Track success else: error_rate["success"] += 1 template: types.django_html = """ {% load component_tags %} {% slot "default" / %} """