mermaid-trace 0.4.0__py3-none-any.whl → 0.5.3.post0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,25 +1,43 @@
1
+ """
2
+ FastAPI Integration Module for MermaidTrace.
3
+
4
+ This module provides the middleware necessary to integrate MermaidTrace with
5
+ FastAPI applications. It serves as the bridge between HTTP requests and the
6
+ sequence diagram generation logic.
7
+
8
+ Key functionalities include:
9
+ - Middleware for intercepting all incoming HTTP requests.
10
+ - Automatic extraction of tracing headers (X-Source, X-Trace-ID).
11
+ - Initialization of logging context for request lifecycles.
12
+ - Automatic logging of request start and response completion (success or error).
13
+ """
14
+
1
15
  from typing import Any, TYPE_CHECKING
2
16
  import time
3
17
  import uuid
18
+ import traceback
4
19
 
5
20
  from ..core.events import FlowEvent
6
21
  from ..core.context import LogContext
7
22
  from ..core.decorators import get_flow_logger
8
23
 
24
+ # Conditional imports to support optional FastAPI dependency
9
25
  if TYPE_CHECKING:
26
+ # For static type checkers (mypy, pyright), import the actual types.
10
27
  from fastapi import Request, Response
11
28
  from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint
12
29
  else:
13
30
  try:
31
+ # Runtime import attempt for FastAPI and Starlette.
14
32
  from fastapi import Request, Response
15
33
  from starlette.middleware.base import (
16
34
  BaseHTTPMiddleware,
17
35
  RequestResponseEndpoint,
18
36
  )
19
37
  except ImportError:
20
- # Handle the case where FastAPI/Starlette are not installed.
21
- # We define dummy types to prevent NameErrors at import time,
22
- # but instantiation will fail explicitly in __init__.
38
+ # Fallback for when FastAPI is not installed in the environment.
39
+ # This prevents ImportErrors when importing this module without FastAPI.
40
+ # However, instantiating the middleware will still fail.
23
41
  BaseHTTPMiddleware = object # type: ignore[misc,assignment]
24
42
  Request = Any # type: ignore[assignment]
25
43
  Response = Any # type: ignore[assignment]
@@ -30,11 +48,22 @@ class MermaidTraceMiddleware(BaseHTTPMiddleware):
30
48
  """
31
49
  FastAPI Middleware to trace HTTP requests as interactions in the sequence diagram.
32
50
 
33
- This middleware acts as the entry point for tracing a web request. It:
34
- 1. Identifies the client (Source).
35
- 2. Logs the incoming request.
36
- 3. Initializes the `LogContext` for the request lifecycle.
37
- 4. Logs the response or error.
51
+ This middleware wraps the entire request processing pipeline. It is responsible for
52
+ recording the initial interaction between an external client (Source) and this
53
+ service (Target).
54
+
55
+ Middleware Logic:
56
+ 1. **Request Interception**: Captures the request before it reaches any route handler.
57
+ 2. **Context Initialization**: Sets up the `LogContext` with the current service name
58
+ and trace ID, ensuring all internal function calls are correctly associated.
59
+ 3. **Event Logging**: Logs the "Request" event (Client -> API) and the corresponding
60
+ "Response" event (API -> Client).
61
+ 4. **Error Handling**: Captures exceptions, logs error events (API --x Client),
62
+ and re-raises them to standard error handlers.
63
+
64
+ Attributes:
65
+ app_name (str): The name of the current service/application. This name will
66
+ appear as a participant in the generated Mermaid sequence diagram.
38
67
  """
39
68
 
40
69
  def __init__(self, app: Any, app_name: str = "FastAPI"):
@@ -42,13 +71,20 @@ class MermaidTraceMiddleware(BaseHTTPMiddleware):
42
71
  Initialize the middleware.
43
72
 
44
73
  Args:
45
- app: The FastAPI application instance.
46
- app_name: The name of this service to appear in the diagram (e.g., "UserAPI").
74
+ app (Any): The FastAPI application instance.
75
+ app_name (str): The name of this service to appear in the diagram (e.g., "UserAPI").
76
+ Defaults to "FastAPI".
77
+
78
+ Raises:
79
+ ImportError: If FastAPI or Starlette is not installed in the current environment.
47
80
  """
81
+ # Validate that the necessary dependencies are present.
48
82
  if BaseHTTPMiddleware is object: # type: ignore[comparison-overlap]
49
83
  raise ImportError(
50
84
  "FastAPI/Starlette is required to use MermaidTraceMiddleware"
51
85
  )
86
+
87
+ # Initialize the base class.
52
88
  super().__init__(app)
53
89
  self.app_name = app_name
54
90
 
@@ -56,59 +92,88 @@ class MermaidTraceMiddleware(BaseHTTPMiddleware):
56
92
  self, request: Request, call_next: RequestResponseEndpoint
57
93
  ) -> Response:
58
94
  """
