python-bsblan 2.2.2__tar.gz → 2.2.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.
Files changed (78) hide show
  1. python_bsblan-2.2.4/.github/workflows/release.yaml +146 -0
  2. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/PKG-INFO +1 -1
  3. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/pyproject.toml +1 -1
  4. python_bsblan-2.2.2/.github/workflows/release.yaml +0 -59
  5. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.editorconfig +0 -0
  6. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.gitattributes +0 -0
  7. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/CODE_OF_CONDUCT.md +0 -0
  8. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/CONTRIBUTING.md +0 -0
  9. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/ISSUE_TEMPLATE/PULL_REQUEST_TEMPLATE.md +0 -0
  10. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  11. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  12. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/LICENSE.md +0 -0
  13. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/labels.yml +0 -0
  14. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/release-drafter.yml +0 -0
  15. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/renovate.json +0 -0
  16. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/workflows/codeql.yaml +0 -0
  17. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/workflows/labels.yaml +0 -0
  18. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/workflows/linting.yaml +0 -0
  19. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/workflows/lock.yaml +0 -0
  20. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/workflows/pr-labels.yaml +0 -0
  21. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/workflows/release-drafter.yaml +0 -0
  22. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/workflows/stale.yaml +0 -0
  23. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/workflows/tests.yaml +0 -0
  24. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.github/workflows/typing.yaml +0 -0
  25. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.gitignore +0 -0
  26. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.nvmrc +0 -0
  27. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.pre-commit-config.yaml +0 -0
  28. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.prettierignore +0 -0
  29. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/.yamllint +0 -0
  30. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/README.md +0 -0
  31. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/examples/control.py +0 -0
  32. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/examples/ruff.toml +0 -0
  33. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/package-lock.json +0 -0
  34. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/package.json +0 -0
  35. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/sonar-project.properties +0 -0
  36. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/src/bsblan/__init__.py +0 -0
  37. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/src/bsblan/bsblan.py +0 -0
  38. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/src/bsblan/constants.py +0 -0
  39. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/src/bsblan/exceptions.py +0 -0
  40. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/src/bsblan/models.py +0 -0
  41. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/src/bsblan/utility.py +0 -0
  42. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/__init__.py +0 -0
  43. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/conftest.py +0 -0
  44. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/fixtures/device.json +0 -0
  45. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/fixtures/dict_version.json +0 -0
  46. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/fixtures/hot_water_state.json +0 -0
  47. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/fixtures/info.json +0 -0
  48. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/fixtures/password.txt +0 -0
  49. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/fixtures/sensor.json +0 -0
  50. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/fixtures/state.json +0 -0
  51. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/fixtures/static_state.json +0 -0
  52. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/fixtures/thermostat_hvac.json +0 -0
  53. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/fixtures/thermostat_temp.json +0 -0
  54. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/ruff.toml +0 -0
  55. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_api_initialization.py +0 -0
  56. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_api_validation.py +0 -0
  57. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_auth.py +0 -0
  58. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_bsblan.py +0 -0
  59. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_configuration.py +0 -0
  60. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_context_manager.py +0 -0
  61. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_device.py +0 -0
  62. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_dhw_time_switch.py +0 -0
  63. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_entity_info.py +0 -0
  64. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_hotwater_state.py +0 -0
  65. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_info.py +0 -0
  66. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_initialization.py +0 -0
  67. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_reset_validation.py +0 -0
  68. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_sensor.py +0 -0
  69. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_set_hotwater.py +0 -0
  70. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_state.py +0 -0
  71. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_static_state.py +0 -0
  72. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_temperature_unit.py +0 -0
  73. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_temperature_validation.py +0 -0
  74. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_thermostat.py +0 -0
  75. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_utility.py +0 -0
  76. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_utility_additional.py +0 -0
  77. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/tests/test_version_errors.py +0 -0
  78. {python_bsblan-2.2.2 → python_bsblan-2.2.4}/uv.lock +0 -0
@@ -0,0 +1,146 @@
1
+ ---
2
+ name: Release
3
+
4
+ # yamllint disable-line rule:truthy
5
+ on:
6
+ release:
7
+ types:
8
+ - published
9
+
10
+ env:
11
+ DEFAULT_PYTHON: "3.11"
12
+
13
+ jobs:
14
+ release:
15
+ name: Releasing to PyPi
16
+ runs-on: ubuntu-latest
17
+ environment:
18
+ name: release
19
+ url: https://pypi.org/p/python-bsblan
20
+ permissions:
21
+ contents: write
22
+ id-token: write
23
+ steps:
24
+ - name: ⤵️ Check out code from GitHub
25
+ uses: actions/checkout@v4.2.2
26
+ - name: 🏗 Set up uv
27
+ uses: astral-sh/setup-uv@v4
28
+ with:
29
+ enable-cache: true
30
+ - name: 🏗 Set up Python ${{ env.DEFAULT_PYTHON }}
31
+ id: python
32
+ uses: actions/setup-python@v5.6.0
33
+ with:
34
+ python-version: ${{ env.DEFAULT_PYTHON }}
35
+ - name: 🏗 Install dependencies
36
+ run: uv sync
37
+ - name: 🏗 Set package version
38
+ run: |
39
+ version="${{ github.event.release.tag_name }}"
40
+ version="${version,,}"
41
+ version="${version#v}"
42
+ sed -i '0,/version = ".*"/{s/version = ".*"/version = "'"${version}"'"/}' pyproject.toml
43
+ - name: 🏗 Build package
44
+ run: uv build
45
+ - name: 🚀 Publish to PyPi
46
+ uses: pypa/gh-action-pypi-publish@v1.12.4
47
+ with:
48
+ verbose: true
49
+ print-hash: true
50
+ - name: ✍️ Sign published artifacts
51
+ uses: sigstore/gh-action-sigstore-python@v3.0.0
52
+ with:
53
+ inputs: ./dist/*.tar.gz ./dist/*.whl
54
+ release-signing-artifacts: false
55
+ - name: 🔍 Verify signature files
56
+ run: |
57
+ # Retry mechanism for file system sync
58
+ max_retries=5
59
+ retry_delay=2
60
+ retries=0
61
+ while [ $retries -lt $max_retries ]; do
62
+ echo "Checking for signature files (attempt $((retries + 1))/$max_retries)..."
63
+ if find ./dist -name "*.sigstore.json" -type f -exec echo "Found: {}" \; -exec ls -la {} \;; then
64
+ echo "Signature files found and listed."
65
+ break
66
+ else
67
+ echo "Files not ready, retrying in $retry_delay seconds..."
68
+ sleep $retry_delay
69
+ retries=$((retries + 1))
70
+ fi
71
+ done
72
+ if [ $retries -eq $max_retries ]; then
73
+ echo "Error: Signature files not found after $max_retries attempts."
74
+ exit 1
75
+ fi
76
+ # Ensure files are not locked or being written to
77
+ for file in ./dist/*.sigstore.json; do
78
+ if [ -f "$file" ]; then
79
+ echo "Checking file: $file"
80
+ # Test file readability
81
+ cat "$file" > /dev/null && echo "✓ File is readable" || echo "✗ File read error"
82
+ # Ensure file handles are closed
83
+ sync
84
+ fi
85
+ done
86
+ # Poll for file system operations to complete
87
+ max_wait_time=30
88
+ wait_interval=2
89
+ waited_time=0
90
+ while [ $waited_time -lt $max_wait_time ]; do
91
+ all_files_ready=true
92
+ for file in ./dist/*.sigstore.json; do
93
+ if [ -f "$file" ]; then
94
+ # Test file readability
95
+ if ! cat "$file" > /dev/null; then
96
+ echo "File $file is not readable yet."
97
+ all_files_ready=false
98
+ break
99
+ fi
100
+ else
101
+ echo "File $file does not exist yet."
102
+ all_files_ready=false
103
+ break
104
+ fi
105
+ done
106
+ if [ "$all_files_ready" = true ]; then
107
+ echo "All files are ready."
108
+ break
109
+ fi
110
+ echo "Waiting for files to be ready..."
111
+ sleep $wait_interval
112
+ waited_time=$((waited_time + wait_interval))
113
+ done
114
+ if [ $waited_time -ge $max_wait_time ]; then
115
+ echo "Error: Files not ready after $max_wait_time seconds."
116
+ exit 1
117
+ - name: 📋 List signature files explicitly
118
+ id: list-files
119
+ run: |
120
+ echo "signature_files<<EOF" >> $GITHUB_OUTPUT
121
+ find ./dist -name "*.sigstore.json" -type f | tr '\n' '\0' | xargs -0 -I {} echo "{}"
122
+ echo "EOF" >> $GITHUB_OUTPUT
123
+
124
+ # Also create a space-separated list for the upload action
125
+ FILES=$(find ./dist -name "*.sigstore.json" -type f | tr '\n' ' ')
126
+ echo "files_list=$FILES" >> $GITHUB_OUTPUT
127
+ echo "Found files: $FILES"
128
+ - name: 📤 Upload signature files to release
129
+ if: github.event_name == 'release' && github.event.action == 'published'
130
+ run: |
131
+ # Upload files individually to avoid Node.js file handle issues
132
+ for file in ./dist/*.sigstore.json; do
133
+ if [ -f "$file" ]; then
134
+ echo "Uploading $file..."
135
+ # Use GitHub CLI for more reliable uploads
136
+ gh release upload ${{ github.event.release.tag_name }} "$file" --clobber
137
+ if [ $? -ne 0 ]; then
138
+ echo "✗ Failed to upload $file" >&2
139
+ exit 1
140
+ fi
141
+ echo "✓ Uploaded $file"
142
+ sleep 1 # Small delay between uploads
143
+ fi
144
+ done
145
+ env:
146
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-bsblan
3
- Version: 2.2.2
3
+ Version: 2.2.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
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-bsblan"
3
- version = "2.2.2"
3
+ version = "2.2.4"
4
4
  description = "Asynchronous Python client for BSBLAN API"
5
5
  authors = [
6
6
  {name = "Willem-Jan van Rootselaar", email = "liudgervr@gmail.com"}
@@ -1,59 +0,0 @@
1
- ---
2
- name: Release
3
-
4
- # yamllint disable-line rule:truthy
5
- on:
6
- release:
7
- types:
8
- - published
9
-
10
- env:
11
- DEFAULT_PYTHON: "3.11"
12
-
13
- jobs:
14
- release:
15
- name: Releasing to PyPi
16
- runs-on: ubuntu-latest
17
- environment:
18
- name: release
19
- url: https://pypi.org/p/python-bsblan
20
- permissions:
21
- contents: write
22
- id-token: write
23
- steps:
24
- - name: ⤵️ Check out code from GitHub
25
- uses: actions/checkout@v4.2.2
26
- - name: 🏗 Set up uv
27
- uses: astral-sh/setup-uv@v4
28
- with:
29
- enable-cache: true
30
- - name: 🏗 Set up Python ${{ env.DEFAULT_PYTHON }}
31
- id: python
32
- uses: actions/setup-python@v5.6.0
33
- with:
34
- python-version: ${{ env.DEFAULT_PYTHON }}
35
- - name: 🏗 Install dependencies
36
- run: uv sync
37
- - name: 🏗 Set package version
38
- run: |
39
- version="${{ github.event.release.tag_name }}"
40
- version="${version,,}"
41
- version="${version#v}"
42
- sed -i '0,/version = ".*"/{s/version = ".*"/version = "'"${version}"'"/}' pyproject.toml
43
- - name: 🏗 Build package
44
- run: uv build
45
- - name: 🚀 Publish to PyPi
46
- uses: pypa/gh-action-pypi-publish@v1.12.4
47
- with:
48
- verbose: true
49
- print-hash: true
50
- - name: ✍️ Sign published artifacts
51
- uses: sigstore/gh-action-sigstore-python@v3.0.0
52
- with:
53
- inputs: ./dist/*.tar.gz ./dist/*.whl
54
- release-signing-artifacts: false
55
- - name: 📤 Upload signature files to release
56
- uses: softprops/action-gh-release@v2.3.0
57
- if: github.event_name == 'release' && github.event.action == 'published'
58
- with:
59
- files: ./dist/*.sigstore.json
File without changes
File without changes
File without changes
File without changes
File without changes