forked from extern/httpie-cli
4f1c9441c5
* Fix encoding error with non-prettified encoded responses
Removed `--format-option response.as` an promote `--response-as`: using
the format option would be misleading as it is now also used by non-prettified
responses.
* Encoding refactoring
* split --response-as into --response-mime and --response-charset
* add support for Content-Type charset for requests printed to terminal
* add support charset detection for requests printed to terminal without a Content-Type charset
* etc.
* `test_unicode.py` → `test_encoding.py`
* Drop sequence length check
* Clean-up tests
* [skip ci] Tweaks
* Use the compatible release clause for `charset_normalizer` requirement
Cf. https://www.python.org/dev/peps/pep-0440/#version-specifiers
* Clean-up
* Partially revert d52a4833e4
* Changelog
* Tweak tests
* [skip ci] Better test name
* Cleanup tests and add request body charset detection
* More test suite cleanups
* Cleanup
* Fix code style in test
* Improve detect_encoding() docstring
* Uniformize pytest.mark.parametrize() calls
* [skip ci] Comment out TODOs (will be tackled in a specific PR)
Co-authored-by: Jakub Roztocil <jakub@roztocil.co>
54 lines
1.6 KiB
Python
54 lines
1.6 KiB
Python
import re
|
|
from typing import Optional, List
|
|
|
|
from ..plugins import ConverterPlugin
|
|
from ..plugins.registry import plugin_manager
|
|
from ..context import Environment
|
|
|
|
|
|
MIME_RE = re.compile(r'^[^/]+/[^/]+$')
|
|
|
|
|
|
def is_valid_mime(mime):
|
|
return mime and MIME_RE.match(mime)
|
|
|
|
|
|
class Conversion:
|
|
|
|
@staticmethod
|
|
def get_converter(mime: str) -> Optional[ConverterPlugin]:
|
|
if is_valid_mime(mime):
|
|
for converter_class in plugin_manager.get_converters():
|
|
if converter_class.supports(mime):
|
|
return converter_class(mime)
|
|
|
|
|
|
class Formatting:
|
|
"""A delegate class that invokes the actual processors."""
|
|
|
|
def __init__(self, groups: List[str], env=Environment(), **kwargs):
|
|
"""
|
|
:param groups: names of processor groups to be applied
|
|
:param env: Environment
|
|
:param kwargs: additional keyword arguments for processors
|
|
|
|
"""
|
|
available_plugins = plugin_manager.get_formatters_grouped()
|
|
self.enabled_plugins = []
|
|
for group in groups:
|
|
for cls in available_plugins[group]:
|
|
p = cls(env=env, **kwargs)
|
|
if p.enabled:
|
|
self.enabled_plugins.append(p)
|
|
|
|
def format_headers(self, headers: str) -> str:
|
|
for p in self.enabled_plugins:
|
|
headers = p.format_headers(headers)
|
|
return headers
|
|
|
|
def format_body(self, content: str, mime: str) -> str:
|
|
if is_valid_mime(mime):
|
|
for p in self.enabled_plugins:
|
|
content = p.format_body(content, mime)
|
|
return content
|