pyeufysecurity 0.4.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 (54) hide show
  1. pyeufysecurity-0.4.0/.bandit.yaml +397 -0
  2. pyeufysecurity-0.4.0/.coveragerc +11 -0
  3. pyeufysecurity-0.4.0/.flake8 +5 -0
  4. pyeufysecurity-0.4.0/.github/ISSUE_TEMPLATE/bug_report.md +24 -0
  5. pyeufysecurity-0.4.0/.github/ISSUE_TEMPLATE/feature_request.md +14 -0
  6. pyeufysecurity-0.4.0/.github/pull_request_template.md +11 -0
  7. pyeufysecurity-0.4.0/.github/release-drafter.yml +18 -0
  8. pyeufysecurity-0.4.0/.github/workflows/ci.yaml +66 -0
  9. pyeufysecurity-0.4.0/.github/workflows/release.yaml +17 -0
  10. pyeufysecurity-0.4.0/.gitignore +9 -0
  11. pyeufysecurity-0.4.0/.pre-commit-config.yaml +57 -0
  12. pyeufysecurity-0.4.0/API.md +644 -0
  13. pyeufysecurity-0.4.0/AUTHORS.md +6 -0
  14. pyeufysecurity-0.4.0/LICENSE +21 -0
  15. pyeufysecurity-0.4.0/PKG-INFO +140 -0
  16. pyeufysecurity-0.4.0/README.md +118 -0
  17. pyeufysecurity-0.4.0/eufy_security/__init__.py +34 -0
  18. pyeufysecurity-0.4.0/eufy_security/__version__.py +2 -0
  19. pyeufysecurity-0.4.0/eufy_security/api.py +557 -0
  20. pyeufysecurity-0.4.0/eufy_security/converters.py +119 -0
  21. pyeufysecurity-0.4.0/eufy_security/crypto.py +40 -0
  22. pyeufysecurity-0.4.0/eufy_security/device.py +143 -0
  23. pyeufysecurity-0.4.0/eufy_security/errors.py +111 -0
  24. pyeufysecurity-0.4.0/eufy_security/param.py +133 -0
  25. pyeufysecurity-0.4.0/eufy_security/types.py +212 -0
  26. pyeufysecurity-0.4.0/examples/__init__.py +1 -0
  27. pyeufysecurity-0.4.0/examples/test_api.py +43 -0
  28. pyeufysecurity-0.4.0/index.html +60 -0
  29. pyeufysecurity-0.4.0/openapi.yaml +1185 -0
  30. pyeufysecurity-0.4.0/pylintrc +26 -0
  31. pyeufysecurity-0.4.0/pyproject.toml +51 -0
  32. pyeufysecurity-0.4.0/script/release +50 -0
  33. pyeufysecurity-0.4.0/script/setup +10 -0
  34. pyeufysecurity-0.4.0/script/test +5 -0
  35. pyeufysecurity-0.4.0/tests/__init__.py +1 -0
  36. pyeufysecurity-0.4.0/tests/common.py +19 -0
  37. pyeufysecurity-0.4.0/tests/conftest.py +33 -0
  38. pyeufysecurity-0.4.0/tests/fixtures/__init__.py +1 -0
  39. pyeufysecurity-0.4.0/tests/fixtures/devices_list_response.json +626 -0
  40. pyeufysecurity-0.4.0/tests/fixtures/empty_response.json +1 -0
  41. pyeufysecurity-0.4.0/tests/fixtures/history_response.json +90 -0
  42. pyeufysecurity-0.4.0/tests/fixtures/hub_list_response.json +553 -0
  43. pyeufysecurity-0.4.0/tests/fixtures/login_failure_invalid_email_response.json +5 -0
  44. pyeufysecurity-0.4.0/tests/fixtures/login_failure_invalid_password_response.json +5 -0
  45. pyeufysecurity-0.4.0/tests/fixtures/start_stream_response.json +7 -0
  46. pyeufysecurity-0.4.0/tests/fixtures/stop_stream_response.json +4 -0
  47. pyeufysecurity-0.4.0/tests/fixtures/upload_devs_params_response.json +1 -0
  48. pyeufysecurity-0.4.0/tests/test_api.py +372 -0
  49. pyeufysecurity-0.4.0/tests/test_converters.py +99 -0
  50. pyeufysecurity-0.4.0/tests/test_crypto.py +99 -0
  51. pyeufysecurity-0.4.0/tests/test_device.py +177 -0
  52. pyeufysecurity-0.4.0/tests/test_errors.py +148 -0
  53. pyeufysecurity-0.4.0/tests/test_param.py +184 -0
  54. pyeufysecurity-0.4.0/tests/test_types.py +27 -0
