truthound-dashboard 1.4.4__py3-none-any.whl → 1.5.0__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.
Files changed (205) hide show
  1. truthound_dashboard/api/alerts.py +75 -86
  2. truthound_dashboard/api/anomaly.py +7 -13
  3. truthound_dashboard/api/cross_alerts.py +38 -52
  4. truthound_dashboard/api/drift.py +49 -59
  5. truthound_dashboard/api/drift_monitor.py +234 -79
  6. truthound_dashboard/api/enterprise_sampling.py +498 -0
  7. truthound_dashboard/api/history.py +57 -5
  8. truthound_dashboard/api/lineage.py +3 -48
  9. truthound_dashboard/api/maintenance.py +104 -49
  10. truthound_dashboard/api/mask.py +1 -2
  11. truthound_dashboard/api/middleware.py +2 -1
  12. truthound_dashboard/api/model_monitoring.py +435 -311
  13. truthound_dashboard/api/notifications.py +227 -191
  14. truthound_dashboard/api/notifications_advanced.py +21 -20
  15. truthound_dashboard/api/observability.py +586 -0
  16. truthound_dashboard/api/plugins.py +2 -433
  17. truthound_dashboard/api/profile.py +199 -37
  18. truthound_dashboard/api/quality_reporter.py +701 -0
  19. truthound_dashboard/api/reports.py +7 -16
  20. truthound_dashboard/api/router.py +66 -0
  21. truthound_dashboard/api/rule_suggestions.py +5 -5
  22. truthound_dashboard/api/scan.py +17 -19
  23. truthound_dashboard/api/schedules.py +85 -50
  24. truthound_dashboard/api/schema_evolution.py +6 -6
  25. truthound_dashboard/api/schema_watcher.py +667 -0
  26. truthound_dashboard/api/sources.py +98 -27
  27. truthound_dashboard/api/tiering.py +1323 -0
  28. truthound_dashboard/api/triggers.py +14 -11
  29. truthound_dashboard/api/validations.py +12 -11
  30. truthound_dashboard/api/versioning.py +1 -6
  31. truthound_dashboard/core/__init__.py +129 -3
  32. truthound_dashboard/core/actions/__init__.py +62 -0
  33. truthound_dashboard/core/actions/custom.py +426 -0
  34. truthound_dashboard/core/actions/notifications.py +910 -0
  35. truthound_dashboard/core/actions/storage.py +472 -0
  36. truthound_dashboard/core/actions/webhook.py +281 -0
  37. truthound_dashboard/core/anomaly.py +262 -67
  38. truthound_dashboard/core/anomaly_explainer.py +4 -3
  39. truthound_dashboard/core/backends/__init__.py +67 -0
  40. truthound_dashboard/core/backends/base.py +299 -0
  41. truthound_dashboard/core/backends/errors.py +191 -0
  42. truthound_dashboard/core/backends/factory.py +423 -0
  43. truthound_dashboard/core/backends/mock_backend.py +451 -0
  44. truthound_dashboard/core/backends/truthound_backend.py +718 -0
  45. truthound_dashboard/core/checkpoint/__init__.py +87 -0
  46. truthound_dashboard/core/checkpoint/adapters.py +814 -0
  47. truthound_dashboard/core/checkpoint/checkpoint.py +491 -0
  48. truthound_dashboard/core/checkpoint/runner.py +270 -0
  49. truthound_dashboard/core/connections.py +437 -10
  50. truthound_dashboard/core/converters/__init__.py +14 -0
  51. truthound_dashboard/core/converters/truthound.py +620 -0
  52. truthound_dashboard/core/cross_alerts.py +540 -320
  53. truthound_dashboard/core/datasource_factory.py +1672 -0
  54. truthound_dashboard/core/drift_monitor.py +216 -20
  55. truthound_dashboard/core/enterprise_sampling.py +1291 -0
  56. truthound_dashboard/core/interfaces/__init__.py +225 -0
  57. truthound_dashboard/core/interfaces/actions.py +652 -0
  58. truthound_dashboard/core/interfaces/base.py +247 -0
  59. truthound_dashboard/core/interfaces/checkpoint.py +676 -0
  60. truthound_dashboard/core/interfaces/protocols.py +664 -0
  61. truthound_dashboard/core/interfaces/reporters.py +650 -0
  62. truthound_dashboard/core/interfaces/routing.py +646 -0
  63. truthound_dashboard/core/interfaces/triggers.py +619 -0
  64. truthound_dashboard/core/lineage.py +407 -71
  65. truthound_dashboard/core/model_monitoring.py +431 -3
  66. truthound_dashboard/core/notifications/base.py +4 -0
  67. truthound_dashboard/core/notifications/channels.py +501 -1203
  68. truthound_dashboard/core/notifications/deduplication/__init__.py +81 -115
  69. truthound_dashboard/core/notifications/deduplication/service.py +131 -348
  70. truthound_dashboard/core/notifications/dispatcher.py +202 -11
  71. truthound_dashboard/core/notifications/escalation/__init__.py +119 -106
  72. truthound_dashboard/core/notifications/escalation/engine.py +168 -358
  73. truthound_dashboard/core/notifications/routing/__init__.py +88 -128
  74. truthound_dashboard/core/notifications/routing/engine.py +90 -317
  75. truthound_dashboard/core/notifications/stats_aggregator.py +246 -1
  76. truthound_dashboard/core/notifications/throttling/__init__.py +67 -50
  77. truthound_dashboard/core/notifications/throttling/builder.py +117 -255
  78. truthound_dashboard/core/notifications/truthound_adapter.py +842 -0
  79. truthound_dashboard/core/phase5/collaboration.py +1 -1
  80. truthound_dashboard/core/plugins/lifecycle/__init__.py +0 -13
  81. truthound_dashboard/core/quality_reporter.py +1359 -0
  82. truthound_dashboard/core/report_history.py +0 -6
  83. truthound_dashboard/core/reporters/__init__.py +175 -14
  84. truthound_dashboard/core/reporters/adapters.py +943 -0
  85. truthound_dashboard/core/reporters/base.py +0 -3
  86. truthound_dashboard/core/reporters/builtin/__init__.py +18 -0
  87. truthound_dashboard/core/reporters/builtin/csv_reporter.py +111 -0
  88. truthound_dashboard/core/reporters/builtin/html_reporter.py +270 -0
  89. truthound_dashboard/core/reporters/builtin/json_reporter.py +127 -0
  90. truthound_dashboard/core/reporters/compat.py +266 -0
  91. truthound_dashboard/core/reporters/csv_reporter.py +2 -35
  92. truthound_dashboard/core/reporters/factory.py +526 -0
  93. truthound_dashboard/core/reporters/interfaces.py +745 -0
  94. truthound_dashboard/core/reporters/registry.py +1 -10
  95. truthound_dashboard/core/scheduler.py +165 -0
  96. truthound_dashboard/core/schema_evolution.py +3 -3
  97. truthound_dashboard/core/schema_watcher.py +1528 -0
  98. truthound_dashboard/core/services.py +595 -76
  99. truthound_dashboard/core/store_manager.py +810 -0
  100. truthound_dashboard/core/streaming_anomaly.py +169 -4
  101. truthound_dashboard/core/tiering.py +1309 -0
  102. truthound_dashboard/core/triggers/evaluators.py +178 -8
  103. truthound_dashboard/core/truthound_adapter.py +2620 -197
  104. truthound_dashboard/core/unified_alerts.py +23 -20
  105. truthound_dashboard/db/__init__.py +8 -0
  106. truthound_dashboard/db/database.py +8 -2
  107. truthound_dashboard/db/models.py +944 -25
  108. truthound_dashboard/db/repository.py +2 -0
  109. truthound_dashboard/main.py +11 -0
  110. truthound_dashboard/schemas/__init__.py +177 -16
  111. truthound_dashboard/schemas/base.py +44 -23
  112. truthound_dashboard/schemas/collaboration.py +19 -6
  113. truthound_dashboard/schemas/cross_alerts.py +19 -3
  114. truthound_dashboard/schemas/drift.py +61 -55
  115. truthound_dashboard/schemas/drift_monitor.py +67 -23
  116. truthound_dashboard/schemas/enterprise_sampling.py +653 -0
  117. truthound_dashboard/schemas/lineage.py +0 -33
  118. truthound_dashboard/schemas/mask.py +10 -8
  119. truthound_dashboard/schemas/model_monitoring.py +89 -10
  120. truthound_dashboard/schemas/notifications_advanced.py +13 -0
  121. truthound_dashboard/schemas/observability.py +453 -0
  122. truthound_dashboard/schemas/plugins.py +0 -280
  123. truthound_dashboard/schemas/profile.py +154 -247
  124. truthound_dashboard/schemas/quality_reporter.py +403 -0
  125. truthound_dashboard/schemas/reports.py +2 -2
  126. truthound_dashboard/schemas/rule_suggestion.py +8 -1
  127. truthound_dashboard/schemas/scan.py +4 -24
  128. truthound_dashboard/schemas/schedule.py +11 -3
  129. truthound_dashboard/schemas/schema_watcher.py +727 -0
  130. truthound_dashboard/schemas/source.py +17 -2
  131. truthound_dashboard/schemas/tiering.py +822 -0
  132. truthound_dashboard/schemas/triggers.py +16 -0
  133. truthound_dashboard/schemas/unified_alerts.py +7 -0
  134. truthound_dashboard/schemas/validation.py +0 -13
  135. truthound_dashboard/schemas/validators/base.py +41 -21
  136. truthound_dashboard/schemas/validators/business_rule_validators.py +244 -0
  137. truthound_dashboard/schemas/validators/localization_validators.py +273 -0
  138. truthound_dashboard/schemas/validators/ml_feature_validators.py +308 -0
  139. truthound_dashboard/schemas/validators/profiling_validators.py +275 -0
  140. truthound_dashboard/schemas/validators/referential_validators.py +312 -0
  141. truthound_dashboard/schemas/validators/registry.py +93 -8
  142. truthound_dashboard/schemas/validators/timeseries_validators.py +389 -0
  143. truthound_dashboard/schemas/versioning.py +1 -6
  144. truthound_dashboard/static/index.html +2 -2
  145. truthound_dashboard-1.5.0.dist-info/METADATA +309 -0
  146. {truthound_dashboard-1.4.4.dist-info → truthound_dashboard-1.5.0.dist-info}/RECORD +149 -148
  147. truthound_dashboard/core/plugins/hooks/__init__.py +0 -63
  148. truthound_dashboard/core/plugins/hooks/decorators.py +0 -367
  149. truthound_dashboard/core/plugins/hooks/manager.py +0 -403
  150. truthound_dashboard/core/plugins/hooks/protocols.py +0 -265
  151. truthound_dashboard/core/plugins/lifecycle/hot_reload.py +0 -584
  152. truthound_dashboard/core/reporters/junit_reporter.py +0 -233
  153. truthound_dashboard/core/reporters/markdown_reporter.py +0 -207
  154. truthound_dashboard/core/reporters/pdf_reporter.py +0 -209
  155. truthound_dashboard/static/assets/_baseUniq-BcrSP13d.js +0 -1
  156. truthound_dashboard/static/assets/arc-DlYjKwIL.js +0 -1
  157. truthound_dashboard/static/assets/architectureDiagram-VXUJARFQ-Bb2drbQM.js +0 -36
  158. truthound_dashboard/static/assets/blockDiagram-VD42YOAC-BlsPG1CH.js +0 -122
  159. truthound_dashboard/static/assets/c4Diagram-YG6GDRKO-B9JdUoaC.js +0 -10
  160. truthound_dashboard/static/assets/channel-Q6mHF1Hd.js +0 -1
  161. truthound_dashboard/static/assets/chunk-4BX2VUAB-DmyoPVuJ.js +0 -1
  162. truthound_dashboard/static/assets/chunk-55IACEB6-Bcz6Siv8.js +0 -1
  163. truthound_dashboard/static/assets/chunk-B4BG7PRW-Br3G5Rum.js +0 -165
  164. truthound_dashboard/static/assets/chunk-DI55MBZ5-DuM9c23u.js +0 -220
  165. truthound_dashboard/static/assets/chunk-FMBD7UC4-DNU-5mvT.js +0 -15
  166. truthound_dashboard/static/assets/chunk-QN33PNHL-Im2yNcmS.js +0 -1
  167. truthound_dashboard/static/assets/chunk-QZHKN3VN-kZr8XFm1.js +0 -1
  168. truthound_dashboard/static/assets/chunk-TZMSLE5B-Q__360q_.js +0 -1
  169. truthound_dashboard/static/assets/classDiagram-2ON5EDUG-vtixxUyK.js +0 -1
  170. truthound_dashboard/static/assets/classDiagram-v2-WZHVMYZB-vtixxUyK.js +0 -1
  171. truthound_dashboard/static/assets/clone-BOt2LwD0.js +0 -1
  172. truthound_dashboard/static/assets/cose-bilkent-S5V4N54A-CBDw6iac.js +0 -1
  173. truthound_dashboard/static/assets/dagre-6UL2VRFP-XdKqmmY9.js +0 -4
  174. truthound_dashboard/static/assets/diagram-PSM6KHXK-DAZ8nx9V.js +0 -24
  175. truthound_dashboard/static/assets/diagram-QEK2KX5R-BRvDTbGD.js +0 -43
  176. truthound_dashboard/static/assets/diagram-S2PKOQOG-bQcczUkl.js +0 -24
  177. truthound_dashboard/static/assets/erDiagram-Q2GNP2WA-DPje7VMN.js +0 -60
  178. truthound_dashboard/static/assets/flowDiagram-NV44I4VS-B7BVtFVS.js +0 -162
  179. truthound_dashboard/static/assets/ganttDiagram-JELNMOA3-D6WKSS7U.js +0 -267
  180. truthound_dashboard/static/assets/gitGraphDiagram-NY62KEGX-D3vtVd3y.js +0 -65
  181. truthound_dashboard/static/assets/graph-BKgNKZVp.js +0 -1
  182. truthound_dashboard/static/assets/index-C6JSrkHo.css +0 -1
  183. truthound_dashboard/static/assets/index-DkU82VsU.js +0 -1800
  184. truthound_dashboard/static/assets/infoDiagram-WHAUD3N6-DnNCT429.js +0 -2
  185. truthound_dashboard/static/assets/journeyDiagram-XKPGCS4Q-DGiMozqS.js +0 -139
  186. truthound_dashboard/static/assets/kanban-definition-3W4ZIXB7-BV2gUgli.js +0 -89
  187. truthound_dashboard/static/assets/katex-Cu_Erd72.js +0 -261
  188. truthound_dashboard/static/assets/layout-DI2MfQ5G.js +0 -1
  189. truthound_dashboard/static/assets/min-DYdgXVcT.js +0 -1
  190. truthound_dashboard/static/assets/mindmap-definition-VGOIOE7T-C7x4ruxz.js +0 -68
  191. truthound_dashboard/static/assets/pieDiagram-ADFJNKIX-CAJaAB9f.js +0 -30
  192. truthound_dashboard/static/assets/quadrantDiagram-AYHSOK5B-DeqwDI46.js +0 -7
  193. truthound_dashboard/static/assets/requirementDiagram-UZGBJVZJ-e3XDpZIM.js +0 -64
  194. truthound_dashboard/static/assets/sankeyDiagram-TZEHDZUN-CNnAv5Ux.js +0 -10
  195. truthound_dashboard/static/assets/sequenceDiagram-WL72ISMW-Dsne-Of3.js +0 -145
  196. truthound_dashboard/static/assets/stateDiagram-FKZM4ZOC-Ee0sQXyb.js +0 -1
  197. truthound_dashboard/static/assets/stateDiagram-v2-4FDKWEC3-B26KqW_W.js +0 -1
  198. truthound_dashboard/static/assets/timeline-definition-IT6M3QCI-DZYi2yl3.js +0 -61
  199. truthound_dashboard/static/assets/treemap-KMMF4GRG-CY3f8In2.js +0 -128
  200. truthound_dashboard/static/assets/unmerged_dictionaries-Dd7xcPWG.js +0 -1
  201. truthound_dashboard/static/assets/xychartDiagram-PRI3JC2R-CS7fydZZ.js +0 -7
  202. truthound_dashboard-1.4.4.dist-info/METADATA +0 -507
  203. {truthound_dashboard-1.4.4.dist-info → truthound_dashboard-1.5.0.dist-info}/WHEEL +0 -0
  204. {truthound_dashboard-1.4.4.dist-info → truthound_dashboard-1.5.0.dist-info}/entry_points.txt +0 -0
  205. {truthound_dashboard-1.4.4.dist-info → truthound_dashboard-1.5.0.dist-info}/licenses/LICENSE +0 -0
