csu 2.5.2__tar.gz → 2.5.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 (108) hide show
  1. {csu-2.5.2 → csu-2.5.3}/.bumpversion.cfg +1 -1
  2. {csu-2.5.2 → csu-2.5.3}/.cookiecutterrc +1 -1
  3. {csu-2.5.2 → csu-2.5.3}/PKG-INFO +3 -3
  4. {csu-2.5.2 → csu-2.5.3}/README.rst +2 -2
  5. {csu-2.5.2 → csu-2.5.3}/pyproject.toml +1 -1
  6. {csu-2.5.2 → csu-2.5.3}/src/csu/__init__.py +1 -1
  7. {csu-2.5.2 → csu-2.5.3}/src/csu/logging.py +8 -3
  8. {csu-2.5.2 → csu-2.5.3}/src/csu/service.py +2 -1
  9. {csu-2.5.2 → csu-2.5.3}/src/csu.egg-info/PKG-INFO +3 -3
  10. {csu-2.5.2 → csu-2.5.3}/tests/test_service.py +12 -12
  11. {csu-2.5.2 → csu-2.5.3}/.coveragerc +0 -0
  12. {csu-2.5.2 → csu-2.5.3}/.editorconfig +0 -0
  13. {csu-2.5.2 → csu-2.5.3}/.github/workflows/github-actions.yml +0 -0
  14. {csu-2.5.2 → csu-2.5.3}/.pre-commit-config.yaml +0 -0
  15. {csu-2.5.2 → csu-2.5.3}/.tombi.toml +0 -0
  16. {csu-2.5.2 → csu-2.5.3}/AUTHORS.rst +0 -0
  17. {csu-2.5.2 → csu-2.5.3}/CHANGELOG.rst +0 -0
  18. {csu-2.5.2 → csu-2.5.3}/CONTRIBUTING.rst +0 -0
  19. {csu-2.5.2 → csu-2.5.3}/LICENSE +0 -0
  20. {csu-2.5.2 → csu-2.5.3}/MANIFEST.in +0 -0
  21. {csu-2.5.2 → csu-2.5.3}/ci/bootstrap.py +0 -0
  22. {csu-2.5.2 → csu-2.5.3}/ci/requirements.txt +0 -0
  23. {csu-2.5.2 → csu-2.5.3}/ci/templates/.github/workflows/github-actions.yml +0 -0
  24. {csu-2.5.2 → csu-2.5.3}/pytest.ini +0 -0
  25. {csu-2.5.2 → csu-2.5.3}/setup.cfg +0 -0
  26. {csu-2.5.2 → csu-2.5.3}/src/csu/admin.py +0 -0
  27. {csu-2.5.2 → csu-2.5.3}/src/csu/conf.py +0 -0
  28. {csu-2.5.2 → csu-2.5.3}/src/csu/consts.py +0 -0
  29. {csu-2.5.2 → csu-2.5.3}/src/csu/drf/__init__.py +0 -0
  30. {csu-2.5.2 → csu-2.5.3}/src/csu/drf/auth.py +0 -0
  31. {csu-2.5.2 → csu-2.5.3}/src/csu/drf/fields.py +0 -0
  32. {csu-2.5.2 → csu-2.5.3}/src/csu/drf/forms.py +0 -0
  33. {csu-2.5.2 → csu-2.5.3}/src/csu/drf/perms.py +0 -0
  34. {csu-2.5.2 → csu-2.5.3}/src/csu/drf/phonenumber.py +0 -0
  35. {csu-2.5.2 → csu-2.5.3}/src/csu/drf/serializers.py +0 -0
  36. {csu-2.5.2 → csu-2.5.3}/src/csu/drf/test_auth.py +0 -0
  37. {csu-2.5.2 → csu-2.5.3}/src/csu/drf/test_fields.py +0 -0
  38. {csu-2.5.2 → csu-2.5.3}/src/csu/drf/test_forms.py +0 -0
  39. {csu-2.5.2 → csu-2.5.3}/src/csu/drf/test_phonenumber.py +0 -0
  40. {csu-2.5.2 → csu-2.5.3}/src/csu/drf/test_serializers.py +0 -0
  41. {csu-2.5.2 → csu-2.5.3}/src/csu/drf/views.py +0 -0
  42. {csu-2.5.2 → csu-2.5.3}/src/csu/enums.py +0 -0
  43. {csu-2.5.2 → csu-2.5.3}/src/csu/env.py +0 -0
  44. {csu-2.5.2 → csu-2.5.3}/src/csu/exceptions.py +0 -0
  45. {csu-2.5.2 → csu-2.5.3}/src/csu/export.py +0 -0
  46. {csu-2.5.2 → csu-2.5.3}/src/csu/fixups.py +0 -0
  47. {csu-2.5.2 → csu-2.5.3}/src/csu/forms/__init__.py +0 -0
  48. {csu-2.5.2 → csu-2.5.3}/src/csu/forms/crispy.py +0 -0
  49. {csu-2.5.2 → csu-2.5.3}/src/csu/forms/fields.py +0 -0
  50. {csu-2.5.2 → csu-2.5.3}/src/csu/gettext.py +0 -0
  51. {csu-2.5.2 → csu-2.5.3}/src/csu/gettext_lazy.py +0 -0
  52. {csu-2.5.2 → csu-2.5.3}/src/csu/locale/ro/LC_MESSAGES/django.mo +0 -0
  53. {csu-2.5.2 → csu-2.5.3}/src/csu/locale/ro/LC_MESSAGES/django.po +0 -0
  54. {csu-2.5.2 → csu-2.5.3}/src/csu/management.py +0 -0
  55. {csu-2.5.2 → csu-2.5.3}/src/csu/models.py +0 -0
  56. {csu-2.5.2 → csu-2.5.3}/src/csu/query.py +0 -0
  57. {csu-2.5.2 → csu-2.5.3}/src/csu/routers.py +0 -0
  58. {csu-2.5.2 → csu-2.5.3}/src/csu/templates/api_exception.html +0 -0
  59. {csu-2.5.2 → csu-2.5.3}/src/csu/templates/forms/widgets/opaquewidget.html +0 -0
  60. {csu-2.5.2 → csu-2.5.3}/src/csu/test_consts.py +0 -0
  61. {csu-2.5.2 → csu-2.5.3}/src/csu/test_env.py +0 -0
  62. {csu-2.5.2 → csu-2.5.3}/src/csu/test_exceptions.py +0 -0
  63. {csu-2.5.2 → csu-2.5.3}/src/csu/test_logging.py +0 -0
  64. {csu-2.5.2 → csu-2.5.3}/src/csu/test_management.py +0 -0
  65. {csu-2.5.2 → csu-2.5.3}/src/csu/test_service.py +0 -0
  66. {csu-2.5.2 → csu-2.5.3}/src/csu/test_timezones.py +0 -0
  67. {csu-2.5.2 → csu-2.5.3}/src/csu/test_utils.py +0 -0
  68. {csu-2.5.2 → csu-2.5.3}/src/csu/test_xml.py +0 -0
  69. {csu-2.5.2 → csu-2.5.3}/src/csu/timezones.py +0 -0
  70. {csu-2.5.2 → csu-2.5.3}/src/csu/utils.py +0 -0
  71. {csu-2.5.2 → csu-2.5.3}/src/csu/views.py +0 -0
  72. {csu-2.5.2 → csu-2.5.3}/src/csu/worker/__init__.py +0 -0
  73. {csu-2.5.2 → csu-2.5.3}/src/csu/worker/admin.py +0 -0
  74. {csu-2.5.2 → csu-2.5.3}/src/csu/worker/asgi.py +0 -0
  75. {csu-2.5.2 → csu-2.5.3}/src/csu/worker/engine.py +0 -0
  76. {csu-2.5.2 → csu-2.5.3}/src/csu/worker/enums.py +0 -0
  77. {csu-2.5.2 → csu-2.5.3}/src/csu/worker/job.py +0 -0
  78. {csu-2.5.2 → csu-2.5.3}/src/csu/worker/models.py +0 -0
  79. {csu-2.5.2 → csu-2.5.3}/src/csu/worker/registry.py +0 -0
  80. {csu-2.5.2 → csu-2.5.3}/src/csu/wsgi.py +0 -0
  81. {csu-2.5.2 → csu-2.5.3}/src/csu/xml.py +0 -0
  82. {csu-2.5.2 → csu-2.5.3}/src/csu.egg-info/SOURCES.txt +0 -0
  83. {csu-2.5.2 → csu-2.5.3}/src/csu.egg-info/dependency_links.txt +0 -0
  84. {csu-2.5.2 → csu-2.5.3}/src/csu.egg-info/requires.txt +0 -0
  85. {csu-2.5.2 → csu-2.5.3}/src/csu.egg-info/top_level.txt +0 -0
  86. {csu-2.5.2 → csu-2.5.3}/tests/cassettes/test_service/test_custom_context.yaml +0 -0
  87. {csu-2.5.2 → csu-2.5.3}/tests/cassettes/test_service/test_custom_context_0_retries.yaml +0 -0
  88. {csu-2.5.2 → csu-2.5.3}/tests/cassettes/test_service/test_decoding.yaml +0 -0
  89. {csu-2.5.2 → csu-2.5.3}/tests/cassettes/test_service/test_error.yaml +0 -0
  90. {csu-2.5.2 → csu-2.5.3}/tests/cassettes/test_service/test_logging.yaml +0 -0
  91. {csu-2.5.2 → csu-2.5.3}/tests/cassettes/test_service/test_redirects.yaml +0 -0
  92. {csu-2.5.2 → csu-2.5.3}/tests/cassettes/test_service_auth/test_async.yaml +0 -0
  93. {csu-2.5.2 → csu-2.5.3}/tests/cassettes/test_service_auth/test_async_auth.yaml +0 -0
  94. {csu-2.5.2 → csu-2.5.3}/tests/cassettes/test_service_auth/test_sync.yaml +0 -0
  95. {csu-2.5.2 → csu-2.5.3}/tests/cassettes/test_service_auth/test_sync_auth.yaml +0 -0
  96. {csu-2.5.2 → csu-2.5.3}/tests/conftest.py +0 -0
  97. {csu-2.5.2 → csu-2.5.3}/tests/exampleworker.py +0 -0
  98. {csu-2.5.2 → csu-2.5.3}/tests/test_exampleworker.py +0 -0
  99. {csu-2.5.2 → csu-2.5.3}/tests/test_models.py +0 -0
  100. {csu-2.5.2 → csu-2.5.3}/tests/test_service_auth.py +0 -0
  101. {csu-2.5.2 → csu-2.5.3}/tests/test_views.py +0 -0
  102. {csu-2.5.2 → csu-2.5.3}/tests/test_worker.py +0 -0
  103. {csu-2.5.2 → csu-2.5.3}/tests/testproject/__init__.py +0 -0
  104. {csu-2.5.2 → csu-2.5.3}/tests/testproject/fixtures/testuser.json +0 -0
  105. {csu-2.5.2 → csu-2.5.3}/tests/testproject/models.py +0 -0
  106. {csu-2.5.2 → csu-2.5.3}/tests/testproject/settings.py +0 -0
  107. {csu-2.5.2 → csu-2.5.3}/tests/testproject/urls.py +0 -0
  108. {csu-2.5.2 → csu-2.5.3}/tox.ini +0 -0
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 2.5.2
2
+ current_version = 2.5.3
3
3
  commit = True
