frostfs-sdk-python/frostfs_sdk/models/mappers/replica_mapper.py
Ilyas Niyazov 297e107b10 [#3] Added generate proto script create container method
Signed-off-by: Ilyas Niyazov <i.niyazov@yadro.com>
2025-03-25 11:13:48 +03:00

56 lines
1.6 KiB
Python

from typing import List, Optional
from frostfs_sdk.models.dto.replica import Replica
from frostfs_sdk.protos.models.netmap import types_pb2 as types_pb2_netmap
class ReplicaMapper:
@staticmethod
def to_grpc_messages(replicas: List[Replica]) -> Optional[List[types_pb2_netmap.Replica]]:
if not replicas:
return None
return [ReplicaMapper.to_grpc_message(selector) for selector in replicas]
@staticmethod
def to_grpc_message(replica: Replica) -> Optional[types_pb2_netmap.Replica]:
"""
Converts Replica DTO to gRPC message
Args:
replice: Replica DTO object
Returns:
gRPC Replica message
"""
if not replica:
return None
return types_pb2_netmap.Replica(
count=replica.count,
selector=replica.selector
)
@staticmethod
def to_models(grpc_replicas: List[types_pb2_netmap.Replica]) -> Optional[List[Replica]]:
if not grpc_replicas:
return None
return [ReplicaMapper.to_model(grpc_replica) for grpc_replica in grpc_replicas]
@staticmethod
def to_model(grpc_replica: types_pb2_netmap.Replica) -> Optional[Replica]:
"""
Converts gRPC message to Replica DTO
Args:
grpc_replica: gRPC Replica message
Returns:
Replica DTO object
"""
if not grpc_replica or grpc_replica.ByteSize() == 0:
return None
return Replica(
count=grpc_replica.count,
selectors=grpc_replica.selector
)