entropy-data-cli 0.2.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.
Files changed (42) hide show
  1. entropy_data_cli-0.2.0/.editorconfig +15 -0
  2. entropy_data_cli-0.2.0/.github/dependabot.yml +6 -0
  3. entropy_data_cli-0.2.0/.github/pull_request_template.md +4 -0
  4. entropy_data_cli-0.2.0/.github/workflows/ci.yaml +54 -0
  5. entropy_data_cli-0.2.0/.github/workflows/release.yaml +153 -0
  6. entropy_data_cli-0.2.0/.gitignore +344 -0
  7. entropy_data_cli-0.2.0/.pre-commit-config.yaml +7 -0
  8. entropy_data_cli-0.2.0/CHANGELOG.md +18 -0
  9. entropy_data_cli-0.2.0/CLAUDE.md +62 -0
  10. entropy_data_cli-0.2.0/Dockerfile +15 -0
  11. entropy_data_cli-0.2.0/LICENSE +21 -0
  12. entropy_data_cli-0.2.0/PKG-INFO +22 -0
  13. entropy_data_cli-0.2.0/README.md +124 -0
  14. entropy_data_cli-0.2.0/pyproject.toml +47 -0
  15. entropy_data_cli-0.2.0/release +18 -0
  16. entropy_data_cli-0.2.0/src/entropy_data_cli/__init__.py +3 -0
  17. entropy_data_cli-0.2.0/src/entropy_data_cli/__main__.py +3 -0
  18. entropy_data_cli-0.2.0/src/entropy_data_cli/cli.py +115 -0
  19. entropy_data_cli-0.2.0/src/entropy_data_cli/client.py +146 -0
  20. entropy_data_cli-0.2.0/src/entropy_data_cli/commands/__init__.py +0 -0
  21. entropy_data_cli-0.2.0/src/entropy_data_cli/commands/access.py +128 -0
  22. entropy_data_cli-0.2.0/src/entropy_data_cli/commands/certifications.py +80 -0
  23. entropy_data_cli-0.2.0/src/entropy_data_cli/commands/connection.py +90 -0
  24. entropy_data_cli-0.2.0/src/entropy_data_cli/commands/datacontracts.py +93 -0
  25. entropy_data_cli-0.2.0/src/entropy_data_cli/commands/dataproducts.py +93 -0
  26. entropy_data_cli-0.2.0/src/entropy_data_cli/commands/definitions.py +80 -0
  27. entropy_data_cli-0.2.0/src/entropy_data_cli/commands/events.py +32 -0
  28. entropy_data_cli-0.2.0/src/entropy_data_cli/commands/example_data.py +83 -0
  29. entropy_data_cli-0.2.0/src/entropy_data_cli/commands/search.py +55 -0
  30. entropy_data_cli-0.2.0/src/entropy_data_cli/commands/sourcesystems.py +80 -0
  31. entropy_data_cli-0.2.0/src/entropy_data_cli/commands/teams.py +80 -0
  32. entropy_data_cli-0.2.0/src/entropy_data_cli/commands/test_results.py +85 -0
  33. entropy_data_cli-0.2.0/src/entropy_data_cli/config.py +141 -0
  34. entropy_data_cli-0.2.0/src/entropy_data_cli/output.py +103 -0
  35. entropy_data_cli-0.2.0/src/entropy_data_cli/util.py +22 -0
  36. entropy_data_cli-0.2.0/tests/__init__.py +0 -0
  37. entropy_data_cli-0.2.0/tests/commands/__init__.py +0 -0
  38. entropy_data_cli-0.2.0/tests/commands/test_connection.py +71 -0
  39. entropy_data_cli-0.2.0/tests/commands/test_teams.py +102 -0
  40. entropy_data_cli-0.2.0/tests/conftest.py +10 -0
  41. entropy_data_cli-0.2.0/tests/test_client.py +161 -0
  42. entropy_data_cli-0.2.0/tests/test_config.py +141 -0