4
4
  tag = True
5
5
 
@@ -41,7 +41,7 @@ default_context:
41
41
  sphinx_theme: furo
42
42
  test_matrix_separate_coverage: false
43
43
  tests_inside_package: true
44
- version: 2.5.2
44
+ version: 2.5.3
45
45
  version_manager: bump2version
46
46
  website: https://blog.ionelmc.ro
47
47
  year_from: '2024'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: csu
3
- Version: 2.5.2
3
+ Version: 2.5.3
4
4
  Summary: Clean Slate Utils - bunch of utility code, mostly Django/DRF specific.
5
5
  Author-email: Ionel Cristian Mărieș <contact@ionelmc.ro>
6
6
  License-Expression: BSD-2-Clause
@@ -69,9 +69,9 @@ Overview
69
69
  .. |supported-implementations| image:: https://img.shields.io/pypi/implementation/csu.svg
70
70
  :alt: Supported implementations
71
71
  :target: https://pypi.org/project/csu
72
- .. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.5.2.svg
72
+ .. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.5.3.svg
73
73
  :alt: Commits since latest release
74
- :target: https://github.com/ionelmc/python-csu/compare/v2.5.2...main
74
+ :target: https://github.com/ionelmc/python-csu/compare/v2.5.3...main
75
75
  .. |scrutinizer| image:: https://img.shields.io/scrutinizer/quality/g/ionelmc/python-csu/main.svg
