aptdata 0.0.2__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 (65) hide show
  1. aptdata/__init__.py +3 -0
  2. aptdata/cli/__init__.py +5 -0
  3. aptdata/cli/app.py +247 -0
  4. aptdata/cli/commands/__init__.py +9 -0
  5. aptdata/cli/commands/config_cmd.py +128 -0
  6. aptdata/cli/commands/mesh_cmd.py +435 -0
  7. aptdata/cli/commands/plugin_cmd.py +107 -0
  8. aptdata/cli/commands/system_cmd.py +90 -0
  9. aptdata/cli/commands/telemetry_cmd.py +57 -0
  10. aptdata/cli/completions.py +56 -0
  11. aptdata/cli/interactive.py +269 -0
  12. aptdata/cli/rendering/__init__.py +31 -0
  13. aptdata/cli/rendering/console.py +119 -0
  14. aptdata/cli/rendering/logger.py +26 -0
  15. aptdata/cli/rendering/panels.py +87 -0
  16. aptdata/cli/rendering/tables.py +81 -0
  17. aptdata/cli/scaffold.py +1089 -0
  18. aptdata/config/__init__.py +13 -0
  19. aptdata/config/parser.py +136 -0
  20. aptdata/config/schema.py +27 -0
  21. aptdata/config/secrets.py +60 -0
  22. aptdata/core/__init__.py +46 -0
  23. aptdata/core/context.py +31 -0
  24. aptdata/core/dataset.py +39 -0
  25. aptdata/core/lineage.py +213 -0
  26. aptdata/core/state.py +27 -0
  27. aptdata/core/system.py +317 -0
  28. aptdata/core/workflow.py +372 -0
  29. aptdata/mcp/__init__.py +5 -0
  30. aptdata/mcp/server.py +198 -0
  31. aptdata/plugins/__init__.py +77 -0
  32. aptdata/plugins/ai/__init__.py +6 -0
  33. aptdata/plugins/ai/chunking.py +66 -0
  34. aptdata/plugins/ai/embeddings.py +56 -0
  35. aptdata/plugins/base.py +57 -0
  36. aptdata/plugins/dataset.py +62 -0
  37. aptdata/plugins/governance/__init__.py +32 -0
  38. aptdata/plugins/governance/catalog.py +115 -0
  39. aptdata/plugins/governance/classification.py +44 -0
  40. aptdata/plugins/governance/lineage_store.py +49 -0
  41. aptdata/plugins/governance/rules.py +180 -0
  42. aptdata/plugins/local_fs.py +241 -0
  43. aptdata/plugins/manager.py +142 -0
  44. aptdata/plugins/postgres.py +113 -0
  45. aptdata/plugins/quality/__init__.py +39 -0
  46. aptdata/plugins/quality/contract.py +128 -0
  47. aptdata/plugins/quality/expectations.py +310 -0
  48. aptdata/plugins/quality/report.py +94 -0
  49. aptdata/plugins/quality/validator.py +139 -0
  50. aptdata/plugins/rest.py +135 -0
  51. aptdata/plugins/transform/__init__.py +14 -0
  52. aptdata/plugins/transform/pandas.py +129 -0
  53. aptdata/plugins/transform/spark.py +134 -0
  54. aptdata/plugins/vector/__init__.py +6 -0
  55. aptdata/plugins/vector/base.py +19 -0
  56. aptdata/plugins/vector/qdrant.py +41 -0
  57. aptdata/telemetry/__init__.py +5 -0
  58. aptdata/telemetry/instrumentation.py +164 -0
  59. aptdata/tui/__init__.py +5 -0
  60. aptdata/tui/monitor.py +279 -0
  61. aptdata-0.0.2.dist-info/METADATA +330 -0
  62. aptdata-0.0.2.dist-info/RECORD +65 -0
  63. aptdata-0.0.2.dist-info/WHEEL +4 -0
  64. aptdata-0.0.2.dist-info/entry_points.txt +3 -0
  65. aptdata-0.0.2.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,330 @@
