django_socio_grpc.services.servicer_proxy

Module Contents

Classes

MiddlewareCapable

Allows to define middlewares that can be used in sync and async mode. Most of the code is taken from django.core.handlers.base.BaseHandler https://github.com/django/django/blob/main/django/core/handlers/base.py

ServicerProxy

gRPC call ↓ ServicerProxy.__getattr__(action)ServicerProxy.get_handler(action)ServicerProxy.[correct handler] (sync or async and stream or not) ↓ return _middleware_chain (from setting GRPC_MIDDLEWARE) ↓… middleware 1 ↓… middleware 2 ↓… middleware n ↓ ServicerProxy._get_response (sync or async) … … …

Functions

get_servicer_context

Data

middleware_logger

request_logger

exception_logger

_ServicerCtx

API

django_socio_grpc.services.servicer_proxy.middleware_logger

‘getLogger(…)’

django_socio_grpc.services.servicer_proxy.request_logger

‘getLogger(…)’

django_socio_grpc.services.servicer_proxy.exception_logger

‘getLogger(…)’

django_socio_grpc.services.servicer_proxy._ServicerCtx

‘Local(…)’

django_socio_grpc.services.servicer_proxy.get_servicer_context()
class django_socio_grpc.services.servicer_proxy.MiddlewareCapable

Allows to define middlewares that can be used in sync and async mode. Most of the code is taken from django.core.handlers.base.BaseHandler https://github.com/django/django/blob/main/django/core/handlers/base.py

_middleware_chain

None

adapt_method_mode

None

load_middleware(is_async=False)

Populate middleware lists from settings.GRPC_MIDDLEWARE.

abstract _get_response(request_container: django_socio_grpc.request_transformer.GRPCRequestContainer)
abstract async _get_response_async(request_container: django_socio_grpc.request_transformer.GRPCRequestContainer)
class django_socio_grpc.services.servicer_proxy.ServicerProxy(service_class: type[django_socio_grpc.services.Service], **initkwargs)

Bases: django_socio_grpc.services.servicer_proxy.MiddlewareCapable

gRPC call ↓ ServicerProxy.__getattr__(action)ServicerProxy.get_handler(action)ServicerProxy.[correct handler] (sync or async and stream or not) ↓ return _middleware_chain (from setting GRPC_MIDDLEWARE) ↓… middleware 1 ↓… middleware 2 ↓… middleware n ↓ ServicerProxy._get_response (sync or async) … … …

Initialization

_get_response(request_container: django_socio_grpc.request_transformer.GRPCRequestContainer) django_socio_grpc.request_transformer.GRPCResponseContainer
async _get_response_async(request_container: django_socio_grpc.request_transformer.GRPCRequestContainer) django_socio_grpc.request_transformer.GRPCResponseContainer
_get_async_stream_handler(action: str) collections.abc.Awaitable[collections.abc.Callable]
_get_async_handler(action: str) collections.abc.Awaitable[collections.abc.Callable]
_get_handler(action: str) collections.abc.Callable
_get_stream_handler(action: str) collections.abc.Callable
get_handler(action: str) google.protobuf.message.Message
create_service(**kwargs)
__getattr__(action)
process_exception(exc: Exception, context: grpc.ServicerContext)
async async_process_exception(exc: Exception, context: grpc.aio.ServicerContext)
log_exception(exception: Exception, message: str, extra=None)

Exception logging levels:

  • GRPCException: exception.logging_level

  • APIException: WARNING if status_code < 500 else ERROR

  • Other: ERROR

log_response(exception: Exception | None, request_container: django_socio_grpc.request_transformer.GRPCRequestContainer)