76
76
  :alt: Scrutinizer Status
77
77
  :target: https://scrutinizer-ci.com/g/ionelmc/python-csu/
@@ -34,9 +34,9 @@ Overview
34
34
  .. |supported-implementations| image:: https://img.shields.io/pypi/implementation/csu.svg
35
35
  :alt: Supported implementations
36
36
  :target: https://pypi.org/project/csu
37
- .. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.5.2.svg
37
+ .. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.5.3.svg
38
38
  :alt: Commits since latest release
39
- :target: https://github.com/ionelmc/python-csu/compare/v2.5.2...main
39
+ :target: https://github.com/ionelmc/python-csu/compare/v2.5.3...main
40
40
  .. |scrutinizer| image:: https://img.shields.io/scrutinizer/quality/g/ionelmc/python-csu/main.svg
41
41
  :alt: Scrutinizer Status
42
42
  :target: https://scrutinizer-ci.com/g/ionelmc/python-csu/
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "csu"
3
- version = "2.5.2"
3
+ version = "2.5.3"
4
4
  description = "Clean Slate Utils - bunch of utility code, mostly Django/DRF specific."
5
5
  requires-python = ">=3.14"
6
6
  license = "BSD-2-Clause"
@@ -2,4 +2,4 @@
2
2
  a.k.a Clean Slate Utils
