csu 2.4.1__tar.gz → 2.4.2__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.4.1 → csu-2.4.2}/.bumpversion.cfg +1 -1
  2. {csu-2.4.1 → csu-2.4.2}/.cookiecutterrc +1 -1
  3. {csu-2.4.1 → csu-2.4.2}/PKG-INFO +3 -3
  4. {csu-2.4.1 → csu-2.4.2}/README.rst +2 -2
  5. {csu-2.4.1 → csu-2.4.2}/pyproject.toml +1 -1
  6. {csu-2.4.1 → csu-2.4.2}/src/csu/__init__.py +1 -1
  7. {csu-2.4.1 → csu-2.4.2}/src/csu/service.py +20 -16
  8. {csu-2.4.1 → csu-2.4.2}/src/csu.egg-info/PKG-INFO +3 -3
  9. {csu-2.4.1 → csu-2.4.2}/tests/test_service.py +12 -12
  10. {csu-2.4.1 → csu-2.4.2}/.coveragerc +0 -0
  11. {csu-2.4.1 → csu-2.4.2}/.editorconfig +0 -0
  12. {csu-2.4.1 → csu-2.4.2}/.github/workflows/github-actions.yml +0 -0
  13. {csu-2.4.1 → csu-2.4.2}/.pre-commit-config.yaml +0 -0
  14. {csu-2.4.1 → csu-2.4.2}/.tombi.toml +0 -0
  15. {csu-2.4.1 → csu-2.4.2}/AUTHORS.rst +0 -0
  16. {csu-2.4.1 → csu-2.4.2}/CHANGELOG.rst +0 -0
  17. {csu-2.4.1 → csu-2.4.2}/CONTRIBUTING.rst +0 -0
  18. {csu-2.4.1 → csu-2.4.2}/LICENSE +0 -0
  19. {csu-2.4.1 → csu-2.4.2}/MANIFEST.in +0 -0
  20. {csu-2.4.1 → csu-2.4.2}/ci/bootstrap.py +0 -0
  21. {csu-2.4.1 → csu-2.4.2}/ci/requirements.txt +0 -0
  22. {csu-2.4.1 → csu-2.4.2}/ci/templates/.github/workflows/github-actions.yml +0 -0
  23. {csu-2.4.1 → csu-2.4.2}/pytest.ini +0 -0
  24. {csu-2.4.1 → csu-2.4.2}/setup.cfg +0 -0
  25. {csu-2.4.1 → csu-2.4.2}/src/csu/admin.py +0 -0
  26. {csu-2.4.1 → csu-2.4.2}/src/csu/conf.py +0 -0
  27. {csu-2.4.1 → csu-2.4.2}/src/csu/consts.py +0 -0
  28. {csu-2.4.1 → csu-2.4.2}/src/csu/drf/__init__.py +0 -0
  29. {csu-2.4.1 → csu-2.4.2}/src/csu/drf/auth.py +0 -0
  30. {csu-2.4.1 → csu-2.4.2}/src/csu/drf/fields.py +0 -0
  31. {csu-2.4.1 → csu-2.4.2}/src/csu/drf/forms.py +0 -0
  32. {csu-2.4.1 → csu-2.4.2}/src/csu/drf/perms.py +0 -0
  33. {csu-2.4.1 → csu-2.4.2}/src/csu/drf/phonenumber.py +0 -0
  34. {csu-2.4.1 → csu-2.4.2}/src/csu/drf/serializers.py +0 -0
  35. {csu-2.4.1 → csu-2.4.2}/src/csu/drf/test_auth.py +0 -0
  36. {csu-2.4.1 → csu-2.4.2}/src/csu/drf/test_fields.py +0 -0
  37. {csu-2.4.1 → csu-2.4.2}/src/csu/drf/test_forms.py +0 -0
  38. {csu-2.4.1 → csu-2.4.2}/src/csu/drf/test_phonenumber.py +0 -0
  39. {csu-2.4.1 → csu-2.4.2}/src/csu/drf/test_serializers.py +0 -0
  40. {csu-2.4.1 → csu-2.4.2}/src/csu/drf/views.py +0 -0
  41. {csu-2.4.1 → csu-2.4.2}/src/csu/enums.py +0 -0
  42. {csu-2.4.1 → csu-2.4.2}/src/csu/env.py +0 -0
  43. {csu-2.4.1 → csu-2.4.2}/src/csu/exceptions.py +0 -0
  44. {csu-2.4.1 → csu-2.4.2}/src/csu/export.py +0 -0
  45. {csu-2.4.1 → csu-2.4.2}/src/csu/fixups.py +0 -0
  46. {csu-2.4.1 → csu-2.4.2}/src/csu/forms/__init__.py +0 -0
  47. {csu-2.4.1 → csu-2.4.2}/src/csu/forms/crispy.py +0 -0
  48. {csu-2.4.1 → csu-2.4.2}/src/csu/forms/fields.py +0 -0
  49. {csu-2.4.1 → csu-2.4.2}/src/csu/gettext.py +0 -0
  50. {csu-2.4.1 → csu-2.4.2}/src/csu/gettext_lazy.py +0 -0
  51. {csu-2.4.1 → csu-2.4.2}/src/csu/locale/ro/LC_MESSAGES/django.mo +0 -0
  52. {csu-2.4.1 → csu-2.4.2}/src/csu/locale/ro/LC_MESSAGES/django.po +0 -0
  53. {csu-2.4.1 → csu-2.4.2}/src/csu/logging.py +0 -0
  54. {csu-2.4.1 → csu-2.4.2}/src/csu/management.py +0 -0
  55. {csu-2.4.1 → csu-2.4.2}/src/csu/models.py +0 -0
  56. {csu-2.4.1 → csu-2.4.2}/src/csu/query.py +0 -0
  57. {csu-2.4.1 → csu-2.4.2}/src/csu/routers.py +0 -0
  58. {csu-2.4.1 → csu-2.4.2}/src/csu/templates/api_exception.html +0 -0
  59. {csu-2.4.1 → csu-2.4.2}/src/csu/templates/forms/widgets/opaquewidget.html +0 -0
  60. {csu-2.4.1 → csu-2.4.2}/src/csu/test_consts.py +0 -0
  61. {csu-2.4.1 → csu-2.4.2}/src/csu/test_env.py +0 -0
  62. {csu-2.4.1 → csu-2.4.2}/src/csu/test_exceptions.py +0 -0
  63. {csu-2.4.1 → csu-2.4.2}/src/csu/test_logging.py +0 -0
  64. {csu-2.4.1 → csu-2.4.2}/src/csu/test_management.py +0 -0
  65. {csu-2.4.1 → csu-2.4.2}/src/csu/test_service.py +0 -0
  66. {csu-2.4.1 → csu-2.4.2}/src/csu/test_timezones.py +0 -0
  67. {csu-2.4.1 → csu-2.4.2}/src/csu/test_utils.py +0 -0
  68. {csu-2.4.1 → csu-2.4.2}/src/csu/test_xml.py +0 -0
  69. {csu-2.4.1 → csu-2.4.2}/src/csu/timezones.py +0 -0
  70. {csu-2.4.1 → csu-2.4.2}/src/csu/utils.py +0 -0
  71. {csu-2.4.1 → csu-2.4.2}/src/csu/views.py +0 -0
  72. {csu-2.4.1 → csu-2.4.2}/src/csu/worker/__init__.py +0 -0
  73. {csu-2.4.1 → csu-2.4.2}/src/csu/worker/admin.py +0 -0
  74. {csu-2.4.1 → csu-2.4.2}/src/csu/worker/asgi.py +0 -0
  75. {csu-2.4.1 → csu-2.4.2}/src/csu/worker/engine.py +0 -0
  76. {csu-2.4.1 → csu-2.4.2}/src/csu/worker/enums.py +0 -0
  77. {csu-2.4.1 → csu-2.4.2}/src/csu/worker/job.py +0 -0
  78. {csu-2.4.1 → csu-2.4.2}/src/csu/worker/models.py +0 -0
  79. {csu-2.4.1 → csu-2.4.2}/src/csu/worker/registry.py +0 -0
  80. {csu-2.4.1 → csu-2.4.2}/src/csu/wsgi.py +0 -0
  81. {csu-2.4.1 → csu-2.4.2}/src/csu/xml.py +0 -0
  82. {csu-2.4.1 → csu-2.4.2}/src/csu.egg-info/SOURCES.txt +0 -0
  83. {csu-2.4.1 → csu-2.4.2}/src/csu.egg-info/dependency_links.txt +0 -0
  84. {csu-2.4.1 → csu-2.4.2}/src/csu.egg-info/requires.txt +0 -0
  85. {csu-2.4.1 → csu-2.4.2}/src/csu.egg-info/top_level.txt +0 -0
  86. {csu-2.4.1 → csu-2.4.2}/tests/cassettes/test_service/test_custom_context.yaml +0 -0
  87. {csu-2.4.1 → csu-2.4.2}/tests/cassettes/test_service/test_custom_context_0_retries.yaml +0 -0
  88. {csu-2.4.1 → csu-2.4.2}/tests/cassettes/test_service/test_decoding.yaml +0 -0
  89. {csu-2.4.1 → csu-2.4.2}/tests/cassettes/test_service/test_error.yaml +0 -0
  90. {csu-2.4.1 → csu-2.4.2}/tests/cassettes/test_service/test_logging.yaml +0 -0
  91. {csu-2.4.1 → csu-2.4.2}/tests/cassettes/test_service/test_redirects.yaml +0 -0
  92. {csu-2.4.1 → csu-2.4.2}/tests/cassettes/test_service_auth/test_async.yaml +0 -0
  93. {csu-2.4.1 → csu-2.4.2}/tests/cassettes/test_service_auth/test_async_auth.yaml +0 -0
  94. {csu-2.4.1 → csu-2.4.2}/tests/cassettes/test_service_auth/test_sync.yaml +0 -0
  95. {csu-2.4.1 → csu-2.4.2}/tests/cassettes/test_service_auth/test_sync_auth.yaml +0 -0
  96. {csu-2.4.1 → csu-2.4.2}/tests/conftest.py +0 -0
  97. {csu-2.4.1 → csu-2.4.2}/tests/exampleworker.py +0 -0
  98. {csu-2.4.1 → csu-2.4.2}/tests/test_exampleworker.py +0 -0
  99. {csu-2.4.1 → csu-2.4.2}/tests/test_models.py +0 -0
  100. {csu-2.4.1 → csu-2.4.2}/tests/test_service_auth.py +0 -0
  101. {csu-2.4.1 → csu-2.4.2}/tests/test_views.py +0 -0
  102. {csu-2.4.1 → csu-2.4.2}/tests/test_worker.py +0 -0
  103. {csu-2.4.1 → csu-2.4.2}/tests/testproject/__init__.py +0 -0
  104. {csu-2.4.1 → csu-2.4.2}/tests/testproject/fixtures/testuser.json +0 -0
  105. {csu-2.4.1 → csu-2.4.2}/tests/testproject/models.py +0 -0
  106. {csu-2.4.1 → csu-2.4.2}/tests/testproject/settings.py +0 -0
  107. {csu-2.4.1 → csu-2.4.2}/tests/testproject/urls.py +0 -0
  108. {csu-2.4.1 → csu-2.4.2}/tox.ini +0 -0
