python-bsblan 5.1.2__tar.gz → 5.1.4__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.
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/renovate.json +1 -2
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/workflows/codeql.yaml +2 -2
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/workflows/release-drafter.yaml +1 -1
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/workflows/release.yaml +2 -2
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/workflows/tests.yaml +3 -3
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.gitignore +3 -0
- python_bsblan-5.1.4/.nvmrc +1 -0
- python_bsblan-5.1.4/Makefile +20 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/PKG-INFO +14 -2
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/README.md +13 -1
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/examples/speed_test.py +2 -85
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/package-lock.json +4 -4
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/package.json +1 -1
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/pyproject.toml +16 -8
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/src/bsblan/bsblan.py +85 -185
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/src/bsblan/constants.py +146 -198
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/src/bsblan/exceptions.py +3 -4
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/src/bsblan/models.py +0 -1
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/conftest.py +0 -3
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/fixtures/dict_version.json +1 -2
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/fixtures/state.json +0 -12
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/fixtures/state_circuit2.json +2 -14
- python_bsblan-5.1.4/tests/test_api_initialization.py +59 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_api_validation.py +4 -7
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_bsblan_edge_cases.py +0 -48
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_circuit.py +30 -126
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_configuration.py +7 -7
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_constants.py +11 -15
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_dhw_time_switch.py +2 -2
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_hotwater_state.py +0 -2
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_include_parameter.py +5 -6
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_initialization.py +19 -87
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_set_hotwater.py +3 -3
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_state.py +1 -6
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_temperature_unit.py +9 -9
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_temperature_validation.py +18 -16
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_thermostat.py +4 -5
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_version_errors.py +6 -6
- python_bsblan-5.1.2/.nvmrc +0 -1
- python_bsblan-5.1.2/tests/test_api_initialization.py +0 -103
- python_bsblan-5.1.2/uv.lock +0 -2381
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.editorconfig +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.gitattributes +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/CODE_OF_CONDUCT.md +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/CONTRIBUTING.md +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/ISSUE_TEMPLATE/PULL_REQUEST_TEMPLATE.md +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/copilot-instructions.md +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/labels.yml +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/prompts/add-parameter.prompt.md +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/prompts/code-review.prompt.md +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/release-drafter.yml +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/skills/bsblan-parameters/SKILL.md +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/skills/bsblan-testing/SKILL.md +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/workflows/auto-approve-renovate.yml +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/workflows/labels.yaml +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/workflows/linting.yaml +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/workflows/lock.yaml +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/workflows/pr-labels.yaml +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.github/workflows/stale.yaml +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.pre-commit-config.yaml +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.prettierignore +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/.yamllint +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/AGENTS.md +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/CLAUDE.md +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/LICENSE.md +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/examples/control.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/examples/discovery.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/examples/fetch_param.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/examples/profile_init.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/examples/ruff.toml +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/sonar-project.properties +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/src/bsblan/__init__.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/src/bsblan/py.typed +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/src/bsblan/utility.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/__init__.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/fixtures/device.json +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/fixtures/hot_water_state.json +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/fixtures/info.json +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/fixtures/password.txt +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/fixtures/sensor.json +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/fixtures/static_state.json +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/fixtures/static_state_circuit2.json +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/fixtures/thermostat_hvac.json +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/fixtures/thermostat_temp.json +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/fixtures/time.json +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/ruff.toml +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_auth.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_backoff_retry.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_bsblan.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_context_manager.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_device.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_entity_info.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_entity_info_ha.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_hot_water_additional.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_info.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_read_parameters.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_reset_validation.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_schedule_models.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_sensor.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_set_hot_water_schedule.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_static_state.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_time.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_utility.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_utility_additional.py +0 -0
- {python_bsblan-5.1.2 → python_bsblan-5.1.4}/tests/test_utility_edge_cases.py +0 -0
|
@@ -24,6 +24,6 @@ jobs:
|
|
|
24
24
|
- name: ⤵️ Check out code from GitHub
|
|
25
25
|
uses: actions/checkout@v6.0.2
|
|
26
26
|
- name: 🏗 Initialize CodeQL
|
|
27
|
-
uses: github/codeql-action/init@v4.
|
|
27
|
+
uses: github/codeql-action/init@v4.35.1
|
|
28
28
|
- name: 🚀 Perform CodeQL Analysis
|
|
29
|
-
uses: github/codeql-action/analyze@v4.
|
|
29
|
+
uses: github/codeql-action/analyze@v4.35.1
|
|
@@ -34,7 +34,7 @@ jobs:
|
|
|
34
34
|
runs-on: ubuntu-latest
|
|
35
35
|
steps:
|
|
36
36
|
- name: 🚀 Run Release Drafter
|
|
37
|
-
uses: release-drafter/release-drafter@
|
|
37
|
+
uses: release-drafter/release-drafter@v7.2.0
|
|
38
38
|
with:
|
|
39
39
|
prerelease: ${{ github.event.inputs.prerelease == 'true' }}
|
|
40
40
|
prerelease-identifier: ${{ github.event.inputs.prerelease_identifier }}
|
|
@@ -43,12 +43,12 @@ jobs:
|
|
|
43
43
|
- name: 🏗 Build package
|
|
44
44
|
run: uv build
|
|
45
45
|
- name: 🚀 Publish to PyPi
|
|
46
|
-
uses: pypa/gh-action-pypi-publish@v1.
|
|
46
|
+
uses: pypa/gh-action-pypi-publish@v1.14.0
|
|
47
47
|
with:
|
|
48
48
|
verbose: true
|
|
49
49
|
print-hash: true
|
|
50
50
|
- name: ✍️ Sign published artifacts
|
|
51
|
-
uses: sigstore/gh-action-sigstore-python@v3.
|
|
51
|
+
uses: sigstore/gh-action-sigstore-python@v3.3.0
|
|
52
52
|
with:
|
|
53
53
|
inputs: ./dist/*.tar.gz ./dist/*.whl
|
|
54
54
|
release-signing-artifacts: false
|
|
@@ -43,7 +43,7 @@ jobs:
|
|
|
43
43
|
- name: 🚀 Run pytest
|
|
44
44
|
run: uv run pytest --cov=bsblan tests
|
|
45
45
|
- name: ⬆️ Upload coverage artifact
|
|
46
|
-
uses: actions/upload-artifact@v7.0.
|
|
46
|
+
uses: actions/upload-artifact@v7.0.1
|
|
47
47
|
with:
|
|
48
48
|
name: coverage-${{ matrix.python }}
|
|
49
49
|
include-hidden-files: true
|
|
@@ -58,7 +58,7 @@ jobs:
|
|
|
58
58
|
with:
|
|
59
59
|
fetch-depth: 0
|
|
60
60
|
- name: ⬇️ Download coverage data
|
|
61
|
-
uses: actions/download-artifact@v8.0.
|
|
61
|
+
uses: actions/download-artifact@v8.0.1
|
|
62
62
|
- name: 🏗 Set up uv
|
|
63
63
|
uses: astral-sh/setup-uv@v7
|
|
64
64
|
with:
|
|
@@ -76,7 +76,7 @@ jobs:
|
|
|
76
76
|
uv run python -m coverage xml -i
|
|
77
77
|
- name: 🚀 Upload coverage report
|
|
78
78
|
if: env.HAS_CODECOV_TOKEN == 'true'
|
|
79
|
-
uses: codecov/codecov-action@
|
|
79
|
+
uses: codecov/codecov-action@v6.0.0
|
|
80
80
|
with:
|
|
81
81
|
token: ${{ secrets.CODECOV_TOKEN }}
|
|
82
82
|
- name: ℹ️ Skip Codecov upload (missing token)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
24.14.1
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
.PHONY: setup lint test coverage help
|
|
2
|
+
|
|
3
|
+
.DEFAULT_GOAL := help
|
|
4
|
+
|
|
5
|
+
help: ## Show this help message
|
|
6
|
+
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
|
|
7
|
+
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-15s\033[0m %s\n", $$1, $$2}'
|
|
8
|
+
|
|
9
|
+
setup: ## Install dev dependencies and git hooks
|
|
10
|
+
uv sync --dev
|
|
11
|
+
uv run prek install
|
|
12
|
+
|
|
13
|
+
lint: ## Run all pre-commit hooks
|
|
14
|
+
uv run prek run --all-files
|
|
15
|
+
|
|
16
|
+
test: ## Run tests
|
|
17
|
+
uv run pytest
|
|
18
|
+
|
|
19
|
+
coverage: ## Run tests with coverage report
|
|
20
|
+
uv run pytest --cov=src/bsblan --cov-report=term-missing
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-bsblan
|
|
3
|
-
Version: 5.1.
|
|
3
|
+
Version: 5.1.4
|
|
4
4
|
Summary: Asynchronous Python client for BSBLAN API
|
|
5
5
|
Project-URL: Homepage, https://github.com/liudger/python-bsblan
|
|
6
6
|
Project-URL: Repository, https://github.com/liudger/python-bsblan
|
|
@@ -182,9 +182,21 @@ To install all packages, including all development requirements:
|
|
|
182
182
|
|
|
183
183
|
```bash
|
|
184
184
|
npm install
|
|
185
|
-
|
|
185
|
+
make setup
|
|
186
186
|
```
|
|
187
187
|
|
|
188
|
+
### Makefile Targets
|
|
189
|
+
|
|
190
|
+
A `Makefile` is provided for common development tasks. Run `make help` to
|
|
191
|
+
see all available targets:
|
|
192
|
+
|
|
193
|
+
| Command | Description |
|
|
194
|
+
|-----------------|--------------------------------------|
|
|
195
|
+
| `make setup` | Install dev dependencies & git hooks |
|
|
196
|
+
| `make lint` | Run all pre-commit hooks |
|
|
197
|
+
| `make test` | Run tests |
|
|
198
|
+
| `make coverage` | Run tests with coverage report |
|
|
199
|
+
|
|
188
200
|
As this repository uses [prek][prek] (a faster, Rust-based drop-in replacement
|
|
189
201
|
for pre-commit), all changes are linted and tested with each commit. You can
|
|
190
202
|
run all checks and tests manually, using the following command:
|
|
@@ -150,9 +150,21 @@ To install all packages, including all development requirements:
|
|
|
150
150
|
|
|
151
151
|
```bash
|
|
152
152
|
npm install
|
|
153
|
-
|
|
153
|
+
make setup
|
|
154
154
|
```
|
|
155
155
|
|
|
156
|
+
### Makefile Targets
|
|
157
|
+
|
|
158
|
+
A `Makefile` is provided for common development tasks. Run `make help` to
|
|
159
|
+
see all available targets:
|
|
160
|
+
|
|
161
|
+
| Command | Description |
|
|
162
|
+
|-----------------|--------------------------------------|
|
|
163
|
+
| `make setup` | Install dev dependencies & git hooks |
|
|
164
|
+
| `make lint` | Run all pre-commit hooks |
|
|
165
|
+
| `make test` | Run tests |
|
|
166
|
+
| `make coverage` | Run tests with coverage report |
|
|
167
|
+
|
|
156
168
|
As this repository uses [prek][prek] (a faster, Rust-based drop-in replacement
|
|
157
169
|
for pre-commit), all changes are linted and tested with each commit. You can
|
|
158
170
|
run all checks and tests manually, using the following command:
|
|
@@ -4,7 +4,6 @@ Compares different approaches using pluggable benchmark suites:
|
|
|
4
4
|
- basic: Original tests (parallel calls, read_parameters, filtering)
|
|
5
5
|
- scalability: Large parameter set tests
|
|
6
6
|
- dual-circuit: Single vs parallel calls for dual heating circuit params
|
|
7
|
-
- triple-circuit: Same idea extended to 3 heating circuits
|
|
8
7
|
- hot-water: Hot water parameter group loading tests
|
|
9
8
|
|
|
10
9
|
Usage:
|
|
@@ -56,29 +55,20 @@ STATIC_PARAMS = ["714", "716"] # Min/max temp setpoints
|
|
|
56
55
|
ALL_PARAMS = INFO_PARAMS + STATIC_PARAMS
|
|
57
56
|
|
|
58
57
|
# Heating circuit 1 (700-series)
|
|
59
|
-
HC1_PARAMS = ["700", "710", "900", "8000", "8740"
|
|
58
|
+
HC1_PARAMS = ["700", "710", "900", "8000", "8740"]
|
|
60
59
|
|
|
61
60
|
# Heating circuit 2 (1000-series) — mirrors HC1 with offset
|
|
62
|
-
HC2_PARAMS = ["1000", "1010", "1200", "8001", "
|
|
63
|
-
|
|
64
|
-
# Heating circuit 3 (1300-series) — mirrors HC1 with offset
|
|
65
|
-
HC3_PARAMS = ["1300", "1310", "1500", "8002", "8742", "8751"]
|
|
61
|
+
HC2_PARAMS = ["1000", "1010", "1200", "8001", "8770"]
|
|
66
62
|
|
|
67
63
|
# Static values per circuit
|
|
68
64
|
HC1_STATIC_PARAMS = ["714", "716"]
|
|
69
65
|
HC2_STATIC_PARAMS = ["1014", "1016"]
|
|
70
|
-
HC3_STATIC_PARAMS = ["1314", "1316"]
|
|
71
66
|
|
|
72
67
|
# Combined dual circuit parameter sets
|
|
73
68
|
DUAL_HEATING_PARAMS = HC1_PARAMS + HC2_PARAMS
|
|
74
69
|
DUAL_STATIC_PARAMS = HC1_STATIC_PARAMS + HC2_STATIC_PARAMS
|
|
75
70
|
DUAL_ALL_PARAMS = DUAL_HEATING_PARAMS + DUAL_STATIC_PARAMS
|
|
76
71
|
|
|
77
|
-
# Triple circuit parameter sets
|
|
78
|
-
TRIPLE_HEATING_PARAMS = HC1_PARAMS + HC2_PARAMS + HC3_PARAMS
|
|
79
|
-
TRIPLE_STATIC_PARAMS = HC1_STATIC_PARAMS + HC2_STATIC_PARAMS + HC3_STATIC_PARAMS
|
|
80
|
-
TRIPLE_ALL_PARAMS = TRIPLE_HEATING_PARAMS + TRIPLE_STATIC_PARAMS
|
|
81
|
-
|
|
82
72
|
# Sensor parameters
|
|
83
73
|
SENSOR_PARAMS = ["8700", "8740"]
|
|
84
74
|
|
|
@@ -515,78 +505,6 @@ def build_dual_circuit_suite(bsblan: BSBLAN) -> BenchmarkSuite:
|
|
|
515
505
|
return suite
|
|
516
506
|
|
|
517
507
|
|
|
518
|
-
def build_triple_circuit_suite(bsblan: BSBLAN) -> BenchmarkSuite:
|
|
519
|
-
"""Build the triple heating circuit benchmark suite.
|
|
520
|
-
|
|
521
|
-
Same idea as dual-circuit but for 3 circuits. Most systems have
|
|
522
|
-
at most 2 circuits; HC3 params will return '---' on those
|
|
523
|
-
devices but this still measures the network call overhead.
|
|
524
|
-
"""
|
|
525
|
-
suite = BenchmarkSuite(
|
|
526
|
-
name="Triple Heating Circuit",
|
|
527
|
-
description=(
|
|
528
|
-
"Compare fetching strategies for 3 heating circuits.\n"
|
|
529
|
-
" HC1: " + ", ".join(HC1_PARAMS) + "\n"
|
|
530
|
-
" HC2: " + ", ".join(HC2_PARAMS) + "\n"
|
|
531
|
-
" HC3: " + ", ".join(HC3_PARAMS)
|
|
532
|
-
),
|
|
533
|
-
)
|
|
534
|
-
|
|
535
|
-
suite.add(
|
|
536
|
-
(f"HC1+HC2+HC3 combined — 1 call ({len(TRIPLE_HEATING_PARAMS)} params)"),
|
|
537
|
-
f"1 call ({len(TRIPLE_HEATING_PARAMS)}p)",
|
|
538
|
-
lambda: bsblan.read_parameters(TRIPLE_HEATING_PARAMS),
|
|
539
|
-
param_count=len(TRIPLE_HEATING_PARAMS),
|
|
540
|
-
)
|
|
541
|
-
|
|
542
|
-
suite.add(
|
|
543
|
-
"HC1+HC2+HC3 parallel — 3 calls",
|
|
544
|
-
"3 parallel",
|
|
545
|
-
lambda: asyncio.gather(
|
|
546
|
-
bsblan.read_parameters(HC1_PARAMS),
|
|
547
|
-
bsblan.read_parameters(HC2_PARAMS),
|
|
548
|
-
bsblan.read_parameters(HC3_PARAMS),
|
|
549
|
-
),
|
|
550
|
-
param_count=len(TRIPLE_HEATING_PARAMS),
|
|
551
|
-
)
|
|
552
|
-
|
|
553
|
-
async def _sequential_3() -> None:
|
|
554
|
-
await bsblan.read_parameters(HC1_PARAMS)
|
|
555
|
-
await bsblan.read_parameters(HC2_PARAMS)
|
|
556
|
-
await bsblan.read_parameters(HC3_PARAMS)
|
|
557
|
-
|
|
558
|
-
suite.add(
|
|
559
|
-
"HC1+HC2+HC3 sequential — 3 calls",
|
|
560
|
-
"3 sequential",
|
|
561
|
-
_sequential_3,
|
|
562
|
-
param_count=len(TRIPLE_HEATING_PARAMS),
|
|
563
|
-
)
|
|
564
|
-
|
|
565
|
-
# Full init with static values
|
|
566
|
-
suite.add(
|
|
567
|
-
(f"All circuits + static — 1 call ({len(TRIPLE_ALL_PARAMS)} params)"),
|
|
568
|
-
f"1 call all ({len(TRIPLE_ALL_PARAMS)}p)",
|
|
569
|
-
lambda: bsblan.read_parameters(TRIPLE_ALL_PARAMS),
|
|
570
|
-
param_count=len(TRIPLE_ALL_PARAMS),
|
|
571
|
-
)
|
|
572
|
-
|
|
573
|
-
suite.add(
|
|
574
|
-
"All circuits + static — 6 parallel (heat+static per circ)",
|
|
575
|
-
"6 parallel per section",
|
|
576
|
-
lambda: asyncio.gather(
|
|
577
|
-
bsblan.read_parameters(HC1_PARAMS),
|
|
578
|
-
bsblan.read_parameters(HC2_PARAMS),
|
|
579
|
-
bsblan.read_parameters(HC3_PARAMS),
|
|
580
|
-
bsblan.read_parameters(HC1_STATIC_PARAMS),
|
|
581
|
-
bsblan.read_parameters(HC2_STATIC_PARAMS),
|
|
582
|
-
bsblan.read_parameters(HC3_STATIC_PARAMS),
|
|
583
|
-
),
|
|
584
|
-
param_count=len(TRIPLE_ALL_PARAMS),
|
|
585
|
-
)
|
|
586
|
-
|
|
587
|
-
return suite
|
|
588
|
-
|
|
589
|
-
|
|
590
508
|
def build_hot_water_suite(bsblan: BSBLAN) -> BenchmarkSuite:
|
|
591
509
|
"""Build the hot water parameter benchmark suite."""
|
|
592
510
|
suite = BenchmarkSuite(
|
|
@@ -645,7 +563,6 @@ SUITE_BUILDERS: dict[str, Callable[[BSBLAN], BenchmarkSuite]] = {
|
|
|
645
563
|
"basic": build_basic_suite,
|
|
646
564
|
"scalability": build_scalability_suite,
|
|
647
565
|
"dual-circuit": build_dual_circuit_suite,
|
|
648
|
-
"triple-circuit": build_triple_circuit_suite,
|
|
649
566
|
"hot-water": build_hot_water_suite,
|
|
650
567
|
}
|
|
651
568
|
|
|
@@ -12,13 +12,13 @@
|
|
|
12
12
|
"url-parse": "1.5.10"
|
|
13
13
|
},
|
|
14
14
|
"devDependencies": {
|
|
15
|
-
"prettier": "3.8.
|
|
15
|
+
"prettier": "3.8.2"
|
|
16
16
|
}
|
|
17
17
|
},
|
|
18
18
|
"node_modules/prettier": {
|
|
19
|
-
"version": "3.8.
|
|
20
|
-
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.
|
|
21
|
-
"integrity": "sha512-
|
|
19
|
+
"version": "3.8.2",
|
|
20
|
+
"resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.2.tgz",
|
|
21
|
+
"integrity": "sha512-8c3mgTe0ASwWAJK+78dpviD+A8EqhndQPUBpNUIPt6+xWlIigCwfN01lWr9MAede4uqXGTEKeQWTvzb3vjia0Q==",
|
|
22
22
|
"dev": true,
|
|
23
23
|
"license": "MIT",
|
|
24
24
|
"bin": {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "python-bsblan"
|
|
3
|
-
version = "5.1.
|
|
3
|
+
version = "5.1.4"
|
|
4
4
|
description = "Asynchronous Python client for BSBLAN API"
|
|
5
5
|
authors = [
|
|
6
6
|
{name = "Willem-Jan van Rootselaar", email = "liudgervr@gmail.com"}
|
|
@@ -166,6 +166,14 @@ runtime-evaluated-base-classes = ["pydantic.BaseModel"]
|
|
|
166
166
|
[tool.ruff.lint.mccabe]
|
|
167
167
|
max-complexity = 25
|
|
168
168
|
|
|
169
|
+
[[tool.ty.overrides]]
|
|
170
|
+
include = ["tests/**", "**/test_*.py", "examples/**"]
|
|
171
|
+
|
|
172
|
+
[tool.ty.overrides.rules]
|
|
173
|
+
invalid-assignment = "ignore"
|
|
174
|
+
invalid-argument-type = "ignore"
|
|
175
|
+
unresolved-attribute = "ignore"
|
|
176
|
+
|
|
169
177
|
[tool.codespell]
|
|
170
178
|
ignore-words-list = "astroid"
|
|
171
179
|
|
|
@@ -177,29 +185,29 @@ build-backend = "hatchling.build"
|
|
|
177
185
|
dev = [
|
|
178
186
|
"aresponses==3.0.0",
|
|
179
187
|
"bandit==1.9.4",
|
|
180
|
-
"black==26.1
|
|
188
|
+
"black==26.3.1",
|
|
181
189
|
"blacken-docs==1.20.0",
|
|
182
|
-
"codespell==2.4.
|
|
190
|
+
"codespell==2.4.2",
|
|
183
191
|
"covdefaults==2.3.0",
|
|
184
|
-
"coverage==7.13.
|
|
192
|
+
"coverage==7.13.5",
|
|
185
193
|
"darglint==1.8.1",
|
|
186
194
|
"flake8==7.3.0",
|
|
187
195
|
"flake8-simplify==0.30.0",
|
|
188
196
|
# hatch is required to support type hinting and proper packaging of the py.typed file.
|
|
189
197
|
"hatch>=1.14.1",
|
|
190
198
|
"isort==8.0.1",
|
|
191
|
-
"ty==0.0.
|
|
199
|
+
"ty==0.0.29",
|
|
192
200
|
"prek>=0.3.3",
|
|
193
201
|
"pre-commit-hooks==6.0.0",
|
|
194
202
|
"pylint==4.0.5",
|
|
195
203
|
"pytest>=8.3.5",
|
|
196
204
|
"pytest-asyncio==1.3.0",
|
|
197
|
-
"pytest-cov==7.
|
|
205
|
+
"pytest-cov==7.1.0",
|
|
198
206
|
"pytest-xdist>=3.8.0",
|
|
199
207
|
"pyupgrade==3.21.2",
|
|
200
|
-
"ruff==0.15.
|
|
208
|
+
"ruff==0.15.10",
|
|
201
209
|
"safety==3.7.0",
|
|
202
|
-
"vulture==2.
|
|
210
|
+
"vulture==2.16",
|
|
203
211
|
"yamllint==1.38.0",
|
|
204
212
|
"zeroconf>=0.148.0",
|
|
205
213
|
]
|