nivaria 0.11.0__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.
- nivaria-0.11.0/.editorconfig +14 -0
- nivaria-0.11.0/.gitattributes +5 -0
- nivaria-0.11.0/.github/workflows/build.yml +157 -0
- nivaria-0.11.0/.gitignore +24 -0
- nivaria-0.11.0/.markdownlint-cli2.yaml +18 -0
- nivaria-0.11.0/.python-version +1 -0
- nivaria-0.11.0/CLAUDE.md +25 -0
- nivaria-0.11.0/CONTRIBUTING.md +3 -0
- nivaria-0.11.0/LICENSE +5 -0
- nivaria-0.11.0/LICENSES/0BSD.txt +5 -0
- nivaria-0.11.0/PKG-INFO +66 -0
- nivaria-0.11.0/README.md +52 -0
- nivaria-0.11.0/REUSE.toml +16 -0
- nivaria-0.11.0/docs/DESIGN.md +2074 -0
- nivaria-0.11.0/docs/DEVELOPMENT.md +188 -0
- nivaria-0.11.0/docs/MANUAL.md +279 -0
- nivaria-0.11.0/docs/OPERATIONS.md +232 -0
- nivaria-0.11.0/docs/data-retrieval.md +98 -0
- nivaria-0.11.0/docs/measurements.md +108 -0
- nivaria-0.11.0/docs/screenshot.svg +1 -0
- nivaria-0.11.0/docs/snowflake-behavior.md +463 -0
- nivaria-0.11.0/justfile +12 -0
- nivaria-0.11.0/pyproject.toml +55 -0
- nivaria-0.11.0/src/nivaria/__init__.py +25 -0
- nivaria-0.11.0/src/nivaria/__main__.py +7 -0
- nivaria-0.11.0/src/nivaria/cache/__init__.py +3 -0
- nivaria-0.11.0/src/nivaria/cache/db.py +151 -0
- nivaria-0.11.0/src/nivaria/cache/preview.sql +22 -0
- nivaria-0.11.0/src/nivaria/cache/repository.py +1259 -0
- nivaria-0.11.0/src/nivaria/cache/schema.sql +616 -0
- nivaria-0.11.0/src/nivaria/cache/search.sql +21 -0
- nivaria-0.11.0/src/nivaria/format.py +106 -0
- nivaria-0.11.0/src/nivaria/fuzzy.py +211 -0
- nivaria-0.11.0/src/nivaria/models.py +588 -0
- nivaria-0.11.0/src/nivaria/paths.py +78 -0
- nivaria-0.11.0/src/nivaria/pipe_definition.py +83 -0
- nivaria-0.11.0/src/nivaria/profiles.py +222 -0
- nivaria-0.11.0/src/nivaria/service/__init__.py +3 -0
- nivaria-0.11.0/src/nivaria/service/fetch.py +473 -0
- nivaria-0.11.0/src/nivaria/service/jobs.py +647 -0
- nivaria-0.11.0/src/nivaria/settings.py +259 -0
- nivaria-0.11.0/src/nivaria/snowflake/__init__.py +3 -0
- nivaria-0.11.0/src/nivaria/snowflake/credential_cache.py +165 -0
- nivaria-0.11.0/src/nivaria/snowflake/gateway.py +758 -0
- nivaria-0.11.0/src/nivaria/snowflake/pool.py +591 -0
- nivaria-0.11.0/src/nivaria/snowflake/queries.py +783 -0
- nivaria-0.11.0/src/nivaria/snowflake/sql_log.py +52 -0
- nivaria-0.11.0/src/nivaria/snowsight.py +76 -0
- nivaria-0.11.0/src/nivaria/ui/__init__.py +3 -0
- nivaria-0.11.0/src/nivaria/ui/about.txt +9 -0
- nivaria-0.11.0/src/nivaria/ui/app.py +313 -0
- nivaria-0.11.0/src/nivaria/ui/app.tcss +280 -0
- nivaria-0.11.0/src/nivaria/ui/messages.py +89 -0
- nivaria-0.11.0/src/nivaria/ui/screens/__init__.py +3 -0
- nivaria-0.11.0/src/nivaria/ui/screens/closing.py +49 -0
- nivaria-0.11.0/src/nivaria/ui/screens/connect.py +402 -0
- nivaria-0.11.0/src/nivaria/ui/screens/connecting.py +98 -0
- nivaria-0.11.0/src/nivaria/ui/screens/main.py +740 -0
- nivaria-0.11.0/src/nivaria/ui/screens/multipicker.py +203 -0
- nivaria-0.11.0/src/nivaria/ui/screens/picker.py +158 -0
- nivaria-0.11.0/src/nivaria/ui/screens/search.py +317 -0
- nivaria-0.11.0/src/nivaria/ui/views/__init__.py +3 -0
- nivaria-0.11.0/src/nivaria/ui/views/base.py +299 -0
- nivaria-0.11.0/src/nivaria/ui/views/grants.py +120 -0
- nivaria-0.11.0/src/nivaria/ui/views/pipe_list_view.py +257 -0
- nivaria-0.11.0/src/nivaria/ui/views/pipe_view.py +248 -0
- nivaria-0.11.0/src/nivaria/ui/views/schema_view.py +167 -0
- nivaria-0.11.0/src/nivaria/ui/views/stage_list_view.py +81 -0
- nivaria-0.11.0/src/nivaria/ui/views/table_list_view.py +102 -0
- nivaria-0.11.0/src/nivaria/ui/views/table_view.py +378 -0
- nivaria-0.11.0/src/nivaria/ui/views/tables.py +467 -0
- nivaria-0.11.0/src/nivaria/ui/views/task_list_view.py +138 -0
- nivaria-0.11.0/src/nivaria/ui/views/task_view.py +157 -0
- nivaria-0.11.0/src/nivaria/ui/views/view_list_view.py +150 -0
- nivaria-0.11.0/src/nivaria/ui/views/view_view.py +38 -0
- nivaria-0.11.0/src/nivaria/ui/widgets/__init__.py +3 -0
- nivaria-0.11.0/src/nivaria/ui/widgets/detail_pane.py +180 -0
- nivaria-0.11.0/src/nivaria/ui/widgets/object_tree.py +635 -0
- nivaria-0.11.0/src/nivaria/ui/widgets/plan.py +91 -0
- nivaria-0.11.0/src/nivaria/ui/widgets/status_bar.py +49 -0
- nivaria-0.11.0/src/nivaria/version.py +24 -0
- nivaria-0.11.0/tests/conftest.py +56 -0
- nivaria-0.11.0/tests/data/show_column_types.json +257 -0
- nivaria-0.11.0/tests/fakes.py +697 -0
- nivaria-0.11.0/tests/test_app.py +518 -0
- nivaria-0.11.0/tests/test_cache_db.py +180 -0
- nivaria-0.11.0/tests/test_chords.py +230 -0
- nivaria-0.11.0/tests/test_connect_screen.py +770 -0
- nivaria-0.11.0/tests/test_credential_cache.py +106 -0
- nivaria-0.11.0/tests/test_fetch.py +2515 -0
- nivaria-0.11.0/tests/test_format.py +131 -0
- nivaria-0.11.0/tests/test_fuzzy.py +243 -0
- nivaria-0.11.0/tests/test_gateway.py +839 -0
- nivaria-0.11.0/tests/test_main.py +40 -0
- nivaria-0.11.0/tests/test_main_screen.py +1600 -0
- nivaria-0.11.0/tests/test_models.py +272 -0
- nivaria-0.11.0/tests/test_multipicker.py +285 -0
- nivaria-0.11.0/tests/test_object_tree.py +911 -0
- nivaria-0.11.0/tests/test_paths.py +32 -0
- nivaria-0.11.0/tests/test_pipe_definition.py +80 -0
- nivaria-0.11.0/tests/test_plan.py +141 -0
- nivaria-0.11.0/tests/test_pool.py +831 -0
- nivaria-0.11.0/tests/test_profiles.py +280 -0
- nivaria-0.11.0/tests/test_queries.py +316 -0
- nivaria-0.11.0/tests/test_repository.py +1765 -0
- nivaria-0.11.0/tests/test_search_dialog.py +608 -0
- nivaria-0.11.0/tests/test_session_picker.py +323 -0
- nivaria-0.11.0/tests/test_settings.py +86 -0
- nivaria-0.11.0/tests/test_show_columns.py +208 -0
- nivaria-0.11.0/tests/test_snowsight.py +80 -0
- nivaria-0.11.0/tests/test_sql_log.py +138 -0
- nivaria-0.11.0/tests/test_status_bar.py +667 -0
- nivaria-0.11.0/tests/views/conftest.py +19 -0
- nivaria-0.11.0/tests/views/harness.py +531 -0
- nivaria-0.11.0/tests/views/test_cursor_settling.py +182 -0
- nivaria-0.11.0/tests/views/test_pipe_list_hover.py +111 -0
- nivaria-0.11.0/tests/views/test_pipe_list_view.py +302 -0
- nivaria-0.11.0/tests/views/test_pipe_view.py +825 -0
- nivaria-0.11.0/tests/views/test_registry.py +242 -0
- nivaria-0.11.0/tests/views/test_schema_view.py +386 -0
- nivaria-0.11.0/tests/views/test_scope_notes.py +300 -0
- nivaria-0.11.0/tests/views/test_sql_tab.py +41 -0
- nivaria-0.11.0/tests/views/test_stage_list_view.py +96 -0
- nivaria-0.11.0/tests/views/test_table_list_hover.py +112 -0
- nivaria-0.11.0/tests/views/test_table_list_view.py +192 -0
- nivaria-0.11.0/tests/views/test_table_view.py +840 -0
- nivaria-0.11.0/tests/views/test_task_list_hover.py +90 -0
- nivaria-0.11.0/tests/views/test_task_list_view.py +204 -0
- nivaria-0.11.0/tests/views/test_task_view.py +493 -0
- nivaria-0.11.0/tests/views/test_view_list_view.py +148 -0
- nivaria-0.11.0/tests/views/test_view_view.py +216 -0
- nivaria-0.11.0/tools/gen_test_ddl.py +189 -0
- nivaria-0.11.0/tools/probe_snowflake.py +264 -0
- nivaria-0.11.0/tools/trim_svg.py +193 -0
- nivaria-0.11.0/uv.lock +1523 -0
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2026 René de Hesselle <dehesselle@web.de>
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: 0BSD
|
|
4
|
+
|
|
5
|
+
root = true
|
|
6
|
+
|
|
7
|
+
[*]
|
|
8
|
+
end_of_line = lf
|
|
9
|
+
insert_final_newline = true
|
|
10
|
+
charset = utf-8
|
|
11
|
+
trim_trailing_whitespace = true
|
|
12
|
+
|
|
13
|
+
[*.md]
|
|
14
|
+
trim_trailing_whitespace = false
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2026 René de Hesselle <dehesselle@web.de>
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: 0BSD
|
|
4
|
+
|
|
5
|
+
name: Build
|
|
6
|
+
on:
|
|
7
|
+
push:
|
|
8
|
+
branches: ["**"]
|
|
9
|
+
tags: ["v[0-9]*"]
|
|
10
|
+
pull_request:
|
|
11
|
+
|
|
12
|
+
permissions:
|
|
13
|
+
contents: read
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
#-----------------------------------------------------------------------------
|
|
17
|
+
|
|
18
|
+
Lint:
|
|
19
|
+
runs-on: ubuntu-latest
|
|
20
|
+
steps:
|
|
21
|
+
- name: Checkout repository
|
|
22
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
23
|
+
with:
|
|
24
|
+
persist-credentials: false
|
|
25
|
+
|
|
26
|
+
- name: Install uv
|
|
27
|
+
uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
|
|
28
|
+
|
|
29
|
+
# keep aligned with [tool.ruff] in pyproject.toml
|
|
30
|
+
- name: Check formatting
|
|
31
|
+
run: uvx --from 'ruff~=0.16.0' ruff format --check .
|
|
32
|
+
|
|
33
|
+
- name: Lint
|
|
34
|
+
run: uvx --from 'ruff~=0.16.0' ruff check .
|
|
35
|
+
|
|
36
|
+
- name: Check REUSE compliance
|
|
37
|
+
run: uvx reuse lint
|
|
38
|
+
|
|
39
|
+
# Settings are in .markdownlint-cli2.yaml. This release bundles
|
|
40
|
+
# markdownlint-cli2 0.24.0; keep the pin in docs/DEVELOPMENT.md aligned.
|
|
41
|
+
- name: Lint Markdown
|
|
42
|
+
uses: DavidAnson/markdownlint-cli2-action@696eb3f2509270d7b882d2aa68347bc676e7af34 # v25.0.0
|
|
43
|
+
|
|
44
|
+
#-----------------------------------------------------------------------------
|
|
45
|
+
|
|
46
|
+
Test:
|
|
47
|
+
strategy:
|
|
48
|
+
fail-fast: false
|
|
49
|
+
matrix:
|
|
50
|
+
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
51
|
+
python: ["3.12"]
|
|
52
|
+
include:
|
|
53
|
+
- os: ubuntu-latest
|
|
54
|
+
python: "3.14"
|
|
55
|
+
runs-on: ${{ matrix.os }}
|
|
56
|
+
steps:
|
|
57
|
+
# full history for hatch-vcs
|
|
58
|
+
- name: Checkout repository
|
|
59
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
60
|
+
with:
|
|
61
|
+
fetch-depth: 0
|
|
62
|
+
persist-credentials: false
|
|
63
|
+
|
|
64
|
+
- name: Install uv
|
|
65
|
+
uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
|
|
66
|
+
with:
|
|
67
|
+
python-version: ${{ matrix.python }}
|
|
68
|
+
|
|
69
|
+
# python -m puts the repository root on sys.path for tests.fakes
|
|
70
|
+
- name: Run tests
|
|
71
|
+
run: uv run --locked python -m pytest
|
|
72
|
+
|
|
73
|
+
#-----------------------------------------------------------------------------
|
|
74
|
+
|
|
75
|
+
Build:
|
|
76
|
+
runs-on: ubuntu-latest
|
|
77
|
+
steps:
|
|
78
|
+
- name: Checkout repository
|
|
79
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
80
|
+
with:
|
|
81
|
+
fetch-depth: 0
|
|
82
|
+
persist-credentials: false
|
|
83
|
+
|
|
84
|
+
- name: Install uv
|
|
85
|
+
uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
|
|
86
|
+
|
|
87
|
+
- name: Build project
|
|
88
|
+
run: uv build --no-sources
|
|
89
|
+
|
|
90
|
+
- name: Smoke-test wheel
|
|
91
|
+
run: |
|
|
92
|
+
uv run --isolated --no-project --with dist/*.whl python - <<'EOF'
|
|
93
|
+
import os
|
|
94
|
+
import nivaria
|
|
95
|
+
print(nivaria.__version__)
|
|
96
|
+
if os.environ["GITHUB_REF_TYPE"] == "tag":
|
|
97
|
+
expected = os.environ["GITHUB_REF_NAME"].removeprefix("v")
|
|
98
|
+
assert nivaria.__version__ == expected, (nivaria.__version__, expected)
|
|
99
|
+
EOF
|
|
100
|
+
|
|
101
|
+
- name: Upload artifacts
|
|
102
|
+
uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
|
|
103
|
+
with:
|
|
104
|
+
name: dist
|
|
105
|
+
path: dist/
|
|
106
|
+
|
|
107
|
+
#-----------------------------------------------------------------------------
|
|
108
|
+
|
|
109
|
+
Release:
|
|
110
|
+
runs-on: ubuntu-latest
|
|
111
|
+
permissions:
|
|
112
|
+
contents: write
|
|
113
|
+
needs:
|
|
114
|
+
- Lint
|
|
115
|
+
- Test
|
|
116
|
+
- Build
|
|
117
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
118
|
+
steps:
|
|
119
|
+
- name: Download artifacts
|
|
120
|
+
uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
121
|
+
with:
|
|
122
|
+
name: dist
|
|
123
|
+
path: dist/
|
|
124
|
+
|
|
125
|
+
- name: Create draft release
|
|
126
|
+
env:
|
|
127
|
+
GH_TOKEN: ${{ github.token }}
|
|
128
|
+
run: >-
|
|
129
|
+
gh release create "$GITHUB_REF_NAME" dist/*
|
|
130
|
+
--repo "$GITHUB_REPOSITORY"
|
|
131
|
+
--draft
|
|
132
|
+
--verify-tag
|
|
133
|
+
--generate-notes
|
|
134
|
+
|
|
135
|
+
#-----------------------------------------------------------------------------
|
|
136
|
+
|
|
137
|
+
PyPI:
|
|
138
|
+
runs-on: ubuntu-latest
|
|
139
|
+
permissions:
|
|
140
|
+
id-token: write
|
|
141
|
+
needs:
|
|
142
|
+
- Build
|
|
143
|
+
- Release
|
|
144
|
+
if: startsWith(github.ref, 'refs/tags/v')
|
|
145
|
+
environment:
|
|
146
|
+
name: pypi
|
|
147
|
+
url: https://pypi.org/p/nivaria
|
|
148
|
+
|
|
149
|
+
steps:
|
|
150
|
+
- name: Download artifacts
|
|
151
|
+
uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
|
|
152
|
+
with:
|
|
153
|
+
name: dist
|
|
154
|
+
path: dist/
|
|
155
|
+
|
|
156
|
+
- name: Publish to PyPI
|
|
157
|
+
uses: pypa/gh-action-pypi-publish@7245906fb61fa33a13554f9d5fb856fe61758086 # v1.14.3
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2026 René de Hesselle <dehesselle@web.de>
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: 0BSD
|
|
4
|
+
|
|
5
|
+
# Python-generated files
|
|
6
|
+
__pycache__/
|
|
7
|
+
*.py[oc]
|
|
8
|
+
build/
|
|
9
|
+
dist/
|
|
10
|
+
wheels/
|
|
11
|
+
*.egg-info
|
|
12
|
+
src/nivaria/version.py
|
|
13
|
+
|
|
14
|
+
# Virtual environments
|
|
15
|
+
.venv
|
|
16
|
+
|
|
17
|
+
# Ruff
|
|
18
|
+
.ruff_cache/
|
|
19
|
+
|
|
20
|
+
# pytest
|
|
21
|
+
.pytest_cache/
|
|
22
|
+
|
|
23
|
+
# generated test-data from tools
|
|
24
|
+
/tools/data
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# SPDX-FileCopyrightText: 2026 René de Hesselle <dehesselle@web.de>
|
|
2
|
+
#
|
|
3
|
+
# SPDX-License-Identifier: 0BSD
|
|
4
|
+
|
|
5
|
+
config:
|
|
6
|
+
default: true
|
|
7
|
+
# Files wrap at different widths, and tables, links and code blocks run past
|
|
8
|
+
# any of them.
|
|
9
|
+
MD013: false
|
|
10
|
+
|
|
11
|
+
globs:
|
|
12
|
+
- "**/*.md"
|
|
13
|
+
|
|
14
|
+
ignores:
|
|
15
|
+
- LICENSE
|
|
16
|
+
- justfile
|
|
17
|
+
|
|
18
|
+
gitignore: true
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
nivaria-0.11.0/CLAUDE.md
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# nivaria
|
|
2
|
+
|
|
3
|
+
A Textual TUI for browsing and searching Snowflake objects.
|
|
4
|
+
|
|
5
|
+
## Documentation
|
|
6
|
+
|
|
7
|
+
- Read `docs/DESIGN.md` before architectural changes and respect its core
|
|
8
|
+
principles; several are not obvious from the code and a change can silently
|
|
9
|
+
break them.
|
|
10
|
+
- Usage, keys and settings: `docs/MANUAL.md`. Runtime behaviour, limits and
|
|
11
|
+
files: `docs/OPERATIONS.md`.
|
|
12
|
+
- What each screen and trigger sends to Snowflake: `docs/data-retrieval.md`. Check
|
|
13
|
+
it before changing what is fetched, and when.
|
|
14
|
+
- Live Snowflake findings: `docs/snowflake-behavior.md`. Timings:
|
|
15
|
+
`docs/measurements.md`.
|
|
16
|
+
|
|
17
|
+
@docs/DEVELOPMENT.md
|
|
18
|
+
|
|
19
|
+
## Rules
|
|
20
|
+
|
|
21
|
+
- The README stays short. A change that affects design, usage or behaviour
|
|
22
|
+
updates the matching document in the same change. A change to what is fetched,
|
|
23
|
+
or when, updates `docs/data-retrieval.md`.
|
|
24
|
+
- `docs/DESIGN.md` is kept current and carries no project history.
|
|
25
|
+
- Commit only when asked.
|
nivaria-0.11.0/LICENSE
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
Copyright (C) 2026 by René de Hesselle
|
|
2
|
+
|
|
3
|
+
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted.
|
|
4
|
+
|
|
5
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
Copyright (C) 2026 by René de Hesselle
|
|
2
|
+
|
|
3
|
+
Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted.
|
|
4
|
+
|
|
5
|
+
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
nivaria-0.11.0/PKG-INFO
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: nivaria
|
|
3
|
+
Version: 0.11.0
|
|
4
|
+
Summary: A TUI for quickly browsing and searching Snowflake objects
|
|
5
|
+
Author-email: René de Hesselle <dehesselle@web.de>
|
|
6
|
+
License-Expression: 0BSD
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Requires-Python: >=3.12
|
|
9
|
+
Requires-Dist: platformdirs>=4.11.0
|
|
10
|
+
Requires-Dist: snowflake-connector-python[secure-local-storage]<5,>=4.7.3
|
|
11
|
+
Requires-Dist: tcoda<0.11,>=0.10.1
|
|
12
|
+
Requires-Dist: textual<9,>=8.2.8
|
|
13
|
+
Description-Content-Type: text/markdown
|
|
14
|
+
|
|
15
|
+
# Nivaria
|
|
16
|
+
|
|
17
|
+