@@ -1,5 +1,5 @@
1
1
  [bumpversion]
2
- current_version = 2.4.1
2
+ current_version = 2.4.2
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.4.1
44
+ version: 2.4.2
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.4.1
3
+ Version: 2.4.2
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.4.1.svg
72
+ .. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.4.2.svg
73
73
  :alt: Commits since latest release
74
- :target: https://github.com/ionelmc/python-csu/compare/v2.4.1...main
74
+ :target: https://github.com/ionelmc/python-csu/compare/v2.4.2...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.4.1.svg
37
+ .. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.4.2.svg
38
38
  :alt: Commits since latest release
39
- :target: https://github.com/ionelmc/python-csu/compare/v2.4.1...main
39
+ :target: https://github.com/ionelmc/python-csu/compare/v2.4.2...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.4.1"
3
+ version = "2.4.2"
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.4.1"
5
+ __version__ = "2.4.2"
@@ -1,6 +1,5 @@
1
1
  import os
2
2
  from collections.abc import Iterable
3
- from dataclasses import dataclass
4
3
  from decimal import Decimal
5
4
  from logging import Logger
6
5
  from logging import getLogger
@@ -36,15 +35,25 @@ from .exceptions import UnexpectedStatusError
36
35
  from .exceptions import get_event_id
