lkr-dev-cli 0.0.53__tar.gz → 0.0.55__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.
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/PKG-INFO +10 -7
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/codemode/main.py +29 -26
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/codemode/swagger.json +3072 -2056
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/main.py +8 -3
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/pyproject.toml +14 -7
- lkr_dev_cli-0.0.55/uv.lock +2138 -0
- lkr_dev_cli-0.0.53/uv.lock +0 -1912
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-code-mode/SKILL.md +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-code-mode/scripts/examples.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-code-mode/scripts/order_items_query.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-code-mode/scripts/personal_folder_dashboards.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-code-mode/scripts/readme.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-code-mode/scripts/traverse_folders.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-project-helper/SKILL.md +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-project-helper/scripts/bq_view_lookml_generator.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-project-helper/scripts/configure_model.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-project-helper/scripts/create_custom_view.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-project-helper/scripts/deploy_and_reset_workspace.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-project-helper/scripts/ensure_project_and_model.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-project-helper/scripts/generate_lookml.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-project-helper/scripts/init_project.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-project-helper/scripts/inspect_connections.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-project-helper/scripts/migrate_dashboard_to_udd.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-project-helper/scripts/upload_assets.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.agents/skills/lkr-project-helper/scripts/validate_and_commit.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.github/workflows/ci.yml +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.github/workflows/release.yml +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.github/workflows/website.yml +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.gitignore +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.python-version +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.vscode/launch.json +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/.vscode/settings.json +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/Dockerfile +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/LICENSE +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/Makefile +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/README.md +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/cloudbuild.yaml +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/codemode.md +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/__init__.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/auth/__init__.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/auth/main.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/auth/oauth.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/auth_service.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/classes.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/codemode/LOCAL.md +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/codemode/__init__.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/codemode/constant.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/codemode/download_swagger.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/codemode/examples.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/codemode/help.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/codemode/readme.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/codemode/type.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/constants.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/custom_types.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/exceptions.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/extended_sdk_methods/__init__.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/extended_sdk_methods/classes.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/extended_sdk_methods/main.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/logger.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/mcp/classes.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/mcp/main.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/mcp/utils.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/observability/classes.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/observability/embed_container.html +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/observability/main.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/observability/utils.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/tools/classes.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/tools/lookml.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/tools/main.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr/tools/permission_deprecation.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr.md +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/lkr_dev_cli/__init__.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/tests/TESTING.md +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/tests/test_codemode.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/tests/test_dependency_resolution.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/tests/test_deps.sh +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/tests/test_extended_sdk_methods.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/tests/test_init_sdk.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/tests/test_lookml_tools.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/tests/test_oauth_account.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/tests/test_permission_deprecation.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/tests/test_version.py +0 -0
- {lkr_dev_cli-0.0.53 → lkr_dev_cli-0.0.55}/ty.toml +0 -0
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: lkr-dev-cli
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.55
|
|
4
4
|
Summary: lkr: a command line interface for looker
|
|
5
5
|
Author: bwebs
|
|
6
6
|
License-Expression: MIT
|
|
7
7
|
License-File: LICENSE
|
|
8
8
|
Requires-Python: >=3.12
|
|
9
9
|
Requires-Dist: cryptography>=48.0.1
|
|
10
|
-
Requires-Dist: looker-sdk>=
|
|
10
|
+
Requires-Dist: looker-sdk>=26.12.0
|
|
11
11
|
Requires-Dist: pydantic>=2.11.7
|
|
12
12
|
Requires-Dist: pydash>=8.0.5
|
|
13
13
|
Requires-Dist: questionary>=2.1.0
|
|
@@ -17,16 +17,19 @@ Requires-Dist: typer>=0.16.0
|
|
|
17
17
|
Provides-Extra: all
|
|
18
18
|
Requires-Dist: duckdb>=1.3.1; extra == 'all'
|
|
19
19
|
Requires-Dist: fastapi[standard]>=0.136.3; extra == 'all'
|
|
20
|
-
Requires-Dist: mcp[cli]
|
|
21
|
-
Requires-Dist: pydantic-monty; extra == 'all'
|
|
20
|
+
Requires-Dist: mcp[cli]<2,>=1.27.2; extra == 'all'
|
|
21
|
+
Requires-Dist: pydantic-monty==0.0.23; extra == 'all'
|
|
22
22
|
Requires-Dist: selenium>=4.34.0; extra == 'all'
|
|
23
|
+
Provides-Extra: code-mode
|
|
24
|
+
Requires-Dist: mcp[cli]<2,>=1.27.2; extra == 'code-mode'
|
|
25
|
+
Requires-Dist: pydantic-monty==0.0.23; extra == 'code-mode'
|
|
23
26
|
Provides-Extra: codemode
|
|
24
|
-
Requires-Dist: mcp[cli]
|
|
25
|
-
Requires-Dist: pydantic-monty; extra == 'codemode'
|
|
27
|
+
Requires-Dist: mcp[cli]<2,>=1.27.2; extra == 'codemode'
|
|
28
|
+
Requires-Dist: pydantic-monty==0.0.23; extra == 'codemode'
|
|
26
29
|
Provides-Extra: mcp
|
|
27
30
|
Requires-Dist: duckdb>=1.3.1; extra == 'mcp'
|
|
28
31
|
Requires-Dist: fastapi[standard]>=0.136.3; extra == 'mcp'
|
|
29
|
-
Requires-Dist: mcp[cli]
|
|
32
|
+
Requires-Dist: mcp[cli]<2,>=1.27.2; extra == 'mcp'
|
|
30
33
|
Provides-Extra: observability
|
|
31
34
|
Requires-Dist: fastapi[standard]>=0.136.3; extra == 'observability'
|
|
32
35
|
Requires-Dist: selenium>=4.34.0; extra == 'observability'
|
|
@@ -199,34 +199,37 @@ def run_python_code(
|
|
|
199
199
|
# Fallback to regex if parsing fails
|
|
200
200
|
code = re.sub(r"\bsdk\.([a-zA-Z_][a-zA-Z0-9_]*)\b", r"\1", code)
|
|
201
201
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
202
|
+
collector = pydantic_monty.CollectString()
|
|
203
|
+
with pydantic_monty.Monty() as m, m.checkout() as session:
|
|
204
|
+
# Use low-level OS stdout capture and CollectString to ensure print() statements
|
|
205
|
+
# don't corrupt the JSON-RPC stream
|
|
206
|
+
with capture_os_stdout() as cap:
|
|
207
|
+
result = session.feed_run(
|
|
208
|
+
code,
|
|
209
|
+
external_lookup=external_funcs,
|
|
210
|
+
print_callback=collector,
|
|
211
|
+
)
|
|
212
|
+
printed_output = collector.output or cap.output
|
|
213
|
+
|
|
214
|
+
# session.feed_run() returns the evaluated result of the last expression
|
|
215
|
+
try:
|
|
216
|
+
# Use JSON for nice formatting if it's a dict/list
|
|
217
|
+
if result is not None:
|
|
218
|
+
if isinstance(result, str):
|
|
219
|
+
output = result
|
|
220
|
+
else:
|
|
221
|
+
output = json.dumps(result, indent=2, default=str)
|
|
217
222
|
else:
|
|
218
|
-
output =
|
|
219
|
-
|
|
220
|
-
output =
|
|
221
|
-
except Exception: # noqa: BLE001
|
|
222
|
-
output = repr(result)
|
|
223
|
+
output = ""
|
|
224
|
+
except Exception: # noqa: BLE001
|
|
225
|
+
output = repr(result)
|
|
223
226
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
227
|
+
if printed_output:
|
|
228
|
+
return json.dumps({
|
|
229
|
+
"stdout": printed_output,
|
|
230
|
+
"result": result
|
|
231
|
+
}, indent=2, default=str)
|
|
232
|
+
return output
|
|
230
233
|
except Exception as e: # noqa: BLE001
|
|
231
234
|
logger.error(f"Error executing Monty: {e}")
|
|
232
235
|
if is_auth_expired(e):
|