labqoat 0.1.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.
- labqoat-0.1.0/.github/workflows/ci.yml +29 -0
- labqoat-0.1.0/.github/workflows/publish.yml +23 -0
- labqoat-0.1.0/.gitignore +12 -0
- labqoat-0.1.0/.python-version +1 -0
- labqoat-0.1.0/LICENSE +4 -0
- labqoat-0.1.0/PKG-INFO +86 -0
- labqoat-0.1.0/README.md +69 -0
- labqoat-0.1.0/pyproject.toml +154 -0
- labqoat-0.1.0/src/labqoat/__init__.py +416 -0
- labqoat-0.1.0/src/labqoat/analytics/__init__.py +192 -0
- labqoat-0.1.0/src/labqoat/analytics_contracts.py +508 -0
- labqoat-0.1.0/src/labqoat/api.py +68 -0
- labqoat-0.1.0/src/labqoat/argument_codec.py +551 -0
- labqoat-0.1.0/src/labqoat/assets/__init__.py +58 -0
- labqoat-0.1.0/src/labqoat/assets/cache.py +226 -0
- labqoat-0.1.0/src/labqoat/assets/derivations.py +142 -0
- labqoat-0.1.0/src/labqoat/assets/domain.py +183 -0
- labqoat-0.1.0/src/labqoat/assets/namespace.py +539 -0
- labqoat-0.1.0/src/labqoat/assets/service.py +321 -0
- labqoat-0.1.0/src/labqoat/assets/store.py +106 -0
- labqoat-0.1.0/src/labqoat/async_client.py +107 -0
- labqoat-0.1.0/src/labqoat/auth.py +146 -0
- labqoat-0.1.0/src/labqoat/aws_identity.py +329 -0
- labqoat-0.1.0/src/labqoat/checkpoint_contracts.py +350 -0
- labqoat-0.1.0/src/labqoat/checkpoints.py +156 -0
- labqoat-0.1.0/src/labqoat/client.py +93 -0
- labqoat-0.1.0/src/labqoat/contract_artifacts.py +178 -0
- labqoat-0.1.0/src/labqoat/contract_registry.py +140 -0
- labqoat-0.1.0/src/labqoat/contracts/__init__.py +101 -0
- labqoat-0.1.0/src/labqoat/contracts/attestation.py +168 -0
- labqoat-0.1.0/src/labqoat/contracts/audio.py +166 -0
- labqoat-0.1.0/src/labqoat/contracts/compatibility.py +288 -0
- labqoat-0.1.0/src/labqoat/contracts/compiler.py +927 -0
- labqoat-0.1.0/src/labqoat/contracts/declarations.py +210 -0
- labqoat-0.1.0/src/labqoat/contracts/fixtures.py +23 -0
- labqoat-0.1.0/src/labqoat/contracts/validation.py +415 -0
- labqoat-0.1.0/src/labqoat/dataset_contracts.py +320 -0
- labqoat-0.1.0/src/labqoat/datasets/__init__.py +832 -0
- labqoat-0.1.0/src/labqoat/deployment.py +27 -0
- labqoat-0.1.0/src/labqoat/errors.py +98 -0
- labqoat-0.1.0/src/labqoat/evaluation_worker.py +177 -0
- labqoat-0.1.0/src/labqoat/evaluations/__init__.py +398 -0
- labqoat-0.1.0/src/labqoat/events.py +300 -0
- labqoat-0.1.0/src/labqoat/identity.py +446 -0
- labqoat-0.1.0/src/labqoat/images.py +63 -0
- labqoat-0.1.0/src/labqoat/import_worker.py +208 -0
- labqoat-0.1.0/src/labqoat/imports/__init__.py +368 -0
- labqoat-0.1.0/src/labqoat/imports/sources.py +235 -0
- labqoat-0.1.0/src/labqoat/migration/__init__.py +53 -0
- labqoat-0.1.0/src/labqoat/model_contracts.py +898 -0
- labqoat-0.1.0/src/labqoat/model_registry_client.py +483 -0
- labqoat-0.1.0/src/labqoat/models/__init__.py +329 -0
- labqoat-0.1.0/src/labqoat/nodes.py +478 -0
- labqoat-0.1.0/src/labqoat/platform.py +191 -0
- labqoat-0.1.0/src/labqoat/publication_contracts.py +566 -0
- labqoat-0.1.0/src/labqoat/py.typed +1 -0
- labqoat-0.1.0/src/labqoat/references.py +261 -0
- labqoat-0.1.0/src/labqoat/resources.py +83 -0
- labqoat-0.1.0/src/labqoat/retry.py +212 -0
- labqoat-0.1.0/src/labqoat/run_contracts.py +505 -0
- labqoat-0.1.0/src/labqoat/runs.py +990 -0
- labqoat-0.1.0/src/labqoat/staging.py +243 -0
- labqoat-0.1.0/src/labqoat/training/__init__.py +414 -0
- labqoat-0.1.0/src/labqoat/training/runtime.py +396 -0
- labqoat-0.1.0/src/labqoat/training_worker.py +196 -0
- labqoat-0.1.0/src/labqoat/transform_worker.py +182 -0
- labqoat-0.1.0/src/labqoat/transforms/__init__.py +555 -0
- labqoat-0.1.0/src/labqoat/transport.py +198 -0
- labqoat-0.1.0/src/labqoat/wire.py +87 -0
- labqoat-0.1.0/src/labqoat/workload_client.py +664 -0
- labqoat-0.1.0/src/labqoat/workload_contracts.py +136 -0
- labqoat-0.1.0/src/labqoat/workloads.py +239 -0
- labqoat-0.1.0/src/labqoat_cli/__init__.py +1 -0
- labqoat-0.1.0/src/labqoat_cli/asset_download.py +78 -0
- labqoat-0.1.0/src/labqoat_cli/cloud_builder.py +562 -0
- labqoat-0.1.0/src/labqoat_cli/commands.py +1360 -0
- labqoat-0.1.0/src/labqoat_cli/connection.py +325 -0
- labqoat-0.1.0/src/labqoat_cli/evaluation_arguments.py +436 -0
- labqoat-0.1.0/src/labqoat_cli/image_builder.py +58 -0
- labqoat-0.1.0/src/labqoat_cli/local_context.py +314 -0
- labqoat-0.1.0/src/labqoat_cli/main.py +3001 -0
- labqoat-0.1.0/src/labqoat_cli/model_development.py +399 -0
- labqoat-0.1.0/src/labqoat_cli/project.py +150 -0
- labqoat-0.1.0/src/labqoat_cli/py.typed +1 -0
- labqoat-0.1.0/src/labqoat_cli/rendering.py +181 -0
- labqoat-0.1.0/src/labqoat_cli/scaffolding.py +563 -0
- labqoat-0.1.0/src/labqoat_cli/verification.py +126 -0
- labqoat-0.1.0/src/labqoat_cli/workspace.py +91 -0
- labqoat-0.1.0/tests/cli/__init__.py +1 -0
- labqoat-0.1.0/tests/cli/test_asset_download.py +118 -0
- labqoat-0.1.0/tests/cli/test_commands.py +328 -0
- labqoat-0.1.0/tests/cli/test_connection.py +406 -0
- labqoat-0.1.0/tests/cli/test_evaluation_arguments.py +278 -0
- labqoat-0.1.0/tests/cli/test_image_builder.py +136 -0
- labqoat-0.1.0/tests/cli/test_local_context.py +154 -0
- labqoat-0.1.0/tests/cli/test_main.py +3306 -0
- labqoat-0.1.0/tests/cli/test_model_development.py +310 -0
- labqoat-0.1.0/tests/cli/test_project.py +44 -0
- labqoat-0.1.0/tests/cli/test_rendering.py +149 -0
- labqoat-0.1.0/tests/cli/test_scaffolding.py +139 -0
- labqoat-0.1.0/tests/cli/test_verification.py +192 -0
- labqoat-0.1.0/tests/cli/test_workspace.py +84 -0
- labqoat-0.1.0/tests/sdk/contracts/test_attestation.py +101 -0
- labqoat-0.1.0/tests/sdk/contracts/test_compatibility.py +311 -0
- labqoat-0.1.0/tests/sdk/contracts/test_compiler.py +393 -0
- labqoat-0.1.0/tests/sdk/contracts/test_declarations.py +174 -0
- labqoat-0.1.0/tests/sdk/contracts/test_validation.py +228 -0
- labqoat-0.1.0/tests/sdk/test_analytics_metadata.py +94 -0
- labqoat-0.1.0/tests/sdk/test_analytics_namespace.py +358 -0
- labqoat-0.1.0/tests/sdk/test_api.py +90 -0
- labqoat-0.1.0/tests/sdk/test_argument_codec.py +207 -0
- labqoat-0.1.0/tests/sdk/test_asset_cache.py +168 -0
- labqoat-0.1.0/tests/sdk/test_asset_derivations.py +153 -0
- labqoat-0.1.0/tests/sdk/test_asset_namespace.py +365 -0
- labqoat-0.1.0/tests/sdk/test_assets.py +364 -0
- labqoat-0.1.0/tests/sdk/test_auth.py +109 -0
- labqoat-0.1.0/tests/sdk/test_aws_identity.py +437 -0
- labqoat-0.1.0/tests/sdk/test_checkpoints.py +258 -0
- labqoat-0.1.0/tests/sdk/test_clients.py +481 -0
- labqoat-0.1.0/tests/sdk/test_contract_registry.py +158 -0
- labqoat-0.1.0/tests/sdk/test_dataset_repositories.py +228 -0
- labqoat-0.1.0/tests/sdk/test_errors.py +57 -0
- labqoat-0.1.0/tests/sdk/test_evaluation_contracts.py +132 -0
- labqoat-0.1.0/tests/sdk/test_evaluation_namespace.py +338 -0
- labqoat-0.1.0/tests/sdk/test_evaluation_worker.py +228 -0
- labqoat-0.1.0/tests/sdk/test_events.py +171 -0
- labqoat-0.1.0/tests/sdk/test_identity.py +414 -0
- labqoat-0.1.0/tests/sdk/test_images.py +70 -0
- labqoat-0.1.0/tests/sdk/test_import_namespace.py +340 -0
- labqoat-0.1.0/tests/sdk/test_import_worker.py +338 -0
- labqoat-0.1.0/tests/sdk/test_migration_contracts.py +73 -0
- labqoat-0.1.0/tests/sdk/test_model_contracts.py +272 -0
- labqoat-0.1.0/tests/sdk/test_model_invocation.py +167 -0
- labqoat-0.1.0/tests/sdk/test_model_registry_client.py +442 -0
- labqoat-0.1.0/tests/sdk/test_nodes_namespace.py +213 -0
- labqoat-0.1.0/tests/sdk/test_package.py +8 -0
- labqoat-0.1.0/tests/sdk/test_platform_panels.py +44 -0
- labqoat-0.1.0/tests/sdk/test_publication_contracts.py +139 -0
- labqoat-0.1.0/tests/sdk/test_references.py +232 -0
- labqoat-0.1.0/tests/sdk/test_resources.py +65 -0
- labqoat-0.1.0/tests/sdk/test_retry.py +232 -0
- labqoat-0.1.0/tests/sdk/test_runs_namespace.py +1130 -0
- labqoat-0.1.0/tests/sdk/test_staging.py +298 -0
- labqoat-0.1.0/tests/sdk/test_training_namespace.py +386 -0
- labqoat-0.1.0/tests/sdk/test_training_runtime.py +310 -0
- labqoat-0.1.0/tests/sdk/test_training_worker.py +289 -0
- labqoat-0.1.0/tests/sdk/test_transform_namespace.py +321 -0
- labqoat-0.1.0/tests/sdk/test_transform_worker.py +228 -0
- labqoat-0.1.0/tests/sdk/test_transforms.py +220 -0
- labqoat-0.1.0/tests/sdk/test_transport.py +190 -0
- labqoat-0.1.0/tests/sdk/test_workload_client.py +598 -0
- labqoat-0.1.0/tests/sdk/test_workload_harness.py +141 -0
- labqoat-0.1.0/tests/sdk/test_workloads.py +193 -0
- labqoat-0.1.0/uv.lock +828 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
jobs:
|
|
12
|
+
verify:
|
|
13
|
+
runs-on: ubuntu-24.04
|
|
14
|
+
timeout-minutes: 30
|
|
15
|
+
steps:
|
|
16
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
17
|
+
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
18
|
+
with:
|
|
19
|
+
enable-cache: true
|
|
20
|
+
version: "0.9.2"
|
|
21
|
+
- run: uv python install 3.13
|
|
22
|
+
- run: uv sync --all-groups --locked
|
|
23
|
+
- run: uv run ruff format --check .
|
|
24
|
+
- run: uv run ruff check .
|
|
25
|
+
- run: uv run lint-imports
|
|
26
|
+
- run: uv run pyright
|
|
27
|
+
- run: uv run pyright --verifytypes labqoat --ignoreexternal
|
|
28
|
+
- run: uv run pytest --randomly-seed="$GITHUB_RUN_ID"
|
|
29
|
+
- run: uv build
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
name: Publish to PyPI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
contents: read
|
|
9
|
+
|
|
10
|
+
jobs:
|
|
11
|
+
publish:
|
|
12
|
+
runs-on: ubuntu-24.04
|
|
13
|
+
environment: pypi
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
id-token: write
|
|
17
|
+
steps:
|
|
18
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
19
|
+
- uses: astral-sh/setup-uv@c771a70e6277c0a99b617c7a806ffedaca235ff9 # v9.0.0
|
|
20
|
+
with:
|
|
21
|
+
version: "0.9.2"
|
|
22
|
+
- run: uv build
|
|
23
|
+
- run: uv publish --trusted-publishing always
|
labqoat-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.13
|
labqoat-0.1.0/LICENSE
ADDED
labqoat-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: labqoat
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Typed Python SDK and lab command-line client for the Labqoat platform
|
|
5
|
+
Author: Labqoat
|
|
6
|
+
License-Expression: LicenseRef-Proprietary
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Requires-Python: <3.14,>=3.13
|
|
9
|
+
Requires-Dist: botocore[crt]<2,>=1.40
|
|
10
|
+
Requires-Dist: click<9,>=8.4
|
|
11
|
+
Requires-Dist: httpx<0.29,>=0.28.1
|
|
12
|
+
Requires-Dist: keyring<26,>=25
|
|
13
|
+
Requires-Dist: msgspec<0.20,>=0.19.0
|
|
14
|
+
Requires-Dist: pyarrow<24,>=21.0.0
|
|
15
|
+
Requires-Dist: rich<15,>=14.3
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
|
|
18
|
+
# Labqoat
|
|
19
|
+
|
|
20
|
+
`labqoat` is the public Python SDK and the `lab` command-line client for the
|
|
21
|
+
shared Labqoat cloud platform. Application repositories contain only authored
|
|
22
|
+
resources—models, jobs, datasets, evaluations, and transforms. Terraform,
|
|
23
|
+
Kubernetes, persistence, and control-plane services stay in the platform
|
|
24
|
+
repository and are deployed once.
|
|
25
|
+
|
|
26
|
+
## Install
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
uv tool install labqoat
|
|
30
|
+
# or
|
|
31
|
+
pipx install labqoat
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
Python projects that import the SDK should also declare `labqoat` as a normal
|
|
35
|
+
dependency.
|
|
36
|
+
|
|
37
|
+
## Start a project
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
lab init my-lab-project
|
|
41
|
+
cd my-lab-project
|
|
42
|
+
uv sync
|
|
43
|
+
|
|
44
|
+
lab model new audio/my-model
|
|
45
|
+
lab train new audio/my-training-job
|
|
46
|
+
lab dataset new audio/my-dataset
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Authenticate once, then open the AWS dashboard with the same stored session:
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
lab auth
|
|
53
|
+
lab auth ui
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
The browser handoff is automatic; the bearer token is not printed or placed in
|
|
57
|
+
the HTTP request URL.
|
|
58
|
+
|
|
59
|
+
The generated repository has this shape and no infrastructure code:
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
my-lab-project/
|
|
63
|
+
├── datasets/
|
|
64
|
+
├── evals/
|
|
65
|
+
├── jobs/
|
|
66
|
+
├── models/
|
|
67
|
+
├── transforms/
|
|
68
|
+
├── pyproject.toml
|
|
69
|
+
└── README.md
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
Run `lab <group> --help` for the command surface. Local `check`, `test`, and
|
|
73
|
+
`build` commands do not require cloud authentication. `submit` and `deploy`
|
|
74
|
+
require a clean pushed Git commit and send a source snapshot to the one shared
|
|
75
|
+
AWS builder; user repositories never contain or apply Terraform.
|
|
76
|
+
|
|
77
|
+
## Development
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
uv sync --all-groups --locked
|
|
81
|
+
uv run ruff format --check .
|
|
82
|
+
uv run ruff check .
|
|
83
|
+
uv run pyright
|
|
84
|
+
uv run pytest
|
|
85
|
+
uv build
|
|
86
|
+
```
|
labqoat-0.1.0/README.md
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Labqoat
|
|
2
|
+
|
|
3
|
+
`labqoat` is the public Python SDK and the `lab` command-line client for the
|
|
4
|
+
shared Labqoat cloud platform. Application repositories contain only authored
|
|
5
|
+
resources—models, jobs, datasets, evaluations, and transforms. Terraform,
|
|
6
|
+
Kubernetes, persistence, and control-plane services stay in the platform
|
|
7
|
+
repository and are deployed once.
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
uv tool install labqoat
|
|
13
|
+
# or
|
|
14
|
+
pipx install labqoat
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Python projects that import the SDK should also declare `labqoat` as a normal
|
|
18
|
+
dependency.
|
|
19
|
+
|
|
20
|
+
## Start a project
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
lab init my-lab-project
|
|
24
|
+
cd my-lab-project
|
|
25
|
+
uv sync
|
|
26
|
+
|
|
27
|
+
lab model new audio/my-model
|
|
28
|
+
lab train new audio/my-training-job
|
|
29
|
+
lab dataset new audio/my-dataset
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Authenticate once, then open the AWS dashboard with the same stored session:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
lab auth
|
|
36
|
+
lab auth ui
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
The browser handoff is automatic; the bearer token is not printed or placed in
|
|
40
|
+
the HTTP request URL.
|
|
41
|
+
|
|
42
|
+
The generated repository has this shape and no infrastructure code:
|
|
43
|
+
|
|
44
|
+
```text
|
|
45
|
+
my-lab-project/
|
|
46
|
+
├── datasets/
|
|
47
|
+
├── evals/
|
|
48
|
+
├── jobs/
|
|
49
|
+
├── models/
|
|
50
|
+
├── transforms/
|
|
51
|
+
├── pyproject.toml
|
|
52
|
+
└── README.md
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Run `lab <group> --help` for the command surface. Local `check`, `test`, and
|
|
56
|
+
`build` commands do not require cloud authentication. `submit` and `deploy`
|
|
57
|
+
require a clean pushed Git commit and send a source snapshot to the one shared
|
|
58
|
+
AWS builder; user repositories never contain or apply Terraform.
|
|
59
|
+
|
|
60
|
+
## Development
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
uv sync --all-groups --locked
|
|
64
|
+
uv run ruff format --check .
|
|
65
|
+
uv run ruff check .
|
|
66
|
+
uv run pyright
|
|
67
|
+
uv run pytest
|
|
68
|
+
uv build
|
|
69
|
+
```
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "labqoat"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Typed Python SDK and lab command-line client for the Labqoat platform"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.13,<3.14"
|
|
11
|
+
license = "LicenseRef-Proprietary"
|
|
12
|
+
authors = [{ name = "Labqoat" }]
|
|
13
|
+
dependencies = [
|
|
14
|
+
"botocore[crt]>=1.40,<2",
|
|
15
|
+
"click>=8.4,<9",
|
|
16
|
+
"httpx>=0.28.1,<0.29",
|
|
17
|
+
"keyring>=25,<26",
|
|
18
|
+
"msgspec>=0.19.0,<0.20",
|
|
19
|
+
"pyarrow>=21.0.0,<24",
|
|
20
|
+
"rich>=14.3,<15",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
[project.scripts]
|
|
24
|
+
lab = "labqoat_cli.main:main"
|
|
25
|
+
|
|
26
|
+
[dependency-groups]
|
|
27
|
+
dev = [
|
|
28
|
+
"boto3>=1.40,<2",
|
|
29
|
+
"boto3-stubs[s3]>=1.40,<2",
|
|
30
|
+
"botocore-stubs>=1.40,<2",
|
|
31
|
+
"build>=1.3,<2",
|
|
32
|
+
"import-linter>=2.5,<3",
|
|
33
|
+
"pyright>=1.1.403,<2",
|
|
34
|
+
"pytest>=8.4,<9",
|
|
35
|
+
"pytest-asyncio>=1.1,<2",
|
|
36
|
+
"pytest-cov>=6.2,<7",
|
|
37
|
+
"pytest-randomly>=4,<5",
|
|
38
|
+
"pyarrow-stubs>=20.0.0.20260625,<21",
|
|
39
|
+
"ruff>=0.12.7,<0.13",
|
|
40
|
+
"types-jsonschema>=4.26.0.20260518,<5",
|
|
41
|
+
]
|
|
42
|
+
|
|
43
|
+
[tool.hatch.build.targets.wheel]
|
|
44
|
+
packages = ["src/labqoat", "src/labqoat_cli"]
|
|
45
|
+
|
|
46
|
+
[tool.ruff]
|
|
47
|
+
target-version = "py313"
|
|
48
|
+
line-length = 88
|
|
49
|
+
src = ["src", "tests"]
|
|
50
|
+
|
|
51
|
+
[tool.ruff.lint]
|
|
52
|
+
ignore = ["N818", "TRY003", "ASYNC109"]
|
|
53
|
+
select = [
|
|
54
|
+
"ASYNC",
|
|
55
|
+
"B",
|
|
56
|
+
"C4",
|
|
57
|
+
"C90",
|
|
58
|
+
"DTZ",
|
|
59
|
+
"E",
|
|
60
|
+
"EXE",
|
|
61
|
+
"F",
|
|
62
|
+
"FA",
|
|
63
|
+
"FLY",
|
|
64
|
+
"FURB",
|
|
65
|
+
"G",
|
|
66
|
+
"I",
|
|
67
|
+
"ICN",
|
|
68
|
+
"INP",
|
|
69
|
+
"LOG",
|
|
70
|
+
"N",
|
|
71
|
+
"PERF",
|
|
72
|
+
"PIE",
|
|
73
|
+
"PLC",
|
|
74
|
+
"PLE",
|
|
75
|
+
"PLR",
|
|
76
|
+
"PLW",
|
|
77
|
+
"PTH",
|
|
78
|
+
"RET",
|
|
79
|
+
"RSE",
|
|
80
|
+
"RUF",
|
|
81
|
+
"S",
|
|
82
|
+
"SIM",
|
|
83
|
+
"SLF",
|
|
84
|
+
"T10",
|
|
85
|
+
"T20",
|
|
86
|
+
"TC",
|
|
87
|
+
"TRY",
|
|
88
|
+
"UP",
|
|
89
|
+
"W",
|
|
90
|
+
]
|
|
91
|
+
|
|
92
|
+
[tool.ruff.lint.mccabe]
|
|
93
|
+
max-complexity = 8
|
|
94
|
+
|
|
95
|
+
[tool.ruff.lint.pylint]
|
|
96
|
+
max-args = 5
|
|
97
|
+
max-branches = 8
|
|
98
|
+
max-returns = 6
|
|
99
|
+
max-statements = 40
|
|
100
|
+
|
|
101
|
+
[tool.ruff.lint.per-file-ignores]
|
|
102
|
+
"tests/**/*.py" = ["INP001", "PLR2004", "S101"]
|
|
103
|
+
|
|
104
|
+
[tool.pyright]
|
|
105
|
+
include = ["src", "tests"]
|
|
106
|
+
stubPath = "tests/typing_stubs"
|
|
107
|
+
pythonVersion = "3.13"
|
|
108
|
+
typeCheckingMode = "strict"
|
|
109
|
+
venvPath = "."
|
|
110
|
+
venv = ".venv"
|
|
111
|
+
reportImplicitOverride = "error"
|
|
112
|
+
reportMissingTypeStubs = "error"
|
|
113
|
+
reportUnnecessaryTypeIgnoreComment = "error"
|
|
114
|
+
|
|
115
|
+
[tool.pytest.ini_options]
|
|
116
|
+
addopts = [
|
|
117
|
+
"--strict-config",
|
|
118
|
+
"--strict-markers",
|
|
119
|
+
"--strict",
|
|
120
|
+
"--cov=labqoat",
|
|
121
|
+
"--cov=labqoat_cli",
|
|
122
|
+
"--cov-branch",
|
|
123
|
+
"--cov-report=term-missing",
|
|
124
|
+
]
|
|
125
|
+
filterwarnings = ["error"]
|
|
126
|
+
pythonpath = ["src"]
|
|
127
|
+
testpaths = ["tests"]
|
|
128
|
+
xfail_strict = true
|
|
129
|
+
|
|
130
|
+
[tool.coverage.run]
|
|
131
|
+
branch = true
|
|
132
|
+
source = ["labqoat", "labqoat_cli"]
|
|
133
|
+
omit = ["**/tests/**"]
|
|
134
|
+
|
|
135
|
+
[tool.coverage.report]
|
|
136
|
+
fail_under = 0
|
|
137
|
+
show_missing = true
|
|
138
|
+
skip_empty = false
|
|
139
|
+
|
|
140
|
+
[tool.importlinter]
|
|
141
|
+
root_packages = ["labqoat", "labqoat_cli"]
|
|
142
|
+
include_external_packages = true
|
|
143
|
+
|
|
144
|
+
[[tool.importlinter.contracts]]
|
|
145
|
+
name = "Domain primitives do not depend on client adapters"
|
|
146
|
+
type = "forbidden"
|
|
147
|
+
source_modules = ["labqoat.contracts", "labqoat.references"]
|
|
148
|
+
forbidden_modules = ["labqoat.client", "labqoat.async_client"]
|
|
149
|
+
|
|
150
|
+
[[tool.importlinter.contracts]]
|
|
151
|
+
name = "CLI uses only the public SDK"
|
|
152
|
+
type = "forbidden"
|
|
153
|
+
source_modules = ["labqoat_cli"]
|
|
154
|
+
forbidden_modules = ["labqoat_control_plane"]
|