37
36
 
38
37
 
39
- @dataclass(kw_only=True)
40
38
  class HTTPServiceResponse:
41
39
  status: int
42
40
  http_response: Response | AsyncResponse
43
41
  event_id: str
44
42
  json: None | list | dict = None
43
+ text: str
44
+ content: bytes
45
45
 
46
- def __getattr__(self, name):
47
- return getattr(self.http_response, name)
46
+ def __init__(self, http_response: Response, *, content: bytes, text: str, json=None, event_id=None):
47
+ assert http_response.status_code, f"{http_response=} doesn't have a status code"
48
+ self.status = http_response.status_code
49
+ self.http_response = http_response
50
+ self.event_id = event_id
51
+ self.content = content
52
+ self.text = text
53
+ self.json = json
54
+
55
+ def __repr__(self):
56
+ return f"HTTPServiceResponse({self.status}, {self.content if self.json is None else self.json})"
48
57
 
49
58
 
50
59
  class HTTPServiceAuth(AuthBase):
@@ -223,12 +232,8 @@ class HTTPServiceContext[RTYPE = HTTPServiceResponse]:
223
232
  raise DecodeError(response, exc, event_id=self.event_id) from exc
224
233
  else:
225
234
  json = None
226
- return HTTPServiceResponse(
227
- status=response.status_code,
228
- http_response=response,
229
- json=json,
230
- event_id=self.event_id,
231
- )
235
+
236
+ return HTTPServiceResponse(response, json=json, content=response.content, text=response.text, event_id=self.event_id)
232
237
 