@@ -0,0 +1,397 @@
1
+
2
+ ### Bandit config file generated from:
3
+ # '.venv/bin/bandit-config-generator -o .bandit.yaml'
4
+
5
+ ### This config may optionally select a subset of tests to run or skip by
6
+ ### filling out the 'tests' and 'skips' lists given below. If no tests are
7
+ ### specified for inclusion then it is assumed all tests are desired. The skips
8
+ ### set will remove specific tests from the include set. This can be controlled
9
+ ### using the -t/-s CLI options. Note that the same test ID should not appear
10
+ ### in both 'tests' and 'skips', this would be nonsensical and is detected by
11
+ ### Bandit at runtime.
12
+
13
+ # Available tests:
14
+ # B101 : assert_used
15
+ # B102 : exec_used
16
+ # B103 : set_bad_file_permissions
17
+ # B104 : hardcoded_bind_all_interfaces
18
+ # B105 : hardcoded_password_string
19
+ # B106 : hardcoded_password_funcarg
20
+ # B107 : hardcoded_password_default
21
+ # B108 : hardcoded_tmp_directory
22
+ # B110 : try_except_pass
23
+ # B112 : try_except_continue
24
+ # B201 : flask_debug_true
25
+ # B301 : pickle
26
+ # B302 : marshal
27
+ # B303 : md5
28
+ # B304 : ciphers
29
+ # B305 : cipher_modes
30
+ # B306 : mktemp_q
31
+ # B307 : eval
32
+ # B308 : mark_safe
33
+ # B309 : httpsconnection
34
+ # B310 : urllib_urlopen
35
+ # B311 : random
36
+ # B312 : telnetlib
37
+ # B313 : xml_bad_cElementTree
38
+ # B314 : xml_bad_ElementTree
39
+ # B315 : xml_bad_expatreader
40
+ # B316 : xml_bad_expatbuilder
41
+ # B317 : xml_bad_sax
42
+ # B318 : xml_bad_minidom
43
+ # B319 : xml_bad_pulldom
44
+ # B320 : xml_bad_etree
45
+ # B321 : ftplib
46
+ # B322 : input
47
+ # B323 : unverified_context
48
+ # B324 : hashlib_new_insecure_functions
49
+ # B325 : tempnam
50
+ # B401 : import_telnetlib
51
+ # B402 : import_ftplib
52
+ # B403 : import_pickle
53
+ # B404 : import_subprocess
54
+ # B405 : import_xml_etree
55
+ # B406 : import_xml_sax
56
+ # B407 : import_xml_expat
57
+ # B408 : import_xml_minidom
58
+ # B409 : import_xml_pulldom
59
+ # B410 : import_lxml
60
+ # B411 : import_xmlrpclib
61
+ # B412 : import_httpoxy
62
+ # B413 : import_pycrypto
63
+ # B501 : request_with_no_cert_validation
64
+ # B502 : ssl_with_bad_version
65
+ # B503 : ssl_with_bad_defaults
66
+ # B504 : ssl_with_no_version
67
+ # B505 : weak_cryptographic_key
68
+ # B506 : yaml_load
69
+ # B507 : ssh_no_host_key_verification
70
+ # B601 : paramiko_calls
71
+ # B602 : subprocess_popen_with_shell_equals_true
72
+ # B603 : subprocess_without_shell_equals_true
73
+ # B604 : any_other_function_with_shell_equals_true
74
+ # B605 : start_process_with_a_shell
75
+ # B606 : start_process_with_no_shell
76
+ # B607 : start_process_with_partial_path
77
+ # B608 : hardcoded_sql_expressions
78
+ # B609 : linux_commands_wildcard_injection
79
+ # B610 : django_extra_used
80
+ # B611 : django_rawsql_used
81
+ # B701 : jinja2_autoescape_false
82
+ # B702 : use_of_mako_templates
83
+ # B703 : django_mark_safe
84
+
85
+ # (optional) list included test IDs here, eg '[B101, B406]':
86
+ tests:
87
+
88
+ # (optional) list skipped test IDs here, eg '[B101, B406]':
89
+ skips:
90
+
91
+ ### (optional) plugin settings - some test plugins require configuration data
92
+ ### that may be given here, per-plugin. All bandit test plugins have a built in
93
+ ### set of sensible defaults and these will be used if no configuration is
94
+ ### provided. It is not necessary to provide settings for every (or any) plugin
95
+ ### if the defaults are acceptable.
96
+
97
+ any_other_function_with_shell_equals_true:
98
+ no_shell:
99
+ - os.execl
100
+ - os.execle
101
+ - os.execlp
102
+ - os.execlpe
103
+ - os.execv
104
+ - os.execve
105
+ - os.execvp
106
+ - os.execvpe
107
+ - os.spawnl
108
+ - os.spawnle
109
+ - os.spawnlp
110
+ - os.spawnlpe
111
+ - os.spawnv
112
+ - os.spawnve
113
+ - os.spawnvp
114
+ - os.spawnvpe
115
+ - os.startfile
116
+ shell:
117
+ - os.system
118
+ - os.popen
119
+ - os.popen2
120
+ - os.popen3
121
+ - os.popen4
122
+ - popen2.popen2
123
+ - popen2.popen3
124
+ - popen2.popen4
125
+ - popen2.Popen3
126
+ - popen2.Popen4
127
+ - commands.getoutput
128
+ - commands.getstatusoutput
129
+ subprocess:
130
+ - subprocess.Popen
131
+ - subprocess.call
132
+ - subprocess.check_call
133
+ - subprocess.check_output
134
+ - subprocess.run
135
+ hardcoded_tmp_directory:
136
+ tmp_dirs:
137
+ - /tmp
138
+ - /var/tmp
139
+ - /dev/shm
140
+ linux_commands_wildcard_injection:
141
+ no_shell:
142
+ - os.execl
143
+ - os.execle
144
+ - os.execlp
145
+ - os.execlpe
146
+ - os.execv
147
+ - os.execve
148
+ - os.execvp
149
+ - os.execvpe
150
+ - os.spawnl
151
+ - os.spawnle
152
+ - os.spawnlp
153
+ - os.spawnlpe
154
+ - os.spawnv
155
+ - os.spawnve
156
+ - os.spawnvp
157
+ - os.spawnvpe
158
+ - os.startfile
159
+ shell:
160
+ - os.system
161
+ - os.popen
162
+ - os.popen2
163
+ - os.popen3
164
+ - os.popen4
165
+ - popen2.popen2
166
+ - popen2.popen3
167
+ - popen2.popen4
168
+ - popen2.Popen3
169
+ - popen2.Popen4
170
+ - commands.getoutput
171
+ - commands.getstatusoutput
172
+ subprocess:
173
+ - subprocess.Popen
174
+ - subprocess.call
175
+ - subprocess.check_call
176
+ - subprocess.check_output
177
+ - subprocess.run
178
+ ssl_with_bad_defaults:
179
+ bad_protocol_versions:
180
+ - PROTOCOL_SSLv2
181
+ - SSLv2_METHOD
182
+ - SSLv23_METHOD
183
+ - PROTOCOL_SSLv3
184
+ - PROTOCOL_TLSv1
185
+ - SSLv3_METHOD
186
+ - TLSv1_METHOD
187
+ ssl_with_bad_version:
188
+ bad_protocol_versions:
189
+ - PROTOCOL_SSLv2
190
+ - SSLv2_METHOD
191
+ - SSLv23_METHOD
192
+ - PROTOCOL_SSLv3
193
+ - PROTOCOL_TLSv1
194
+ - SSLv3_METHOD
195
+ - TLSv1_METHOD
196
+ start_process_with_a_shell:
197
+ no_shell:
198
+ - os.execl
199
+ - os.execle
200
+ - os.execlp
201
+ - os.execlpe
202
+ - os.execv
203
+ - os.execve
204
+ - os.execvp
205
+ - os.execvpe
206
+ - os.spawnl
207
+ - os.spawnle
208
+ - os.spawnlp
209
+ - os.spawnlpe
210
+ - os.spawnv
211
+ - os.spawnve
212
+ - os.spawnvp
213
+ - os.spawnvpe
214
+ - os.startfile
215
+ shell:
216
+ - os.system
217
+ - os.popen
218
+ - os.popen2
219
+ - os.popen3
220
+ - os.popen4
221
+ - popen2.popen2
222
+ - popen2.popen3
223
+ - popen2.popen4
224
+ - popen2.Popen3
225
+ - popen2.Popen4
226
+ - commands.getoutput
227
+ - commands.getstatusoutput
228
+ subprocess:
229
+ - subprocess.Popen
230
+ - subprocess.call
231
+ - subprocess.check_call
232
+ - subprocess.check_output
233
+ - subprocess.run
234
+ start_process_with_no_shell:
235
+ no_shell:
236
+ - os.execl
237
+ - os.execle
238
+ - os.execlp
239
+ - os.execlpe
240
+ - os.execv
241
+ - os.execve
242
+ - os.execvp
243
+ - os.execvpe
244
+ - os.spawnl
245
+ - os.spawnle
246
+ - os.spawnlp
247
+ - os.spawnlpe
248
+ - os.spawnv
249
+ - os.spawnve
250
+ - os.spawnvp
251
+ - os.spawnvpe
252
+ - os.startfile
253
+ shell:
254
+ - os.system
255
+ - os.popen
256
+ - os.popen2
257
+ - os.popen3
258
+ - os.popen4
259
+ - popen2.popen2
260
+ - popen2.popen3
261
+ - popen2.popen4
262
+ - popen2.Popen3
263
+ - popen2.Popen4
264
+ - commands.getoutput
265
+ - commands.getstatusoutput
266
+ subprocess:
267
+ - subprocess.Popen
268
+ - subprocess.call
269
+ - subprocess.check_call
270
+ - subprocess.check_output
271
+ - subprocess.run
272
+ start_process_with_partial_path:
273
+ no_shell:
274
+ - os.execl
275
+ - os.execle
276
+ - os.execlp
277
+ - os.execlpe
278
+ - os.execv
279
+ - os.execve
280
+ - os.execvp
281
+ - os.execvpe
282
+ - os.spawnl
283
+ - os.spawnle
284
+ - os.spawnlp
285
+ - os.spawnlpe
286
+ - os.spawnv
287
+ - os.spawnve
288
+ - os.spawnvp
289
+ - os.spawnvpe
290
+ - os.startfile
291
+ shell:
292
+ - os.system
293
+ - os.popen
294
+ - os.popen2
295
+ - os.popen3
296
+ - os.popen4
297
+ - popen2.popen2
298
+ - popen2.popen3
299
+ - popen2.popen4
300
+ - popen2.Popen3
301
+ - popen2.Popen4
302
+ - commands.getoutput
303
+ - commands.getstatusoutput
304
+ subprocess:
305
+ - subprocess.Popen
306
+ - subprocess.call
307
+ - subprocess.check_call
308
+ - subprocess.check_output
309
+ - subprocess.run
310
+ subprocess_popen_with_shell_equals_true:
311
+ no_shell:
312
+ - os.execl
313
+ - os.execle
314
+ - os.execlp
315
+ - os.execlpe
316
+ - os.execv
317
+ - os.execve
318
+ - os.execvp
319
+ - os.execvpe
320
+ - os.spawnl
321
+ - os.spawnle
322
+ - os.spawnlp
323
+ - os.spawnlpe
324
+ - os.spawnv
325
+ - os.spawnve
326
+ - os.spawnvp
327
+ - os.spawnvpe
328
+ - os.startfile
329
+ shell:
330
+ - os.system
331
+ - os.popen
332
+ - os.popen2
333
+ - os.popen3
334
+ - os.popen4
335
+ - popen2.popen2
336
+ - popen2.popen3
337
+ - popen2.popen4
338
+ - popen2.Popen3
339
+ - popen2.Popen4
340
+ - commands.getoutput
341
+ - commands.getstatusoutput
342
+ subprocess:
343
+ - subprocess.Popen
344
+ - subprocess.call
345
+ - subprocess.check_call
346
+ - subprocess.check_output
347
+ - subprocess.run
348
+ subprocess_without_shell_equals_true:
349
+ no_shell:
350
+ - os.execl
351
+ - os.execle
352
+ - os.execlp
353
+ - os.execlpe
354
+ - os.execv
355
+ - os.execve
356
+ - os.execvp
357
+ - os.execvpe
358
+ - os.spawnl
359
+ - os.spawnle
360
+ - os.spawnlp
361
+ - os.spawnlpe
362
+ - os.spawnv
363
+ - os.spawnve
364
+ - os.spawnvp
365
+ - os.spawnvpe
366
+ - os.startfile
367
+ shell:
368
+ - os.system
369
+ - os.popen
370
+ - os.popen2
371
+ - os.popen3
372
+ - os.popen4
373
+ - popen2.popen2
374
+ - popen2.popen3
375
+ - popen2.popen4
376
+ - popen2.Popen3
377
+ - popen2.Popen4
378
+ - commands.getoutput
379
+ - commands.getstatusoutput
380
+ subprocess:
381
+ - subprocess.Popen
382
+ - subprocess.call
383
+ - subprocess.check_call
384
+ - subprocess.check_output
385
+ - subprocess.run
386
+ try_except_continue:
387
+ check_typed_exception: false
388
+ try_except_pass:
389
+ check_typed_exception: false
390
+ weak_cryptographic_key:
391
+ weak_key_size_dsa_high: 1024
392
+ weak_key_size_dsa_medium: 2048
393
+ weak_key_size_ec_high: 160
394
+ weak_key_size_ec_medium: 224
395
+ weak_key_size_rsa_high: 1024
396
+ weak_key_size_rsa_medium: 2048
397
+
@@ -0,0 +1,11 @@
1
+ [run]
2
+ source = eufy_security
3
+
4
+ omit =
5
+ eufy_security/__version__.py
6
+
7
+ [report]
8
+ exclude_lines =
9
+ pragma: no cover
10
+ if TYPE_CHECKING:
11
+
@@ -0,0 +1,5 @@
1
+ [flake8]
2
+ ignore = E203, E266, E501, F811, W503
3
+ max-line-length = 80
4
+ max-complexity = 18
5
+ select = B,C,E,F,W,T4,B9
@@ -0,0 +1,24 @@
1
+ ---
2
+ name: Bug report
3
+ about: Create a report to help us improve
4
+
5
+ ---
6
+
7
+ **Describe the bug**
8
+ A clear and concise description of what the bug is.
9
+
10
+ **To Reproduce**
11
+ Steps to reproduce the behavior:
12
+ 1. Go to '...'
13
+ 2. Click on '....'
14
+ 3. Scroll down to '....'
15
+ 4. See error
16
+
17
+ **Expected behavior**
18
+ A clear and concise description of what you expected to happen.
19
+
20
+ **Screenshots**
21
+ If applicable, add screenshots to help explain your problem.
22
+
23
+ **Additional context**
24
+ Add any other context about the problem here.
@@ -0,0 +1,14 @@
1
+ ---
2
+ name: Feature request
3
+ about: Suggest an idea for this project
4
+
5
+ ---
6
+
7
+ **Is your feature request related to a problem? Please describe.**
8
+ A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
9
+
10
+ **Describe the solution you'd like**
11
+ A clear and concise description of what you want to happen.
12
+
13
+ **Additional context**
14
+ Add any other context or screenshots about the feature request here.
@@ -0,0 +1,11 @@
1
+ **Describe what the PR does:**
2
+
3
+ **Does this fix a specific issue?**
4
+
5
+ Fixes https://github.com/ptarjan/pyeufysecurity/issues/<ISSUE ID>
6
+
7
+ **Checklist:**
8
+
9
+ - [ ] Confirm that one or more new tests are written for the new functionality.
10
+ - [ ] Update `README.md` with any new documentation.
11
+ - [ ] Add yourself to `AUTHORS.md`.
@@ -0,0 +1,18 @@
1
+ ---
2
+ categories:
3
+ - title: "🚀 Features"
4
+ labels:
5
+ - "enhancement"
6
+ - title: "🐛 Bug Fixes"
7
+ labels:
8
+ - "bug"
9
+ - title: "🧰 Maintenance"
10
+ labels:
11
+ - "ci/cd"
12
+ - "dependencies"
13
+ - "tooling"
14
+ change-template: "- $TITLE (#$NUMBER)"
15
+ name-template: "$NEXT_PATCH_VERSION"
16
+ tag-template: "$NEXT_PATCH_VERSION"
17
+ template: |
18
+ $CHANGES
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: CI
3
+
4
+ on:
5
+ pull_request:
6
+ branches:
7
+ - dev
8
+ - master
9
+
10
+ push:
11
+ branches:
12
+ - dev
13
+ - master
14
+
15
+ jobs:
16
+ test:
17
+ name: Tests
18
+
19
+ runs-on: ubuntu-latest
20
+
21
+ strategy:
22
+ matrix:
23
+ python-version:
24
+ - "3.11"
25
+ - "3.12"
26
+ - "3.13"
27
+
28
+ steps:
29
+ - uses: actions/checkout@v4
30
+
31
+ - uses: actions/setup-python@v5
32
+ with:
33
+ python-version: ${{ matrix.python-version }}
34
+
35
+ - name: Install dependencies
36
+ run: |
37
+ python -m pip install --upgrade pip
38
+ pip install -e ".[dev]" || pip install -e .
39
+ pip install pytest pytest-cov pytest-asyncio aiohttp
40
+
41
+ - name: Run tests
42
+ run: pytest tests/ -v
43
+
44
+ lint:
45
+ name: "Linting & Type Checking"
46
+
47
+ runs-on: ubuntu-latest
48
+
49
+ steps:
50
+ - uses: actions/checkout@v4
51
+
52
+ - uses: actions/setup-python@v5
53
+ with:
54
+ python-version: "3.12"
55
+
56
+ - name: Install dependencies
57
+ run: |
58
+ python -m pip install --upgrade pip
59
+ pip install -e .
60
+ pip install ruff mypy
61
+
62
+ - name: Run ruff
63
+ run: ruff check .
64
+
65
+ - name: Run mypy
66
+ run: mypy eufy_security --ignore-missing-imports
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: "Draft Release"
3
+
4
+ on:
5
+ push:
6
+ branches:
7
+ - "dev"
8
+
9
+ jobs:
10
+ update_release_draft:
11
+
12
+ runs-on: ubuntu-latest
13
+
14
+ steps:
15
+ - uses: release-drafter/release-drafter@v5
16
+ env:
17
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,9 @@
1
+ *.egg-info
2
+ .coverage
3
+ .mypy_cache/
4
+ .venv
5
+ coverage.xml
6
+ poetry.lock
7
+ tags
8
+ __pycache__
9
+ .claude/settings.local.json
@@ -0,0 +1,57 @@
1
+ ---
2
+ repos:
3
+ - repo: https://github.com/PyCQA/bandit
4
+ rev: 1.6.2
5
+ hooks:
6
+ - id: bandit
7
+ args:
8
+ - --quiet
9
+ - --format=custom
10
+ - --configfile=.bandit.yaml
11
+ files: ^eufy_security/.+\.py$
12
+ - repo: https://github.com/python/black
13
+ rev: 19.10b0
14
+ hooks:
15
+ - id: black
16
+ args:
17
+ - --safe
18
+ - --quiet
19
+ language_version: python3
20
+ files: ^((eufy_security|tests)/.+)?[^/]+\.py$
21
+ - repo: https://github.com/codespell-project/codespell
22
+ rev: v1.16.0
23
+ hooks:
24
+ - id: codespell
25
+ args:
26
+ - --skip="./.*,*.json"
27
+ - --quiet-level=4
28
+ exclude_types: [json]
29
+ - repo: https://gitlab.com/pycqa/flake8
30
+ rev: 3.7.9
31
+ hooks:
32
+ - id: flake8
33
+ additional_dependencies:
34
+ - flake8-docstrings==1.5.0
35
+ - pydocstyle==5.0.1
36
+ files: ^eufy_security/.+\.py$
37
+ - repo: https://github.com/pre-commit/mirrors-isort
38
+ rev: v4.3.21
39
+ hooks:
40
+ - id: isort
41
+ additional_dependencies:
42
+ - toml
43
+ files: ^(eufy_security|tests)/.+\.py$
44
+ - repo: https://github.com/pre-commit/pre-commit-hooks
45
+ rev: v2.4.0
46
+ hooks:
47
+ - id: check-json
48
+ - id: no-commit-to-branch
49
+ args:
50
+ - --branch=dev
51
+ - --branch=master
52
+ - repo: https://github.com/PyCQA/pydocstyle
53
+ rev: 5.0.2
54
+ hooks:
55
+ - id: pydocstyle
56
+ files: ^((eufy_security|tests)/.+)?[^/]+\.py$
57
+