@@ -336,11 +336,8 @@ class ReportHistoryService:
336
336
  # Determine extension
337
337
  ext_map = {
338
338
  ReportFormatType.HTML: ".html",
339
- ReportFormatType.PDF: ".pdf",
340
339
  ReportFormatType.CSV: ".csv",
341
340
  ReportFormatType.JSON: ".json",
342
- ReportFormatType.MARKDOWN: ".md",
343
- ReportFormatType.JUNIT: ".xml",
344
341
  ReportFormatType.EXCEL: ".xlsx",
345
342
  ReportFormatType.CUSTOM: ".txt",
346
343
  }
@@ -422,11 +419,8 @@ class ReportHistoryService:
422
419
 
423
420
  content_type_map = {
424
421
  ReportFormatType.HTML: "text/html",
425
- ReportFormatType.PDF: "application/pdf",
426
422
  ReportFormatType.CSV: "text/csv",
427
423
  ReportFormatType.JSON: "application/json",
428
- ReportFormatType.MARKDOWN: "text/markdown",
429
- ReportFormatType.JUNIT: "application/xml",
430
424
  ReportFormatType.EXCEL: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
431
425
  ReportFormatType.CUSTOM: "text/plain",
432
426
  }
@@ -1,22 +1,127 @@
1
1
  """Report generation system with multiple format support.
2
2
 
3
3
  This module provides an extensible reporter system for generating
4
- validation reports in various formats (HTML, CSV, Markdown, JSON, PDF).
4
+ validation reports in various formats (HTML, CSV, JSON).
5
5
 
6
- The reporter system uses the Strategy pattern for format flexibility
7
- and Template Method pattern for consistent report structure.
6
+ ## Architecture
8
7
 
9
- Example:
10
- from truthound_dashboard.core.reporters import get_reporter, ReportFormat
8
+ The reporter system is built on these principles:
9
+ 1. **Protocol-based typing** for flexible duck typing
10
+ 2. **Backend-agnostic interfaces** for loose coupling with truthound
11
+ 3. **Adapter pattern** for external reporter integration
12
+ 4. **Factory pattern** for reporter instantiation
13
+ 5. **Backward compatibility** with existing code
11
14
 
12
- reporter = get_reporter(ReportFormat.HTML)
13
- report = await reporter.generate(validation)
15
+ ## Usage
14
16
 
15
- # Or use the convenience function
16
- from truthound_dashboard.core.reporters import generate_report
17
- report = await generate_report(validation, format="html")
17
+ ### New Style (Recommended)
18
+
19
+ ```python
20
+ from truthound_dashboard.core.reporters import (
21
+ ReportData,
22
+ ReporterConfig,
23
+ get_reporter,
24
+ generate_report_from_validation,
25
+ )
26
+
27
+ # From validation model
28
+ output = await generate_report_from_validation(
29
+ validation,
30
+ format="html",
31
+ locale="ko",
32
+ )
33
+
34
+ # From ReportData (backend-agnostic)
35
+ data = ReportData.from_validation_model(validation)
36
+ reporter = get_reporter("json")
37
+ output = await reporter.generate(data)
38
+ ```
39
+
40
+ ### Legacy Style (Still Supported)
41
+
42
+ ```python
43
+ from truthound_dashboard.core.reporters import generate_report
44
+
45
+ report = await generate_report(validation, format="html")
46
+ ```
47
+
48
+ ## Extension Points
49
+
50
+ 1. Register custom reporters:
51
+ ```python
52
+ from truthound_dashboard.core.reporters import register_reporter_factory
53
+
54
+ @register_reporter_factory("custom")
55
+ def create_custom_reporter(**kwargs):
56
+ return MyCustomReporter(**kwargs)
57
+ ```
58
+
59
+ 2. Use truthound reporters directly:
60
+ ```python
61
+ from truthound_dashboard.core.reporters.adapters import (
62
+ TruthoundReporterAdapter,
63
+ create_truthound_reporter,
64
+ )
65
+
66
+ reporter = create_truthound_reporter("json", locale="ko")
67
+ ```
18
68
  """
