perxis.channel

Этот модуль предоставляет класс для создания защищенного gRPC-соединения.

Основные компоненты:

  • GrpcChannel — создание и управление защищенным gRPC-соединением.
  • get_grpc_channel — фабричная функция для создания экземпляра GrpcChannel.
  1"""
  2Этот модуль предоставляет класс для создания защищенного gRPC-соединения.
  3
  4### Основные компоненты:
  5- [`GrpcChannel`](#GrpcChannel) — создание и управление защищенным gRPC-соединением.
  6- [`get_grpc_channel`](#get_grpc_channel) — фабричная функция для создания экземпляра [`GrpcChannel`](#GrpcChannel).
  7"""
  8
  9import grpc
 10
 11from perxis.auth import APIKeyPlugin
 12
 13
 14class GrpcChannel:
 15    """Класс для создания защищенного gRPC-соединения.
 16
 17    Attributes:
 18        call_credentials (grpc.CallCredentials): gRPC-учетные данные для вызова.
 19        channel_credentials (grpc.ChannelCredentials): gRPC-учетные данные канала.
 20        composite_credentials (grpc.ChannelCredentials): Комбинированные учетные данные.
 21        channel (grpc.Channel | None): Активный gRPC-канал или None, если соединение не установлено.
 22    """
 23
 24    call_credentials: grpc.CallCredentials
 25    channel_credentials: grpc.ChannelCredentials
 26    composite_credentials: grpc.ChannelCredentials
 27    channel: grpc.Channel | None = None
 28
 29    def __init__(
 30        self,
 31        target: str,
 32        metadata_plugin: grpc.AuthMetadataPlugin,
 33        project_name: str,
 34        project_version: str,
 35        call_credentials_name: str = "api-key",
 36    ) -> None:
 37        """Создает новый экземпляр и устанавливает соединение.
 38
 39        Arguments:
 40            target (str): Адрес gRPC-сервера.
 41            metadata_plugin (grpc.AuthMetadataPlugin): Плагин аутентификации.
 42            project_name (str): Название проекта.
 43            project_version (str): Версия проекта.
 44            call_credentials_name (str): Название плагина (по умолчанию "api-key").
 45        """
 46        self.target = target
 47        self.metadata_plugin = metadata_plugin
 48        self.call_credentials_name = call_credentials_name
 49        self._init_credentials()
 50        self.connect(project_name, project_version)
 51
 52    def _init_credentials(self) -> None:
 53        """Инициализирует учетные данные для gRPC-соединения."""
 54        self.call_credentials = grpc.metadata_call_credentials(
 55            self.metadata_plugin, name=self.call_credentials_name
 56        )
 57        self.channel_credentials = grpc.ssl_channel_credentials()
 58        self.composite_credentials = grpc.composite_channel_credentials(
 59            self.channel_credentials, self.call_credentials
 60        )
 61
 62    def connect(self, project_name: str, project_version: str) -> None:
 63        """Устанавливает защищенное соединение с gRPC-сервером.
 64
 65        Arguments:
 66            project_name (str): Название проекта.
 67            project_version (str): Версия проекта.
 68        """
 69        if not self.channel:
 70            self.channel = grpc.aio.secure_channel(
 71                self.target,
 72                self.composite_credentials,
 73                options=(
 74                    ("grpc.primary_user_agent", f"{project_name}/{project_version}"),
 75                ),
 76            )
 77
 78    async def close(self) -> None:
 79        """Закрывает активное gRPC-соединение."""
 80        await self.channel.close()
 81
 82
 83def get_grpc_channel(
 84    target: str, api_key: str, project_name: str, project_version: str
 85) -> GrpcChannel:
 86    """Создает и возвращает новый экземпляр [`GrpcChannel`](#GrpcChannel).
 87
 88    Arguments:
 89        target (str): Адрес gRPC-сервера.
 90        api_key (str): API-ключ для аутентификации.
 91        project_name (str): Название проекта.
 92        project_version (str): Версия проекта.
 93    Returns:
 94        GrpcChannel: Новый экземпляр [`GrpcChannel`](#GrpcChannel).
 95    """
 96    return GrpcChannel(
 97        target=target,
 98        metadata_plugin=APIKeyPlugin(token=api_key),
 99        project_name=project_name,
100        project_version=project_version,
101    )
class GrpcChannel:
15class GrpcChannel:
16    """Класс для создания защищенного gRPC-соединения.
17
18    Attributes:
19        call_credentials (grpc.CallCredentials): gRPC-учетные данные для вызова.
20        channel_credentials (grpc.ChannelCredentials): gRPC-учетные данные канала.
21        composite_credentials (grpc.ChannelCredentials): Комбинированные учетные данные.
22        channel (grpc.Channel | None): Активный gRPC-канал или None, если соединение не установлено.
23    """
24
25    call_credentials: grpc.CallCredentials
26    channel_credentials: grpc.ChannelCredentials
27    composite_credentials: grpc.ChannelCredentials
28    channel: grpc.Channel | None = None
29
30    def __init__(
31        self,
32        target: str,
33        metadata_plugin: grpc.AuthMetadataPlugin,
34        project_name: str,
35        project_version: str,
36        call_credentials_name: str = "api-key",
37    ) -> None:
38        """Создает новый экземпляр и устанавливает соединение.
39
40        Arguments:
41            target (str): Адрес gRPC-сервера.
42            metadata_plugin (grpc.AuthMetadataPlugin): Плагин аутентификации.
43            project_name (str): Название проекта.
44            project_version (str): Версия проекта.
45            call_credentials_name (str): Название плагина (по умолчанию "api-key").
46        """
47        self.target = target
48        self.metadata_plugin = metadata_plugin
49        self.call_credentials_name = call_credentials_name
50        self._init_credentials()
51        self.connect(project_name, project_version)
52
53    def _init_credentials(self) -> None:
54        """Инициализирует учетные данные для gRPC-соединения."""
55        self.call_credentials = grpc.metadata_call_credentials(
56            self.metadata_plugin, name=self.call_credentials_name
57        )
58        self.channel_credentials = grpc.ssl_channel_credentials()
59        self.composite_credentials = grpc.composite_channel_credentials(
60            self.channel_credentials, self.call_credentials
61        )
62
63    def connect(self, project_name: str, project_version: str) -> None:
64        """Устанавливает защищенное соединение с gRPC-сервером.
65
66        Arguments:
67            project_name (str): Название проекта.
68            project_version (str): Версия проекта.
69        """
70        if not self.channel:
71            self.channel = grpc.aio.secure_channel(
72                self.target,
73                self.composite_credentials,
74                options=(
75                    ("grpc.primary_user_agent", f"{project_name}/{project_version}"),
76                ),
77            )
78
79    async def close(self) -> None:
80        """Закрывает активное gRPC-соединение."""
81        await self.channel.close()

Класс для создания защищенного gRPC-соединения.

Attributes:
  • call_credentials (grpc.CallCredentials): gRPC-учетные данные для вызова.
  • channel_credentials (grpc.ChannelCredentials): gRPC-учетные данные канала.
  • composite_credentials (grpc.ChannelCredentials): Комбинированные учетные данные.
  • channel (grpc.Channel | None): Активный gRPC-канал или None, если соединение не установлено.
GrpcChannel( target: str, metadata_plugin: grpc.AuthMetadataPlugin, project_name: str, project_version: str, call_credentials_name: str = 'api-key')
30    def __init__(
31        self,
32        target: str,
33        metadata_plugin: grpc.AuthMetadataPlugin,
34        project_name: str,
35        project_version: str,
36        call_credentials_name: str = "api-key",
37    ) -> None:
38        """Создает новый экземпляр и устанавливает соединение.
39
40        Arguments:
41            target (str): Адрес gRPC-сервера.
42            metadata_plugin (grpc.AuthMetadataPlugin): Плагин аутентификации.
43            project_name (str): Название проекта.
44            project_version (str): Версия проекта.
45            call_credentials_name (str): Название плагина (по умолчанию "api-key").
46        """
47        self.target = target
48        self.metadata_plugin = metadata_plugin
49        self.call_credentials_name = call_credentials_name
50        self._init_credentials()
51        self.connect(project_name, project_version)

Создает новый экземпляр и устанавливает соединение.

Arguments:
  • target (str): Адрес gRPC-сервера.
  • metadata_plugin (grpc.AuthMetadataPlugin): Плагин аутентификации.
  • project_name (str): Название проекта.
  • project_version (str): Версия проекта.
  • call_credentials_name (str): Название плагина (по умолчанию "api-key").
call_credentials: grpc.CallCredentials
channel_credentials: grpc.ChannelCredentials
composite_credentials: grpc.ChannelCredentials
channel: grpc.Channel | None = None
target
metadata_plugin
call_credentials_name
def connect(self, project_name: str, project_version: str) -> None:
63    def connect(self, project_name: str, project_version: str) -> None:
64        """Устанавливает защищенное соединение с gRPC-сервером.
65
66        Arguments:
67            project_name (str): Название проекта.
68            project_version (str): Версия проекта.
69        """
70        if not self.channel:
71            self.channel = grpc.aio.secure_channel(
72                self.target,
73                self.composite_credentials,
74                options=(
75                    ("grpc.primary_user_agent", f"{project_name}/{project_version}"),
76                ),
77            )

Устанавливает защищенное соединение с gRPC-сервером.

Arguments:
  • project_name (str): Название проекта.
  • project_version (str): Версия проекта.
async def close(self) -> None:
79    async def close(self) -> None:
80        """Закрывает активное gRPC-соединение."""
81        await self.channel.close()

Закрывает активное gRPC-соединение.

def get_grpc_channel( target: str, api_key: str, project_name: str, project_version: str) -> GrpcChannel:
 84def get_grpc_channel(
 85    target: str, api_key: str, project_name: str, project_version: str
 86) -> GrpcChannel:
 87    """Создает и возвращает новый экземпляр [`GrpcChannel`](#GrpcChannel).
 88
 89    Arguments:
 90        target (str): Адрес gRPC-сервера.
 91        api_key (str): API-ключ для аутентификации.
 92        project_name (str): Название проекта.
 93        project_version (str): Версия проекта.
 94    Returns:
 95        GrpcChannel: Новый экземпляр [`GrpcChannel`](#GrpcChannel).
 96    """
 97    return GrpcChannel(
 98        target=target,
 99        metadata_plugin=APIKeyPlugin(token=api_key),
100        project_name=project_name,
101        project_version=project_version,
102    )

Создает и возвращает новый экземпляр GrpcChannel.

Arguments:
  • target (str): Адрес gRPC-сервера.
  • api_key (str): API-ключ для аутентификации.
  • project_name (str): Название проекта.
  • project_version (str): Версия проекта.
Returns:

GrpcChannel: Новый экземпляр GrpcChannel.