prismiq 0.1.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.
- prismiq/__init__.py +543 -0
- prismiq/api.py +1889 -0
- prismiq/auth.py +108 -0
- prismiq/cache.py +527 -0
- prismiq/calculated_field_processor.py +231 -0
- prismiq/calculated_fields.py +819 -0
- prismiq/dashboard_store.py +1219 -0
- prismiq/dashboards.py +374 -0
- prismiq/dates.py +247 -0
- prismiq/engine.py +1315 -0
- prismiq/executor.py +345 -0
- prismiq/filter_merge.py +397 -0
- prismiq/formatting.py +298 -0
- prismiq/logging.py +489 -0
- prismiq/metrics.py +536 -0
- prismiq/middleware.py +346 -0
- prismiq/permissions.py +87 -0
- prismiq/persistence/__init__.py +45 -0
- prismiq/persistence/models.py +208 -0
- prismiq/persistence/postgres_store.py +1119 -0
- prismiq/persistence/saved_query_store.py +336 -0
- prismiq/persistence/schema.sql +95 -0
- prismiq/persistence/setup.py +222 -0
- prismiq/persistence/tables.py +76 -0
- prismiq/pins.py +72 -0
- prismiq/py.typed +0 -0
- prismiq/query.py +1233 -0
- prismiq/schema.py +333 -0
- prismiq/schema_config.py +354 -0
- prismiq/sql_utils.py +147 -0
- prismiq/sql_validator.py +219 -0
- prismiq/sqlalchemy_builder.py +577 -0
- prismiq/timeseries.py +410 -0
- prismiq/transforms.py +471 -0
- prismiq/trends.py +573 -0
- prismiq/types.py +688 -0
- prismiq-0.1.0.dist-info/METADATA +109 -0
- prismiq-0.1.0.dist-info/RECORD +39 -0
- prismiq-0.1.0.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: prismiq
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Open-source embedded analytics platform
|
|
5
|
+
Project-URL: Homepage, https://github.com/prismiq/prismiq
|
|
6
|
+
Project-URL: Documentation, https://prismiq.dev/docs
|
|
7
|
+
Project-URL: Repository, https://github.com/prismiq/prismiq
|
|
8
|
+
Author: Prismiq Contributors
|
|
9
|
+
License-Expression: MIT
|
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
|
11
|
+
Classifier: Framework :: FastAPI
|
|
12
|
+
Classifier: Intended Audience :: Developers
|
|
13
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Topic :: Database
|
|
19
|
+
Classifier: Typing :: Typed
|
|
20
|
+
Requires-Python: >=3.10
|
|
21
|
+
Requires-Dist: asyncpg>=0.29.0
|
|
22
|
+
Requires-Dist: fastapi>=0.109.0
|
|
23
|
+
Requires-Dist: pydantic>=2.0.0
|
|
24
|
+
Requires-Dist: sqlalchemy>=2.0.0
|
|
25
|
+
Requires-Dist: sqlglot>=26.0.0
|
|
26
|
+
Requires-Dist: uvicorn>=0.27.0
|
|
27
|
+
Provides-Extra: dev
|
|
28
|
+
Requires-Dist: httpx>=0.27.0; extra == 'dev'
|
|
29
|
+
Requires-Dist: pre-commit>=3.7.0; extra == 'dev'
|
|
30
|
+
Requires-Dist: pyright>=1.1.350; extra == 'dev'
|
|
31
|
+
Requires-Dist: pytest-asyncio>=0.23.0; extra == 'dev'
|
|
32
|
+
Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
|
|
33
|
+
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
34
|
+
Requires-Dist: ruff>=0.4.0; extra == 'dev'
|
|
35
|
+
Provides-Extra: redis
|
|
36
|
+
Requires-Dist: redis>=5.0.0; extra == 'redis'
|
|
37
|
+
Description-Content-Type: text/markdown
|
|
38
|
+
|
|
39
|
+
# Prismiq
|
|
40
|
+
|
|
41
|
+
Open-source embedded analytics engine for Python.
|
|
42
|
+
|
|
43
|
+
## Installation
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
pip install prismiq
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Quick Start
|
|
50
|
+
|
|
51
|
+
```python
|
|
52
|
+
from prismiq import PrismiqEngine
|
|
53
|
+
|
|
54
|
+
# Connect to your database
|
|
55
|
+
engine = await PrismiqEngine.create(
|
|
56
|
+
database_url="postgresql://user:pass@localhost/mydb",
|
|
57
|
+
exposed_tables=["customers", "orders", "products"]
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
# Get schema
|
|
61
|
+
schema = await engine.get_schema()
|
|
62
|
+
|
|
63
|
+
# Execute a query
|
|
64
|
+
result = await engine.execute({
|
|
65
|
+
"tables": [{"id": "t1", "name": "orders"}],
|
|
66
|
+
"columns": [
|
|
67
|
+
{"table_id": "t1", "name": "status"},
|
|
68
|
+
{"table_id": "t1", "name": "total", "aggregation": "sum"}
|
|
69
|
+
],
|
|
70
|
+
"group_by": [{"table_id": "t1", "column": "status"}]
|
|
71
|
+
})
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
## Features
|
|
75
|
+
|
|
76
|
+
- **Schema introspection** - Discover tables, columns, and relationships
|
|
77
|
+
- **Visual query building** - Build SQL from JSON query definitions
|
|
78
|
+
- **Async execution** - Non-blocking database operations with asyncpg
|
|
79
|
+
- **Type safe** - Full type hints with Pydantic models
|
|
80
|
+
- **Multi-tenant support** - Schema-based isolation with Alembic integration
|
|
81
|
+
|
|
82
|
+
## Multi-Tenant Integration
|
|
83
|
+
|
|
84
|
+
For applications with schema-based multi-tenancy, Prismiq provides SQLAlchemy declarative models and sync table creation:
|
|
85
|
+
|
|
86
|
+
```python
|
|
87
|
+
from sqlalchemy import create_engine
|
|
88
|
+
from prismiq import ensure_tables_sync, PrismiqBase
|
|
89
|
+
|
|
90
|
+
engine = create_engine("postgresql://user:pass@localhost/db")
|
|
91
|
+
|
|
92
|
+
# Create tables in a tenant-specific schema
|
|
93
|
+
with engine.connect() as conn:
|
|
94
|
+
ensure_tables_sync(conn, schema_name="tenant_123")
|
|
95
|
+
conn.commit()
|
|
96
|
+
|
|
97
|
+
# For Alembic integration, access the metadata:
|
|
98
|
+
# PrismiqBase.metadata.tables contains all Prismiq table definitions
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
See [Multi-Tenant Integration Guide](../../docs/multi-tenant-integration.md) for complete documentation.
|
|
102
|
+
|
|
103
|
+
## Documentation
|
|
104
|
+
|
|
105
|
+
See the [main repository](https://github.com/prismiq/prismiq) for full documentation.
|
|
106
|
+
|
|
107
|
+
## License
|
|
108
|
+
|
|
109
|
+
MIT
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
prismiq/__init__.py,sha256=Cv6J72XFFbQrFpc01H7_0RvxtJfdQUflTkTKBoUVKPM,16226
|
|
2
|
+
prismiq/api.py,sha256=ambac1hfgNuskdnpUyBYcVXr2AyAVRaJOKdUTjd-XN0,64232
|
|
3
|
+
prismiq/auth.py,sha256=965TeZrK0rd2sYtzGyFCPPFNjGXstyX7JXbDOLNaYKo,3151
|
|
4
|
+
prismiq/cache.py,sha256=SZUlUa-id8xwfftD6UrnDvoIgk_RjGM8S7pyTfmZ8xg,15995
|
|
5
|
+
prismiq/calculated_field_processor.py,sha256=FRt5fRNhgJQlaEIuLAvmRVvDhS6DIQ5CXTGJj0DpzjI,9516
|
|
6
|
+
prismiq/calculated_fields.py,sha256=6JyMRdqM5mqIPIq_YOn59phbkR7_gIs2TRFYv4UGy3Q,31693
|
|
7
|
+
prismiq/dashboard_store.py,sha256=QcXU_TsPLdmyHIJh_Ly4mTcyABeBYESrdSamGJ-nOLk,40530
|
|
8
|
+
prismiq/dashboards.py,sha256=-WAjUjoyi_FPswepAAvITN5vE7Et140J8XIZdKFst2o,9095
|
|
9
|
+
prismiq/dates.py,sha256=VA13E_XpRky2HbjnZfSpKU09EKHAG-3y1sZnHOXq5P8,7994
|
|
10
|
+
prismiq/engine.py,sha256=9i6Q8GBIihVptSuUhOyT7p8fiEWO7Jni_oIGVEIMCwg,47373
|
|
11
|
+
prismiq/executor.py,sha256=1_kZL8TQZtNZ5jwoVWIByztgR7mlm70R8TsLhUrcX1U,12191
|
|
12
|
+
prismiq/filter_merge.py,sha256=WKSI5azujL5sEQiyen5d7cblQIm578wkYT4MLERlcpw,12784
|
|
13
|
+
prismiq/formatting.py,sha256=fJiDKkubQiaQuuut3DSq2VxcG0vvBpF6_Eh7nX2TdVM,8198
|
|
14
|
+
prismiq/logging.py,sha256=PnDPGwrY4mlkXcAJ-MC_dWTzeGAvh1cuxGSTRdi7sCM,13825
|
|
15
|
+
prismiq/metrics.py,sha256=RCOWwGcyN2Zw7zG8_-EhcT5Oz5wAYTFwaQaawYqfu5U,17228
|
|
16
|
+
prismiq/middleware.py,sha256=VZ4gmC9SpWA_piDE6CU42OJjzhDRa-ZGn7ngm-4g6DI,10817
|
|
17
|
+
prismiq/permissions.py,sha256=bYNHMh1iJdRddQ6slDYABf3egOqZBIDhF-avZ9rVt3Q,2264
|
|
18
|
+
prismiq/pins.py,sha256=JCg_skBR5uQu3F_J8cFQraKcM9-vZuWKhNYCY1Yqzbg,2327
|
|
19
|
+
prismiq/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
20
|
+
prismiq/query.py,sha256=lkUX9LwwQsvuLgwTUROuOzLnOHJzhIl6t-E0ELhFlH8,49378
|
|
21
|
+
prismiq/schema.py,sha256=vjdItFsaovMhBGPQ7YaRXz2N9EAIo30WnEolhE8bI8c,12258
|
|
22
|
+
prismiq/schema_config.py,sha256=g9rKaSLzjgs2FF7eMnOHxFDUObpwEdNDFkBgUu5wDPg,11453
|
|
23
|
+
prismiq/sql_utils.py,sha256=I1VRGvHwMYTYlY7hqr6hQQ64nzr9Cd8H4pxQUnT_Q1g,5238
|
|
24
|
+
prismiq/sql_validator.py,sha256=UVfgI0KH7UcuBbWSTtZbFe5TMcSN_os937MNUmCEIKI,6811
|
|
25
|
+
prismiq/sqlalchemy_builder.py,sha256=w2qBn-CZ7b0308xosmmp3yfiZMTQXyJITfSKMDdJHfA,23723
|
|
26
|
+
prismiq/timeseries.py,sha256=pJKWbPCjfmejs-5WpVGcLEUWtOx-VyRDlr6EfPZSmLw,12303
|
|
27
|
+
prismiq/transforms.py,sha256=QSWR5iWTVEufu8aiercPzlESrtV8dDupdLgvcZRKfYk,14030
|
|
28
|
+
prismiq/trends.py,sha256=dnR7AxhzzYKcRwN2xc5TZIlUZa_ms4uEogmohDcqi2Q,18219
|
|
29
|
+
prismiq/types.py,sha256=MyxPXbng-iUcun9jY_pLMsOLoculKR1CPgi8p1PnBNU,19057
|
|
30
|
+
prismiq/persistence/__init__.py,sha256=pZT8d-kd81nf4GJ7F4StFmjtG0XopmMekcVWjDAz1IU,1025
|
|
31
|
+
prismiq/persistence/models.py,sha256=NKyfJVHnMZsxi3ixJbAxKrU-27YsCejGOdfg02gJGqo,8303
|
|
32
|
+
prismiq/persistence/postgres_store.py,sha256=WSeBubKPhhlS5RekdqTQ0rnXswQVhP9V8g92SnWuvkY,40142
|
|
33
|
+
prismiq/persistence/saved_query_store.py,sha256=jof4JdEbl2sOsN0mf6Pl2q8HXEWGb7erN33aQdJ98wg,11333
|
|
34
|
+
prismiq/persistence/schema.sql,sha256=SDOyvSaj5tgl0nR1nklPYoMeC9LKt_Dr4TC_5A5jsa0,3705
|
|
35
|
+
prismiq/persistence/setup.py,sha256=9TYqsbJxwblLqOeSlwu37JbdI1LwhuE4vxAvgPOGozs,7557
|
|
36
|
+
prismiq/persistence/tables.py,sha256=5ctwTa5fpMZrAjYxI3htQO_Ry2Z1hX6Q-7g6DlzYuIs,2718
|
|
37
|
+
prismiq-0.1.0.dist-info/METADATA,sha256=PH6lmAFhGo0de0dBgYjXN8hL-x4GeHX26EbN71zI75E,3301
|
|
38
|
+
prismiq-0.1.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
39
|
+
prismiq-0.1.0.dist-info/RECORD,,
|