19
69
 
70
+ # =============================================================================
71
+ # New Interface-based API (v2)
72
+ # =============================================================================
73
+
74
+ from .interfaces import (
75
+ # Data classes
76
+ ReportData,
77
+ ReporterConfig,
78
+ ReportOutput,
79
+ ValidationIssueData,
80
+ ValidationSummary,
81
+ DataStatistics,
82
+ # Enums
83
+ ReportFormatType,
84
+ ReportThemeType,
85
+ # Protocols/Base classes
86
+ ReporterProtocol,
87
+ BaseReporter,
88
+ ReporterAdapterProtocol,
89
+ ReporterFactoryProtocol,
90
+ )
91
+
92
+ from .factory import (
93
+ ReporterFactory,
94
+ get_reporter_factory,
95
+ reset_factory,
96
+ register_reporter as register_reporter_factory,
97
+ get_reporter as get_reporter_v2,
98
+ get_available_formats as get_available_formats_v2,
99
+ is_format_available,
100
+ generate_report as generate_report_v2,
101
+ generate_report_from_validation,
102
+ )
103
+
104
+ from .adapters import (
105
+ TruthoundReporterAdapter,
106
+ ValidationModelAdapter,
107
+ create_truthound_reporter,
108
+ create_ci_reporter,
109
+ is_truthound_available,
110
+ get_truthound_formats,
111
+ is_ci_environment,
112
+ get_detected_ci_platform,
113
+ )
114
+
115
+ from .compat import (
116
+ legacy_generate_report,
117
+ convert_validation_to_report_data,
118
+ LegacyReportResult,
119
+ )
120
+
121
+ # =============================================================================
122
+ # Legacy API (v1) - Backward Compatibility
123
+ # =============================================================================
124
+
20
125
  from .base import (
21
126
  Reporter,
22
127
  ReportFormat,
@@ -27,7 +132,6 @@ from .base import (
27
132
  from .csv_reporter import CSVReporter
28
133
  from .html_reporter import HTMLReporter
29
134
  from .json_reporter import JSONReporter
30
- from .markdown_reporter import MarkdownReporter
31
135
  from .registry import (
32
136
  ReporterRegistry,
33
137
  generate_report,
@@ -36,19 +140,76 @@ from .registry import (
36
140
  register_reporter,
37
141
  )
38
142
 
143
+ # =============================================================================
144
+ # Built-in Reporters
145
+ # =============================================================================
146
+
147
+ from .builtin import (
148
+ BuiltinCSVReporter,
149
+ BuiltinHTMLReporter,
150
+ BuiltinJSONReporter,
151
+ )
152
+
39
153
  __all__ = [
154
+ # =========================================================================
155
+ # New Interface-based API (v2) - Recommended
156
+ # =========================================================================
157
+ # Data classes
158
+ "ReportData",
159
+ "ReporterConfig",
160
+ "ReportOutput",
161
+ "ValidationIssueData",
162
+ "ValidationSummary",
163
+ "DataStatistics",
164
+ # Enums
165
+ "ReportFormatType",
166
+ "ReportThemeType",
167
+ # Protocols/Base classes
168
+ "ReporterProtocol",
169
+ "BaseReporter",
170
+ "ReporterAdapterProtocol",
171
+ "ReporterFactoryProtocol",
172
+ # Factory
173
+ "ReporterFactory",
174
+ "get_reporter_factory",
175
+ "reset_factory",
176
+ "register_reporter_factory",
177
+ "get_reporter_v2",
178
+ "get_available_formats_v2",
179
+ "is_format_available",
180
+ "generate_report_v2",
181
+ "generate_report_from_validation",
182
+ # Adapters
183
+ "TruthoundReporterAdapter",
184
+ "ValidationModelAdapter",
185
+ "create_truthound_reporter",
186
+ "create_ci_reporter",
187
+ "is_truthound_available",
188
+ "get_truthound_formats",
189
+ "is_ci_environment",
190
+ "get_detected_ci_platform",
191
+ # Compatibility
192
+ "legacy_generate_report",
193
+ "convert_validation_to_report_data",
194
+ "LegacyReportResult",
195
+ # Built-in reporters
196
+ "BuiltinCSVReporter",
197
+ "BuiltinHTMLReporter",
198
+ "BuiltinJSONReporter",
199
+ # =========================================================================
200
+ # Legacy API (v1) - Backward Compatibility
201
+ # =========================================================================
40
202
  # Base classes
41
203
  "Reporter",
42
204
  "ReportFormat",
43
205
  "ReportMetadata",
44
206
  "ReportResult",
45
207
  "ReportTheme",
46
- # Implementations
208
+ # Legacy Implementations
47
209
  "CSVReporter",
48
210
  "HTMLReporter",
49
211
  "JSONReporter",
50
- "MarkdownReporter",
51
- # Registry
212
+ # Legacy Registry
52
213
  "ReporterRegistry",
53
214
  "generate_report",
54
215
  "get_available_formats",