38 lines
1.9 KiB
Python
38 lines
1.9 KiB
Python
from typing import Optional
|
|
from dataclasses import dataclass
|
|
|
|
from frostfs_sdk.client.utils.session_cache import SessionToken
|
|
from frostfs_sdk.cryptography.signer import Signer
|
|
from frostfs_sdk.models.mappers.session_mapper import SessionMapper
|
|
from frostfs_sdk.models.mappers.owner_id_mapper import OwnerIdMapper
|
|
from frostfs_sdk.client.models.client_environment import ClientEnvironment
|
|
from frostfs_sdk.client.services.context_accessor import ContextAccessor
|
|
from frostfs_sdk.client.utils.request_constructor import RequestConstructor
|
|
from frostfs_sdk.client.parameters.call_context_param import CallContextParam
|
|
from frostfs_sdk.client.parameters.create_session_param import CreateSessionParam
|
|
|
|
from frostfs_sdk.protos.models.session import service_pb2_grpc as service_pb2_grpc_session
|
|
from frostfs_sdk.protos.models.session import service_pb2 as service_pb2_session
|
|
from frostfs_sdk.protos.models.session import types_pb2 as types_pb2_session
|
|
|
|
|
|
class SessionClient(ContextAccessor):
|
|
def __init__(self, client_environment: ClientEnvironment):
|
|
super().__init__(client_environment)
|
|
self.session_stub = service_pb2_grpc_session.SessionServiceStub(client_environment.channel)
|
|
|
|
def create_session(self, param: CreateSessionParam, ctx: CallContextParam) -> SessionToken:
|
|
body = service_pb2_session.CreateRequest.Body(
|
|
owner_id=OwnerIdMapper.to_grpc_message(self.get_context.owner_id),
|
|
expiration=param.expiration
|
|
)
|
|
request = service_pb2_session.CreateRequest(
|
|
body=body
|
|
)
|
|
RequestConstructor.add_meta_header(request, None, None)
|
|
signed_request = Signer.sign_message(self.get_context.ecdsa.private_key, request)
|
|
response: service_pb2_session.CreateResponse = self.session_stub.Create(request)
|
|
|
|
session_token_grpc = types_pb2_session.SessionToken(response.body)
|
|
token = SessionMapper.serialize(session_token_grpc)
|
|
return SessionToken(token=token)
|