1
+ Metadata-Version: 2.4
2
+ Name: aptdata
3
+ Version: 0.0.2
4
+ Summary: A declarative, extensible framework for building smart data pipelines in Python
5
+ License: MIT
6
+ License-File: LICENSE
7
+ Keywords: data-pipeline,framework,etl,pydantic,data-engineering
8
+ Author: strondata
9
+ Requires-Python: >=3.10,<4.0
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Programming Language :: Python :: 3.14
19
+ Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
20
+ Provides-Extra: all
21
+ Provides-Extra: pandas
22
+ Provides-Extra: plugins
23
+ Provides-Extra: spark
24
+ Requires-Dist: httpx (>=0.27,<0.28) ; extra == "plugins" or extra == "all"
25
+ Requires-Dist: mcp (>=1.26.0,<2.0.0)
26
+ Requires-Dist: opentelemetry-api (>=1.40.0,<2.0.0)
27
+ Requires-Dist: opentelemetry-sdk (>=1.40.0,<2.0.0)
28
+ Requires-Dist: pandas (>=2.2,<3.0) ; extra == "pandas" or extra == "all"
29
+ Requires-Dist: psycopg2-binary (>=2.9,<3.0) ; extra == "plugins" or extra == "all"
30
+ Requires-Dist: pyarrow (>=15.0,<16.0) ; extra == "plugins" or extra == "all"
31
+ Requires-Dist: pydantic (>=2.0,<3.0)
32
+ Requires-Dist: pyspark (>=3.5,<4.0) ; extra == "spark" or extra == "all"
33
+ Requires-Dist: python-dotenv (>=1.0,<2.0)
34
+ Requires-Dist: pyyaml (>=6.0,<7.0)
35
+ Requires-Dist: questionary (>=2.0)
36
+ Requires-Dist: rich (>=13.0,<14.0)
37
+ Requires-Dist: sqlalchemy (>=2.0,<3.0) ; extra == "plugins" or extra == "all"
38
+ Requires-Dist: textual (>=0.60,<0.61)
39
+ Requires-Dist: typer[all] (>=0.15,<0.16)
40
+ Project-URL: Documentation, https://strondata.github.io/smart-data
41
+ Project-URL: Homepage, https://strondata.github.io/smart-data
42
+ Project-URL: Repository, https://github.com/strondata/smart-data
43
+ Description-Content-Type: text/markdown
44
+
45
+ # aptdata
46
+
47
+ > **v0.0.2** · A declarative, extensible framework for building smart data pipelines in Python.
48
+
49
+ [![Python](https://img.shields.io/badge/python-3.10%2B-blue)](https://www.python.org/)
50
+ [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)
51
+ [![Version](https://img.shields.io/badge/version-0.0.2-orange)](CHANGELOG.md)
52
+
53
+ ---
54
+
55
+ ## Overview
56
+
57
+ **aptdata** is built around three universal abstractions — **System**,
58
+ **Flow**, and **Component** — that cover every data-processing paradigm in a
59
+ single, coherent model:
60
+
61
+ ```mermaid
62
+ flowchart TD
63
+ I["IComponent / IFlow / ISystem\n@dataclass + ABC — pure interfaces"]
64
+ B["BaseComponent / BaseFlow / BaseSystem\n@pydantic_dataclass — validated fields"]
65
+ Y["Your concrete implementations"]
66
+
67
+ I --> B --> Y
68
+ ```
69
+
70
+ Datasets remain the fundamental data-exchange contract (`IDataset` /
71
+ `BaseDataset`). Every outcome from the CLI is emitted as a machine-readable
72
+ JSON line, making aptdata a natural fit for AI orchestrators, CI/CD
73
+ pipelines and scripted workflows.
74
+
75
+ ---
76
+
77
+ ## Requirements
78
+
79
+ - Python ≥ 3.10
80
+ - [Poetry](https://python-poetry.org/) (for development)
81
+
82
+ ---
83
+
84
+ ## Installation
85
+
86
+ ### From PyPI
87
+
88
+ ```bash
89
+ pip install aptdata
90
+ ```
91
+
92
+ ### Optional extras
93
+
94
+ ```bash
95
+ pip install aptdata[pandas] # pandas support
96
+ pip install aptdata[spark] # PySpark support
97
+ pip install aptdata[plugins] # REST, PostgreSQL, Parquet I/O
98
+ pip install aptdata[all] # everything
99
+ ```
100
+
101
+ ### From source (development)
102
+
103
+ ```bash
104
+ git clone https://github.com/strondata/smart-data.git
105
+ cd aptdata
106
+ poetry install
107
+ ```
108
+
109
+ ---
110
+
111
+ ## Quick start
112
+
113
+ ```python
114
+ from pydantic.dataclasses import dataclass as pydantic_dataclass
115
+ from aptdata.core import (
116
+ BaseDataset, IDataset,
117
+ BaseComponent, ComponentMeta, ComponentKind,
118
+ BaseFlow, IFlow,
119
+ BaseSystem,
120
+ )
121
+
122
+ @pydantic_dataclass
123
+ class MemoryDataset(BaseDataset):
124
+ def __post_init__(self): self._data = None
125
+ def read(self): return self._data
126
+ def write(self, data): self._data = data
127
+
128
+ @pydantic_dataclass
129
+ class DoubleComponent(BaseComponent):
130
+ def validate_inputs(self, inputs: list[IDataset]) -> bool:
131
+ return len(inputs) == 1
132
+ def execute(self, inputs: list[IDataset]) -> list[IDataset]:
133
+ out = MemoryDataset(uri="memory://out")
134
+ out.write([x * 2 for x in inputs[0].read()])
135
+ return [out]
136
+
137
+ @pydantic_dataclass
138
+ class ETLFlow(BaseFlow):
139
+ def __post_init__(self):
140
+ self._nodes = {}
141
+ self._edges = []
142
+ self._compiled = False
143
+ def add_component(self, c): self._nodes[c.component_id] = c
144
+ def connect(self, src, tgt, condition=None): ...
145
+ def compile(self): self._compiled = True
146
+ def run(self, inputs): return inputs # wire your logic here
147
+
148
+ @pydantic_dataclass
149
+ class MySystem(BaseSystem):
150
+ def __post_init__(self): self._flows: list[IFlow] = []
151
+ def register_flow(self, flow): self._flows.append(flow)
152
+ def run(self):
153
+ for flow in self._flows:
154
+ flow.run([])
155
+
156
+ # Register and run via CLI
157
+ from aptdata.plugins import registry
158
+ registry.register("my_system", MySystem)
159
+ ```
160
+
161
+ ```bash
162
+ aptdata run my_system
163
+ # {"event": "pipeline.started", "pipeline": "my_system", "env": "dev", "dry_run": false, "trace_id": null}
164
+ # {"event": "pipeline.completed", "pipeline": "my_system", "env": "dev", "dry_run": false, "elapsed_seconds": 0.001, "trace_id": null}
165
+ ```
166
+
167
+ ---
168
+
169
+ ## CLI reference
170
+
171
+ ```
172
+ aptdata run SYSTEM_NAME [--env ENV] [--dry-run]
173
+ aptdata monitor [--refresh SECONDS]
174
+ aptdata scaffold PROJECT_NAME [--template TEMPLATE] [--output PATH]
175
+ aptdata schema export --output schema.json
176
+ aptdata system list [--json]
177
+ aptdata system info NAME [--json]
178
+ aptdata system validate NAME
179
+ aptdata plugin list [--json]
180
+ aptdata plugin inspect NAME [--json]
181
+ aptdata plugin preview READER [--limit N]
182
+ aptdata plugin load MODULE_PATH
183
+ aptdata config validate PATH
184
+ aptdata config init [--output PATH]
185
+ aptdata config show PATH
186
+ aptdata config run PATH [--env ENV]
187
+ aptdata telemetry status [--json]
188
+ aptdata telemetry export [--format json]
189
+ aptdata mesh list [--dir DIR] [--json]
190
+ aptdata mesh run COMPONENT [--dir DIR] [--dry-run] [--json]
191
+ aptdata mesh build COMPONENT [--dir DIR] [--json]
192
+ aptdata mcp-start [--transport TRANSPORT]
193
+ aptdata interactive
194
+ ```
195
+
196
+ Every static command supports `--json` for machine-readable JSON line output
197
+ (backward compatible). Without `--json`, commands render Rich tables, panels,
198
+ and syntax-highlighted output.
199
+
200
+ ### Scaffold templates
201
+
202
+ | Template | Description |
203
+ |-----------------------|-----------------------------------------------------|
204
+ | `hello-world` | Minimal pandas pipeline (default) |
205
+ | `medallion` | Bronze → Silver → Gold data lakehouse |
206
+ | `rag-ingestion` | RAG pipeline: extract → chunk → embed → load |
207
+ | `data-quality-test` | Schema contract + expectation suite |
208
+ | `job-wheel` | Python wheel executor for portable job packaging |
209
+ | `docker-compose-app` | Multi-service Docker Compose application |
210
+
211
+ ```bash
212
+ aptdata scaffold my_lakehouse --template medallion
213
+ aptdata scaffold my_job --template job-wheel
214
+ aptdata scaffold my_service --template docker-compose-app
215
+ ```
216
+
217
+ ---
218
+
219
+ ## Processing Engines
220
+
221
+ Engine-agnostic transformation wrappers for pandas and PySpark:
222
+
223
+ ```python
224
+ from aptdata.plugins.transform import PandasTransformer
225
+
226
+ def clean(df):
227
+ return df.dropna().drop_duplicates()
228
+
229
+ transformer = PandasTransformer("clean", clean)
230
+ result = transformer.transform(my_dataset)
231
+ ```
232
+
233
+ See [Transform Engines docs](docs/transform-engines.md) for PySpark usage.
234
+
235
+ ---
236
+
237
+ ## Data Quality & Contracts
238
+
239
+ ```python
240
+ from aptdata.plugins.quality import (
241
+ EnforcementMode, ExpectColumnToNotBeNull,
242
+ QualityValidator, SchemaContract,
243
+ )
244
+
245
+ validator = QualityValidator(
246
+ expectations=[ExpectColumnToNotBeNull("id")],
247
+ enforcement=EnforcementMode.ABORT,
248
+ )
249
+ clean_data = validator.validate(raw_df)
250
+ ```
251
+
252
+ See [Quality docs](docs/quality.md) for all built-in expectations.
253
+
254
+ ---
255
+
256
+ ## Data Governance
257
+
258
+ ```python
259
+ from aptdata.plugins.governance import (
260
+ BusinessRule, DatasetCatalog, DatasetCatalogEntry, LineageStore,
261
+ )
262
+ from aptdata.core.lineage import LineageGraph, LineageNode, LineageEventType
263
+
264
+ # Lineage tracking
265
+ graph = LineageGraph(run_id="run-1", workflow_name="etl")
266
+ graph.add_node(LineageNode(dataset_uri="s3://raw/data", event_type=LineageEventType.READ))
267
+
268
+ store = LineageStore()
269
+ store.save(graph)
270
+ ```
271
+
272
+ See [Governance docs](docs/governance.md) for the full API.
273
+
274
+ ---
275
+
276
+ ## Release process
277
+
278
+ Releases are automated via the [Release workflow](.github/workflows/release.yml).
279
+ After a PR is merged into `main`, the CI reads its labels and bumps the version
280
+ accordingly.
281
+
282
+ | Label | Effect |
283
+ |---|---|
284
+ | `release:patch` | `0.0.1 → 0.0.2` |
285
+ | `release:minor` | `0.0.1 → 0.1.0` |
286
+ | `release:major` | `0.0.1 → 1.0.0` |
287
+ | `release:skip` | no release (explicit opt-out) |
288
+ | *(no label)* | no release (silent skip) |
289
+
290
+ The workflow will:
291
+ 1. Detect the merged PR and its labels.
292
+ 2. Run `bump-my-version bump <part>` to update `pyproject.toml` and
293
+ `aptdata/__init__.py`.
294
+ 3. Create a `chore(release): bump version to X.Y.Z` commit and a `vX.Y.Z` tag.
295
+ 4. Push the commit and tag to `main`.
296
+ 5. The tag push automatically triggers the **Publish to PyPI** workflow.
297
+
298
+ > **Branch protection note:** GitHub Actions must have *read and write
299
+ > permissions* (Settings → Actions → General → Workflow permissions) and, if
300
+ > branch protection is enabled on `main`, the rule must allow GitHub Actions
301
+ > to bypass it.
302
+
303
+ ---
304
+
305
+ ## Development
306
+
307
+ ```bash
308
+ make install # install all dependencies
309
+ make test # run the test suite
310
+ make lint # lint with ruff
311
+ make docs # build the documentation
312
+ ```
313
+
314
+ ---
315
+
316
+ ## Documentation
317
+
318
+ Full documentation is available in the [`docs/`](docs/) directory and can be
319
+ served locally with:
320
+
321
+ ```bash
322
+ mkdocs serve
323
+ ```
324
+
325
+ ---
326
+
327
+ ## License
328
+
329
+ [MIT](LICENSE)
330
+
@@ -0,0 +1,65 @@
1
+ aptdata/__init__.py,sha256=43uh9j6aW_deNzgRRifT51dT-vzGaLxtaes1_-DJ4Js,76
2
+ aptdata/cli/__init__.py,sha256=B_VlxEiqwYks_5g0Pi_2-uXNBlBeaNq9tWXxUMco680,108
3
+ aptdata/cli/app.py,sha256=PUK3HgSlUDxQwysmeAyseypUNYiHIB3cOdqgKGC1OkI,6767
4
+ aptdata/cli/commands/__init__.py,sha256=YPF32aBSuAy7GnaIrW2hbAeKfFnxSJVhPN8Qp2sLHog,405
5
+ aptdata/cli/commands/config_cmd.py,sha256=OUA5TBNMMXWOPEGd-BwAURASo-7Vp3KVQy_6VMtZXLE,3930
6
+ aptdata/cli/commands/mesh_cmd.py,sha256=pD8i-cm2rs8jvXGPeL8HObj7jUJ9borAlioISg9jBvQ,13587
7
+ aptdata/cli/commands/plugin_cmd.py,sha256=ZRbGHuzYQa4tvuwxRXi5p5kmORoU-mhoxEZyIDBn2Pk,3589
8
+ aptdata/cli/commands/system_cmd.py,sha256=kXtCB-GwW-5fYm2DK5lgeIELOimqaTWESiXtqoPfn4g,2881
9
+ aptdata/cli/commands/telemetry_cmd.py,sha256=riHUqrB9Yw8PK-8_JRAvhxdDwZM1B4cCHR1ZRWRgxYQ,1647
10
+ aptdata/cli/completions.py,sha256=bbKhf2kvvfWDdd1zIPwRmethyAPazGxxtfwsqVJygAw,1960
11
+ aptdata/cli/interactive.py,sha256=ZsnmRhk09xvFcKHhBOkaqRHdVCgU-pZe0mBVIucfLH0,8852
12
+ aptdata/cli/rendering/__init__.py,sha256=XpQucueN7TGk4fJFYki7EO-BWao-4YvXXh-uRrSVFtQ,721
13
+ aptdata/cli/rendering/console.py,sha256=e8QTzCQe1he-9e-TJtv0j4og33pWPaYBc96YeUsgEfY,3903
14
+ aptdata/cli/rendering/logger.py,sha256=a6TH9_5w8CJ4oWFGcYB_euYQq1JyLM3b1ouyhqDgnMY,657
15
+ aptdata/cli/rendering/panels.py,sha256=hfQQ40rJ5_hczJ2eY9Rjgkq6IJpxhFBiQBGPqHXu5xk,2881
16
+ aptdata/cli/rendering/tables.py,sha256=6nnyIKs0rfqYB-UCd4qR1tbUmgObOW6C8vyMjJn7LAs,2763
17
+ aptdata/cli/scaffold.py,sha256=764TCNhd9DX0kiNWLv_N68imvGfzVjkGo_itvXO9gzk,28406
18
+ aptdata/config/__init__.py,sha256=Eujz6UwTFQgmLq6aGZqtCK3fM7HQq6mNObhqSdDsDnA,379
19
+ aptdata/config/parser.py,sha256=YBwYIOuDaNHiewIZMv0Ot9DSuAJs4TzjkrTm3PYDnB4,4488
20
+ aptdata/config/schema.py,sha256=KyCraUMC_hESbwbX95XaBZRf7ngK4wrIGUjtnWBfBag,761
21
+ aptdata/config/secrets.py,sha256=1xzXNrgIHtPQxB6EVrML1LkA5dG54w2Mv9WYuSw_Z30,2129
22
+ aptdata/core/__init__.py,sha256=tRdbM_p8p4ZYJyejrUSLngFCq87uoAPGh7rY3Pqdldg,876
23
+ aptdata/core/context.py,sha256=gIHAmZ9WSJCB4VSqS3GxAWXeJq8FuStTHkm1q1MVKhg,900
24
+ aptdata/core/dataset.py,sha256=HfXkthp5cqBD0wedyP-GBTbb8uvn4ZJNxLpUaAhbW5Q,1121
25
+ aptdata/core/lineage.py,sha256=FpxJx900kTNnVM_N8HFD7YXerTCurudbvsaZYloNtrE,6819
26
+ aptdata/core/state.py,sha256=VTkAmxu9QiMcK49BPC88iiYED-Jf85kI3KbcK1k1GnI,889
27
+ aptdata/core/system.py,sha256=APGIQZFsmzCDRgOAWmkCKFZ6qyqg58M_sQje4xkBkwI,10553
28
+ aptdata/core/workflow.py,sha256=0ycB0AGyvX1zEX2hT3To461Nwom-wlEyrhQnPK6XBJI,13292
29
+ aptdata/mcp/__init__.py,sha256=rQNyFCA-3I8EQRVux7Ong9A1lNfpAU4Tr8AZGwgluEc,122
30
+ aptdata/mcp/server.py,sha256=SGJsmZb8Z6PNdAWmtCkG3QFioiN_2lNBtFcF0YILDnA,5916
31
+ aptdata/plugins/__init__.py,sha256=IEfsgx_3xSgOE_Td4JhJvLDGoFZoJyMgOZqF_OsEEf0,2173
32
+ aptdata/plugins/ai/__init__.py,sha256=IwiETgjfStDRaYG8Hkuboo3Tv82nRtIAD-QvNagRhOY,228
33
+ aptdata/plugins/ai/chunking.py,sha256=ChkLaLO5uAC-_hg11NohdVBgUPOiRL_57m_oUhk2KJQ,2613
34
+ aptdata/plugins/ai/embeddings.py,sha256=QE1NskhOBBhqx0U3sjyIq7pULfT-N4JZmriKd3pYN1Y,2017
35
+ aptdata/plugins/base.py,sha256=r5JW-2ho01YB8GsBMKHw0PL8kafV1w3YQthPKg1znZg,1695
36
+ aptdata/plugins/dataset.py,sha256=bOOcQt1TfvPSvr9dfEe6mxDwu3VQYejGpQd3uxqyV2U,1695
37
+ aptdata/plugins/governance/__init__.py,sha256=HACQ-3fDFHQbsm7p_FoLXNkMcpfYI31Nqba5zpk0uHQ,780
38
+ aptdata/plugins/governance/catalog.py,sha256=HvLVmNOAtT2z8qZnxWXEe5D5JubKkYchnW0Ee2saII4,3641
39
+ aptdata/plugins/governance/classification.py,sha256=gbBJLLIqk9NGdUXRTlRxMj0Ko-RDkWfebgPTJT2goxw,1336
40
+ aptdata/plugins/governance/lineage_store.py,sha256=0wnTKJwrDiDV7ethNoG_oEXc7iTThzeR7go6agvqwQk,1505
41
+ aptdata/plugins/governance/rules.py,sha256=6N_6AMOdsUGUj3J8RQLNETDWn9zBf_Z1Url_CBBbndU,5082
42
+ aptdata/plugins/local_fs.py,sha256=RXxr2y-EsEyKTAa2TR-uuD-JNfJ4ub39f9UGJkisrMs,7219
43
+ aptdata/plugins/manager.py,sha256=mqfNzknV8Tz0MSbBXDSSIBq_MEx3B8qMxY-r7ShLMwA,5260
44
+ aptdata/plugins/postgres.py,sha256=nxizsIFQrJpL3mY3xW7NfyLaJqbCDQ8XrIWyQaP8Uzk,3593
45
+ aptdata/plugins/quality/__init__.py,sha256=x2mDXbUwYSnt9SUUVPuimx6ARsUyvmLiJiaxiDTAB_A,1014
46
+ aptdata/plugins/quality/contract.py,sha256=HVYElig2qDuoOdEtHFGssiTz8YUt4BeSb4nYALORzDQ,3411
47
+ aptdata/plugins/quality/expectations.py,sha256=flDd1BoeWWkmp51YcjqDD29nGrZfw5ioe2AYQSpdt48,10878
48
+ aptdata/plugins/quality/report.py,sha256=jYuVaWj3i1cnja3FYaR4YRAflpSaSu7VfdxjIDh2uTM,2556
49
+ aptdata/plugins/quality/validator.py,sha256=CPu--KS4NFlckCZdP_lNzTITbPXjHmwT-1TxwV8ReyA,4806
50
+ aptdata/plugins/rest.py,sha256=MKEyEgIioXt-yaVMIBDT14cjRKFrCVNunPm27Pdq1i4,4728
51
+ aptdata/plugins/transform/__init__.py,sha256=NF5fu226i6vNNOFE-R1OgDozbtzLldsqMg4t5i-KSqA,527
52
+ aptdata/plugins/transform/pandas.py,sha256=f-lXt6TVHMypaoM5TlOUSkoBNT0qx16Yteud2qu9lIE,4083
53
+ aptdata/plugins/transform/spark.py,sha256=QN1lRiG8MnrLdsEPXscPF7dx17zmFmYcycwt836ehRg,4268
54
+ aptdata/plugins/vector/__init__.py,sha256=1aWCh7WfJxBPuY-B1Evt23X6vISd2ZKRF8rSSw_u6w8,184
55
+ aptdata/plugins/vector/base.py,sha256=Plpcm25Y8GPsuJpxyPOstmybpxIeOQKz2Ce1qqWlCa4,524
56
+ aptdata/plugins/vector/qdrant.py,sha256=XBozfTwmXcucTfb-DeEvFoEj0B0aJssCricZv9cOpr4,1442
57
+ aptdata/telemetry/__init__.py,sha256=RE_hUkxHiwvCt2gWcWeBzAPUGcvzfromyebvDAJTtrk,189
58
+ aptdata/telemetry/instrumentation.py,sha256=QogZ2uIDYA-Amg_lxgiOeUGjrg-SNIlYp5dJotVrp8U,5753
59
+ aptdata/tui/__init__.py,sha256=U8ScSoGZM8xNVtWBTF__QwvcUItaL2sJiJiReHwiNB4,122
60
+ aptdata/tui/monitor.py,sha256=XRji6dTfXthN06B3Sepabp9f-Tk_5J5e-WIwYHbzuoU,8381
61
+ aptdata-0.0.2.dist-info/METADATA,sha256=oABnmGsQrRt8beFNUb4srfG4lul9oPJd1PpE6PXda8Y,9941
62
+ aptdata-0.0.2.dist-info/WHEEL,sha256=kJCRJT_g0adfAJzTx2GUMmS80rTJIVHRCfG0DQgLq3o,88
63
+ aptdata-0.0.2.dist-info/entry_points.txt,sha256=JpKcSxK1iFyy3-tSYOP0yutq8glTTXdmhD1qXONGlM8,47
64
+ aptdata-0.0.2.dist-info/licenses/LICENSE,sha256=cPddJTJgWfKbOopnk6L2SWEo-PRRAr5TYIJgDPQF9BU,1066
65
+ aptdata-0.0.2.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: poetry-core 2.3.1
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ aptdata=aptdata.cli.app:app
3
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 strondata
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.