csu 2.0.0__tar.gz → 2.0.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.
- {csu-2.0.0 → csu-2.0.2}/.bumpversion.cfg +1 -1
- {csu-2.0.0 → csu-2.0.2}/.cookiecutterrc +1 -1
- {csu-2.0.0 → csu-2.0.2}/PKG-INFO +3 -3
- {csu-2.0.0 → csu-2.0.2}/README.rst +2 -2
- {csu-2.0.0 → csu-2.0.2}/pyproject.toml +1 -1
- {csu-2.0.0 → csu-2.0.2}/src/csu/__init__.py +1 -1
- {csu-2.0.0 → csu-2.0.2}/src/csu/service.py +37 -32
- {csu-2.0.0 → csu-2.0.2}/src/csu.egg-info/PKG-INFO +3 -3
- {csu-2.0.0 → csu-2.0.2}/tests/test_service.py +18 -18
- {csu-2.0.0 → csu-2.0.2}/.coveragerc +0 -0
- {csu-2.0.0 → csu-2.0.2}/.editorconfig +0 -0
- {csu-2.0.0 → csu-2.0.2}/.github/workflows/github-actions.yml +0 -0
- {csu-2.0.0 → csu-2.0.2}/.pre-commit-config.yaml +0 -0
- {csu-2.0.0 → csu-2.0.2}/.taplo.toml +0 -0
- {csu-2.0.0 → csu-2.0.2}/AUTHORS.rst +0 -0
- {csu-2.0.0 → csu-2.0.2}/CHANGELOG.rst +0 -0
- {csu-2.0.0 → csu-2.0.2}/CONTRIBUTING.rst +0 -0
- {csu-2.0.0 → csu-2.0.2}/LICENSE +0 -0
- {csu-2.0.0 → csu-2.0.2}/MANIFEST.in +0 -0
- {csu-2.0.0 → csu-2.0.2}/ci/bootstrap.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/ci/requirements.txt +0 -0
- {csu-2.0.0 → csu-2.0.2}/ci/templates/.github/workflows/github-actions.yml +0 -0
- {csu-2.0.0 → csu-2.0.2}/pytest.ini +0 -0
- {csu-2.0.0 → csu-2.0.2}/setup.cfg +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/admin.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/conf.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/consts.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/drf/__init__.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/drf/auth.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/drf/fields.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/drf/forms.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/drf/perms.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/drf/phonenumber.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/drf/serializers.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/drf/test_auth.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/drf/test_fields.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/drf/test_forms.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/drf/test_phonenumber.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/drf/test_serializers.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/drf/views.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/enums.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/env.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/exceptions.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/export.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/fixups.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/forms/__init__.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/forms/crispy.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/forms/fields.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/gettext.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/gettext_lazy.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/locale/ro/LC_MESSAGES/django.mo +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/locale/ro/LC_MESSAGES/django.po +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/logging.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/management.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/models.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/query.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/routers.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/templates/api_exception.html +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/templates/forms/widgets/opaquewidget.html +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/test_consts.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/test_env.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/test_exceptions.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/test_logging.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/test_management.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/test_service.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/test_timezones.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/test_utils.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/test_xml.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/timezones.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/utils.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/views.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/worker/__init__.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/worker/admin.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/worker/asgi.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/worker/engine.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/worker/enums.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/worker/job.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/worker/models.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/worker/registry.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/wsgi.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu/xml.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu.egg-info/SOURCES.txt +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu.egg-info/dependency_links.txt +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu.egg-info/requires.txt +0 -0
- {csu-2.0.0 → csu-2.0.2}/src/csu.egg-info/top_level.txt +0 -0
- {csu-2.0.0 → csu-2.0.2}/tests/cassettes/test_service/test_custom_context.yaml +0 -0
- {csu-2.0.0 → csu-2.0.2}/tests/cassettes/test_service/test_custom_context_0_retries.yaml +0 -0
- {csu-2.0.0 → csu-2.0.2}/tests/cassettes/test_service/test_decoding.yaml +0 -0
- {csu-2.0.0 → csu-2.0.2}/tests/cassettes/test_service/test_error.yaml +0 -0
- {csu-2.0.0 → csu-2.0.2}/tests/cassettes/test_service/test_logging.yaml +0 -0
- {csu-2.0.0 → csu-2.0.2}/tests/cassettes/test_service/test_redirects.yaml +0 -0
- {csu-2.0.0 → csu-2.0.2}/tests/conftest.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/tests/exampleworker.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/tests/test_models.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/tests/test_views.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/tests/test_worker.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/tests/testproject/__init__.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/tests/testproject/fixtures/testuser.json +0 -0
- {csu-2.0.0 → csu-2.0.2}/tests/testproject/models.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/tests/testproject/settings.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/tests/testproject/urls.py +0 -0
- {csu-2.0.0 → csu-2.0.2}/tox.ini +0 -0
{csu-2.0.0 → csu-2.0.2}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: csu
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.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
|
|
@@ -77,9 +77,9 @@ Overview
|
|
|
77
77
|
.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/csu.svg
|
|
78
78
|
:alt: Supported implementations
|
|
79
79
|
:target: https://pypi.org/project/csu
|
|
80
|
-
.. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.0.
|
|
80
|
+
.. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.0.2.svg
|
|
81
81
|
:alt: Commits since latest release
|
|
82
|
-
:target: https://github.com/ionelmc/python-csu/compare/v2.0.
|
|
82
|
+
:target: https://github.com/ionelmc/python-csu/compare/v2.0.2...main
|
|
83
83
|
.. |scrutinizer| image:: https://img.shields.io/scrutinizer/quality/g/ionelmc/python-csu/main.svg
|
|
84
84
|
:alt: Scrutinizer Status
|
|
85
85
|
: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.0.
|
|
37
|
+
.. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.0.2.svg
|
|
38
38
|
:alt: Commits since latest release
|
|
39
|
-
:target: https://github.com/ionelmc/python-csu/compare/v2.0.
|
|
39
|
+
:target: https://github.com/ionelmc/python-csu/compare/v2.0.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/
|
|
@@ -48,7 +48,36 @@ class HTTPServiceResponse:
|
|
|
48
48
|
return getattr(self.http_response, name)
|
|
49
49
|
|
|
50
50
|
|
|
51
|
+
class HTTPServiceAuth(AuthBase):
|
|
52
|
+
context: HTTPServiceContext
|
|
53
|
+
service: HTTPService
|
|
54
|
+
|
|
55
|
+
def __init__(self, context: HTTPServiceContext, service: HTTPService):
|
|
56
|
+
self.context = context
|
|
57
|
+
self.service = service
|
|
58
|
+
|
|
59
|
+
def __call__(self, request: PreparedRequest) -> PreparedRequest:
|
|
60
|
+
authed_request = self.service.auth(request, self.context)
|
|
61
|
+
assert isinstance(authed_request, PreparedRequest), f"{self.service.auth} must return a PreparedRequest"
|
|
62
|
+
return authed_request
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class AsyncHTTPServiceAuth(AsyncAuthBase):
|
|
66
|
+
context: AsyncHTTPServiceContext
|
|
67
|
+
service: AsyncHTTPService
|
|
68
|
+
|
|
69
|
+
def __init__(self, context: AsyncHTTPServiceContext, service: AsyncHTTPService):
|
|
70
|
+
self.context = context
|
|
71
|
+
self.service = service
|
|
72
|
+
|
|
73
|
+
async def __call__(self, request: PreparedRequest) -> PreparedRequest:
|
|
74
|
+
authed_request = await self.service.auth(request, self.context)
|
|
75
|
+
assert isinstance(authed_request, PreparedRequest), f"{self.service.auth} must return a PreparedRequest"
|
|
76
|
+
return authed_request
|
|
77
|
+
|
|
78
|
+
|
|
51
79
|
class HTTPServiceContext[RTYPE = HTTPServiceResponse]:
|
|
80
|
+
auth_class = HTTPServiceAuth
|
|
52
81
|
client_class = Session
|
|
53
82
|
client: Session
|
|
54
83
|
logger: Logger
|
|
@@ -57,7 +86,7 @@ class HTTPServiceContext[RTYPE = HTTPServiceResponse]:
|
|
|
57
86
|
|
|
58
87
|
def __init__(self, service: HTTPService[Self], event_id=None, auth=None, **kwargs):
|
|
59
88
|
if auth is None:
|
|
60
|
-
auth =
|
|
89
|
+
auth = self.auth_class(self, service)
|
|
61
90
|
self.client = self.client_class(
|
|
62
91
|
timeout=service.timeout,
|
|
63
92
|
base_url=service.base_url,
|
|
@@ -271,7 +300,7 @@ class HTTPServiceContext[RTYPE = HTTPServiceResponse]:
|
|
|
271
300
|
try:
|
|
272
301
|
json = response.json(parse_float=Decimal)
|
|
273
302
|
except Exception as exc:
|
|
274
|
-
raise DecodeError(response, exc, event_id=self.event_id) from
|
|
303
|
+
raise DecodeError(response, exc, event_id=self.event_id) from exc
|
|
275
304
|
else:
|
|
276
305
|
json = None
|
|
277
306
|
return self.handle_process_response(response, retry_statuses=retry_statuses, accept_statuses=accept_statuses, json=json)
|
|
@@ -289,6 +318,7 @@ class HTTPServiceContext[RTYPE = HTTPServiceResponse]:
|
|
|
289
318
|
|
|
290
319
|
|
|
291
320
|
class AsyncHTTPServiceContext[RT = HTTPServiceResponse](HTTPServiceContext[RT]):
|
|
321
|
+
auth_class = AsyncHTTPServiceAuth
|
|
292
322
|
client_class = AsyncSession
|
|
293
323
|
client: AsyncSession
|
|
294
324
|
logger: Logger
|
|
@@ -348,9 +378,12 @@ class AsyncHTTPServiceContext[RT = HTTPServiceResponse](HTTPServiceContext[RT]):
|
|
|
348
378
|
response = await self.client.send(prepared_request, timeout=self.client.timeout, allow_redirects=follow_redirects, **settings)
|
|
349
379
|
if expect_json:
|
|
350
380
|
try:
|
|
351
|
-
|
|
381
|
+
if stream:
|
|
382
|
+
json = await response.json(parse_float=Decimal)
|
|
383
|
+
else:
|
|
384
|
+
json = response.json(parse_float=Decimal)
|
|
352
385
|
except Exception as exc:
|
|
353
|
-
raise DecodeError(response, exc, event_id=self.event_id) from
|
|
386
|
+
raise DecodeError(response, exc, event_id=self.event_id) from exc
|
|
354
387
|
else:
|
|
355
388
|
json = None
|
|
356
389
|
return self.handle_process_response(response, retry_statuses=retry_statuses, accept_statuses=accept_statuses, json=json)
|
|
@@ -409,31 +442,3 @@ class AsyncHTTPService[ACT = AsyncHTTPServiceContext](HTTPService[ACT]):
|
|
|
409
442
|
|
|
410
443
|
async def auth(self, request: PreparedRequest, context: ACT) -> PreparedRequest:
|
|
411
444
|
return request
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
class HTTPServiceAuth(AuthBase):
|
|
415
|
-
context: HTTPServiceContext
|
|
416
|
-
service: HTTPService
|
|
417
|
-
|
|
418
|
-
def __init__(self, context: HTTPServiceContext, service: HTTPService):
|
|
419
|
-
self.context = context
|
|
420
|
-
self.service = service
|
|
421
|
-
|
|
422
|
-
def __call__(self, request: PreparedRequest) -> PreparedRequest:
|
|
423
|
-
authed_request = self.service.auth(request, self.context)
|
|
424
|
-
assert isinstance(authed_request, PreparedRequest), f"{self.service.auth} must return a PreparedRequest"
|
|
425
|
-
return authed_request
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
class AsyncHTTPServiceAuth(AsyncAuthBase):
|
|
429
|
-
context: AsyncHTTPServiceContext
|
|
430
|
-
service: AsyncHTTPService
|
|
431
|
-
|
|
432
|
-
def __init__(self, context: AsyncHTTPServiceContext, service: AsyncHTTPService):
|
|
433
|
-
self.context = context
|
|
434
|
-
self.service = service
|
|
435
|
-
|
|
436
|
-
async def __call__(self, request: PreparedRequest) -> PreparedRequest:
|
|
437
|
-
authed_request = await self.service.auth(request, self.context)
|
|
438
|
-
assert isinstance(authed_request, PreparedRequest), f"{self.service.auth} must return a PreparedRequest"
|
|
439
|
-
return authed_request
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: csu
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.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
|
|
@@ -77,9 +77,9 @@ Overview
|
|
|
77
77
|
.. |supported-implementations| image:: https://img.shields.io/pypi/implementation/csu.svg
|
|
78
78
|
:alt: Supported implementations
|
|
79
79
|
:target: https://pypi.org/project/csu
|
|
80
|
-
.. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.0.
|
|
80
|
+
.. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.0.2.svg
|
|
81
81
|
:alt: Commits since latest release
|
|
82
|
-
:target: https://github.com/ionelmc/python-csu/compare/v2.0.
|
|
82
|
+
:target: https://github.com/ionelmc/python-csu/compare/v2.0.2...main
|
|
83
83
|
.. |scrutinizer| image:: https://img.shields.io/scrutinizer/quality/g/ionelmc/python-csu/main.svg
|
|
84
84
|
:alt: Scrutinizer Status
|
|
85
85
|
:target: https://scrutinizer-ci.com/g/ionelmc/python-csu/
|
|
@@ -247,7 +247,7 @@ Traceback (most recent call last):
|
|
|
247
247
|
File "[&TEST_PATH]", line 76, in json
|
|
248
248
|
return ctx.request("GET", "status/418", accept_statuses=[418]).json
|
|
249
249
|
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
250
|
-
File "[&SERVICE_PATH]", line
|
|
250
|
+
File "[&SERVICE_PATH]", line 303, in request
|
|
251
251
|
raise DecodeError(response, exc, event_id=self.event_id) from None
|
|
252
252
|
csu.exceptions.DecodeError: DecodeError(JSONDecodeError('Expecting value: line 2 column 5 (char 5)'), response=<Response Dummy [418]>)
|
|
253
253
|
(418, b'\\n -=[ teapot ]=-\\n\\n _...._\\n .\\' _ _ `.\\n | ."` ^ `". _,\\n \\\\_;`"---"`|//\\n | ;/\\n \\\\_ _/\\n `"""`\\n')
|
|
@@ -310,10 +310,10 @@ Traceback (most recent call last):
|
|
|
310
310
|
File "[&TEST_PATH]", line 45, in error
|
|
311
311
|
return ctx.request("GET", "status/599", expect_json=False)
|
|
312
312
|
~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
313
|
-
File "[&SERVICE_PATH]", line
|
|
313
|
+
File "[&SERVICE_PATH]", line 306, in request
|
|
314
314
|
return self.handle_process_response(response, retry_statuses=retry_statuses, accept_statuses=accept_statuses, json=json)
|
|
315
315
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
316
|
-
File "[&SERVICE_PATH]", line
|
|
316
|
+
File "[&SERVICE_PATH]", line 226, in handle_process_response
|
|
317
317
|
raise UnexpectedStatusError(response, accept_statuses, event_id=self.event_id)
|
|
318
318
|
csu.exceptions.UnexpectedStatusError: UnexpectedStatusError(<Response Dummy [599]>, accept_statuses=[200])
|
|
319
319
|
(599, b'')
|
|
@@ -513,10 +513,10 @@ INFO | [01:000000.00] POST [&HTTPBIN]/anything?foo=bar&accept_statuses=%7B999
|
|
|
513
513
|
"""\
|
|
514
514
|
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)
|
|
515
515
|
Traceback (most recent call last):
|
|
516
|
-
File "[&SERVICE_PATH]", line
|
|
516
|
+
File "[&SERVICE_PATH]", line 306, in request
|
|
517
517
|
return self.handle_process_response(response, retry_statuses=retry_statuses, accept_statuses=accept_statuses, json=json)
|
|
518
518
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
519
|
-
File "[&SERVICE_PATH]", line
|
|
519
|
+
File "[&SERVICE_PATH]", line 224, in handle_process_response
|
|
520
520
|
raise RetryableStatusError(response, accept_statuses, retry_statuses, event_id=self.event_id)
|
|
521
521
|
csu.exceptions.RetryableStatusError: RetryableStatusError(<Response Dummy [200]>, accept_statuses=[999], retry_statuses=[200])
|
|
522
522
|
(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')
|
|
@@ -550,10 +550,10 @@ INFO | [01:000000.00] POST [&HTTPBIN]/anything?foo=bar&accept_statuses=%7B999
|
|
|
550
550
|
"""\
|
|
551
551
|
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)
|
|
552
552
|
Traceback (most recent call last):
|
|
553
|
-
File "[&SERVICE_PATH]", line
|
|
553
|
+
File "[&SERVICE_PATH]", line 306, in request
|
|
554
554
|
return self.handle_process_response(response, retry_statuses=retry_statuses, accept_statuses=accept_statuses, json=json)
|
|
555
555
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
556
|
-
File "[&SERVICE_PATH]", line
|
|
556
|
+
File "[&SERVICE_PATH]", line 224, in handle_process_response
|
|
557
557
|
raise RetryableStatusError(response, accept_statuses, retry_statuses, event_id=self.event_id)
|
|
558
558
|
csu.exceptions.RetryableStatusError: RetryableStatusError(<Response Dummy [200]>, accept_statuses=[999], retry_statuses=[200])
|
|
559
559
|
(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')
|
|
@@ -587,10 +587,10 @@ INFO | [01:000000.00] POST [&HTTPBIN]/anything?foo=bar&accept_statuses=%7B999
|
|
|
587
587
|
"""\
|
|
588
588
|
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)
|
|
589
589
|
Traceback (most recent call last):
|
|
590
|
-
File "[&SERVICE_PATH]", line
|
|
590
|
+
File "[&SERVICE_PATH]", line 306, in request
|
|
591
591
|
return self.handle_process_response(response, retry_statuses=retry_statuses, accept_statuses=accept_statuses, json=json)
|
|
592
592
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
593
|
-
File "[&SERVICE_PATH]", line
|
|
593
|
+
File "[&SERVICE_PATH]", line 224, in handle_process_response
|
|
594
594
|
raise RetryableStatusError(response, accept_statuses, retry_statuses, event_id=self.event_id)
|
|
595
595
|
csu.exceptions.RetryableStatusError: RetryableStatusError(<Response Dummy [200]>, accept_statuses=[999], retry_statuses=[200])
|
|
596
596
|
(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')
|
|
@@ -638,43 +638,43 @@ ERROR | (renderer: NoneType)
|
|
|
638
638
|
| ...<6 lines>...
|
|
639
639
|
| accept_statuses=[999],
|
|
640
640
|
| )
|
|
641
|
-
| File "[&SERVICE_PATH]", line
|
|
641
|
+
| File "[&SERVICE_PATH]", line 317, in request
|
|
642
642
|
| raise ExhaustedRetriesError(retry_budget, retry_failures, event_id=self.event_id)
|
|
643
643
|
| csu.exceptions.ExhaustedRetriesError: ExhaustedRetriesError(3)
|
|
644
644
|
| ([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)],)
|
|
645
645
|
+-+---------------- 1 ----------------
|
|
646
646
|
| Traceback (most recent call last):
|
|
647
|
-
| File "[&SERVICE_PATH]", line
|
|
647
|
+
| File "[&SERVICE_PATH]", line 306, in request
|
|
648
648
|
| return self.handle_process_response(response, retry_statuses=retry_statuses, accept_statuses=accept_statuses, json=json)
|
|
649
649
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
650
|
-
| File "[&SERVICE_PATH]", line
|
|
650
|
+
| File "[&SERVICE_PATH]", line 224, in handle_process_response
|
|
651
651
|
| raise RetryableStatusError(response, accept_statuses, retry_statuses, event_id=self.event_id)
|
|
652
652
|
| csu.exceptions.RetryableStatusError: RetryableStatusError(<Response Dummy [200]>, accept_statuses=[999], retry_statuses=[200])
|
|
653
653
|
| (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')
|
|
654
654
|
+---------------- 2 ----------------
|
|
655
655
|
| Traceback (most recent call last):
|
|
656
|
-
| File "[&SERVICE_PATH]", line
|
|
656
|
+
| File "[&SERVICE_PATH]", line 306, in request
|
|
657
657
|
| return self.handle_process_response(response, retry_statuses=retry_statuses, accept_statuses=accept_statuses, json=json)
|
|
658
658
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
659
|
-
| File "[&SERVICE_PATH]", line
|
|
659
|
+
| File "[&SERVICE_PATH]", line 224, in handle_process_response
|
|
660
660
|
| raise RetryableStatusError(response, accept_statuses, retry_statuses, event_id=self.event_id)
|
|
661
661
|
| csu.exceptions.RetryableStatusError: RetryableStatusError(<Response Dummy [200]>, accept_statuses=[999], retry_statuses=[200])
|
|
662
662
|
| (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')
|
|
663
663
|
+---------------- 3 ----------------
|
|
664
664
|
| Traceback (most recent call last):
|
|
665
|
-
| File "[&SERVICE_PATH]", line
|
|
665
|
+
| File "[&SERVICE_PATH]", line 306, in request
|
|
666
666
|
| return self.handle_process_response(response, retry_statuses=retry_statuses, accept_statuses=accept_statuses, json=json)
|
|
667
667
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
668
|
-
| File "[&SERVICE_PATH]", line
|
|
668
|
+
| File "[&SERVICE_PATH]", line 224, in handle_process_response
|
|
669
669
|
| raise RetryableStatusError(response, accept_statuses, retry_statuses, event_id=self.event_id)
|
|
670
670
|
| csu.exceptions.RetryableStatusError: RetryableStatusError(<Response Dummy [200]>, accept_statuses=[999], retry_statuses=[200])
|
|
671
671
|
| (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')
|
|
672
672
|
+---------------- 4 ----------------
|
|
673
673
|
| Traceback (most recent call last):
|
|
674
|
-
| File "[&SERVICE_PATH]", line
|
|
674
|
+
| File "[&SERVICE_PATH]", line 306, in request
|
|
675
675
|
| return self.handle_process_response(response, retry_statuses=retry_statuses, accept_statuses=accept_statuses, json=json)
|
|
676
676
|
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
677
|
-
| File "[&SERVICE_PATH]", line
|
|
677
|
+
| File "[&SERVICE_PATH]", line 224, in handle_process_response
|
|
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":"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
|
{csu-2.0.0 → csu-2.0.2}/LICENSE
RENAMED
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csu-2.0.0 → csu-2.0.2}/tox.ini
RENAMED
|
File without changes
|