3
3
  """
4
4
 
5
- __version__ = "2.5.2"
5
+ __version__ = "2.5.3"
@@ -67,13 +67,18 @@ def get_request_line(environ, status_code, auth=None, *extra_auth):
67
67
  query = ""
68
68
  format = f'"{environ["REQUEST_METHOD"]} {environ["PATH_INFO"]}%s" {status_code} +[%s] @%s'
69
69
  remote_addr = " via ".join(get_remote_addresses(environ, placeholder="?"))
70
- auth_info = ";".join(str(item) for item in auth_info if item)
71
- if LOGGING_AUTH_INFO_LIMIT and (auth_size := len(auth_info)) > LOGGING_AUTH_INFO_LIMIT:
72
- auth_info = f"{auth_info:.{LOGGING_AUTH_INFO_LIMIT}} +{auth_size - LOGGING_AUTH_INFO_LIMIT} more"
70
+ auth_info = trim_auth_info(";".join(str(item) for item in auth_info if item))
73
71
  arguments = [query, auth_info, remote_addr]
74
72
  return format, arguments
75
73
 
76
74
 
75
+ def trim_auth_info(auth_info):
76
+ if LOGGING_AUTH_INFO_LIMIT and (auth_size := len(auth_info)) > LOGGING_AUTH_INFO_LIMIT:
77
+ return f"{auth_info:.{LOGGING_AUTH_INFO_LIMIT}} +{auth_size - LOGGING_AUTH_INFO_LIMIT} more"
78
+ else:
79
+ return auth_info
80
+
81
+
77
82
  def fa_append_repr(format: list[str], arguments: list, value, limit: int | None):
78
83
  value = repr(value)
79
84
  if limit and (size := len(value)) > limit:
@@ -35,6 +35,7 @@ from .exceptions import RetryableStatusError
35
35
  from .exceptions import UnexpectedStatusError
36
36
  from .exceptions import get_event_id
37
37
  from .logging import is_text_content_type
38
+ from .logging import trim_auth_info
38
39
 
39
40
 
40
41
  class HTTPServiceResponse:
@@ -131,7 +132,7 @@ class HTTPServiceContext[RTYPE = HTTPServiceResponse]:
131
132
  if self.log_request_show_headers:
132
133
  header = " request headers ".center(LINE_LENGTH, "-"), "\n ".join(f"{k}: {v!r}" for k, v in sorted(request.headers.items()))
133
134
  else:
134
- header = (request.headers.get("authorization", ""),)
135
+ header = (trim_auth_info(request.headers.get("authorization", "")),)
135
136
 
136
137
  if request.body:
137
138
  size = len(request.body)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: csu
3
- Version: 2.5.2
3
+ Version: 2.5.3
4
4
  Summary: Clean Slate Utils - bunch of utility code, mostly Django/DRF specific.
5
5
  Author-email: Ionel Cristian Mărieș <contact@ionelmc.ro>
6
6
  License-Expression: BSD-2-Clause
@@ -69,9 +69,9 @@ Overview
69
69
  .. |supported-implementations| image:: https://img.shields.io/pypi/implementation/csu.svg
70
70
  :alt: Supported implementations
71
71
  :target: https://pypi.org/project/csu
72
- .. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.5.2.svg
72
+ .. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.5.3.svg
73
73
  :alt: Commits since latest release
74
- :target: https://github.com/ionelmc/python-csu/compare/v2.5.2...main
74
+ :target: https://github.com/ionelmc/python-csu/compare/v2.5.3...main
75
75
  .. |scrutinizer| image:: https://img.shields.io/scrutinizer/quality/g/ionelmc/python-csu/main.svg
76
76
  :alt: Scrutinizer Status
77
77
  :target: https://scrutinizer-ci.com/g/ionelmc/python-csu/
@@ -260,7 +260,7 @@ json.decoder.JSONDecodeError: Expecting value: line 2 column 5 (char 5)
260
260
  During handling of the above exception, another exception occurred:
261
261
 
262
262
  Traceback (most recent call last):
263
- File "[&SERVICE_PATH]", line 236, in handle_process_response
263
+ File "[&SERVICE_PATH]", line 237, in handle_process_response
264
264
  json = response.json(parse_float=Decimal)
265
265
  File "[&MODELS_PATH]", line 1529, in json
266
266
  raise RequestsJSONDecodeError(e.msg, e.doc, e.pos)
@@ -275,10 +275,10 @@ Traceback (most recent call last):
275
275
  File "[&TEST_PATH]", line 78, in json
276
276
  return ctx.request("GET", "status/418", accept_statuses=[418]).json
277
277
  ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
278
- File "[&SERVICE_PATH]", line 314, in request
278
+ File "[&SERVICE_PATH]", line 315, in request
279
279
  return self.handle_process_response(response, expect_json=expect_json)
280
280
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
281
- File "[&SERVICE_PATH]", line 238, in handle_process_response
281
+ File "[&SERVICE_PATH]", line 239, in handle_process_response
282
282
  raise DecodeError(response, exc, event_id=self.event_id) from exc
283
283
  csu.exceptions.DecodeError: DecodeError(JSONDecodeError('Expecting value: line 2 column 5 (char 5)'), response=<Response Dummy [418]>)
284
284
  (418, b'\\n -=[ teapot ]=-\\n\\n _...._\\n .\\' _ _ `.\\n | ."` ^ `". _,\\n \\\\_;`"---"`|//\\n | ;/\\n \\\\_ _/\\n `"""`\\n')
@@ -340,7 +340,7 @@ Traceback (most recent call last):
340
340
  File "[&TEST_PATH]", line 47, in error
341
341
  return ctx.request("GET", "status/599", expect_json=False)
342
342
  ~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
343
- File "[&SERVICE_PATH]", line 313, in request
343
+ File "[&SERVICE_PATH]", line 314, in request
344
344
  raise UnexpectedStatusError(response, accept_statuses, event_id=self.event_id)
345
345
  csu.exceptions.UnexpectedStatusError: UnexpectedStatusError(<Response Dummy [599]>, accept_statuses=[200])
346
346
  (599, b'')
@@ -540,7 +540,7 @@ INFO | [01:000000.00] POST [&HTTPBIN]/anything?foo=bar&accept_statuses=%7B999
540
540
  """\
541
541
  ERROR | [01:000000.00] POST [&HTTPBIN]/anything?foo=bar&accept_statuses=%7B999%7D&expect_json=true&follow_redirects=false&retries_left=3&retry_count=0&retry_statuses=%7B200%7D !> RetryableStatusError('200 not in [999] but in [200]', 200, b'{"args":{"accept_statuses":"{999}","expect_json":"true","follow_redirects":"false","foo":"bar","retries_left":"3","retry_count":"0","retry_statuses":"{200}"},"data":"config={\\'custom\\': \\'config\\'}","files":{},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","Connection":"keep-alive","Content-Length":"27","Host":"127.0.0.1:12345","User-Agent":"python-httpx/0.X.X"},"json":null,"method":"POST","origin":"127.0.0.1","url":"http://127.0.0.1:12345/anything?foo=bar&accept_statuses={999}&expect_json=true&follow_redirects=false&retries_left=3&retry_count=0&retry_statuses={200}"}\\n', event_id=241212:01:000000.00) (will retry 3 more times)
542
542
  Traceback (most recent call last):
543
- File "[&SERVICE_PATH]", line 311, in request
543
+ File "[&SERVICE_PATH]", line 312, in request
544
544
  raise RetryableStatusError(response, accept_statuses, retry_statuses, event_id=self.event_id)
545
545
  csu.exceptions.RetryableStatusError: RetryableStatusError(<Response Dummy [200]>, accept_statuses=[999], retry_statuses=[200])
546
546
  (200, b'{"args":{"accept_statuses":"{999}","expect_json":"true","follow_redirects":"false","foo":"bar","retries_left":"3","retry_count":"0","retry_statuses":"{200}"},"data":"config={\\'custom\\': \\'config\\'}","files":{},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","Connection":"keep-alive","Content-Length":"27","Host":"127.0.0.1:12345","User-Agent":"python-httpx/0.X.X"},"json":null,"method":"POST","origin":"127.0.0.1","url":"http://127.0.0.1:12345/anything?foo=bar&accept_statuses={999}&expect_json=true&follow_redirects=false&retries_left=3&retry_count=0&retry_statuses={200}"}\\n')
@@ -574,7 +574,7 @@ INFO | [01:000000.00] POST [&HTTPBIN]/anything?foo=bar&accept_statuses=%7B999
574
574
  """\
575
575
  ERROR | [01:000000.00] POST [&HTTPBIN]/anything?foo=bar&accept_statuses=%7B999%7D&expect_json=true&follow_redirects=false&retries_left=2&retry_count=1&retry_statuses=%7B200%7D !> RetryableStatusError('200 not in [999] but in [200]', 200, b'{"args":{"accept_statuses":"{999}","expect_json":"true","follow_redirects":"false","foo":"bar","retries_left":"2","retry_count":"1","retry_statuses":"{200}"},"data":"config={\\'custom\\': \\'config\\'}","files":{},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","Connection":"keep-alive","Content-Length":"27","Host":"127.0.0.1:12345","User-Agent":"python-httpx/0.X.X"},"json":null,"method":"POST","origin":"127.0.0.1","url":"http://127.0.0.1:12345/anything?foo=bar&accept_statuses={999}&expect_json=true&follow_redirects=false&retries_left=2&retry_count=1&retry_statuses={200}"}\\n', event_id=241212:01:000000.00) (will retry 2 more times)
576
576
  Traceback (most recent call last):
577
- File "[&SERVICE_PATH]", line 311, in request
577
+ File "[&SERVICE_PATH]", line 312, in request
578
578
  raise RetryableStatusError(response, accept_statuses, retry_statuses, event_id=self.event_id)
579
579
  csu.exceptions.RetryableStatusError: RetryableStatusError(<Response Dummy [200]>, accept_statuses=[999], retry_statuses=[200])
580
580
  (200, b'{"args":{"accept_statuses":"{999}","expect_json":"true","follow_redirects":"false","foo":"bar","retries_left":"2","retry_count":"1","retry_statuses":"{200}"},"data":"config={\\'custom\\': \\'config\\'}","files":{},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","Connection":"keep-alive","Content-Length":"27","Host":"127.0.0.1:12345","User-Agent":"python-httpx/0.X.X"},"json":null,"method":"POST","origin":"127.0.0.1","url":"http://127.0.0.1:12345/anything?foo=bar&accept_statuses={999}&expect_json=true&follow_redirects=false&retries_left=2&retry_count=1&retry_statuses={200}"}\\n')
@@ -608,7 +608,7 @@ INFO | [01:000000.00] POST [&HTTPBIN]/anything?foo=bar&accept_statuses=%7B999
608
608
  """\
609
609
  ERROR | [01:000000.00] POST [&HTTPBIN]/anything?foo=bar&accept_statuses=%7B999%7D&expect_json=true&follow_redirects=false&retries_left=1&retry_count=2&retry_statuses=%7B200%7D !> RetryableStatusError('200 not in [999] but in [200]', 200, b'{"args":{"accept_statuses":"{999}","expect_json":"true","follow_redirects":"false","foo":"bar","retries_left":"1","retry_count":"2","retry_statuses":"{200}"},"data":"config={\\'custom\\': \\'config\\'}","files":{},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","Connection":"keep-alive","Content-Length":"27","Host":"127.0.0.1:12345","User-Agent":"python-httpx/0.X.X"},"json":null,"method":"POST","origin":"127.0.0.1","url":"http://127.0.0.1:12345/anything?foo=bar&accept_statuses={999}&expect_json=true&follow_redirects=false&retries_left=1&retry_count=2&retry_statuses={200}"}\\n', event_id=241212:01:000000.00) (will retry 1 more times)
610
610
  Traceback (most recent call last):
611
- File "[&SERVICE_PATH]", line 311, in request
611
+ File "[&SERVICE_PATH]", line 312, in request
612
612
  raise RetryableStatusError(response, accept_statuses, retry_statuses, event_id=self.event_id)
613
613
  csu.exceptions.RetryableStatusError: RetryableStatusError(<Response Dummy [200]>, accept_statuses=[999], retry_statuses=[200])
614
614
  (200, b'{"args":{"accept_statuses":"{999}","expect_json":"true","follow_redirects":"false","foo":"bar","retries_left":"1","retry_count":"2","retry_statuses":"{200}"},"data":"config={\\'custom\\': \\'config\\'}","files":{},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","Connection":"keep-alive","Content-Length":"27","Host":"127.0.0.1:12345","User-Agent":"python-httpx/0.X.X"},"json":null,"method":"POST","origin":"127.0.0.1","url":"http://127.0.0.1:12345/anything?foo=bar&accept_statuses={999}&expect_json=true&follow_redirects=false&retries_left=1&retry_count=2&retry_statuses={200}"}\\n')
@@ -656,31 +656,31 @@ ERROR | (renderer: NoneType)
656
656
  | ...<6 lines>...
657
657
  | accept_statuses=[999],
658
658
  | )
659
- | File "[&SERVICE_PATH]", line 325, in request
659
+ | File "[&SERVICE_PATH]", line 326, in request
660
660
  | raise ExhaustedRetriesError(retry_budget, retry_failures, event_id=self.event_id)
661
661
  | csu.exceptions.ExhaustedRetriesError: ExhaustedRetriesError(3)
662
662
  | ([RetryableStatusError('200 not in [999] but in [200]', 200, b'{"args":{"accept_statuses":"{999}","expect_json":"true","follow_redirects":"false","foo":"bar","retries_left":"3","retry_count":"0","retry_statuses":"{200}"},"data":"config={\\'custom\\': \\'config\\'}","files":{},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","Connection":"keep-alive","Content-Length":"27","Host":"127.0.0.1:12345","User-Agent":"python-httpx/0.X.X"},"json":null,"method":"POST","origin":"127.0.0.1","url":"http://127.0.0.1:12345/anything?foo=bar&accept_statuses={999}&expect_json=true&follow_redirects=false&retries_left=3&retry_count=0&retry_statuses={200}"}\\n', event_id=241212:01:000000.00), RetryableStatusError('200 not in [999] but in [200]', 200, b'{"args":{"accept_statuses":"{999}","expect_json":"true","follow_redirects":"false","foo":"bar","retries_left":"2","retry_count":"1","retry_statuses":"{200}"},"data":"config={\\'custom\\': \\'config\\'}","files":{},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","Connection":"keep-alive","Content-Length":"27","Host":"127.0.0.1:12345","User-Agent":"python-httpx/0.X.X"},"json":null,"method":"POST","origin":"127.0.0.1","url":"http://127.0.0.1:12345/anything?foo=bar&accept_statuses={999}&expect_json=true&follow_redirects=false&retries_left=2&retry_count=1&retry_statuses={200}"}\\n', event_id=241212:01:000000.00), RetryableStatusError('200 not in [999] but in [200]', 200, b'{"args":{"accept_statuses":"{999}","expect_json":"true","follow_redirects":"false","foo":"bar","retries_left":"1","retry_count":"2","retry_statuses":"{200}"},"data":"config={\\'custom\\': \\'config\\'}","files":{},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","Connection":"keep-alive","Content-Length":"27","Host":"127.0.0.1:12345","User-Agent":"python-httpx/0.X.X"},"json":null,"method":"POST","origin":"127.0.0.1","url":"http://127.0.0.1:12345/anything?foo=bar&accept_statuses={999}&expect_json=true&follow_redirects=false&retries_left=1&retry_count=2&retry_statuses={200}"}\\n', event_id=241212:01:000000.00), RetryableStatusError('200 not in [999] but in [200]', 200, b'{"args":{"accept_statuses":"{999}","expect_json":"true","follow_redirects":"false","foo":"bar","retries_left":"0","retry_count":"3","retry_statuses":"{200}"},"data":"config={\\'custom\\': \\'config\\'}","files":{},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","Connection":"keep-alive","Content-Length":"27","Host":"127.0.0.1:12345","User-Agent":"python-httpx/0.X.X"},"json":null,"method":"POST","origin":"127.0.0.1","url":"http://127.0.0.1:12345/anything?foo=bar&accept_statuses={999}&expect_json=true&follow_redirects=false&retries_left=0&retry_count=3&retry_statuses={200}"}\\n', event_id=241212:01:000000.00)],)
663
663
  +-+---------------- 1 ----------------
664
664
  | Traceback (most recent call last):
665
- | File "[&SERVICE_PATH]", line 311, in request
665
+ | File "[&SERVICE_PATH]", line 312, in request
666
666
  | raise RetryableStatusError(response, accept_statuses, retry_statuses, event_id=self.event_id)
667
667
  | csu.exceptions.RetryableStatusError: RetryableStatusError(<Response Dummy [200]>, accept_statuses=[999], retry_statuses=[200])
668
668
  | (200, b'{"args":{"accept_statuses":"{999}","expect_json":"true","follow_redirects":"false","foo":"bar","retries_left":"3","retry_count":"0","retry_statuses":"{200}"},"data":"config={\\'custom\\': \\'config\\'}","files":{},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","Connection":"keep-alive","Content-Length":"27","Host":"127.0.0.1:12345","User-Agent":"python-httpx/0.X.X"},"json":null,"method":"POST","origin":"127.0.0.1","url":"http://127.0.0.1:12345/anything?foo=bar&accept_statuses={999}&expect_json=true&follow_redirects=false&retries_left=3&retry_count=0&retry_statuses={200}"}\\n')
669
669
  +---------------- 2 ----------------
670
670
  | Traceback (most recent call last):
671
- | File "[&SERVICE_PATH]", line 311, in request
671
+ | File "[&SERVICE_PATH]", line 312, in request
672
672
  | raise RetryableStatusError(response, accept_statuses, retry_statuses, event_id=self.event_id)
673
673
  | csu.exceptions.RetryableStatusError: RetryableStatusError(<Response Dummy [200]>, accept_statuses=[999], retry_statuses=[200])
674
674
  | (200, b'{"args":{"accept_statuses":"{999}","expect_json":"true","follow_redirects":"false","foo":"bar","retries_left":"2","retry_count":"1","retry_statuses":"{200}"},"data":"config={\\'custom\\': \\'config\\'}","files":{},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","Connection":"keep-alive","Content-Length":"27","Host":"127.0.0.1:12345","User-Agent":"python-httpx/0.X.X"},"json":null,"method":"POST","origin":"127.0.0.1","url":"http://127.0.0.1:12345/anything?foo=bar&accept_statuses={999}&expect_json=true&follow_redirects=false&retries_left=2&retry_count=1&retry_statuses={200}"}\\n')
675
675
  +---------------- 3 ----------------
676
676
  | Traceback (most recent call last):
677
- | File "[&SERVICE_PATH]", line 311, in request
677
+ | File "[&SERVICE_PATH]", line 312, in request
678
678
  | raise RetryableStatusError(response, accept_statuses, retry_statuses, event_id=self.event_id)
679
679
  | csu.exceptions.RetryableStatusError: RetryableStatusError(<Response Dummy [200]>, accept_statuses=[999], retry_statuses=[200])
680
680
  | (200, b'{"args":{"accept_statuses":"{999}","expect_json":"true","follow_redirects":"false","foo":"bar","retries_left":"1","retry_count":"2","retry_statuses":"{200}"},"data":"config={\\'custom\\': \\'config\\'}","files":{},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","Connection":"keep-alive","Content-Length":"27","Host":"127.0.0.1:12345","User-Agent":"python-httpx/0.X.X"},"json":null,"method":"POST","origin":"127.0.0.1","url":"http://127.0.0.1:12345/anything?foo=bar&accept_statuses={999}&expect_json=true&follow_redirects=false&retries_left=1&retry_count=2&retry_statuses={200}"}\\n')
681
681
  +---------------- 4 ----------------
682
682
  | Traceback (most recent call last):
683
- | File "[&SERVICE_PATH]", line 311, in request
683
+ | File "[&SERVICE_PATH]", line 312, in request
684
684
  | raise RetryableStatusError(response, accept_statuses, retry_statuses, event_id=self.event_id)
685
685
  | csu.exceptions.RetryableStatusError: RetryableStatusError(<Response Dummy [200]>, accept_statuses=[999], retry_statuses=[200])
686
686
  | (200, b'{"args":{"accept_statuses":"{999}","expect_json":"true","follow_redirects":"false","foo":"bar","retries_left":"0","retry_count":"3","retry_statuses":"{200}"},"data":"config={\\'custom\\': \\'config\\'}","files":{},"form":{},"headers":{"Accept":"*/*","Accept-Encoding":"gzip, deflate, br","Connection":"keep-alive","Content-Length":"27","Host":"127.0.0.1:12345","User-Agent":"python-httpx/0.X.X"},"json":null,"method":"POST","origin":"127.0.0.1","url":"http://127.0.0.1:12345/anything?foo=bar&accept_statuses={999}&expect_json=true&follow_redirects=false&retries_left=0&retry_count=3&retry_statuses={200}"}\\n')
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes