[#3] Added generate proto script create container method
Signed-off-by: Ilyas Niyazov <i.niyazov@yadro.com>
This commit is contained in:
parent
19282f13cc
commit
297e107b10
52 changed files with 1380 additions and 74 deletions
29
frostfs_sdk/models/dto/container.py
Normal file
29
frostfs_sdk/models/dto/container.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
from dataclasses import dataclass, field
|
||||
from typing import Dict, Optional
|
||||
import uuid
|
||||
|
||||
from frostfs_sdk.models.dto.owner_id import OwnerId
|
||||
from frostfs_sdk.models.dto.version import Version
|
||||
from frostfs_sdk.models.enums.basic_acl import BasicAcl
|
||||
from frostfs_sdk.models.dto.placement_policy import PlacementPolicy
|
||||
|
||||
|
||||
|
||||
@dataclass
|
||||
class Container:
|
||||
# basicAcl: BasicAcl # TODO: will remove it?
|
||||
placementPolicy: PlacementPolicy
|
||||
nonce: uuid.UUID = field(default_factory=uuid.uuid4)
|
||||
version: Optional[Version] = None
|
||||
owner_id: Optional[OwnerId] = None
|
||||
attributes: Dict[str, str] = field(default_factory=dict)
|
||||
|
||||
def __init__(self, placementPolicy: PlacementPolicy):
|
||||
self.nonce = uuid.uuid4()
|
||||
self.placementPolicy = placementPolicy
|
||||
self.attributes = {}
|
||||
|
||||
|
||||
@dataclass
|
||||
class ContainerId:
|
||||
value: str
|
14
frostfs_sdk/models/dto/filter.py
Normal file
14
frostfs_sdk/models/dto/filter.py
Normal file
|
@ -0,0 +1,14 @@
|
|||
from dataclasses import dataclass
|
||||
|
||||
from frostfs_sdk.models.enums.filter_operation import FilterOperation
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Filter:
|
||||
"""
|
||||
Data Transfer Object for Filter configuration
|
||||
"""
|
||||
name: str
|
||||
key: str
|
||||
operation: FilterOperation
|
||||
value: str
|
47
frostfs_sdk/models/dto/meta_header.py
Normal file
47
frostfs_sdk/models/dto/meta_header.py
Normal file
|
@ -0,0 +1,47 @@
|
|||
from dataclasses import dataclass
|
||||
from typing import Optional
|
||||
|
||||
from frostfs_sdk.models.dto.version import Version, DEFAULT_MAJOR_VERSION, DEFAULT_MINOR_VERSION
|
||||
|
||||
|
||||
class MetaHeader:
|
||||
def __init__(self, version=None, epoch: int = 0, ttl: int = 2):
|
||||
"""
|
||||
Initializes a MetaHeader object.
|
||||
|
||||
:param version: A Version object representing the version.
|
||||
:param epoch: An integer representing the epoch (default: 0).
|
||||
:param ttl: An integer representing the time-to-live (default: 2).
|
||||
"""
|
||||
self._version = None
|
||||
self._epoch = None
|
||||
self._ttl = None
|
||||
|
||||
# Set default values if not provided
|
||||
self.set_version(version or Version(DEFAULT_MAJOR_VERSION, DEFAULT_MINOR_VERSION))
|
||||
self.set_epoch(epoch)
|
||||
self.set_ttl(ttl)
|
||||
|
||||
def get_version(self):
|
||||
return self._version
|
||||
|
||||
def get_epoch(self):
|
||||
return self._epoch
|
||||
|
||||
def get_ttl(self):
|
||||
return self._ttl
|
||||
|
||||
def set_version(self, version):
|
||||
if version is None:
|
||||
raise ValueError(f"Input parameter is missing: {Version.__name__}")
|
||||
self._version = version
|
||||
|
||||
def set_epoch(self, epoch: int):
|
||||
if epoch < 0:
|
||||
raise ValueError("Epoch must be greater than or equal to zero")
|
||||
self._epoch = epoch
|
||||
|
||||
def set_ttl(self, ttl: int):
|
||||
if ttl <= 0:
|
||||
raise ValueError("TTL must be greater than zero")
|
||||
self._ttl = ttl
|
21
frostfs_sdk/models/dto/owner_id.py
Normal file
21
frostfs_sdk/models/dto/owner_id.py
Normal file
|
@ -0,0 +1,21 @@
|
|||
from base58 import b58decode
|
||||
from dataclasses import dataclass
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class OwnerId:
|
||||
value: str
|
||||
|
||||
def __post_init__(self):
|
||||
if not self.value or self.value.strip() == "":
|
||||
raise ValueError(f"{self.__class__.__name__} value is not present")
|
||||
|
||||
def to_hash(self) -> bytes:
|
||||
"""Decodes the Base58-encoded value into a byte array."""
|
||||
try:
|
||||
return b58decode(self.value)
|
||||
except Exception as e:
|
||||
raise ValueError(f"Failed to decode Base58 value: {self.value}") from e
|
||||
|
||||
def __str__(self) -> str:
|
||||
return self.value
|
14
frostfs_sdk/models/dto/placement_policy.py
Normal file
14
frostfs_sdk/models/dto/placement_policy.py
Normal file
|
@ -0,0 +1,14 @@
|
|||
from dataclasses import dataclass
|
||||
from typing import List
|
||||
|
||||
from frostfs_sdk.models.dto.replica import Replica
|
||||
from frostfs_sdk.models.dto.selector import Selector
|
||||
from frostfs_sdk.models.dto.filter import Filter
|
||||
|
||||
@dataclass
|
||||
class PlacementPolicy:
|
||||
replicas: List[Replica]
|
||||
unique: bool
|
||||
backup_factory: int
|
||||
filters: List[Filter] = None
|
||||
selectors: List[Selector] = None
|
12
frostfs_sdk/models/dto/replica.py
Normal file
12
frostfs_sdk/models/dto/replica.py
Normal file
|
@ -0,0 +1,12 @@
|
|||
from dataclasses import dataclass, field
|
||||
|
||||
|
||||
EMPTY_STRING = ""
|
||||
|
||||
@dataclass
|
||||
class Replica:
|
||||
count: int
|
||||
selector: str = field(default=EMPTY_STRING)
|
||||
|
||||
def __post_init__(self):
|
||||
self.selector = self.selector if self.selector else EMPTY_STRING
|
15
frostfs_sdk/models/dto/selector.py
Normal file
15
frostfs_sdk/models/dto/selector.py
Normal file
|
@ -0,0 +1,15 @@
|
|||
from dataclasses import dataclass
|
||||
|
||||
from frostfs_sdk.models.enums.selector_clause import SelectorClause
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Selector:
|
||||
"""
|
||||
Data Transfer Object for Selector configuration
|
||||
"""
|
||||
name: str
|
||||
count: int
|
||||
clause: SelectorClause
|
||||
attribute: str
|
||||
filter: str
|
19
frostfs_sdk/models/dto/version.py
Normal file
19
frostfs_sdk/models/dto/version.py
Normal file
|
@ -0,0 +1,19 @@
|
|||
from dataclasses import dataclass
|
||||
|
||||
DEFAULT_MAJOR_VERSION = 2
|
||||
DEFAULT_MINOR_VERSION = 13
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class Version:
|
||||
major: int = DEFAULT_MAJOR_VERSION
|
||||
minor: int = DEFAULT_MINOR_VERSION
|
||||
|
||||
def __str__(self) -> str:
|
||||
return f"v{self.major}.{self.minor}"
|
||||
|
||||
def is_supported(self, other):
|
||||
if not isinstance(other, Version):
|
||||
return False
|
||||
return self.major == other.major
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue