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").
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): Версия проекта.
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
.