resilient-circuit 0.3.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 (49) hide show
  1. resilient_circuit-0.3.0/.gitignore +216 -0
  2. resilient_circuit-0.3.0/.pylintrc +446 -0
  3. resilient_circuit-0.3.0/.readthedocs.yaml +20 -0
  4. resilient_circuit-0.3.0/CHANGELOG.md +9 -0
  5. resilient_circuit-0.3.0/CLAUDE.md +18 -0
  6. resilient_circuit-0.3.0/LICENSE +201 -0
  7. resilient_circuit-0.3.0/Makefile +24 -0
  8. resilient_circuit-0.3.0/PKG-INFO +438 -0
  9. resilient_circuit-0.3.0/README.md +402 -0
  10. resilient_circuit-0.3.0/docs/README.md +22 -0
  11. resilient_circuit-0.3.0/docs/advanced.rst +115 -0
  12. resilient_circuit-0.3.0/docs/api.rst +68 -0
  13. resilient_circuit-0.3.0/docs/api_reference.md +209 -0
  14. resilient_circuit-0.3.0/docs/changelog.rst +32 -0
  15. resilient_circuit-0.3.0/docs/cli.rst +78 -0
  16. resilient_circuit-0.3.0/docs/conf.py +48 -0
  17. resilient_circuit-0.3.0/docs/contributing.md +226 -0
  18. resilient_circuit-0.3.0/docs/index.md +216 -0
  19. resilient_circuit-0.3.0/docs/index.rst +27 -0
  20. resilient_circuit-0.3.0/docs/installation.rst +33 -0
  21. resilient_circuit-0.3.0/docs/quickstart.rst +114 -0
  22. resilient_circuit-0.3.0/docs/usage_patterns.md +392 -0
  23. resilient_circuit-0.3.0/env.example +5 -0
  24. resilient_circuit-0.3.0/pyproject.toml +116 -0
  25. resilient_circuit-0.3.0/resilient_circuit/__init__.py +16 -0
  26. resilient_circuit-0.3.0/resilient_circuit/backoff.py +37 -0
  27. resilient_circuit-0.3.0/resilient_circuit/buffer.py +55 -0
  28. resilient_circuit-0.3.0/resilient_circuit/circuit_breaker.py +299 -0
  29. resilient_circuit-0.3.0/resilient_circuit/cli.py +261 -0
  30. resilient_circuit-0.3.0/resilient_circuit/exceptions.py +10 -0
  31. resilient_circuit-0.3.0/resilient_circuit/failsafe.py +34 -0
  32. resilient_circuit-0.3.0/resilient_circuit/policy.py +13 -0
  33. resilient_circuit-0.3.0/resilient_circuit/py.typed +0 -0
  34. resilient_circuit-0.3.0/resilient_circuit/retry.py +47 -0
  35. resilient_circuit-0.3.0/resilient_circuit/storage.py +181 -0
  36. resilient_circuit-0.3.0/resilient_circuit.egg-info/PKG-INFO +438 -0
  37. resilient_circuit-0.3.0/resilient_circuit.egg-info/SOURCES.txt +47 -0
  38. resilient_circuit-0.3.0/resilient_circuit.egg-info/dependency_links.txt +1 -0
  39. resilient_circuit-0.3.0/resilient_circuit.egg-info/entry_points.txt +2 -0
  40. resilient_circuit-0.3.0/resilient_circuit.egg-info/requires.txt +13 -0
  41. resilient_circuit-0.3.0/resilient_circuit.egg-info/top_level.txt +1 -0
  42. resilient_circuit-0.3.0/setup.cfg +4 -0
  43. resilient_circuit-0.3.0/setup_postgres.sh +229 -0
  44. resilient_circuit-0.3.0/tests/test_backoff.py +132 -0
  45. resilient_circuit-0.3.0/tests/test_buffer.py +97 -0
  46. resilient_circuit-0.3.0/tests/test_circuit_breaker.py +311 -0
  47. resilient_circuit-0.3.0/tests/test_failsafe.py +89 -0
  48. resilient_circuit-0.3.0/tests/test_retry.py +80 -0
  49. resilient_circuit-0.3.0/tests/test_storage_persistence.py +274 -0
@@ -0,0 +1,216 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[codz]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py.cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ # Pipfile.lock
96
+
97
+ # UV
98
+ # Similar to Pipfile.lock, it is generally recommended to include uv.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # uv.lock
102
+
103
+ # poetry
104
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
105
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
106
+ # commonly ignored for libraries.
107
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
108
+ # poetry.lock
109
+ # poetry.toml
110
+
111
+ # pdm
112
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
113
+ # pdm recommends including project-wide configuration in pdm.toml, but excluding .pdm-python.
114
+ # https://pdm-project.org/en/latest/usage/project/#working-with-version-control
115
+ # pdm.lock
116
+ # pdm.toml
117
+ .pdm-python
118
+ .pdm-build/
119
+
120
+ # pixi
121
+ # Similar to Pipfile.lock, it is generally recommended to include pixi.lock in version control.
122
+ # pixi.lock
123
+ # Pixi creates a virtual environment in the .pixi directory, just like venv module creates one
124
+ # in the .venv directory. It is recommended not to include this directory in version control.
125
+ .pixi
126
+
127
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
128
+ __pypackages__/
129
+
130
+ # Celery stuff
131
+ celerybeat-schedule
132
+ celerybeat.pid
133
+
134
+ # Redis
135
+ *.rdb
136
+ *.aof
137
+ *.pid
138
+
139
+ # RabbitMQ
140
+ mnesia/
141
+ rabbitmq/
142
+ rabbitmq-data/
143
+
144
+ # ActiveMQ
145
+ activemq-data/
146
+
147
+ # SageMath parsed files
148
+ *.sage.py
149
+
150
+ # Environments
151
+ .env
152
+ .envrc
153
+ .venv
154
+ env/
155
+ venv/
156
+ ENV/
157
+ env.bak/
158
+ venv.bak/
159
+
160
+ # Spyder project settings
161
+ .spyderproject
162
+ .spyproject
163
+
164
+ # Rope project settings
165
+ .ropeproject
166
+
167
+ # mkdocs documentation
168
+ /site
169
+
170
+ # mypy
171
+ .mypy_cache/
172
+ .dmypy.json
173
+ dmypy.json
174
+
175
+ # Pyre type checker
176
+ .pyre/
177
+
178
+ # pytype static type analyzer
179
+ .pytype/
180
+
181
+ # Cython debug symbols
182
+ cython_debug/
183
+
184
+ # PyCharm
185
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
186
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
187
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
188
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
189
+ # .idea/
190
+
191
+ # Abstra
192
+ # Abstra is an AI-powered process automation framework.
193
+ # Ignore directories containing user credentials, local state, and settings.
194
+ # Learn more at https://abstra.io/docs
195
+ .abstra/
196
+
197
+ # Visual Studio Code
198
+ # Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
199
+ # that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
200
+ # and can be added to the global gitignore or merged into this file. However, if you prefer,
201
+ # you could uncomment the following to ignore the entire vscode folder
202
+ # .vscode/
203
+
204
+ # Ruff stuff:
205
+ .ruff_cache/
206
+
207
+ # PyPI configuration file
208
+ .pypirc
209
+
210
+ # Marimo
211
+ marimo/_static/
212
+ marimo/_lsp/
213
+ __marimo__/
214
+
215
+ # Streamlit
216
+ .streamlit/secrets.toml
@@ -0,0 +1,446 @@
1
+ # Lintrc for Revolut Python project
2
+ # version: 0.0.1
3
+
4
+ [MASTER]
5
+
6
+ # Add files or directories to the blacklist. They should be base names, not
7
+ # paths.
8
+ ignore=third_party
9
+
10
+ # Add files or directories matching the regex patterns to the blacklist. The
11
+ # regex matches against base names, not paths.
12
+ ignore-patterns=
13
+
14
+ # Pickle collected data for later comparisons.
15
+ persistent=no
16
+
17
+ # List of plugins (as comma separated values of python modules names) to load,
18
+ # usually to register additional checkers.
19
+ load-plugins=
20
+
21
+ # Use multiple processes to speed up Pylint.
22
+ jobs=8
23
+
24
+ # Allow loading of arbitrary C extensions. Extensions are imported into the
25
+ # active Python interpreter and may run arbitrary code.
26
+ unsafe-load-any-extension=no
27
+
28
+ # A comma-separated list of package or module names from where C extensions may
29
+ # be loaded. Extensions are loading into the active Python interpreter and may
30
+ # run arbitrary code
31
+ extension-pkg-whitelist=
32
+
33
+
34
+ [MESSAGES CONTROL]
35
+
36
+ # Only show warnings with the listed confidence levels. Leave empty to show
37
+ # all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED
38
+ confidence=
39
+
40
+ # Enable the message, report, category or checker with the given id(s). You can
41
+ # either give multiple identifier separated by comma (,) or put this option
42
+ # multiple time (only on the command line, not in the configuration file where
43
+ # it should appear only once). See also the "--disable" option for examples.
44
+ #enable=
45
+
46
+ # Disable the message, report, category or checker with the given id(s). You
47
+ # can either give multiple identifiers separated by comma (,) or put this
48
+ # option multiple times (only on the command line, not in the configuration
49
+ # file where it should appear only once).You can also use "--disable=all" to
50
+ # disable everything first and then reenable specific checks. For example, if
51
+ # you want to run only the similarities checker, you can use "--disable=all
52
+ # --enable=similarities". If you want to run only the classes checker, but have
53
+ # no Warning level messages displayed, use"--disable=all --enable=classes
54
+ # --disable=W"
55
+ disable=abstract-method,
56
+ apply-builtin,
57
+ arguments-differ,
58
+ attribute-defined-outside-init,
59
+ backtick,
60
+ bad-option-value,
61
+ basestring-builtin,
62
+ buffer-builtin,
63
+ c-extension-no-member,
64
+ consider-using-enumerate,
65
+ cmp-builtin,
66
+ cmp-method,
67
+ coerce-builtin,
68
+ coerce-method,
69
+ delslice-method,
70
+ div-method,
71
+ duplicate-code,
72
+ eq-without-hash,
73
+ execfile-builtin,
74
+ file-builtin,
75
+ filter-builtin-not-iterating,
76
+ fixme,
77
+ getslice-method,
78
+ global-statement,
79
+ hex-method,
80
+ idiv-method,
81
+ implicit-str-concat-in-sequence,
82
+ import-error,
83
+ import-self,
84
+ import-star-module-level,
85
+ inconsistent-return-statements,
86
+ input-builtin,
87
+ intern-builtin,
88
+ invalid-str-codec,
89
+ locally-disabled,
90
+ long-builtin,
91
+ long-suffix,
92
+ map-builtin-not-iterating,
93
+ misplaced-comparison-constant,
94
+ missing-function-docstring,
95
+ missing-module-docstring,
96
+ missing-class-docstring,
97
+ metaclass-assignment,
98
+ next-method-called,
99
+ next-method-defined,
100
+ no-absolute-import,
101
+ no-else-break,
102
+ no-else-continue,
103
+ no-else-raise,
104
+ no-else-return,
105
+ no-init, # added
106
+ no-member,
107
+ no-name-in-module,
108
+ no-self-use,
109
+ nonzero-method,
110
+ oct-method,
111
+ old-division,
112
+ old-ne-operator,
113
+ old-octal-literal,
114
+ old-raise-syntax,
115
+ parameter-unpacking,
116
+ print-statement,
117
+ raising-string,
118
+ range-builtin-not-iterating,
119
+ raw_input-builtin,
120
+ rdiv-method,
121
+ reduce-builtin,
122
+ relative-import,
123
+ reload-builtin,
124
+ round-builtin,
125
+ setslice-method,
126
+ signature-differs,
127
+ standarderror-builtin,
128
+ suppressed-message,
129
+ sys-max-int,
130
+ too-few-public-methods,
131
+ too-many-ancestors,
132
+ too-many-arguments,
133
+ too-many-boolean-expressions,
134
+ too-many-branches,
135
+ too-many-instance-attributes,
136
+ too-many-locals,
137
+ too-many-nested-blocks,
138
+ too-many-public-methods,
139
+ too-many-return-statements,
140
+ too-many-statements,
141
+ trailing-newlines,
142
+ unichr-builtin,
143
+ unicode-builtin,
144
+ unnecessary-pass,
145
+ unpacking-in-except,
146
+ useless-else-on-loop,
147
+ useless-object-inheritance,
148
+ useless-suppression,
149
+ useless-return,
150
+ using-cmp-argument,
151
+ wrong-import-order,
152
+ xrange-builtin,
153
+ zip-builtin-not-iterating,
154
+
155
+
156
+ [REPORTS]
157
+
158
+ # Set the output format. Available formats are text, parseable, colorized, msvs
159
+ # (visual studio) and html. You can also give a reporter class, eg
160
+ # mypackage.mymodule.MyReporterClass.
161
+ output-format=colorized
162
+
163
+ # Put messages in a separate file for each module / package specified on the
164
+ # command line instead of printing them on stdout. Reports (if any) will be
165
+ # written in a file name "pylint_global.[txt|html]". This option is deprecated
166
+ # and it will be removed in Pylint 2.0.
167
+ files-output=no
168
+
169
+ # Tells whether to display a full report or only the messages
170
+ reports=no
171
+
172
+ # Python expression which should return a note less than 10 (10 is the highest
173
+ # note). You have access to the variables errors warning, statement which
174
+ # respectively contain the number of errors / warnings messages and the total
175
+ # number of statements analyzed. This is used by the global evaluation report
176
+ # (RP0004).
177
+ evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10)
178
+
179
+ # Template used to display messages. This is a python new-style format string
180
+ # used to format the message information. See doc for all details
181
+ #msg-template=
182
+
183
+
184
+ [BASIC]
185
+
186
+ # Good variable names which should always be accepted, separated by a comma
187
+ good-names=main,_
188
+
189
+ # Bad variable names which should always be refused, separated by a comma
190
+ bad-names=
191
+
192
+ # Colon-delimited sets of names that determine each other's naming style when
193
+ # the name regexes allow several styles.
194
+ name-group=
195
+
196
+ # Include a hint for the correct naming format with invalid-name
197
+ include-naming-hint=no
198
+
199
+ # List of decorators that produce properties, such as abc.abstractproperty. Add
200
+ # to this list to register other decorators that produce valid properties.
201
+ property-classes=abc.abstractproperty,cached_property.cached_property,cached_property.threaded_cached_property,cached_property.cached_property_with_ttl,cached_property.threaded_cached_property_with_ttl
202
+
203
+ # Regular expression matching correct function names
204
+ function-rgx=^(?:(?P<exempt>setUp|tearDown|setUpModule|tearDownModule)|(?P<camel_case>_?[A-Z][a-zA-Z0-9]*)|(?P<snake_case>_?[a-z][a-z0-9_]*))$
205
+
206
+ # Regular expression matching correct variable names
207
+ variable-rgx=^[a-z][a-z0-9_]*$
208
+
209
+ # Regular expression matching correct constant names
210
+ const-rgx=^(_?[A-Z][A-Z0-9_]*|__[a-z0-9_]+__|_?[a-z][a-z0-9_]*)$
211
+
212
+ # Regular expression matching correct attribute names
213
+ attr-rgx=^_{0,2}[a-z][a-z0-9_]*$
214
+
215
+ # Regular expression matching correct argument names
216
+ argument-rgx=^[a-z][a-z0-9_]*$
217
+
218
+ # Regular expression matching correct class attribute names
219
+ class-attribute-rgx=^(_?[A-Z][A-Z0-9_]*|__[a-z0-9_]+__|_?[a-z][a-z0-9_]*)$
220
+
221
+ # Regular expression matching correct inline iteration names
222
+ inlinevar-rgx=^[a-z][a-z0-9_]*$
223
+
224
+ # Regular expression matching correct class names
225
+ class-rgx=^_?[A-Z][a-zA-Z0-9]*$
226
+
227
+ # Regular expression matching correct module names
228
+ module-rgx=^(_?[a-z][a-z0-9_]*|__init__|__version__)$
229
+
230
+ # Regular expression matching correct method names
231
+ method-rgx=(?x)^(?:(?P<exempt>_[a-z0-9_]+__|runTest|setUp|tearDown|setUpTestCase|tearDownTestCase|setupSelf|tearDownClass|setUpClass|(test|assert)_*[A-Z0-9][a-zA-Z0-9_]*|next)|(?P<camel_case>_{0,2}[A-Z][a-zA-Z0-9_]*)|(?P<snake_case>_{0,2}[a-z][a-z0-9_]*))$
232
+
233
+ # Regular expression which should only match function or class names that do
234
+ # not require a docstring.
235
+ no-docstring-rgx=(__.*__|main|test.*|.*test|.*Test)$
236
+
237
+ # Minimum line length for functions/classes that require docstrings, shorter
238
+ # ones are exempt.
239
+ docstring-min-length=10
240
+
241
+
242
+ [TYPECHECK]
243
+
244
+ # List of decorators that produce context managers, such as
245
+ # contextlib.contextmanager. Add to this list to register other decorators that
246
+ # produce valid context managers.
247
+ contextmanager-decorators=contextlib.contextmanager,contextlib2.contextmanager
248
+
249
+ # Tells whether missing members accessed in mixin class should be ignored. A
250
+ # mixin class is detected if its name ends with "mixin" (case insensitive).
251
+ ignore-mixin-members=yes
252
+
253
+ # List of module names for which member attributes should not be checked
254
+ # (useful for modules/projects where namespaces are manipulated during runtime
255
+ # and thus existing member attributes cannot be deduced by static analysis. It
256
+ # supports qualified module names, as well as Unix pattern matching.
257
+ ignored-modules=
258
+
259
+ # List of class names for which member attributes should not be checked (useful
260
+ # for classes with dynamically set attributes). This supports the use of
261
+ # qualified names.
262
+ ignored-classes=optparse.Values,thread._local,_thread._local
263
+
264
+ # List of members which are set dynamically and missed by pylint inference
265
+ # system, and so shouldn't trigger E1101 when accessed. Python regular
266
+ # expressions are accepted.
267
+ generated-members=
268
+
269
+
270
+ [FORMAT]
271
+
272
+ # Maximum number of characters on a single line.
273
+ max-line-length=99
274
+
275
+ # TODO(https://github.com/PyCQA/pylint/issues/3352): Direct pylint to exempt
276
+ # lines made too long by directives to pytype.
277
+
278
+ # Regexp for a line that is allowed to be longer than the limit.
279
+ ignore-long-lines=(?x)(
280
+ ^\s*(\#\ )?<?https?://\S+>?$|
281
+ ^\s*(from\s+\S+\s+)?import\s+.+$)
282
+
283
+ # Allow the body of an if to be on the same line as the test if there is no
284
+ # else.
285
+ single-line-if-stmt=yes
286
+
287
+ # List of optional constructs for which whitespace checking is disabled. `dict-
288
+ # separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}.
289
+ # `trailing-comma` allows a space between comma and closing bracket: (a, ).
290
+ # `empty-line` allows space-only lines.
291
+ no-space-check=
292
+
293
+ # Maximum number of lines in a module
294
+ max-module-lines=99999
295
+
296
+ # String used as indentation unit. The internal Google style guide mandates 2
297
+ # spaces. Google's externaly-published style guide says 4, consistent with
298
+ # PEP 8. Here, we use 2 spaces, for conformity with many open-sourced Google
299
+ # projects (like TensorFlow).
300
+ indent-string=' '
301
+
302
+ # Number of spaces of indent required inside a hanging or continued line.
303
+ indent-after-paren=4
304
+
305
+ # Expected format of line ending, e.g. empty (any line ending), LF or CRLF.
306
+ expected-line-ending-format=
307
+
308
+
309
+ [MISCELLANEOUS]
310
+
311
+ # List of note tags to take in consideration, separated by a comma.
312
+ notes=TODO
313
+
314
+
315
+ [STRING]
316
+
317
+ # This flag controls whether inconsistent-quotes generates a warning when the
318
+ # character used as a quote delimiter is used inconsistently within a module.
319
+ check-quote-consistency=yes
320
+
321
+
322
+ [VARIABLES]
323
+
324
+ # Tells whether we should check for unused import in __init__ files.
325
+ init-import=no
326
+
327
+ # A regular expression matching the name of dummy variables (i.e. expectedly
328
+ # not used).
329
+ dummy-variables-rgx=^\*{0,2}(_$|unused_|dummy_)
330
+
331
+ # List of additional names supposed to be defined in builtins. Remember that
332
+ # you should avoid to define new builtins when possible.
333
+ additional-builtins=
334
+
335
+ # List of strings which can identify a callback function by name. A callback
336
+ # name must start or end with one of those strings.
337
+ callbacks=cb_,_cb
338
+
339
+ # List of qualified module names which can have objects that can redefine
340
+ # builtins.
341
+ redefining-builtins-modules=six,six.moves,past.builtins,future.builtins,functools
342
+
343
+
344
+ [LOGGING]
345
+
346
+ # Logging modules to check that the string format arguments are in logging
347
+ # function parameter format
348
+ logging-modules=logging,absl.logging,tensorflow.io.logging
349
+
350
+
351
+ [SIMILARITIES]
352
+
353
+ # Minimum lines number of a similarity.
354
+ min-similarity-lines=4
355
+
356
+ # Ignore comments when computing similarities.
357
+ ignore-comments=yes
358
+
359
+ # Ignore docstrings when computing similarities.
360
+ ignore-docstrings=yes
361
+
362
+ # Ignore imports when computing similarities.
363
+ ignore-imports=no
364
+
365
+
366
+ [SPELLING]
367
+
368
+ # Spelling dictionary name. Available dictionaries: none. To make it working
369
+ # install python-enchant package.
370
+ spelling-dict=
371
+
372
+ # List of comma separated words that should not be checked.
373
+ spelling-ignore-words=
374
+
375
+ # A path to a file that contains private dictionary; one word per line.
376
+ spelling-private-dict-file=
377
+
378
+ # Tells whether to store unknown words to indicated private dictionary in
379
+ # --spelling-private-dict-file option instead of raising a message.
380
+ spelling-store-unknown-words=no
381
+
382
+
383
+ [IMPORTS]
384
+
385
+ # Deprecated modules which should not be used, separated by a comma
386
+ deprecated-modules=regsub,
387
+ TERMIOS,
388
+ Bastion,
389
+ rexec,
390
+ sets
391
+
392
+ # Create a graph of every (i.e. internal and external) dependencies in the
393
+ # given file (report RP0402 must not be disabled)
394
+ import-graph=
395
+
396
+ # Create a graph of external dependencies in the given file (report RP0402 must
397
+ # not be disabled)
398
+ ext-import-graph=
399
+
400
+ # Create a graph of internal dependencies in the given file (report RP0402 must
401
+ # not be disabled)
402
+ int-import-graph=
403
+
404
+ # Force import order to recognize a module as part of the standard
405
+ # compatibility libraries.
406
+ known-standard-library=
407
+
408
+ # Force import order to recognize a module as part of a third party library.
409
+ known-third-party=enchant, absl
410
+
411
+ # Analyse import fallback blocks. This can be used to support both Python 2 and
412
+ # 3 compatible code, which means that the block might have code that exists
413
+ # only in one or another interpreter, leading to false positives when analysed.
414
+ analyse-fallback-blocks=no
415
+
416
+
417
+ [CLASSES]
418
+
419
+ # List of method names used to declare (i.e. assign) instance attributes.
420
+ defining-attr-methods=__init__,
421
+ __new__,
422
+ setUp
423
+
424
+ # List of member names, which should be excluded from the protected access
425
+ # warning.
426
+ exclude-protected=_asdict,
427
+ _fields,
428
+ _replace,
429
+ _source,
430
+ _make
431
+
432
+ # List of valid names for the first argument in a class method.
433
+ valid-classmethod-first-arg=cls,
434
+ class_
435
+
436
+ # List of valid names for the first argument in a metaclass class method.
437
+ valid-metaclass-classmethod-first-arg=mcs
438
+
439
+
440
+ [EXCEPTIONS]
441
+
442
+ # Exceptions that will emit a warning when being caught. Defaults to
443
+ # "Exception"
444
+ overgeneral-exceptions=StandardError,
445
+ Exception,
446
+ BaseException
@@ -0,0 +1,20 @@
1
+ # .readthedocs.yaml
2
+ # Read the Docs configuration file
3
+ # See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
4
+
5
+ version: 2
6
+
7
+ build:
8
+ os: ubuntu-22.04
9
+ tools:
10
+ python: "3.11"
11
+
12
+ sphinx:
13
+ configuration: docs/conf.py
14
+
15
+ python:
16
+ install:
17
+ - method: pip
18
+ path: .
19
+ extra_requirements:
20
+ - dev
@@ -0,0 +1,9 @@
1
+ # Changelog
2
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
3
+
4
+ ## [0.2.0] - 2025-11-10
5
+ ### Added
6
+ - Complete rewrite of documentation with new examples
7
+ - Integration with Highway Workflow Engine
8
+ - Enhanced API for better developer experience
9
+ - Comprehensive usage examples and best practices
@@ -0,0 +1,18 @@
1
+ This is a resilient circuit breaker library for distributed systems.
2
+
3
+ Package name: resilient-circuit
4
+ Python module: resilient_circuit
5
+
6
+ The library has full PostgreSQL compatibility as an optional feature for distributed state management.
7
+ Database name: resilient_circuit_db
8
+ Environment variables: RC_DB_HOST, RC_DB_PORT, RC_DB_NAME, RC_DB_USER, RC_DB_PASSWORD
9
+
10
+ Features:
11
+ - Circuit breaker pattern with PostgreSQL persistence
12
+ - Automatic fallback to in-memory storage if no database connection
13
+ - Retry with exponential backoff
14
+ - Safety net for combining multiple protection policies
15
+ - Full test coverage with and without PostgreSQL
16
+
17
+ All 91 tests pass with and without PostgreSQL connection.
18
+ Ready for PyPI deployment.