datajunction-query 0.0.1a57__tar.gz → 0.0.1a58__tar.gz
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.
Potentially problematic release.
This version of datajunction-query might be problematic. Click here for more details.
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/PKG-INFO +2 -1
- {datajunction_query-0.0.1a57/tests → datajunction_query-0.0.1a58}/config.djqs.yml +10 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/__about__.py +1 -1
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/api/helpers.py +1 -1
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/api/main.py +15 -1
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/api/queries.py +1 -1
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/api/tables.py +8 -2
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/engine.py +1 -6
- datajunction_query-0.0.1a58/pdm.lock +2217 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/pyproject.toml +1 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/api/table_test.py +1 -1
- datajunction_query-0.0.1a57/pdm.lock +0 -1910
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/.coveragerc +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/.flake8 +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/.gitignore +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/.isort.cfg +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/.pre-commit-config.yaml +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/.pylintrc +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/.readthedocs.yml +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/AUTHORS.rst +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/CODE_OF_CONDUCT.md +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/Dockerfile +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/LICENSE.txt +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/Makefile +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/README.rst +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/alembic/README +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/alembic/env.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/alembic/script.py.mako +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/alembic/versions/2023_02_28_0541-a7e11a2438b4_initial_migration.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/alembic/versions/2023_10_09_1858-f3407a1ec625_add_type_and_extra_para_ms_field_for_.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/alembic.ini +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/config.jsonschema +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/__init__.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/api/__init__.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/api/catalogs.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/api/engines.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/config.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/constants.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/enum.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/exceptions.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/fixes.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/models/__init__.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/models/catalog.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/models/engine.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/models/query.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/models/table.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/typing.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/djqs/utils.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/docker/cockroachdb/cockroachdb_examples_init.sql +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/docker/cockroachdb/cockroachdb_metadata_init.sql +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/docker/cockroachdb/steam-games.csv +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/docker/cockroachdb/steam-hours-played.csv +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/docker/default.duckdb +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/docker/druid_environment +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/docker/druid_init.sh +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/docker/druid_spec.json +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/docker/duckdb.sql +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/docker/duckdb_load.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/docker/postgres_init.roads.sql +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/docker/postgres_init.sql +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/docker/spark.roads.sql +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/docker/spark_load_roads.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/docker/wait-for +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/openapi.json +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/scripts/generate-openapi.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/setup.cfg +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/__init__.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/api/__init__.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/api/catalogs_test.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/api/engines_test.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/api/queries_test.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58/tests}/config.djqs.yml +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/configs/databases/druid.yaml +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/configs/databases/gsheets.yaml +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/configs/databases/postgres.yaml +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/configs/nodes/core/comments.yaml +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/configs/nodes/core/dim_users.yaml +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/configs/nodes/core/num_comments.yaml +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/configs/nodes/core/users.yaml +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/conftest.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/exceptions_test.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/resources/contractors.parquet +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/resources/dispatchers.parquet +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/resources/hard_hat_state.parquet +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/resources/hard_hats.parquet +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/resources/municipality.parquet +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/resources/municipality_municipality_type.parquet +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/resources/municipality_type.parquet +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/resources/repair_order_details.parquet +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/resources/repair_orders.parquet +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/resources/repair_type.parquet +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/resources/us_region.parquet +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/resources/us_states.parquet +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tests/utils_test.py +0 -0
- {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a58}/tox.ini +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: datajunction-query
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.1a58
|
|
4
4
|
Summary: OSS Implementation of a DataJunction Query Service
|
|
5
5
|
Project-URL: repository, https://github.com/DataJunction/dj
|
|
6
6
|
Author-email: DataJunction Authors <roberto@dealmeida.net>
|
|
@@ -32,6 +32,7 @@ Requires-Dist: sqlalchemy<2.0.0,>=1.4.41
|
|
|
32
32
|
Requires-Dist: sqlmodel<1.0.0,>=0.0.8
|
|
33
33
|
Requires-Dist: sqlparse<1.0.0,>=0.4.3
|
|
34
34
|
Requires-Dist: toml>=0.10.2
|
|
35
|
+
Requires-Dist: trino>=0.324.0
|
|
35
36
|
Provides-Extra: uvicorn
|
|
36
37
|
Requires-Dist: uvicorn[standard]>=0.21.1; extra == 'uvicorn'
|
|
37
38
|
Description-Content-Type: text/x-rst
|
|
@@ -5,7 +5,17 @@ engines:
|
|
|
5
5
|
uri: duckdb:////code/docker/default.duckdb
|
|
6
6
|
extra_params:
|
|
7
7
|
location: /code/docker/default.duckdb
|
|
8
|
+
- name: trino
|
|
9
|
+
version: 451
|
|
10
|
+
type: sqlalchemy
|
|
11
|
+
uri: trino://trino-coordinator:8080/tpch/sf1
|
|
12
|
+
extra_params:
|
|
13
|
+
http_scheme: http
|
|
14
|
+
user: admin
|
|
8
15
|
catalogs:
|
|
9
16
|
- name: warehouse
|
|
10
17
|
engines:
|
|
11
18
|
- duckdb
|
|
19
|
+
- name: tpch
|
|
20
|
+
engines:
|
|
21
|
+
- trino
|
|
@@ -58,7 +58,7 @@ def get_columns(
|
|
|
58
58
|
if not uri:
|
|
59
59
|
raise DJException("Cannot retrieve columns without a uri")
|
|
60
60
|
|
|
61
|
-
engine = create_engine(uri,
|
|
61
|
+
engine = create_engine(uri, connect_args=extra_params)
|
|
62
62
|
try:
|
|
63
63
|
inspector = inspect(engine)
|
|
64
64
|
column_metadata = inspector.get_columns(
|
|
@@ -8,6 +8,7 @@ Main DJ query server app.
|
|
|
8
8
|
# pylint: disable=unused-import,expression-not-assigned
|
|
9
9
|
|
|
10
10
|
import logging
|
|
11
|
+
from contextlib import asynccontextmanager
|
|
11
12
|
|
|
12
13
|
from fastapi import FastAPI, Request
|
|
13
14
|
from fastapi.responses import JSONResponse
|
|
@@ -22,7 +23,19 @@ _logger = logging.getLogger(__name__)
|
|
|
22
23
|
|
|
23
24
|
settings = get_settings()
|
|
24
25
|
session = next(get_session())
|
|
25
|
-
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@asynccontextmanager
|
|
29
|
+
async def lifespan(app: FastAPI): # pylint: disable=W0621,W0613
|
|
30
|
+
"""
|
|
31
|
+
Load DJQS config on app startup
|
|
32
|
+
"""
|
|
33
|
+
try:
|
|
34
|
+
load_djqs_config(settings=settings, session=session)
|
|
35
|
+
except Exception as e: # pylint: disable=W0718
|
|
36
|
+
_logger.warning("Could not load DJQS config: %s", e)
|
|
37
|
+
yield
|
|
38
|
+
|
|
26
39
|
|
|
27
40
|
app = FastAPI(
|
|
28
41
|
title=settings.name,
|
|
@@ -32,6 +45,7 @@ app = FastAPI(
|
|
|
32
45
|
"name": "MIT License",
|
|
33
46
|
"url": "https://mit-license.org/",
|
|
34
47
|
},
|
|
48
|
+
lifespan=lifespan,
|
|
35
49
|
)
|
|
36
50
|
app.include_router(catalogs.get_router)
|
|
37
51
|
app.include_router(engines.get_router)
|
|
@@ -33,14 +33,20 @@ def table_columns(
|
|
|
33
33
|
f"for `table` must be in the format `<catalog>.<schema>.<table>`",
|
|
34
34
|
)
|
|
35
35
|
settings = get_settings()
|
|
36
|
+
|
|
37
|
+
if engine_version == "":
|
|
38
|
+
version = ""
|
|
39
|
+
else: # pragma: no cover
|
|
40
|
+
version = engine_version or settings.default_reflection_engine_version
|
|
41
|
+
|
|
36
42
|
engine = get_engine(
|
|
37
43
|
session=session,
|
|
38
44
|
name=engine or settings.default_reflection_engine,
|
|
39
|
-
version=
|
|
45
|
+
version=version,
|
|
40
46
|
)
|
|
41
47
|
external_columns = get_columns(
|
|
42
48
|
uri=engine.uri,
|
|
43
|
-
extra_params=
|
|
49
|
+
extra_params=engine.extra_params,
|
|
44
50
|
catalog=table_parts[0],
|
|
45
51
|
schema=table_parts[1],
|
|
46
52
|
table=table_parts[2],
|
|
@@ -14,7 +14,6 @@ from sqlalchemy import create_engine, text
|
|
|
14
14
|
from sqlmodel import Session, select
|
|
15
15
|
|
|
16
16
|
from djqs.config import Settings
|
|
17
|
-
from djqs.models.catalog import Catalog
|
|
18
17
|
from djqs.models.engine import Engine, EngineType
|
|
19
18
|
from djqs.models.query import (
|
|
20
19
|
ColumnMetadata,
|
|
@@ -78,9 +77,6 @@ def run_query(
|
|
|
78
77
|
columns (name and type) and a stream of rows (tuples).
|
|
79
78
|
"""
|
|
80
79
|
_logger.info("Running query on catalog %s", query.catalog_name)
|
|
81
|
-
catalog = session.exec(
|
|
82
|
-
select(Catalog).where(Catalog.name == query.catalog_name),
|
|
83
|
-
).one()
|
|
84
80
|
engine = session.exec(
|
|
85
81
|
select(Engine)
|
|
86
82
|
.where(Engine.name == query.engine_name)
|
|
@@ -104,8 +100,7 @@ def run_query(
|
|
|
104
100
|
cur = conn.cursor()
|
|
105
101
|
|
|
106
102
|
return run_snowflake_query(query, cur)
|
|
107
|
-
|
|
108
|
-
sqla_engine = create_engine(engine.uri, **catalog.extra_params)
|
|
103
|
+
sqla_engine = create_engine(engine.uri, connect_args=engine.extra_params)
|
|
109
104
|
connection = sqla_engine.connect()
|
|
110
105
|
|
|
111
106
|
output: List[Tuple[str, List[ColumnMetadata], Stream]] = []
|