nameko.extensions ================= .. py:module:: nameko.extensions Attributes ---------- .. autoapisummary:: nameko.extensions._log nameko.extensions.ENTRYPOINT_EXTENSIONS_ATTR Classes ------- .. autoapisummary:: nameko.extensions.Extension nameko.extensions.SharedExtension nameko.extensions.DependencyProvider nameko.extensions.ProviderCollector nameko.extensions.Entrypoint Functions --------- .. autoapisummary:: nameko.extensions.register_entrypoint nameko.extensions.is_extension nameko.extensions.is_dependency nameko.extensions.is_entrypoint nameko.extensions.iter_extensions Module Contents --------------- .. py:data:: _log .. py:data:: ENTRYPOINT_EXTENSIONS_ATTR :value: 'nameko_entrypoints' .. py:class:: Extension Bases: :py:obj:`object` 请注意,`Extension.__init__` 在 `bind` 过程中以及实例化时都会被调用,因此请避免在此方法中产生副作用。请使用 `setup`。 此外,`bind` 和 `iter_extensions` 使用反射来查找扩展可能声明的任何子扩展。扩展上的任何描述符应该预计在反射过程中被调用,这发生在 `ServiceContainer.__init__` 和 `ServiceContainer.setup` 之间。 `Extension.container` 属性提供对绑定到该扩展的 `nameko.containers.ServiceContainer` 实例的访问,否则为 `None`。 .. py:attribute:: __params :value: None .. py:attribute:: container :value: None .. py:method:: setup() 在容器启动之前调用了绑定的扩展。 扩展应在此处进行任何必要的初始化。 .. py:method:: start() 在容器成功启动时调用绑定的扩展。 此方法仅在所有其他扩展成功返回 `Extension.setup` 后被调用。如果扩展对外部事件做出反应,它现在应该开始对此进行响应。 .. py:method:: stop() 在服务容器开始关闭时调用。 扩展应在此处执行任何优雅的关闭操作。 .. py:method:: kill() 在没有优雅关闭的情况下调用以停止此扩展。 扩展应在此处紧急关闭。这意味着尽快停止,省略清理操作。对于某些依赖项,这可能与 `stop()` 不同。 例如,`messaging.QueueConsumer` 类跟踪正在处理的消息和待处理的消息确认。它的 `kill` 实现会尽快丢弃这些消息并与 Rabbit 断开连接。 在执行 kill 时,扩展不应引发异常,因为容器已经在关闭。相反,它们应该记录适当的信息,并捕获异常,以允许容器继续关闭。 .. py:method:: bind(container) 获取当前扩展的实例绑定到 `container`. .. py:method:: is_bound() .. py:method:: __repr__() .. py:class:: SharedExtension Bases: :py:obj:`Extension` 请注意,`Extension.__init__` 在 `bind` 过程中以及实例化时都会被调用,因此请避免在此方法中产生副作用。请使用 `setup`。 此外,`bind` 和 `iter_extensions` 使用反射来查找扩展可能声明的任何子扩展。扩展上的任何描述符应该预计在反射过程中被调用,这发生在 `ServiceContainer.__init__` 和 `ServiceContainer.setup` 之间。 `Extension.container` 属性提供对绑定到该扩展的 `nameko.containers.ServiceContainer` 实例的访问,否则为 `None`。 .. py:property:: sharing_key .. py:method:: bind(container) 支持共享的绑定实现。 .. py:class:: DependencyProvider Bases: :py:obj:`Extension` 请注意,`Extension.__init__` 在 `bind` 过程中以及实例化时都会被调用,因此请避免在此方法中产生副作用。请使用 `setup`。 此外,`bind` 和 `iter_extensions` 使用反射来查找扩展可能声明的任何子扩展。扩展上的任何描述符应该预计在反射过程中被调用,这发生在 `ServiceContainer.__init__` 和 `ServiceContainer.setup` 之间。 `Extension.container` 属性提供对绑定到该扩展的 `nameko.containers.ServiceContainer` 实例的访问,否则为 `None`。 .. py:attribute:: attr_name :value: None .. py:method:: bind(container, attr_name: str) 获取一个依赖项的实例,以便与 `container` 和 `attr_name` 绑定。 .. py:method:: get_dependency(worker_ctx) 在工作者执行之前调用。依赖提供者应返回一个对象,以便容器将其注入到工作者实例中。 .. py:method:: worker_result(worker_ctx, result=None, exc_info=None) 在服务工作者执行结果时调用。 需要处理结果的依赖项应在此处进行处理。此方法在任何工作者完成时会被调用所有 `Dependency` 实例。 示例:数据库会话依赖项可能会刷新事务。 :Parameters: worker_ctx : :class:`~nameko.containers.WorkerContext` 见 :meth:`~nameko.containers.ServiceContainer.spawn_worker` .. py:method:: worker_setup(worker_ctx) 在服务工作者执行任务之前调用。 依赖项应在此处进行任何预处理,如果失败则引发异常。 Example: ... :Parameters: worker_ctx : :class:`~nameko.containers.WorkerContext` 见 :meth:`~nameko.containers.ServiceContainer.spawn_worker` .. py:method:: worker_teardown(worker_ctx) 在服务工作者执行完任务后调用。 依赖项应在此处进行任何后处理,如果失败则引发异常。 示例:数据库会话依赖项可能会提交会话。 :Parameters: worker_ctx : :class:`~nameko.containers.WorkerContext` 见 :meth:`~nameko.containers.ServiceContainer.spawn_worker` .. py:method:: __repr__() .. py:class:: ProviderCollector(*args, **kwargs) Bases: :py:obj:`object` .. py:attribute:: _providers .. py:attribute:: _providers_registered :value: False .. py:attribute:: _last_provider_unregistered .. py:method:: register_provider(provider) .. py:method:: unregister_provider(provider) .. py:method:: wait_for_providers() 等待与收集器注册的任何提供者注销。 如果没有提供者被注册,则立即返回。 .. py:method:: stop() 使用 `ProviderCollector` 作为混入类的子类的默认 `:meth:Extension.stop()` 实现。 .. py:function:: register_entrypoint(fn, entrypoint) .. py:class:: Entrypoint(expected_exceptions=(), sensitive_arguments=(), **kwargs) Bases: :py:obj:`Extension` 入口点封装类 :Parameters: expected_exceptions : 异常类或异常类元组 指定可能由调用者引起的异常(例如,通过提供错误的参数)。 保存在入口点实例中作为 ``entrypoint.expected_exceptions``,供其他扩展(例如监控系统)后续检查。 sensitive_arguments : 字符串或字符串元组 将参数或参数的一部分标记为敏感。保存在入口点实例中作为 ``entrypoint.sensitive_arguments``, 供其他扩展(例如日志系统)后续检查。 :seealso: :func:`nameko.utils.get_redacted_args` .. py:attribute:: method_name :value: None 记录了RPC调用的方法名称 .. py:attribute:: sensitive_variables .. py:attribute:: expected_exceptions .. py:attribute:: sensitive_arguments .. py:method:: bind(container, method_name) 获取此入口点的实例,以便与 `method_name` 绑定到 `container`。 .. py:method:: check_signature(args, kwargs) .. py:method:: decorator(*args, **kwargs) :classmethod: .. py:method:: __repr__() .. py:function:: is_extension(obj: Any) .. py:function:: is_dependency(obj: Any) .. py:function:: is_entrypoint(obj: Any) .. py:function:: iter_extensions(extension) 对 `extension` 的子扩展进行深度优先迭代器。