59
- Intercepts the incoming request.
95
+ Dispatch method to handle the incoming request.
96
+
97
+ This is the core logic of the middleware. It wraps the `call_next` execution
98
+ with tracing logic.
99
+
100
+ Request Tracing & Header Handling:
101
+ - **X-Source**: Used to identify the caller. If present, the diagram will show
102
+ an arrow from `X-Source` to `app_name`. If missing, defaults to "Client".
103
+ - **X-Trace-ID**: Used for distributed tracing. If provided, it links this
104
+ request to an existing trace. If missing, a new UUID is generated.
60
105
 
61
106
  Args:
62
- request (Request): The incoming HTTP request.
63
- call_next (Callable): The function to call the next middleware or endpoint.
107
+ request (Request): The incoming HTTP request object.
108
+ call_next (RequestResponseEndpoint): A callable that invokes the next
109
+ middleware or the route handler.
64
110
 
65
111
  Returns:
66
- Response: The HTTP response.
112
+ Response: The HTTP response generated by the application.
67
113
  """
68
- # 1. Determine Source (Client)
69
- # Try to get a specific ID from headers (useful for distributed tracing),
70
- # otherwise fallback to "Client".
114
+ # ----------------------------------------------------------------------
115
+ # 1. Header Handling and Metadata Extraction
116
+ # ----------------------------------------------------------------------
117
+
118
+ # Determine the source participant (Who is calling us?).
119
+ # If the request comes from another service traced by MermaidTrace,
120
+ # it might include the 'X-Source' header.
71
121
  source = request.headers.get("X-Source", "Client")
72
122
 
73
- # Determine Trace ID
74
- # Check X-Trace-ID header or generate new UUID
123
+ # Determine the unique Trace ID.
124
+ # This ID is critical for grouping all logs related to a single request flow.
75
125
  trace_id = request.headers.get("X-Trace-ID") or str(uuid.uuid4())
76
126
 
77
- # 2. Determine Action
78
- # Format: "METHOD /path" (e.g., "GET /users")
127
+ # Define the action name for the diagram arrow.
128
+ # Format: "METHOD /path" (e.g., "GET /api/v1/users")
79
129
  action = f"{request.method} {request.url.path}"
80
130
 
131
+ # Get the configured logger for flow events.
81
132
  logger = get_flow_logger()
82
133
 
83
- # 3. Log Request (Source -> App)
134
+ # ----------------------------------------------------------------------
135
+ # 2. Log Request Start (Source -> App)
136
+ # ----------------------------------------------------------------------
137
+
138
+ # Create the 'Request' event representing the call coming into this service.
84
139
  req_event = FlowEvent(
85
140
  source=source,
86
141
  target=self.app_name,
87
142
  action=action,
88
143
  message=action,
144
+ # Include query parameters in the note if they exist.
89
145
  params=f"query={request.query_params}" if request.query_params else None,
90
146
  trace_id=trace_id,
91
147
  )
148
+
149
+ # Log the event. This writes the JSON entry that the visualizer will parse.
92
150
  logger.info(
93
151
  f"{source}->{self.app_name}: {action}", extra={"flow_event": req_event}
94
152
  )
95
153
 
96
- # 4. Set Context and Process Request
97
- # We set the current participant to the app name.
98
- # `ascope` ensures this context applies to all code running within `call_next`.
99
- # This includes route handlers, dependencies, and other middlewares called after this one.
154
+ # ----------------------------------------------------------------------
155
+ # 3. Context Setup and Request Processing
156
+ # ----------------------------------------------------------------------
157
+
158
+ # Initialize the LogContext for this async task.
159
+ # Any 'traced' function called within this block will inherit 'trace_id'
160
+ # and see 'participant' as self.app_name.
100
161
  async with LogContext.ascope(
101
162
  {"participant": self.app_name, "trace_id": trace_id}
102
163
  ):
103
164
  start_time = time.time()
104
165
  try:
105
- # Pass control to the application
106
- # This executes the actual route logic
166
+ # Process the request by calling the next item in the middleware chain.
107
167
  response = await call_next(request)
108
168
 
109
- # 5. Log Response (App -> Source)
110
- # Calculate execution duration for the response label
169
+ # ------------------------------------------------------------------
170
+ # 4. Log Success Response (App -> Source)
171
+ # ------------------------------------------------------------------
172
+
173
+ # Calculate execution time for performance insights.
111
174
  duration = (time.time() - start_time) * 1000
175
+
176
+ # Create the 'Return' event (dashed line back to caller).
112
177
  resp_event = FlowEvent(
113
178
  source=self.app_name,
114
179
  target=source,
@@ -125,10 +190,17 @@ class MermaidTraceMiddleware(BaseHTTPMiddleware):
125
190
  return response
126
191
 
127
192
  except Exception as e:
128
- # 6. Log Error (App --x Source)
129
- # This captures unhandled exceptions that bubble up to the middleware
130
- # Note: FastAPI's ExceptionHandlers might catch this before it reaches here.
131
- # If so, you might see a successful return with 500 status instead.
193
+ # ------------------------------------------------------------------
194
+ # 5. Log Error Response (App --x Source)
195
+ # ------------------------------------------------------------------
196
+
197
+ # Capture full stack trace for the error.
198
+ stack_trace = "".join(
199
+ traceback.format_exception(type(e), e, e.__traceback__)
200
+ )
201
+
202
+ # If an unhandled exception occurs, log it as an error event.
203
+ # This will render as a cross (X) on the sequence diagram return arrow.
132
204
  err_event = FlowEvent(
133
205
  source=self.app_name,
134
206
  target=source,
@@ -137,9 +209,13 @@ class MermaidTraceMiddleware(BaseHTTPMiddleware):
137
209
  is_return=True,
138
210
  is_error=True,
139
211
  error_message=str(e),
212
+ stack_trace=stack_trace,
140
213
  trace_id=trace_id,
141
214
  )
142
215
  logger.error(
143
216
  f"{self.app_name}-x{source}: Error", extra={"flow_event": err_event}
144
217
  )
218
+
219
+ # Re-raise the exception so FastAPI's exception handlers can take over.
220
+ # We strictly monitor the flow here, not swallow errors.
145
221
  raise
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mermaid-trace
3
- Version: 0.4.0
3
+ Version: 0.5.3.post0
4
4
  Summary: Visualize your Python code execution flow as Mermaid Sequence Diagrams.
5
5
  Project-URL: Documentation, https://github.com/xt765/mermaid-trace#readme
6
6
  Project-URL: Changelog, https://github.com/xt765/mermaid-trace/blob/main/docs/en/CHANGELOG.md
@@ -39,7 +39,6 @@ Classifier: Programming Language :: Python :: 3.10
39
39
  Classifier: Programming Language :: Python :: 3.11
40
40
  Classifier: Programming Language :: Python :: 3.12
41
41
  Classifier: Programming Language :: Python :: 3.13
42
- Classifier: Programming Language :: Python :: 3.14
43
42
  Classifier: Programming Language :: Python :: Implementation :: CPython
44
43
  Classifier: Programming Language :: Python :: Implementation :: PyPy
45
44
  Classifier: Topic :: Software Development :: Debuggers
@@ -63,24 +62,57 @@ Description-Content-Type: text/markdown
63
62
 
64
63
  # MermaidTrace: The Python Logger That Draws Diagrams
65
64
 
66
- [![PyPI version](https://img.shields.io/pypi/v/mermaid-trace.svg?style=flat-square)](https://pypi.org/project/mermaid-trace/)
67
- [![Python Versions](https://img.shields.io/pypi/pyversions/mermaid-trace.svg?style=flat-square)](https://pypi.org/project/mermaid-trace/)
65
+ 🌐 **Language**: [English](README.md) | [中文](README_CN.md)
66
+
67
+ [![PyPI version](https://img.shields.io/pypi/v/mermaid-trace.svg?style=flat-square&color=blue)](https://pypi.org/project/mermaid-trace/)
68
+ [![Python Versions](https://img.shields.io/pypi/pyversions/mermaid-trace.svg?style=flat-square&color=blue)](https://pypi.org/project/mermaid-trace/)
68
69
  [![License](https://img.shields.io/github/license/xt765/mermaid-trace?style=flat-square)](LICENSE)
69
70
  [![CI Status](https://img.shields.io/github/actions/workflow/status/xt765/mermaid-trace/ci.yml?style=flat-square&label=CI)](https://github.com/xt765/mermaid-trace/actions/workflows/ci.yml)
70
71
  [![Codecov](https://img.shields.io/codecov/c/github/xt765/mermaid-trace?style=flat-square&logo=codecov)](https://codecov.io/gh/xt765/mermaid-trace)
71
72
 
73
+ ---
74
+
75
+ ## 📋 Overview
76
+
72
77
  **Stop reading logs. Start watching them.**
73
78
 
74
79
  MermaidTrace is a specialized logging tool that automatically generates [Mermaid JS](https://mermaid.js.org/) sequence diagrams from your code execution. It's perfect for visualizing complex business logic, microservice interactions, or asynchronous flows.
75
80
 
76
- ## ✨ Features
81
+ ---
82
+
83
+ ## 📚 Documentation
84
+
85
+ ### Core Documentation
86
+
87
+ [User Guide](docs/en/USER_GUIDE.md) · [API Reference](docs/en/API.md) · [Contributing Guidelines](docs/en/CONTRIBUTING.md) · [Changelog](docs/en/CHANGELOG.md) · [License](docs/en/LICENSE)
88
+
89
+ ### Code Comment Documents (Chinese)
90
+
91
+ | Category | Links |
92
+ | :--- | :--- |
93
+ | **Core Modules** | [Context](docs/zh/code_comments/src/mermaid_trace/core/context.md) · [Decorators](docs/zh/code_comments/src/mermaid_trace/core/decorators.md) · [Events](docs/zh/code_comments/src/mermaid_trace/core/events.md) · [Formatter](docs/zh/code_comments/src/mermaid_trace/core/formatter.md) |
94
+ | **Handlers** | [Async Handler](docs/zh/code_comments/src/mermaid_trace/handlers/async_handler.md) · [Mermaid Handler](docs/zh/code_comments/src/mermaid_trace/handlers/mermaid_handler.md) |
95
+ | **Integrations** | [FastAPI](docs/zh/code_comments/src/mermaid_trace/integrations/fastapi.md) |
96
+ | **Others** | [init](docs/zh/code_comments/src/mermaid_trace/__init__.md) · [CLI](docs/zh/code_comments/src/mermaid_trace/cli.md) |
97
+
98
+ ---
99
+
100
+ ## ✨ Key Features
77
101
 
78
102
  - **Decorator-Driven**: Just add `@trace` or `@trace_interaction` to your functions.
103
+ - **Auto-Instrumentation**: Use `@trace_class` to trace a whole class at once.
104
+ - **Third-Party Patching**: Use `patch_object` to trace calls inside external libraries.
79
105
  - **Auto-Diagramming**: Generates `.mmd` files that can be viewed in VS Code, GitHub, or Mermaid Live Editor.
80
106
  - **Async Support**: Works seamlessly with `asyncio` coroutines.
81
107
  - **Context Inference**: Automatically tracks nested calls and infers `source` participants using `contextvars`.
82
- - **FastAPI Integration**: Includes middleware for zero-config HTTP request tracing.
83
- - **CLI Tool**: Built-in viewer to preview diagrams in your browser.
108
+ - **Intelligent Collapsing**: Prevents diagram explosion by collapsing repetitive high-frequency calls and identifying recurring patterns (e.g., loops).
109
+ - **Detailed Exceptions**: Captures full stack traces for errors, displayed in interactive notes.
110
+ - **Simplified Objects**: Automatically cleans up memory addresses (e.g., `<__main__.Obj at 0x...>` -> `<Obj>`) and **groups consecutive identical items** in lists/tuples (e.g., `[<Obj> x 5]`) for cleaner diagrams.
111
+ - **Log Rotation**: Supports `RotatingMermaidFileHandler` for handling long-running systems by splitting logs based on size or time.
112
+ - **FastAPI Integration**: Includes middleware for zero-config HTTP request tracing, supporting distributed tracing via `X-Trace-ID` and `X-Source` headers.
113
+ - **CLI Tool**: Built-in viewer with live-reload to preview diagrams in your browser.
114
+
115
+ ---
84
116
 
85
117
  ## 🚀 Quick Start
86
118
 
@@ -97,7 +129,8 @@ from mermaid_trace import trace, configure_flow
97
129
  import time
98
130
 
99
131
  # 1. Configure output
100
- configure_flow("my_flow.mmd")
132
+ # Recommendation: Store diagrams in a dedicated directory (e.g., mermaid_diagrams/)
133
+ configure_flow("mermaid_diagrams/my_flow.mmd", async_mode=True)
101
134
 
102
135
  # 2. Add decorators
103
136
  @trace(source="Client", target="PaymentService", action="Process Payment")
@@ -114,6 +147,29 @@ def check_balance(amount):
114
147
  process_payment(100)
115
148
  ```
116
149
 
150
+ ### Configuration
151
+
152
+ You can configure global settings via `configure_flow` or environment variables to control performance and behavior.
153
+
154
+ ```python
155
+ configure_flow(
156
+ "flow.mmd",
157
+ overwrite=True, # Overwrite the file on each restart (default: True)
158
+ level=logging.DEBUG,
159
+ queue_size=5000, # Increase buffer for high-throughput
160
+ config_overrides={
161
+ "capture_args": False, # Disable arg capturing for max performance
162
+ "max_string_length": 100 # Increase string truncation limit
163
+ }
164
+ )
165
+ ```
166
+
167
+ **Environment Variables:**
168
+ - `MERMAID_TRACE_CAPTURE_ARGS` (true/false)
169
+ - `MERMAID_TRACE_MAX_STRING_LENGTH` (int)
170
+ - `MERMAID_TRACE_MAX_ARG_DEPTH` (int)
171
+ - `MERMAID_TRACE_QUEUE_SIZE` (int)
172
+
117
173
  ### Nested Calls (Context Inference)
118
174
 
119
175
  You don't need to specify `source` every time. MermaidTrace infers it from the current context.
@@ -151,15 +207,26 @@ Visualize your generated `.mmd` files instantly:
151
207
  mermaid-trace serve my_flow.mmd
152
208
  ```
153
209
 
154
- ## 📂 Documentation
210
+ ### Examples
155
211
 
156
- - [English Documentation](docs/en/USER_GUIDE.md)
157
- - [中文文档](README_CN.md)
212
+ Check out the [examples/](examples/) directory for a complete set of demos covering all features:
213
+ - **[Basic Usage](examples/01_basic_usage.py)**: Decorators and class methods.
214
+ - **[Advanced Instrumentation](examples/02_advanced_instrumentation.py)**: `@trace_class` and `patch_object` for third-party libraries.
215
+ - **[Async & Concurrency](examples/03_async_concurrency.py)**: Tracing `asyncio` and concurrent tasks.
216
+ - **[Error Handling](examples/04_error_handling.py)**: Stack trace capture and error rendering.
217
+ - **[Intelligent Collapsing](examples/05_intelligent_collapsing.py)**: Keeping diagrams clean in loops.
218
+ - **[FastAPI Integration](examples/06_fastapi_integration.py)**: Middleware for web apps.
219
+ - **[Full Stack App](examples/07_full_stack_app.py)**: Comprehensive example with FastAPI, SQLAlchemy, and Pydantic.
220
+ - **[Log Rotation](examples/08-log-rotation.py)**: Handling long-running processes with file rotation.
221
+
222
+ ---
158
223
 
159
224
  ## 🤝 Contributing
160
225
 
161
226
  We welcome contributions! Please see [CONTRIBUTING.md](docs/en/CONTRIBUTING.md) for details.
162
227
 
228
+ ---
229
+
163
230
  ## 📄 License
164
231
 
165
232
  MIT
@@ -0,0 +1,19 @@
1
+ mermaid_trace/__init__.py,sha256=EnAsz6R6ag4dtabdHEg1wdB2k7V1uwmwpYTTC41GQX4,6721
2
+ mermaid_trace/cli.py,sha256=g7Qriiox9YqfJutUntE1a7GwByg62wGwQcLfpvicjT8,15076
3
+ mermaid_trace/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ mermaid_trace/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ mermaid_trace/core/config.py,sha256=akTOc3m_bzcZ7e1Qtf1n5Ct9Dj8XPTTcWzATG3-qJHw,1890
6
+ mermaid_trace/core/context.py,sha256=wr-Ys3c6PsYCtbPUsQTrnaciSkP-fofxOewo4oZ27QM,8556
7
+ mermaid_trace/core/decorators.py,sha256=2h7UzjQcL46jrCIdVMWSZT_4JlTsDkpY9M9Ihr0vuq4,23037
8
+ mermaid_trace/core/events.py,sha256=2etS45A40GaP4dF_F6Jh99rhF2YVip4AjoZlLPuP6pQ,1949
9
+ mermaid_trace/core/formatter.py,sha256=3KEq236E3GAj_j53MuBM2ndWm7Kx4KeywJWmoY5o568,11038
10
+ mermaid_trace/core/utils.py,sha256=FagsMYLZcbmOgKmRo3v9tcRNVIpuc1YEKTAjcRk7keY,3410
11
+ mermaid_trace/handlers/async_handler.py,sha256=WmLcULXHasapt7-W0p_Eltjmwvlq6r6BS6pViuseZ4w,8252
12
+ mermaid_trace/handlers/mermaid_handler.py,sha256=Czar6JYSPTu5L1fQC0I8v1UpToD6aE_r96IkPpRSByw,6142
13
+ mermaid_trace/integrations/__init__.py,sha256=uU_8E1tlP327Fn79kvzlgEdoiIpQLsWJl3BgyqgsFMQ,104
14
+ mermaid_trace/integrations/fastapi.py,sha256=6LRs4Z508l38ymfj5SP39vOV6OLfYLRkpxyL_SxvudM,9483
15
+ mermaid_trace-0.5.3.post0.dist-info/METADATA,sha256=FR1kgM-wlTzrFasLpIeqbWbV_X3h3TwwUkxQCvgbvo0,9959
16
+ mermaid_trace-0.5.3.post0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
17
+ mermaid_trace-0.5.3.post0.dist-info/entry_points.txt,sha256=WS57KT_870v0A4B87QDjQUqJcddMQxbCQyYeczDAX34,57
18
+ mermaid_trace-0.5.3.post0.dist-info/licenses/LICENSE,sha256=BrBog1Etiq9PdWy0SVQNVByIMD9ss4Edz-R0oXt49zA,1062
19
+ mermaid_trace-0.5.3.post0.dist-info/RECORD,,
@@ -1,16 +0,0 @@
1
- mermaid_trace/__init__.py,sha256=yhc-shETKioVEQEfqmCGFyVelRR3_ypeClbMR_D2oBQ,5267
2
- mermaid_trace/cli.py,sha256=F5-QfnKp_Et719IKWvU5IAWZTpq9ft01ow62DqNpHdA,9477
3
- mermaid_trace/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
- mermaid_trace/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
- mermaid_trace/core/context.py,sha256=WyTKbC_I1ge802VUj9PdUiqa-VgL1r3DQUW_y8PlG8M,6618
6
- mermaid_trace/core/decorators.py,sha256=13-n6qsmWnInpKgQ0Bgnnn5aQIWkRZ7raTD2xVtKVmU,12303
7
- mermaid_trace/core/events.py,sha256=TVtarp7IwfTR_C404ZWoyqBZmTtScROz5hWL0uel3G4,2857
8
- mermaid_trace/core/formatter.py,sha256=6k79eBU09TSCEUcDJN1mfn-_KMld0xXfKtQTKZb8Ogw,3178
9
- mermaid_trace/handlers/async_handler.py,sha256=uGC27TCgfxyvQQEiJ_7Ir1EFJdsLHBUzHEsLktEaFtM,1893
10
- mermaid_trace/handlers/mermaid_handler.py,sha256=JUq5gSQepNISreUYkyucS_rk27zGIiwSYFw_Lb8lL28,4314
11
- mermaid_trace/integrations/fastapi.py,sha256=GJL2H0Ypi4HqiAR-kkV4kSUTitdOj4RkhPi26GGNORM,5515
12
- mermaid_trace-0.4.0.dist-info/METADATA,sha256=4oszQifzCHhgCEI0Ly1nKAUuvcF-Bs-ejCReGUOsTbo,6287
13
- mermaid_trace-0.4.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
14
- mermaid_trace-0.4.0.dist-info/entry_points.txt,sha256=WS57KT_870v0A4B87QDjQUqJcddMQxbCQyYeczDAX34,57
15
- mermaid_trace-0.4.0.dist-info/licenses/LICENSE,sha256=BrBog1Etiq9PdWy0SVQNVByIMD9ss4Edz-R0oXt49zA,1062
16
- mermaid_trace-0.4.0.dist-info/RECORD,,