|
|
18
|
+
|
|
19
|
+
> __Nivarius, nivaria, nivarium__ · _Latin adjective_
|
|
20
|
+
>
|
|
21
|
+
> “Of snow”, “belonging to snow” or “snow-related”. _Nivaria_ is its feminine singular form.
|
|
22
|
+
|
|
23
|
+
Nivaria is a [Textual](https://textual.textualize.io)-based TUI to browse and search objects in Snowflake: databases,
|
|
24
|
+
schemas, tables, views, pipes, stages and tasks, with their columns, grants,
|
|
25
|
+
tags, load and run history, and a preview of table data.
|
|
26
|
+
|
|
27
|
+
It reads everything from a local cache and refreshes it in the background, so
|
|
28
|
+
browsing and fuzzy search are instant even across thousands of objects. The
|
|
29
|
+
object tree comes from `SHOW` commands, which need no running warehouse, and a
|
|
30
|
+
small pool of connections is opened once, so an MFA-protected account prompts
|
|
31
|
+
at login rather than on every query.
|
|
32
|
+
|
|
33
|
+
## Install and run
|
|
34
|
+
|
|
35
|
+
```sh
|
|
36
|
+
uv tool install nivaria
|
|
37
|
+
nivaria
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Enter your account and user in the connect dialog, pick an authenticator
|
|
41
|
+
(OAuth, browser SSO or password + MFA) and connect. `, a d` selects the
|
|
42
|
+
databases to browse, `/` searches, and `,` followed by a pause lists all
|
|
43
|
+
commands.
|
|
44
|
+
|
|
45
|
+
## Caveats
|
|
46
|
+
|
|
47
|
+
- The Data tab and the activity, history and tag columns run `SELECT`s on the
|
|
48
|
+
active warehouse, which consumes credits. The tree and object lists do not.
|
|
49
|
+
|
|
50
|
+
## Documentation
|
|
51
|
+
|
|
52
|
+
- [docs/MANUAL.md](https://github.com/dehesselle/nivaria/blob/master/docs/MANUAL.md) — connecting, keys, browsing, search, detail views and all settings.
|
|
53
|
+
- [docs/OPERATIONS.md](https://github.com/dehesselle/nivaria/blob/master/docs/OPERATIONS.md) — Snowflake load, warehouse and privilege needs, limits, files on disk, troubleshooting.
|
|
54
|
+
- [docs/DESIGN.md](https://github.com/dehesselle/nivaria/blob/master/docs/DESIGN.md) — architecture, core principles and the reasons behind them.
|
|
55
|
+
- [docs/DEVELOPMENT.md](https://github.com/dehesselle/nivaria/blob/master/docs/DEVELOPMENT.md) — setup, tests, linting, conventions and live-account tools.
|
|
56
|
+
- [docs/data-retrieval.md](https://github.com/dehesselle/nivaria/blob/master/docs/data-retrieval.md) — what each screen and trigger sends to Snowflake.
|
|
57
|
+
- [docs/snowflake-behavior.md](https://github.com/dehesselle/nivaria/blob/master/docs/snowflake-behavior.md) — what live Snowflake accounts were observed to do.
|
|
58
|
+
- [docs/measurements.md](https://github.com/dehesselle/nivaria/blob/master/docs/measurements.md) — timings and data volumes behind the design.
|
|
59
|
+
|
|
60
|
+
## AI disclosure
|
|
61
|
+
|
|
62
|
+
Substantial parts of this code were generated with Sonnet 5.x/Opus 5.x. Generated code was tested, but not every line was reviewed in detail.
|
|
63
|
+
|
|
64
|
+
## License
|
|
65
|
+
|
|
66
|
+
[0BSD](https://github.com/dehesselle/nivaria/blob/master/LICENSES/0BSD.txt)
|
nivaria-0.11.0/README.md
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# Nivaria
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
> __Nivarius, nivaria, nivarium__ · _Latin adjective_
|
|
6
|
+
>
|
|
7
|
+
> “Of snow”, “belonging to snow” or “snow-related”. _Nivaria_ is its feminine singular form.
|
|
8
|
+
|
|
9
|
+
Nivaria is a [Textual](https://textual.textualize.io)-based TUI to browse and search objects in Snowflake: databases,
|
|
10
|
+
schemas, tables, views, pipes, stages and tasks, with their columns, grants,
|
|
11
|
+
tags, load and run history, and a preview of table data.
|
|
12
|
+
|
|
13
|
+
It reads everything from a local cache and refreshes it in the background, so
|
|
14
|
+
browsing and fuzzy search are instant even across thousands of objects. The
|
|
15
|
+
object tree comes from `SHOW` commands, which need no running warehouse, and a
|
|
16
|
+
small pool of connections is opened once, so an MFA-protected account prompts
|
|
17
|
+
at login rather than on every query.
|
|
18
|
+
|
|
19
|
+
## Install and run
|
|
20
|
+
|
|
21
|
+
```sh
|
|
22
|
+
uv tool install nivaria
|
|
23
|
+
nivaria
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Enter your account and user in the connect dialog, pick an authenticator
|
|
27
|
+
(OAuth, browser SSO or password + MFA) and connect. `, a d` selects the
|
|
28
|
+
databases to browse, `/` searches, and `,` followed by a pause lists all
|
|
29
|
+
commands.
|
|
30
|
+
|
|
31
|
+
## Caveats
|
|
32
|
+
|
|
33
|
+
- The Data tab and the activity, history and tag columns run `SELECT`s on the
|
|
34
|
+
active warehouse, which consumes credits. The tree and object lists do not.
|
|
35
|
+
|
|
36
|
+
## Documentation
|
|
37
|
+
|
|
38
|
+
- [docs/MANUAL.md](https://github.com/dehesselle/nivaria/blob/master/docs/MANUAL.md) — connecting, keys, browsing, search, detail views and all settings.
|
|
39
|
+
- [docs/OPERATIONS.md](https://github.com/dehesselle/nivaria/blob/master/docs/OPERATIONS.md) — Snowflake load, warehouse and privilege needs, limits, files on disk, troubleshooting.
|
|
40
|
+
- [docs/DESIGN.md](https://github.com/dehesselle/nivaria/blob/master/docs/DESIGN.md) — architecture, core principles and the reasons behind them.
|
|
41
|
+
- [docs/DEVELOPMENT.md](https://github.com/dehesselle/nivaria/blob/master/docs/DEVELOPMENT.md) — setup, tests, linting, conventions and live-account tools.
|
|
42
|
+
- [docs/data-retrieval.md](https://github.com/dehesselle/nivaria/blob/master/docs/data-retrieval.md) — what each screen and trigger sends to Snowflake.
|
|
43
|
+
- [docs/snowflake-behavior.md](https://github.com/dehesselle/nivaria/blob/master/docs/snowflake-behavior.md) — what live Snowflake accounts were observed to do.
|
|
44
|
+
- [docs/measurements.md](https://github.com/dehesselle/nivaria/blob/master/docs/measurements.md) — timings and data volumes behind the design.
|
|
45
|
+
|
|
46
|
+
## AI disclosure
|
|
47
|
+
|
|
48
|
+
Substantial parts of this code were generated with Sonnet 5.x/Opus 5.x. Generated code was tested, but not every line was reviewed in detail.
|
|
49
|
+
|
|
50
|
+
## License
|
|
51
|
+
|
|
52
|
+
[0BSD](https://github.com/dehesselle/nivaria/blob/master/LICENSES/0BSD.txt)
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
version = 1
|
|
2
|
+
|
|
3
|
+
# Files that can't carry an SPDX comment, or shouldn't: docs stay clean when
|
|
4
|
+
# rendered, the about box is shown verbatim, the screenshot and uv.lock are
|
|
5
|
+
# regenerated, JSON has no comments.
|
|
6
|
+
[[annotations]]
|
|
7
|
+
path = [
|
|
8
|
+
"**.md",
|
|
9
|
+
"docs/screenshot.svg",
|
|
10
|
+
"src/nivaria/ui/about.txt",
|
|
11
|
+
"tests/data/show_column_types.json",
|
|
12
|
+
"uv.lock",
|
|
13
|
+
".python-version",
|
|
14
|
+
]
|
|
15
|
+
SPDX-FileCopyrightText = "2026 René de Hesselle <dehesselle@web.de>"
|
|
16
|
+
SPDX-License-Identifier = "0BSD"
|