233
238
  def handle_prepare_request(
234
239
  self,
@@ -343,18 +348,17 @@ class AsyncHTTPServiceContext[RTYPE = HTTPServiceResponse](HTTPServiceContext[RT
343
348
  try:
344
349
  if isinstance(response, AsyncResponse):
345
350
  json = await response.json(parse_float=Decimal)
351
+ content = await response.content
352
+ text = await response.text
346
353
  else:
347
354
  json = response.json(parse_float=Decimal)
355
+ content = response.content
356
+ text = response.text
348
357
  except Exception as exc:
349
358
  raise DecodeError(response, exc, event_id=self.event_id) from exc
350
359
  else:
351
360
  json = None
352
- return HTTPServiceResponse(
353
- status=response.status_code,
354
- http_response=response,
355
- json=json,
356
- event_id=self.event_id,
357
- )
361
+ return HTTPServiceResponse(response, content=content, text=text, json=json, event_id=self.event_id)
358
362
 
359
363
  async def request(
360
364
  self,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: csu
3
- Version: 2.4.1
3
+ Version: 2.4.2
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.4.1.svg
72
+ .. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.4.2.svg
73
73
  :alt: Commits since latest release
74
- :target: https://github.com/ionelmc/python-csu/compare/v2.4.1...main
74
+ :target: https://github.com/ionelmc/python-csu/compare/v2.4.2...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 221, in handle_process_response
263
+ File "[&SERVICE_PATH]", line 230, 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 303, in request
278
+ File "[&SERVICE_PATH]", line 308, in request
279
279
  return self.handle_process_response(response, expect_json=expect_json)
280
280
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
281
- File "[&SERVICE_PATH]", line 223, in handle_process_response
281
+ File "[&SERVICE_PATH]", line 232, 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 302, in request
343
+ File "[&SERVICE_PATH]", line 307, 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 300, in request
543
+ File "[&SERVICE_PATH]", line 305, 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 300, in request
577
+ File "[&SERVICE_PATH]", line 305, 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 300, in request
611
+ File "[&SERVICE_PATH]", line 305, 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 314, in request
659
+ | File "[&SERVICE_PATH]", line 319, 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 300, in request
665
+ | File "[&SERVICE_PATH]", line 305, 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 300, in request
671
+ | File "[&SERVICE_PATH]", line 305, 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 300, in request
677
+ | File "[&SERVICE_PATH]", line 305, 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 300, in request
683
+ | File "[&SERVICE_PATH]", line 305, 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
File without changes