Request Serializer

class blacksmith.service.http_body_serializer.AbstractHttpBodySerializer

Request body serializer.

abstract accept(content_type: str) bool

Return true in case it can handle the request.

abstract serialize(body: dict[str, Any] | Sequence[Any]) str | bytes | Iterable[bytes] | AsyncIterable[bytes]

Serialize a python simple types to a python request body.

The body received here is the extracted object from the request model.

abstract deserialize(body: bytes, encoding: str | None) Any | None

Deserialize a raw http response body to a python simple types representation.

class blacksmith.service.http_body_serializer.JsonRequestSerializer

The default serializer that serialize to json

accept(content_type: str) bool

Return true in case it can handle the request.

serialize(body: dict[str, Any] | Sequence[Any]) str | bytes | Iterable[bytes] | AsyncIterable[bytes]

Serialize a python simple types to a python request body.

The body received here is the extracted object from the request model.

deserialize(body: bytes, encoding: str | None) Any | None

Deserialize a raw http response body to a python simple types representation.

class blacksmith.service.http_body_serializer.UrlencodedRequestSerializer

A serializer for application/x-www-form-urlencoded request.

accept(content_type: str) bool

Return true in case it can handle the request.

serialize(body: dict[str, Any] | Sequence[Any]) str | bytes | Iterable[bytes] | AsyncIterable[bytes]

Serialize a python simple types to a python request body.

The body received here is the extracted object from the request model.

deserialize(body: bytes, encoding: str | None) Any | None

Deserialize a raw http response body to a python simple types representation.

class blacksmith.service.http_body_serializer.JSONEncoder(*, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, sort_keys=False, indent=None, separators=None, default=None)
default(o: Any) Any

Implement this method in a subclass such that it returns a serializable object for o, or calls the base implementation (to raise a TypeError).

For example, to support arbitrary iterators, you could implement default like this:

def default(self, o):
    try:
        iterable = iter(o)
    except TypeError:
        pass
    else:
        return list(iterable)
    # Let the base class default method raise the TypeError
    return super().default(o)
blacksmith.service.http_body_serializer.get_fields(model: BaseModel) Mapping[str, FieldInfo]
blacksmith.service.http_body_serializer.get_location(field: FieldInfo) Literal['path', 'headers', 'querystring', 'body']
blacksmith.service.http_body_serializer.get_value(v: str | int | float | bool | SecretStr | SecretBytes) str | int | float | bool
blacksmith.service.http_body_serializer.serialize_part(req: Request, part: dict[str, Any]) dict[str, str | int | float | bool]
blacksmith.service.http_body_serializer.register_http_body_serializer(serializer: AbstractHttpBodySerializer) None

Register a serializer to serialize some kind of request.

blacksmith.service.http_body_serializer.unregister_http_body_serializer(serializer: AbstractHttpBodySerializer) None

Unregister a serializer previously added.

Usefull for testing purpose.

blacksmith.service.http_body_serializer.serialize_request_body(req: Request, body: dict[str, str], content_type: str | None = None) str | bytes | Iterable[bytes] | AsyncIterable[bytes]

Serialize the body of the request.

Note that the content_type is optional, but if it is set,

the request will contains

blacksmith.service.http_body_serializer.serialize_request(method: Literal['HEAD', 'GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'], url_pattern: str, request_model: Request) HTTPRequest

Serialize blacksmith.Request subclasses to blacksmith.HTTPRequest.

While processing an http request, the request models are serialize to an intermediate object blacksmith.HTTPRequest, that will be passed over middleware and finally to the transport in order to build the final http request.

Note that the body of the blacksmith.HTTPRequest is a string, here, serialized by a registered serializer.

blacksmith.service.http_body_serializer.serialize_response(resp: HTTPRawResponse) HTTPResponse

Deserialize an http response to the http intermediate representation that will become the pydantic based response. Basically it parse json bytes a a python structure. But this function is here to supports serializations format depending on the content-type.