[#3] Added generate proto script create container method
Signed-off-by: Ilyas Niyazov <i.niyazov@yadro.com>
This commit is contained in:
parent
fba6eaaa9c
commit
d2e0c80f7c
16 changed files with 348 additions and 51 deletions
|
@ -1,37 +1,38 @@
|
|||
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
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class SessionToken:
|
||||
token: bytes
|
||||
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 SessionCache:
|
||||
def __init__(self, session_expiration_duration):
|
||||
self.cache = {}
|
||||
self.token_duration = session_expiration_duration
|
||||
self.current_epoch = 0
|
||||
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)
|
||||
|
||||
def contains(self, key):
|
||||
return key in self.cache
|
||||
|
||||
def try_get_value(self, key):
|
||||
if not key:
|
||||
return None
|
||||
return self.cache.get(key)
|
||||
|
||||
|
||||
def set_value(self, key, value):
|
||||
if key is not None:
|
||||
self.cache[key] = value
|
||||
|
||||
def delete_by_prefix(self, prefix):
|
||||
# Collect keys to avoid modifying dictionary during iteration
|
||||
keys_to_delete = [key for key in self.cache if key.startswith(prefix)]
|
||||
for key in keys_to_delete:
|
||||
del self.cache[key]
|
||||
|
||||
@staticmethod
|
||||
def form_cache_key(address: str, key: str):
|
||||
return address + key
|
||||
session_token_grpc = types_pb2_session.SessionToken(response.body)
|
||||
token = SessionMapper.serialize(session_token_grpc)
|
||||
return SessionToken(token=token)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue