aiobmsble 0.2.2__tar.gz → 0.2.3__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 (48) hide show
  1. {aiobmsble-0.2.2/aiobmsble.egg-info → aiobmsble-0.2.3}/PKG-INFO +2 -2
  2. {aiobmsble-0.2.2 → aiobmsble-0.2.3/aiobmsble.egg-info}/PKG-INFO +2 -2
  3. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble.egg-info/requires.txt +1 -1
  4. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/pyproject.toml +101 -97
  5. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/LICENSE +0 -0
  6. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/MANIFEST.in +0 -0
  7. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/README.md +0 -0
  8. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/__init__.py +0 -0
  9. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/__main__.py +0 -0
  10. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/basebms.py +0 -0
  11. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/__init__.py +0 -0
  12. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/abc_bms.py +0 -0
  13. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/ant_bms.py +0 -0
  14. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/braunpwr_bms.py +0 -0
  15. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/cbtpwr_bms.py +0 -0
  16. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/cbtpwr_vb_bms.py +0 -0
  17. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/daly_bms.py +0 -0
  18. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/dpwrcore_bms.py +0 -0
  19. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/dummy_bms.py +0 -0
  20. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/ecoworthy_bms.py +0 -0
  21. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/ective_bms.py +0 -0
  22. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/ej_bms.py +0 -0
  23. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/felicity_bms.py +0 -0
  24. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/jbd_bms.py +0 -0
  25. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/jikong_bms.py +0 -0
  26. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/neey_bms.py +0 -0
  27. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/ogt_bms.py +0 -0
  28. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/pro_bms.py +0 -0
  29. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/redodo_bms.py +0 -0
  30. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/renogy_bms.py +0 -0
  31. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/renogy_pro_bms.py +0 -0
  32. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/roypow_bms.py +0 -0
  33. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/seplos_bms.py +0 -0
  34. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/seplos_v2_bms.py +0 -0
  35. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/tdt_bms.py +0 -0
  36. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/bms/tianpwr_bms.py +0 -0
  37. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble/utils.py +0 -0
  38. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble.egg-info/SOURCES.txt +0 -0
  39. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble.egg-info/dependency_links.txt +0 -0
  40. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble.egg-info/entry_points.txt +0 -0
  41. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/aiobmsble.egg-info/top_level.txt +0 -0
  42. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/setup.cfg +0 -0
  43. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/tests/test_basebms.py +0 -0
  44. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/tests/test_examples.py +0 -0
  45. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/tests/test_fuzzing.py +0 -0
  46. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/tests/test_main.py +0 -0
  47. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/tests/test_plugins.py +0 -0
  48. {aiobmsble-0.2.2 → aiobmsble-0.2.3}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aiobmsble
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: Asynchronous Python library to query battery management systems via Bluetooth Low Energy.
5
5
  Author: Patrick Loschmidt
6
6
  Maintainer: Patrick Loschmidt
@@ -19,7 +19,7 @@ Requires-Python: >=3.12
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
21
21
  Requires-Dist: bleak~=1.1.0
22
- Requires-Dist: bleak-retry-connector~=4.0.2
22
+ Requires-Dist: bleak-retry-connector>=4.0.2
23
23
  Requires-Dist: asyncio
24
24
  Requires-Dist: logging
25
25
  Requires-Dist: statistics
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aiobmsble
3
- Version: 0.2.2
3
+ Version: 0.2.3
4
4
  Summary: Asynchronous Python library to query battery management systems via Bluetooth Low Energy.
5
5
  Author: Patrick Loschmidt
6
6
  Maintainer: Patrick Loschmidt
@@ -19,7 +19,7 @@ Requires-Python: >=3.12
19
19
  Description-Content-Type: text/markdown
20
20
  License-File: LICENSE
21
21
  Requires-Dist: bleak~=1.1.0
22
- Requires-Dist: bleak-retry-connector~=4.0.2
22
+ Requires-Dist: bleak-retry-connector>=4.0.2
23
23
  Requires-Dist: asyncio
24
24
  Requires-Dist: logging
25
25
  Requires-Dist: statistics
@@ -1,5 +1,5 @@
1
1
  bleak~=1.1.0
2
- bleak-retry-connector~=4.0.2
2
+ bleak-retry-connector>=4.0.2
3
3
  asyncio
4
4
  logging
5
5
  statistics
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "aiobmsble"
7
- version = "0.2.2"
7
+ version = "0.2.3"
8
8
  requires-python = ">=3.12"
9
9
  description = "Asynchronous Python library to query battery management systems via Bluetooth Low Energy."
10
10
  readme = "README.md"
@@ -28,7 +28,7 @@ classifiers = [
28
28
  ]
29
29
  dependencies = [
30
30
  "bleak~=1.1.0",
31
- "bleak-retry-connector~=4.0.2",
31
+ "bleak-retry-connector>=4.0.2",
32
32
  "asyncio",
33
33
  "logging",
34
34
  "statistics",
@@ -59,62 +59,58 @@ testpaths = [
59
59
  asyncio_mode = "auto"
60
60
  asyncio_default_fixture_loop_scope = "function"
61
61
 
62
- # ruff settings from HA 2025.2.2
62
+ # ruff settings from HA 2025.9.0
63
63
  [tool.ruff]
64
- required-version = ">=0.9.1"
64
+ required-version = "~=0.12.1"
65
65
 
66
66
  [tool.ruff.lint]
67
67
  select = [
68
- "A001", # Variable {name} is shadowing a Python builtin
69
- "ASYNC210", # Async functions should not call blocking HTTP methods
70
- "ASYNC220", # Async functions should not create subprocesses with blocking methods
71
- "ASYNC221", # Async functions should not run processes with blocking methods
72
- "ASYNC222", # Async functions should not wait on processes with blocking methods
73
- "ASYNC230", # Async functions should not open files with blocking methods like open
74
- "ASYNC251", # Async functions should not call time.sleep
75
- "B002", # Python does not support the unary prefix increment
76
- "B005", # Using .strip() with multi-character strings is misleading
77
- "B007", # Loop control variable {name} not used within loop body
78
- "B014", # Exception handler with duplicate exception
79
- "B015", # Pointless comparison. Did you mean to assign a value? Otherwise, prepend assert or remove it.
80
- "B017", # pytest.raises(BaseException) should be considered evil
81
- "B018", # Found useless attribute access. Either assign it to a variable or remove it.
82
- "B023", # Function definition does not bind loop variable {name}
83
- "B024", # `{name}` is an abstract base class, but it has no abstract methods or properties
84
- "B026", # Star-arg unpacking after a keyword argument is strongly discouraged
85
- "B032", # Possible unintentional type annotation (using :). Did you mean to assign (using =)?
86
- "B035", # Dictionary comprehension uses static key
87
- "B904", # Use raise from to specify exception cause
88
- "B905", # zip() without an explicit strict= parameter
68
+ "A001", # Variable {name} is shadowing a Python builtin
69
+ "ASYNC", # flake8-async
70
+ "B002", # Python does not support the unary prefix increment
71
+ "B005", # Using .strip() with multi-character strings is misleading
72
+ "B007", # Loop control variable {name} not used within loop body
73
+ # "B009", # Do not call getattr with a constant attribute value. It is not any safer than normal property access.
74
+ "B014", # Exception handler with duplicate exception
75
+ "B015", # Pointless comparison. Did you mean to assign a value? Otherwise, prepend assert or remove it.
76
+ "B017", # pytest.raises(BaseException) should be considered evil
77
+ "B018", # Found useless attribute access. Either assign it to a variable or remove it.
78
+ "B023", # Function definition does not bind loop variable {name}
79
+ "B024", # `{name}` is an abstract base class, but it has no abstract methods or properties
80
+ "B026", # Star-arg unpacking after a keyword argument is strongly discouraged
81
+ "B032", # Possible unintentional type annotation (using :). Did you mean to assign (using =)?
82
+ "B035", # Dictionary comprehension uses static key
83
+ "B904", # Use raise from to specify exception cause
84
+ "B905", # zip() without an explicit strict= parameter
89
85
  "BLE",
90
- "C", # complexity
86
+ "C", # complexity
91
87
  "COM818", # Trailing comma on bare tuple prohibited
92
- "D", # docstrings
88
+ "D", # docstrings
93
89
  "DTZ003", # Use datetime.now(tz=) instead of datetime.utcnow()
94
90
  "DTZ004", # Use datetime.fromtimestamp(ts, tz=) instead of datetime.utcfromtimestamp(ts)
95
- "E", # pycodestyle
96
- "F", # pyflakes/autoflake
97
- "F541", # f-string without any placeholders
98
- "FLY", # flynt
99
- "FURB", # refurb
100
- "G", # flake8-logging-format
101
- "I", # isort
102
- "INP", # flake8-no-pep420
103
- "ISC", # flake8-implicit-str-concat
91
+ "E", # pycodestyle
92
+ "F", # pyflakes/autoflake
93
+ "F541", # f-string without any placeholders
94
+ "FLY", # flynt
95
+ "FURB", # refurb
96
+ "G", # flake8-logging-format
97
+ "I", # isort
98
+ "INP", # flake8-no-pep420
99
+ "ISC", # flake8-implicit-str-concat
104
100
  "ICN001", # import concentions; {name} should be imported as {asname}
105
- "LOG", # flake8-logging
106
- "N804", # First argument of a class method should be named cls
107
- "N805", # First argument of a method should be named self
108
- "N815", # Variable {name} in class scope should not be mixedCase
109
- "PERF", # Perflint
110
- "PGH", # pygrep-hooks
111
- "PIE", # flake8-pie
112
- "PL", # pylint
113
- "PT", # flake8-pytest-style
114
- "PTH", # flake8-pathlib
115
- "PYI", # flake8-pyi
116
- "RET", # flake8-return
117
- "RSE", # flake8-raise
101
+ "LOG", # flake8-logging
102
+ "N804", # First argument of a class method should be named cls
103
+ "N805", # First argument of a method should be named self
104
+ "N815", # Variable {name} in class scope should not be mixedCase
105
+ "PERF", # Perflint
106
+ "PGH", # pygrep-hooks
107
+ "PIE", # flake8-pie
108
+ "PL", # pylint
109
+ "PT", # flake8-pytest-style
110
+ "PTH", # flake8-pathlib
111
+ "PYI", # flake8-pyi
112
+ "RET", # flake8-return
113
+ "RSE", # flake8-raise
118
114
  "RUF005", # Consider iterable unpacking instead of concatenation
119
115
  "RUF006", # Store a reference to the return value of asyncio.create_task
120
116
  "RUF007", # Prefer itertools.pairwise() over zip() when iterating over successive pairs
@@ -138,44 +134,46 @@ select = [
138
134
  "RUF100", # Unused `noqa` directive
139
135
  "RUF101", # noqa directives that use redirected rule codes
140
136
  "RUF200", # Failed to parse pyproject.toml: {message}
141
- "S102", # Use of exec detected
142
- "S103", # bad-file-permissions
143
- "S108", # hardcoded-temp-file
144
- "S306", # suspicious-mktemp-usage
145
- "S307", # suspicious-eval-usage
146
- "S313", # suspicious-xmlc-element-tree-usage
147
- "S314", # suspicious-xml-element-tree-usage
148
- "S315", # suspicious-xml-expat-reader-usage
149
- "S316", # suspicious-xml-expat-builder-usage
150
- "S317", # suspicious-xml-sax-usage
151
- "S318", # suspicious-xml-mini-dom-usage
152
- "S319", # suspicious-xml-pull-dom-usage
153
- "S601", # paramiko-call
154
- "S602", # subprocess-popen-with-shell-equals-true
155
- "S604", # call-with-shell-equals-true
156
- "S608", # hardcoded-sql-expression
157
- "S609", # unix-command-wildcard-injection
158
- "SIM", # flake8-simplify
159
- "SLF", # flake8-self
160
- "SLOT", # flake8-slots
161
- "T100", # Trace found: {name} used
162
- "T20", # flake8-print
163
- "TC", # flake8-type-checking
164
- "TID", # Tidy imports
165
- "TRY", # tryceratops
166
- "UP", # pyupgrade
167
- "UP031", # Use format specifiers instead of percent format
168
- "UP032", # Use f-string instead of `format` call
169
- "W", # pycodestyle
137
+ "S102", # Use of exec detected
138
+ "S103", # bad-file-permissions
139
+ "S108", # hardcoded-temp-file
140
+ "S306", # suspicious-mktemp-usage
141
+ "S307", # suspicious-eval-usage
142
+ "S313", # suspicious-xmlc-element-tree-usage
143
+ "S314", # suspicious-xml-element-tree-usage
144
+ "S315", # suspicious-xml-expat-reader-usage
145
+ "S316", # suspicious-xml-expat-builder-usage
146
+ "S317", # suspicious-xml-sax-usage
147
+ "S318", # suspicious-xml-mini-dom-usage
148
+ "S319", # suspicious-xml-pull-dom-usage
149
+ "S601", # paramiko-call
150
+ "S602", # subprocess-popen-with-shell-equals-true
151
+ "S604", # call-with-shell-equals-true
152
+ "S608", # hardcoded-sql-expression
153
+ "S609", # unix-command-wildcard-injection
154
+ "SIM", # flake8-simplify
155
+ "SLF", # flake8-self
156
+ "SLOT", # flake8-slots
157
+ "T100", # Trace found: {name} used
158
+ "T20", # flake8-print
159
+ "TC", # flake8-type-checking
160
+ "TID", # Tidy imports
161
+ "TRY", # tryceratops
162
+ "UP", # pyupgrade
163
+ "UP031", # Use format specifiers instead of percent format
164
+ "UP032", # Use f-string instead of `format` call
165
+ "W", # pycodestyle
170
166
  ]
171
167
 
172
168
  ignore = [
173
- "D202", # No blank lines allowed after function docstring
174
- "D203", # 1 blank line required before class docstring
175
- "D213", # Multi-line docstring summary should start at the second line
176
- "D406", # Section name should end with a newline
177
- "D407", # Section name underlining
178
- "E501", # line too long
169
+ "ASYNC109", # Async function definition with a `timeout` parameter Use `asyncio.timeout` instead
170
+ "ASYNC110", # Use `asyncio.Event` instead of awaiting `asyncio.sleep` in a `while` loop
171
+ "D202", # No blank lines allowed after function docstring
172
+ "D203", # 1 blank line required before class docstring
173
+ "D213", # Multi-line docstring summary should start at the second line
174
+ "D406", # Section name should end with a newline
175
+ "D407", # Section name underlining
176
+ "E501", # line too long
179
177
 
180
178
  # "PLC1901", # {existing} can be simplified to {replacement} as an empty string is falsey; too many false positives
181
179
  # "PLR0911", # Too many return statements ({returns} > {max_returns})
@@ -183,27 +181,33 @@ ignore = [
183
181
  "PLR0913", # Too many arguments to function call ({c_args} > {max_args})
184
182
  # "PLR0915", # Too many statements ({statements} > {max_statements})
185
183
  "PLR2004", # Magic value used in comparison, consider replacing {value} with a constant variable
184
+ "PLW1641", # __eq__ without __hash__
186
185
  # "PLW2901", # Outer {outer_kind} variable {name} overwritten by inner {inner_kind} target
187
- # "PT011", # pytest.raises({exception}) is too broad, set the `match` parameter or use a more specific exception
188
- "PT018", # Assertion should be broken down into multiple parts
189
- # "RUF001", # String contains ambiguous unicode character.
190
- # "RUF002", # Docstring contains ambiguous unicode character.
191
- # "RUF003", # Comment contains ambiguous unicode character.
192
- # "RUF015", # Prefer next(...) over single element slice
193
- "SIM102", # Use a single if statement instead of nested if statements
194
- # "SIM103", # Return the condition {condition} directly
195
- # "SIM108", # Use ternary operator {contents} instead of if-else-block
196
- # "SIM115", # Use context handler for opening files
186
+ # "PT011", # pytest.raises({exception}) is too broad, set the `match` parameter or use a more specific exception
187
+ "PT018", # Assertion should be broken down into multiple parts
188
+ # "RUF001", # String contains ambiguous unicode character.
189
+ # "RUF002", # Docstring contains ambiguous unicode character.
190
+ # "RUF003", # Comment contains ambiguous unicode character.
191
+ # "RUF015", # Prefer next(...) over single element slice
192
+ "SIM102", # Use a single if statement instead of nested if statements
193
+ # "SIM103", # Return the condition {condition} directly
194
+ # "SIM108", # Use ternary operator {contents} instead of if-else-block
195
+ # "SIM115", # Use context handler for opening files
197
196
 
198
197
  # Moving imports into type-checking blocks can mess with pytest.patch()
199
198
  "TC001", # Move application import {} into a type-checking block
200
199
  "TC002", # Move third-party import {} into a type-checking block
201
200
  "TC003", # Move standard library import {} into a type-checking block
201
+ # Quotes for typing.cast generally not necessary, only for performance critical paths
202
+ "TC006", # Add quotes to type expression in typing.cast()
202
203
 
203
204
  "TRY003", # Avoid specifying long messages outside the exception class
204
205
  "TRY400", # Use `logging.exception` instead of `logging.error`
205
206
  # Ignored due to performance: https://github.com/charliermarsh/ruff/issues/2923
206
- "UP038", # Use `X | Y` in `isinstance` call instead of `(X, Y)`
207
+ # "UP038", # Use `X | Y` in `isinstance` call instead of `(X, Y)`
208
+ # "UP046", # Non PEP 695 generic class
209
+ # "UP047", # Non PEP 696 generic function
210
+ # "UP049", # Avoid private type parameter names
207
211
 
208
212
  # May conflict with the formatter, https://docs.astral.sh/ruff/formatter/#conflicting-lint-rules
209
213
  "W191",
@@ -215,12 +219,12 @@ ignore = [
215
219
  "Q",
216
220
  "COM812",
217
221
  "COM819",
218
- "ISC001",
219
222
 
220
223
  # Disabled because ruff does not understand type of __all__ generated by a function
221
- "PLE0605"
224
+ "PLE0605",
222
225
  ]
223
226
 
227
+
224
228
  [tool.ruff.lint.isort]
225
229
  force-sort-within-sections = true
226
230
  known-first-party = [
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes