csu 2.5.2__tar.gz → 2.5.4__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.5.2 → csu-2.5.4}/.bumpversion.cfg +1 -1
- {csu-2.5.2 → csu-2.5.4}/.cookiecutterrc +1 -1
- {csu-2.5.2 → csu-2.5.4}/PKG-INFO +3 -3
- {csu-2.5.2 → csu-2.5.4}/README.rst +2 -2
- {csu-2.5.2 → csu-2.5.4}/pyproject.toml +1 -1
- {csu-2.5.2 → csu-2.5.4}/src/csu/__init__.py +1 -1
- {csu-2.5.2 → csu-2.5.4}/src/csu/conf.py +9 -3
- {csu-2.5.2 → csu-2.5.4}/src/csu/logging.py +17 -10
- {csu-2.5.2 → csu-2.5.4}/src/csu/service.py +2 -1
- {csu-2.5.2 → csu-2.5.4}/src/csu.egg-info/PKG-INFO +3 -3
- {csu-2.5.2 → csu-2.5.4}/tests/test_service.py +12 -12
- {csu-2.5.2 → csu-2.5.4}/.coveragerc +0 -0
- {csu-2.5.2 → csu-2.5.4}/.editorconfig +0 -0
- {csu-2.5.2 → csu-2.5.4}/.github/workflows/github-actions.yml +0 -0
- {csu-2.5.2 → csu-2.5.4}/.pre-commit-config.yaml +0 -0
- {csu-2.5.2 → csu-2.5.4}/.tombi.toml +0 -0
- {csu-2.5.2 → csu-2.5.4}/AUTHORS.rst +0 -0
- {csu-2.5.2 → csu-2.5.4}/CHANGELOG.rst +0 -0
- {csu-2.5.2 → csu-2.5.4}/CONTRIBUTING.rst +0 -0
- {csu-2.5.2 → csu-2.5.4}/LICENSE +0 -0
- {csu-2.5.2 → csu-2.5.4}/MANIFEST.in +0 -0
- {csu-2.5.2 → csu-2.5.4}/ci/bootstrap.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/ci/requirements.txt +0 -0
- {csu-2.5.2 → csu-2.5.4}/ci/templates/.github/workflows/github-actions.yml +0 -0
- {csu-2.5.2 → csu-2.5.4}/pytest.ini +0 -0
- {csu-2.5.2 → csu-2.5.4}/setup.cfg +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/admin.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/consts.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/drf/__init__.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/drf/auth.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/drf/fields.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/drf/forms.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/drf/perms.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/drf/phonenumber.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/drf/serializers.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/drf/test_auth.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/drf/test_fields.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/drf/test_forms.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/drf/test_phonenumber.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/drf/test_serializers.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/drf/views.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/enums.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/env.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/exceptions.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/export.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/fixups.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/forms/__init__.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/forms/crispy.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/forms/fields.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/gettext.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/gettext_lazy.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/locale/ro/LC_MESSAGES/django.mo +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/locale/ro/LC_MESSAGES/django.po +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/management.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/models.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/query.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/routers.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/templates/api_exception.html +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/templates/forms/widgets/opaquewidget.html +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/test_consts.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/test_env.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/test_exceptions.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/test_logging.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/test_management.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/test_service.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/test_timezones.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/test_utils.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/test_xml.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/timezones.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/utils.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/views.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/worker/__init__.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/worker/admin.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/worker/asgi.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/worker/engine.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/worker/enums.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/worker/job.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/worker/models.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/worker/registry.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/wsgi.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu/xml.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu.egg-info/SOURCES.txt +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu.egg-info/dependency_links.txt +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu.egg-info/requires.txt +0 -0
- {csu-2.5.2 → csu-2.5.4}/src/csu.egg-info/top_level.txt +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/cassettes/test_service/test_custom_context.yaml +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/cassettes/test_service/test_custom_context_0_retries.yaml +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/cassettes/test_service/test_decoding.yaml +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/cassettes/test_service/test_error.yaml +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/cassettes/test_service/test_logging.yaml +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/cassettes/test_service/test_redirects.yaml +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/cassettes/test_service_auth/test_async.yaml +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/cassettes/test_service_auth/test_async_auth.yaml +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/cassettes/test_service_auth/test_sync.yaml +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/cassettes/test_service_auth/test_sync_auth.yaml +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/conftest.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/exampleworker.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/test_exampleworker.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/test_models.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/test_service_auth.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/test_views.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/test_worker.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/testproject/__init__.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/testproject/fixtures/testuser.json +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/testproject/models.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/testproject/settings.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/tests/testproject/urls.py +0 -0
- {csu-2.5.2 → csu-2.5.4}/tox.ini +0 -0
{csu-2.5.2 → csu-2.5.4}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: csu
|
|
3
|
-
Version: 2.5.
|
|
3
|
+
Version: 2.5.4
|
|
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.
|
|
72
|
+
.. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.5.4.svg
|
|
73
73
|
:alt: Commits since latest release
|
|
74
|
-
:target: https://github.com/ionelmc/python-csu/compare/v2.5.
|
|
74
|
+
:target: https://github.com/ionelmc/python-csu/compare/v2.5.4...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.
|
|
37
|
+
.. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.5.4.svg
|
|
38
38
|
:alt: Commits since latest release
|
|
39
|
-
:target: https://github.com/ionelmc/python-csu/compare/v2.5.
|
|
39
|
+
:target: https://github.com/ionelmc/python-csu/compare/v2.5.4...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/
|
|
@@ -24,13 +24,19 @@ else:
|
|
|
24
24
|
LOGGING_AUTH_INFO_FIELDS = getattr(settings, "CSU_LOGGING_AUTH_INFO_FIELDS", ("_auth",))
|
|
25
25
|
assert isinstance(LOGGING_AUTH_INFO_FIELDS, list | tuple), f"Expected CSU_LOGGING_AUTH_INFO_FIELDS={LOGGING_AUTH_INFO_FIELDS!r} to be a list or tuple."
|
|
26
26
|
LOGGING_TB_LIMIT = getattr(settings, "CSU_LOGGING_TB_LIMIT", 5)
|
|
27
|
+
LOGGING_SHOW_HEADERS = getattr(settings, "CSU_LOGGING_SHOW_HEADERS", False)
|
|
27
28
|
LOGGING_AUTH_INFO_LIMIT = getattr(settings, "CSU_LOGGING_AUTH_INFO_LIMIT", 12)
|
|
28
|
-
|
|
29
|
+
|
|
29
30
|
LOGGING_RESPONSE_TEXT_LIMIT = getattr(settings, "CSU_LOGGING_RESPONSE_TEXT_LIMIT", 102400)
|
|
30
31
|
LOGGING_RESPONSE_BINARY_LIMIT = getattr(settings, "CSU_LOGGING_RESPONSE_BINARY_LIMIT", 64)
|
|
31
|
-
|
|
32
|
+
LOGGING_RESPONSE_SHOW_HEADERS = getattr(settings, "CSU_LOGGING_RESPONSE_SHOW_HEADERS", LOGGING_SHOW_HEADERS)
|
|
33
|
+
|
|
34
|
+
LOGGING_REQUEST_BODY_LIMIT = getattr(settings, "CSU_LOGGING_REQUEST_BODY_LIMIT", 102400)
|
|
35
|
+
LOGGING_REQUEST_SHOW_HEADERS = getattr(settings, "CSU_LOGGING_REQUEST_SHOW_HEADERS", LOGGING_RESPONSE_SHOW_HEADERS)
|
|
36
|
+
|
|
32
37
|
SERVICE_LOGGING_REQUEST_BODY_LIMIT = getattr(settings, "CSU_SERVICE_LOGGING_REQUEST_BODY_LIMIT", None)
|
|
33
38
|
SERVICE_LOGGING_REQUEST_SHOW_HEADERS = getattr(settings, "CSU_SERVICE_LOGGING_REQUEST_SHOW_HEADERS", LOGGING_SHOW_HEADERS)
|
|
39
|
+
|
|
34
40
|
SERVICE_LOGGING_RESPONSE_TEXT_LIMIT = getattr(settings, "CSU_SERVICE_LOGGING_RESPONSE_TEXT_LIMIT", LOGGING_RESPONSE_TEXT_LIMIT)
|
|
35
41
|
SERVICE_LOGGING_RESPONSE_BINARY_LIMIT = getattr(settings, "CSU_SERVICE_LOGGING_RESPONSE_BINARY_LIMIT", LOGGING_RESPONSE_BINARY_LIMIT)
|
|
36
|
-
SERVICE_LOGGING_RESPONSE_SHOW_HEADERS = getattr(settings, "CSU_SERVICE_LOGGING_RESPONSE_SHOW_HEADERS",
|
|
42
|
+
SERVICE_LOGGING_RESPONSE_SHOW_HEADERS = getattr(settings, "CSU_SERVICE_LOGGING_RESPONSE_SHOW_HEADERS", SERVICE_LOGGING_REQUEST_SHOW_HEADERS)
|
|
@@ -12,9 +12,10 @@ from rest_framework.response import Response
|
|
|
12
12
|
|
|
13
13
|
from .conf import LOGGING_AUTH_INFO_LIMIT
|
|
14
14
|
from .conf import LOGGING_REQUEST_BODY_LIMIT
|
|
15
|
+
from .conf import LOGGING_REQUEST_SHOW_HEADERS
|
|
15
16
|
from .conf import LOGGING_RESPONSE_BINARY_LIMIT
|
|
17
|
+
from .conf import LOGGING_RESPONSE_SHOW_HEADERS
|
|
16
18
|
from .conf import LOGGING_RESPONSE_TEXT_LIMIT
|
|
17
|
-
from .conf import LOGGING_SHOW_HEADERS
|
|
18
19
|
from .consts import LINE_LENGTH
|
|
19
20
|
from .consts import REQUEST_DATA_LINE
|
|
20
21
|
from .consts import RESPONSE_CONTENT_LINE
|
|
@@ -67,13 +68,18 @@ def get_request_line(environ, status_code, auth=None, *extra_auth):
|
|
|
67
68
|
query = ""
|
|
68
69
|
format = f'"{environ["REQUEST_METHOD"]} {environ["PATH_INFO"]}%s" {status_code} +[%s] @%s'
|
|
69
70
|
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"
|
|
71
|
+
auth_info = trim_auth_info(";".join(str(item) for item in auth_info if item))
|
|
73
72
|
arguments = [query, auth_info, remote_addr]
|
|
74
73
|
return format, arguments
|
|
75
74
|
|
|
76
75
|
|
|
76
|
+
def trim_auth_info(auth_info):
|
|
77
|
+
if LOGGING_AUTH_INFO_LIMIT and (auth_size := len(auth_info)) > LOGGING_AUTH_INFO_LIMIT:
|
|
78
|
+
return f"{auth_info:.{LOGGING_AUTH_INFO_LIMIT}} +{auth_size - LOGGING_AUTH_INFO_LIMIT} more"
|
|
79
|
+
else:
|
|
80
|
+
return auth_info
|
|
81
|
+
|
|
82
|
+
|
|
77
83
|
def fa_append_repr(format: list[str], arguments: list, value, limit: int | None):
|
|
78
84
|
value = repr(value)
|
|
79
85
|
if limit and (size := len(value)) > limit:
|
|
@@ -115,7 +121,7 @@ def get_content_lines(request: Request | HttpRequest | ASGIRequest, response: Re
|
|
|
115
121
|
if arguments:
|
|
116
122
|
fa_append_repr(format, arguments, body, LOGGING_REQUEST_BODY_LIMIT)
|
|
117
123
|
|
|
118
|
-
if
|
|
124
|
+
if LOGGING_REQUEST_SHOW_HEADERS:
|
|
119
125
|
format.append("\n%s\n %s")
|
|
120
126
|
arguments += (
|
|
121
127
|
" request headers ".center(LINE_LENGTH, "-"),
|
|
@@ -123,11 +129,12 @@ def get_content_lines(request: Request | HttpRequest | ASGIRequest, response: Re
|
|
|
123
129
|
)
|
|
124
130
|
if response:
|
|
125
131
|
if response.headers:
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
132
|
+
if LOGGING_RESPONSE_SHOW_HEADERS:
|
|
133
|
+
format.append("\n%s\n %s")
|
|
134
|
+
arguments += (
|
|
135
|
+
" response headers ".center(LINE_LENGTH, "-"),
|
|
136
|
+
"\n ".join(f"{name}: {value}" for name, value in response.headers.items()),
|
|
137
|
+
)
|
|
131
138
|
content_type = response.headers.get("content-type")
|
|
132
139
|
else:
|
|
133
140
|
content_type = None
|
|
@@ -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.
|
|
3
|
+
Version: 2.5.4
|
|
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.
|
|
72
|
+
.. |commits-since| image:: https://img.shields.io/github/commits-since/ionelmc/python-csu/v2.5.4.svg
|
|
73
73
|
:alt: Commits since latest release
|
|
74
|
-
:target: https://github.com/ionelmc/python-csu/compare/v2.5.
|
|
74
|
+
:target: https://github.com/ionelmc/python-csu/compare/v2.5.4...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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
{csu-2.5.2 → csu-2.5.4}/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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{csu-2.5.2 → csu-2.5.4}/tox.ini
RENAMED
|
File without changes
|