datajunction-query 0.0.1a57__tar.gz → 0.0.1a59__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.

Files changed (95) hide show
  1. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/PKG-INFO +2 -1
  2. {datajunction_query-0.0.1a57/tests → datajunction_query-0.0.1a59}/config.djqs.yml +10 -0
  3. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/__about__.py +1 -1
  4. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/api/helpers.py +1 -1
  5. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/api/main.py +15 -1
  6. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/api/queries.py +1 -1
  7. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/api/tables.py +8 -2
  8. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/engine.py +1 -6
  9. datajunction_query-0.0.1a59/pdm.lock +2217 -0
  10. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/pyproject.toml +1 -0
  11. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/api/table_test.py +1 -1
  12. datajunction_query-0.0.1a57/pdm.lock +0 -1910
  13. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/.coveragerc +0 -0
  14. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/.flake8 +0 -0
  15. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/.gitignore +0 -0
  16. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/.isort.cfg +0 -0
  17. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/.pre-commit-config.yaml +0 -0
  18. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/.pylintrc +0 -0
  19. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/.readthedocs.yml +0 -0
  20. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/AUTHORS.rst +0 -0
  21. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/CODE_OF_CONDUCT.md +0 -0
  22. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/Dockerfile +0 -0
  23. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/LICENSE.txt +0 -0
  24. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/Makefile +0 -0
  25. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/README.rst +0 -0
  26. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/alembic/README +0 -0
  27. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/alembic/env.py +0 -0
  28. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/alembic/script.py.mako +0 -0
  29. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/alembic/versions/2023_02_28_0541-a7e11a2438b4_initial_migration.py +0 -0
  30. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/alembic/versions/2023_10_09_1858-f3407a1ec625_add_type_and_extra_para_ms_field_for_.py +0 -0
  31. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/alembic.ini +0 -0
  32. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/config.jsonschema +0 -0
  33. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/__init__.py +0 -0
  34. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/api/__init__.py +0 -0
  35. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/api/catalogs.py +0 -0
  36. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/api/engines.py +0 -0
  37. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/config.py +0 -0
  38. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/constants.py +0 -0
  39. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/enum.py +0 -0
  40. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/exceptions.py +0 -0
  41. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/fixes.py +0 -0
  42. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/models/__init__.py +0 -0
  43. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/models/catalog.py +0 -0
  44. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/models/engine.py +0 -0
  45. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/models/query.py +0 -0
  46. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/models/table.py +0 -0
  47. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/typing.py +0 -0
  48. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/djqs/utils.py +0 -0
  49. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/docker/cockroachdb/cockroachdb_examples_init.sql +0 -0
  50. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/docker/cockroachdb/cockroachdb_metadata_init.sql +0 -0
  51. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/docker/cockroachdb/steam-games.csv +0 -0
  52. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/docker/cockroachdb/steam-hours-played.csv +0 -0
  53. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/docker/default.duckdb +0 -0
  54. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/docker/druid_environment +0 -0
  55. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/docker/druid_init.sh +0 -0
  56. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/docker/druid_spec.json +0 -0
  57. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/docker/duckdb.sql +0 -0
  58. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/docker/duckdb_load.py +0 -0
  59. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/docker/postgres_init.roads.sql +0 -0
  60. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/docker/postgres_init.sql +0 -0
  61. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/docker/spark.roads.sql +0 -0
  62. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/docker/spark_load_roads.py +0 -0
  63. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/docker/wait-for +0 -0
  64. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/openapi.json +0 -0
  65. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/scripts/generate-openapi.py +0 -0
  66. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/setup.cfg +0 -0
  67. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/__init__.py +0 -0
  68. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/api/__init__.py +0 -0
  69. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/api/catalogs_test.py +0 -0
  70. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/api/engines_test.py +0 -0
  71. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/api/queries_test.py +0 -0
  72. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59/tests}/config.djqs.yml +0 -0
  73. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/configs/databases/druid.yaml +0 -0
  74. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/configs/databases/gsheets.yaml +0 -0
  75. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/configs/databases/postgres.yaml +0 -0
  76. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/configs/nodes/core/comments.yaml +0 -0
  77. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/configs/nodes/core/dim_users.yaml +0 -0
  78. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/configs/nodes/core/num_comments.yaml +0 -0
  79. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/configs/nodes/core/users.yaml +0 -0
  80. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/conftest.py +0 -0
  81. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/exceptions_test.py +0 -0
  82. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/resources/contractors.parquet +0 -0
  83. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/resources/dispatchers.parquet +0 -0
  84. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/resources/hard_hat_state.parquet +0 -0
  85. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/resources/hard_hats.parquet +0 -0
  86. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/resources/municipality.parquet +0 -0
  87. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/resources/municipality_municipality_type.parquet +0 -0
  88. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/resources/municipality_type.parquet +0 -0
  89. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/resources/repair_order_details.parquet +0 -0
  90. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/resources/repair_orders.parquet +0 -0
  91. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/resources/repair_type.parquet +0 -0
  92. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/resources/us_region.parquet +0 -0
  93. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/resources/us_states.parquet +0 -0
  94. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tests/utils_test.py +0 -0
  95. {datajunction_query-0.0.1a57 → datajunction_query-0.0.1a59}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: datajunction-query
3
- Version: 0.0.1a57
3
+ Version: 0.0.1a59
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
@@ -1,4 +1,4 @@
1
1
  """
2
2
  Version for Hatch
3
3
  """
4
- __version__ = "0.0.1a57"
4
+ __version__ = "0.0.1a59"
@@ -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, **extra_params)
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
- load_djqs_config(settings=settings, session=session)
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)
@@ -66,7 +66,7 @@ router = APIRouter(tags=["SQL Queries"])
66
66
  },
67
67
  },
68
68
  )
69
- async def submit_query(
69
+ async def submit_query( # pylint: disable=too-many-arguments
70
70
  accept: Optional[str] = Header(None),
71
71
  *,
72
72
  session: Session = Depends(get_session),
@@ -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=engine_version or settings.default_reflection_engine_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]] = []