@@ -0,0 +1,15 @@
1
+ root = true
2
+
3
+ [*]
4
+ charset = utf-8
5
+ end_of_line = lf
6
+ indent_size = 2
7
+ indent_style = space
8
+ insert_final_newline = false
9
+ max_line_length = 100
10
+ tab_width = 2
11
+
12
+ [{*.py,*.pyw}]
13
+ indent_size = 4
14
+ max_line_length = 120
15
+ tab_width = 4
@@ -0,0 +1,6 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "pip"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
@@ -0,0 +1,4 @@
1
+ - [ ] Tests pass
2
+ - [ ] ruff format
3
+ - [ ] README.md updated (if relevant)
4
+ - [ ] CHANGELOG.md entry added
@@ -0,0 +1,54 @@
1
+ on:
2
+ push:
3
+ branches: [ "main" ]
4
+ pull_request:
5
+ branches: [ "main" ]
6
+ workflow_call:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ name: CI
12
+ jobs:
13
+ test:
14
+ runs-on: ${{ matrix.os }}
15
+ strategy:
16
+ matrix:
17
+ os:
18
+ - 'ubuntu-latest'
19
+ python-version:
20
+ - '3.12'
21
+ - '3.13'
22
+ fail-fast: false
23
+ steps:
24
+ - uses: actions/checkout@v4
25
+ - name: Install uv
26
+ uses: astral-sh/setup-uv@v5
27
+ with:
28
+ python-version: ${{ matrix.python-version }}
29
+ - name: Install the project
30
+ run: uv sync --all-extras --dev
31
+ - name: Check formatting
32
+ run: uv run ruff check
33
+ - name: Run tests
34
+ run: uv run pytest
35
+
36
+ integration-tests:
37
+ runs-on: ubuntu-latest
38
+ strategy:
39
+ matrix:
40
+ python-version:
41
+ - '3.12'
42
+ fail-fast: false
43
+ steps:
44
+ - uses: actions/checkout@v4
45
+ - name: Install uv
46
+ uses: astral-sh/setup-uv@v5
47
+ with:
48
+ python-version: ${{ matrix.python-version }}
49
+ - name: Install the project
50
+ run: uv sync
51
+ - name: Test entropy-data --help
52
+ run: uv run entropy-data --help
53
+ - name: Test entropy-data --version
54
+ run: uv run entropy-data --version
@@ -0,0 +1,153 @@
1
+ on:
2
+ push:
3
+ tags: ["v[0-9]+", "v[0-9]+.[0-9]+", "v[0-9]+.[0-9]+.[0-9]+", "v[0-9]+.[0-9]+.[0-9]+-*"]
4
+
5
+ permissions:
6
+ contents: read
7
+
8
+ name: Release
9
+ jobs:
10
+ test:
11
+ uses: ./.github/workflows/ci.yaml
12
+ secrets: inherit
13
+
14
+ check_version:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v4
18
+ - name: check tag version == pyproject.version
19
+ id: version
20
+ run: |
21
+ pip install toml-cli
22
+ PROJECT_VERSION=$(toml get --toml-path pyproject.toml project.version)
23
+ TAG=$(git describe HEAD --tags --abbrev=0)
24
+ echo TAG: $TAG
25
+ echo "PROJECT_VERSION: $PROJECT_VERSION"
26
+ echo "project_version=$PROJECT_VERSION" >> $GITHUB_OUTPUT
27
+ if [[ "$TAG" != "v$PROJECT_VERSION" ]]; then exit 1; fi
28
+ - name: Check tag version > pypi version
29
+ run: |
30
+ LOCAL_VERSION=${{ steps.version.outputs.project_version }}
31
+ RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" https://pypi.org/pypi/entropy-data-cli/json)
32
+ if [ "$RESPONSE" = "404" ]; then
33
+ echo "Package not yet on PyPI — first release, skipping version comparison"
34
+ exit 0
35
+ fi
36
+ PUBLIC_VERSION=$(curl -s https://pypi.org/pypi/entropy-data-cli/json | python3 -c "import sys,json; print(json.load(sys.stdin)['info']['version'])")
37
+ echo "Local version: $LOCAL_VERSION"
38
+ echo "Public version: $PUBLIC_VERSION"
39
+ pip install -q packaging
40
+ python3 -c "
41
+ from packaging.version import Version
42
+ local = Version('$LOCAL_VERSION')
43
+ public = Version('$PUBLIC_VERSION')
44
+ if local <= public:
45
+ raise SystemExit(f'Local version {local} must be higher than public version {public}')
46
+ print(f'{local} > {public}')
47
+ "
48
+
49
+ build:
50
+ runs-on: ubuntu-latest
51
+ needs:
52
+ - test
53
+ - check_version
54
+ steps:
55
+ - uses: actions/checkout@v4
56
+ with:
57
+ fetch-depth: 0
58
+ - name: Install uv
59
+ uses: astral-sh/setup-uv@v5
60
+ with:
61
+ python-version: "3.12"
62
+ - name: Build package
63
+ run: uv build
64
+ - name: Store the distribution packages
65
+ uses: actions/upload-artifact@v4
66
+ with:
67
+ name: python-package-distributions
68
+ path: dist/
69
+
70
+ publish-to-pypi:
71
+ name: >-
72
+ Publish Python distribution to PyPI
73
+ needs:
74
+ - build
75
+ runs-on: ubuntu-latest
76
+ environment:
77
+ name: release-pypi
78
+ url: https://pypi.org/p/entropy-data-cli
79
+ permissions:
80
+ id-token: write
81
+ steps:
82
+ - name: Download all the dists
83
+ uses: actions/download-artifact@v4
84
+ with:
85
+ name: python-package-distributions
86
+ path: dist/
87
+ - name: Publish distribution to PyPI
88
+ uses: pypa/gh-action-pypi-publish@release/v1
89
+
90
+ github-release:
91
+ name: >-
92
+ Create a GitHub Release
93
+ needs:
94
+ - publish-to-pypi
95
+ runs-on: ubuntu-latest
96
+ permissions:
97
+ contents: write
98
+ id-token: write
99
+ steps:
100
+ - uses: actions/checkout@v4
101
+ - name: Extract changelog for version
102
+ run: |
103
+ VERSION="${{ github.ref_name }}"
104
+ VERSION="${VERSION#v}"
105
+ sed -n "/^## \[$VERSION\]/,/^## \[/p" CHANGELOG.md | head -n -1 > release_notes.md
106
+ cat release_notes.md
107
+ - name: Download all the dists
108
+ uses: actions/download-artifact@v4
109
+ with:
110
+ name: python-package-distributions
111
+ path: dist/
112
+ - name: Sign the dists with Sigstore
113
+ uses: sigstore/gh-action-sigstore-python@v3.0.0
114
+ with:
115
+ inputs: >-
116
+ ./dist/*.tar.gz
117
+ ./dist/*.whl
118
+ - name: Create GitHub Release
119
+ env:
120
+ GITHUB_TOKEN: ${{ github.token }}
121
+ run: >-
122
+ gh release create
123
+ '${{ github.ref_name }}'
124
+ --repo '${{ github.repository }}'
125
+ --notes-file release_notes.md
126
+ - name: Upload artifact signatures to GitHub Release
127
+ env:
128
+ GITHUB_TOKEN: ${{ github.token }}
129
+ run: >-
130
+ gh release upload
131
+ '${{ github.ref_name }}' dist/**
132
+ --repo '${{ github.repository }}'
133
+
134
+ publish-to-testpypi:
135
+ name: Publish Python distribution to TestPyPI
136
+ needs:
137
+ - build
138
+ runs-on: ubuntu-latest
139
+ environment:
140
+ name: release-testpypi
141
+ url: https://test.pypi.org/p/entropy-data-cli
142
+ permissions:
143
+ id-token: write
144
+ steps:
145
+ - name: Download all the dists
146
+ uses: actions/download-artifact@v4
147
+ with:
148
+ name: python-package-distributions
149
+ path: dist/
150
+ - name: Publish distribution to TestPyPI
151
+ uses: pypa/gh-action-pypi-publish@release/v1
152
+ with:
153
+ repository-url: https://test.pypi.org/legacy/
@@ -0,0 +1,344 @@
1
+ .idea
2
+ .DS_Store
3
+ /datacontract.yaml
4
+ datacontract.sh
5
+ /cli
6
+ tmp
7
+ /venv
8
+ /contracts/
9
+ /quality/
10
+ db.duckdb
11
+ .soda/
12
+ .vscode/
13
+ .duckdb/
14
+ uv.lock
15
+
16
+ ### JetBrains template
17
+ # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
18
+ # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
19
+
20
+ # User-specific stuff
21
+ .idea/**/workspace.xml
22
+ .idea/**/tasks.xml
23
+ .idea/**/usage.statistics.xml
24
+ .idea/**/dictionaries
25
+ .idea/**/shelf
26
+
27
+ # AWS User-specific
28
+ .idea/**/aws.xml
29
+
30
+ # Generated files
31
+ .idea/**/contentModel.xml
32
+
33
+ # Sensitive or high-churn files
34
+ .idea/**/dataSources/
35
+ .idea/**/dataSources.ids
36
+ .idea/**/dataSources.local.xml
37
+ .idea/**/sqlDataSources.xml
38
+ .idea/**/dynamic.xml
39
+ .idea/**/uiDesigner.xml
40
+ .idea/**/dbnavigator.xml
41
+
42
+ # Gradle
43
+ .idea/**/gradle.xml
44
+ .idea/**/libraries
45
+
46
+ # Gradle and Maven with auto-import
47
+ # When using Gradle or Maven with auto-import, you should exclude module files,
48
+ # since they will be recreated, and may cause churn. Uncomment if using
49
+ # auto-import.
50
+ # .idea/artifacts
51
+ # .idea/compiler.xml
52
+ # .idea/jarRepositories.xml
53
+ # .idea/modules.xml
54
+ # .idea/*.iml
55
+ # .idea/modules
56
+ # *.iml
57
+ # *.ipr
58
+
59
+ # CMake
60
+ cmake-build-*/
61
+
62
+ # Mongo Explorer plugin
63
+ .idea/**/mongoSettings.xml
64
+
65
+ # File-based project format
66
+ *.iws
67
+
68
+ # IntelliJ
69
+ out/
70
+
71
+ # mpeltonen/sbt-idea plugin
72
+ .idea_modules/
73
+
74
+ # JIRA plugin
75
+ atlassian-ide-plugin.xml
76
+
77
+ # Cursive Clojure plugin
78
+ .idea/replstate.xml
79
+
80
+ # SonarLint plugin
81
+ .idea/sonarlint/
82
+
83
+ # Crashlytics plugin (for Android Studio and IntelliJ)
84
+ com_crashlytics_export_strings.xml
85
+ crashlytics.properties
86
+ crashlytics-build.properties
87
+ fabric.properties
88
+
89
+ # Editor-based Rest Client
90
+ .idea/httpRequests
91
+
92
+ # Android studio 3.1+ serialized cache file
93
+ .idea/caches/build_file_checksums.ser
94
+
95
+ ### Python template
96
+ # Byte-compiled / optimized / DLL files
97
+ __pycache__/
98
+ *.py[cod]
99
+ *$py.class
100
+
101
+ # C extensions
102
+ *.so
103
+
104
+ # Distribution / packaging
105
+ .Python
106
+ build/
107
+ develop-eggs/
108
+ dist/
109
+ downloads/
110
+ eggs/
111
+ .eggs/
112
+ lib/
113
+ lib64/
114
+ parts/
115
+ sdist/
116
+ var/
117
+ wheels/
118
+ share/python-wheels/
119
+ *.egg-info/
120
+ .installed.cfg
121
+ *.egg
122
+ MANIFEST
123
+
124
+ # PyInstaller
125
+ # Usually these files are written by a python script from a template
126
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
127
+ *.manifest
128
+ *.spec
129
+
130
+ # Installer logs
131
+ pip-log.txt
132
+ pip-delete-this-directory.txt
133
+
134
+ # Unit test / coverage reports
135
+ htmlcov/
136
+ .tox/
137
+ .nox/
138
+ .coverage
139
+ .coverage.*
140
+ .cache
141
+ nosetests.xml
142
+ coverage.xml
143
+ *.cover
144
+ *.py,cover
145
+ .hypothesis/
146
+ .pytest_cache/
147
+ .ruff_cache/
148
+ cover/
149
+
150
+ # Translations
151
+ *.mo
152
+ *.pot
153
+
154
+ # Django stuff:
155
+ *.log
156
+ local_settings.py
157
+ db.sqlite3
158
+ db.sqlite3-journal
159
+
160
+ # Flask stuff:
161
+ instance/
162
+ .webassets-cache
163
+
164
+ # Scrapy stuff:
165
+ .scrapy
166
+
167
+ # Sphinx documentation
168
+ docs/_build/
169
+
170
+ # PyBuilder
171
+ .pybuilder/
172
+ target/
173
+
174
+ # Jupyter Notebook
175
+ .ipynb_checkpoints
176
+
177
+ # IPython
178
+ profile_default/
179
+ ipython_config.py
180
+
181
+ # pyenv
182
+ # For a library or package, you might want to ignore these files since the code is
183
+ # intended to run in multiple environments; otherwise, check them in:
184
+ .python-version
185
+
186
+ # pipenv
187
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
188
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
189
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
190
+ # install all needed dependencies.
191
+ #Pipfile.lock
192
+
193
+ # poetry
194
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
195
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
196
+ # commonly ignored for libraries.
197
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
198
+ #poetry.lock
199
+
200
+ # pdm
201
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
202
+ #pdm.lock
203
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
204
+ # in version control.
205
+ # https://pdm.fming.dev/#use-with-ide
206
+ .pdm.toml
207
+
208
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
209
+ __pypackages__/
210
+
211
+ # Celery stuff
212
+ celerybeat-schedule
213
+ celerybeat.pid
214
+
215
+ # SageMath parsed files
216
+ *.sage.py
217
+
218
+ # Environments
219
+ .env
220
+ .venv
221
+ env/
222
+ venv/
223
+ ENV/
224
+ env.bak/
225
+ venv.bak/
226
+
227
+ # Spyder project settings
228
+ .spyderproject
229
+ .spyproject
230
+
231
+ # Rope project settings
232
+ .ropeproject
233
+
234
+ # mkdocs documentation
235
+ /site
236
+
237
+ # mypy
238
+ .mypy_cache/
239
+ .dmypy.json
240
+ dmypy.json
241
+
242
+ # Pyre type checker
243
+ .pyre/
244
+
245
+ # pytype static type analyzer
246
+ .pytype/
247
+
248
+ # Cython debug symbols
249
+ cython_debug/
250
+
251
+ .idea/
252
+ ### JetBrains template
253
+ # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
254
+ # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
255
+
256
+ # User-specific stuff
257
+ .idea/**/workspace.xml
258
+ .idea/**/tasks.xml
259
+ .idea/**/usage.statistics.xml
260
+ .idea/**/dictionaries
261
+ .idea/**/shelf
262
+
263
+ # AWS User-specific
264
+ .idea/**/aws.xml
265
+
266
+ # Generated files
267
+ .idea/**/contentModel.xml
268
+
269
+ # Sensitive or high-churn files
270
+ .idea/**/dataSources/
271
+ .idea/**/dataSources.ids
272
+ .idea/**/dataSources.local.xml
273
+ .idea/**/sqlDataSources.xml
274
+ .idea/**/dynamic.xml
275
+ .idea/**/uiDesigner.xml
276
+ .idea/**/dbnavigator.xml
277
+
278
+ # Gradle
279
+ .idea/**/gradle.xml
280
+ .idea/**/libraries
281
+
282
+ # Gradle and Maven with auto-import
283
+ # When using Gradle or Maven with auto-import, you should exclude module files,
284
+ # since they will be recreated, and may cause churn. Uncomment if using
285
+ # auto-import.
286
+ # .idea/artifacts
287
+ # .idea/compiler.xml
288
+ # .idea/jarRepositories.xml
289
+ # .idea/modules.xml
290
+ # .idea/*.iml
291
+ # .idea/modules
292
+ *.iml
293
+ # *.ipr
294
+
295
+ # CMake
296
+ cmake-build-*/
297
+
298
+ # Mongo Explorer plugin
299
+ .idea/**/mongoSettings.xml
300
+
301
+ # File-based project format
302
+ *.iws
303
+
304
+ # IntelliJ
305
+ out/
306
+
307
+ # mpeltonen/sbt-idea plugin
308
+ .idea_modules/
309
+
310
+ # JIRA plugin
311
+ atlassian-ide-plugin.xml
312
+
313
+ # Cursive Clojure plugin
314
+ .idea/replstate.xml
315
+
316
+ # SonarLint plugin
317
+ .idea/sonarlint/
318
+
319
+ # Crashlytics plugin (for Android Studio and IntelliJ)
320
+ com_crashlytics_export_strings.xml
321
+ crashlytics.properties
322
+ crashlytics-build.properties
323
+ fabric.properties
324
+
325
+ # Editor-based Rest Client
326
+ .idea/httpRequests
327
+
328
+ # Android studio 3.1+ serialized cache file
329
+ .idea/caches/build_file_checksums.ser
330
+
331
+ # Generated test files
332
+ **/.tmp
333
+ /.claude/settings.local.json
334
+
335
+ # Auto Claude data directory
336
+ .auto-claude/
337
+
338
+ # Auto Claude generated files
339
+ .auto-claude-security.json
340
+ .auto-claude-status
341
+ .claude_settings.json
342
+ .worktrees/
343
+ .security-key
344
+ logs/security/
@@ -0,0 +1,7 @@
1
+ repos:
2
+ - repo: https://github.com/astral-sh/ruff-pre-commit
3
+ rev: v0.14.3
4
+ hooks:
5
+ - id: ruff
6
+ args: [ --fix ]
7
+ - id: ruff-format
@@ -0,0 +1,18 @@
1
+ # Changelog
2
+
3
+ ## [0.2.0]
4
+
5
+ - Fix negative page numbers leaking SQL queries from the server
6
+ - Fix mismatched resource ID in body vs CLI argument silently using body ID
7
+ - Fix HTML error responses (e.g., from Tomcat) displayed as raw markup
8
+ - Add max resource ID length validation (256 characters)
9
+ - Add 30s HTTP request timeout to prevent hanging on unreachable hosts
10
+
11
+ ## [0.1.0]
12
+
13
+ - Initial release
14
+ - CRUD commands for data products, data contracts, access, teams, source systems, definitions, certifications, example data, test results
15
+ - Access workflow commands: approve, reject, cancel
16
+ - Event polling and search
17
+ - Connection management with `~/.entropy-data/config.toml`
18
+ - Table and JSON output formats
@@ -0,0 +1,62 @@
1
+ # CLAUDE.md
2
+
3
+ ## Development Environment Setup
4
+
5
+ ```bash
6
+ # Using uv (recommended)
7
+ uv python pin 3.12
8
+ uv venv
9
+ source .venv/bin/activate
10
+ uv pip install -e '.[dev]'
11
+
12
+ # Or using pip
13
+ python3.12 -m venv .venv
14
+ source .venv/bin/activate
15
+ pip install -e '.[dev]'
16
+ ```
17
+
18
+ ## Common Commands
19
+
20
+ ```bash
21
+ # Run all tests
22
+ pytest
23
+
24
+ # Run a specific test
25
+ pytest tests/test_config.py::test_function_name
26
+
27
+ # Lint and format
28
+ ruff check .
29
+ ruff check --fix .
30
+ ruff format .
31
+
32
+ # CLI usage
33
+ entropy-data --version
34
+ entropy-data --help
35
+ entropy-data connection add prod
36
+ entropy-data teams list
37
+ ```
38
+
39
+ ## Project Architecture
40
+
41
+ CLI for Entropy Data.
42
+
43
+ ### Core Modules
44
+ - `cli.py` — Typer app, global options, command group registration
45
+ - `config.py` — Connection config management (~/.entropy-data/config.toml)
46
+ - `client.py` — HTTP client wrapping requests (generic CRUD + actions)
47
+ - `output.py` — Output formatting (Rich tables, JSON)
48
+
49
+ ### Command Modules (`commands/`)
50
+ Each file creates a `typer.Typer()` instance registered in `cli.py`.
51
+ Resources: dataproducts, datacontracts, access, teams, sourcesystems, definitions, certifications, example-data, test-results, events, search, connection.
52
+
53
+ ### Config Resolution Precedence
54
+ 1. CLI options (`--api-key`, `--host`)
55
+ 2. Environment variables (`ENTROPY_DATA_API_KEY`, `ENTROPY_DATA_HOST`)
56
+ 3. Named connection from `~/.entropy-data/config.toml`
57
+
58
+ ## Code Conventions
59
+ - Python 3.12+
60
+ - Typer for CLI, Rich for output, Pydantic for models, requests for HTTP
61
+ - Ruff for linting/formatting (line-length 120)
62
+ - Tests use pytest + responses (mocked HTTP)
@@ -0,0 +1,15 @@
1
+ FROM python:3.12-slim
2
+
3
+ ENV PYTHONUNBUFFERED=1
4
+ ENV UV_COMPILE_BYTECODE=1
5
+
6
+ COPY --from=ghcr.io/astral-sh/uv:0.7.12 /uv /uvx /bin/
7
+
8
+ COPY pyproject.toml uv.lock /app/
9
+ COPY src/ /app/src/
10
+
11
+ RUN cd /app && uv pip --no-cache-dir install --system .
12
+
13
+ WORKDIR /home/entropy-data
14
+
15
+ ENTRYPOINT ["entropy-data"]
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Entropy Data
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.