from pathlib import Path
from bluebase.core import (
dump,
assignment,
)
from bluebase.pf import (
PfPageHeader,
PfManager,
)
from .error import RmInvalidRecordSizeError
from .page import (
RmPageHeader,
RmPageBitmap,
)
from .file import RmFile
__all__ = (
'RmManager',
)
[docs]
class RmManager:
"""
A manager for the `RM <bluebase.rm>` component.
Attributes:
pf:
"""
pf: PfManager
def __repr__(self) -> str: # pragma: no cover
return f"RmManager({dump(pf=self.pf)})"
def __init__(self, pf: PfManager | None = None) -> None:
self.pf = pf or PfManager()
[docs]
def calc_record_capacity(self, record_size: int) -> int:
"""
"""
capacity = 0
while True:
estimate = sum((
PfPageHeader.size,
RmPageHeader.size,
RmPageBitmap.calc_size(capacity=capacity + 1),
(capacity + 1) * record_size,
))
if estimate > self.pf.page_size:
break
capacity += 1
return capacity
[docs]
@assignment
def create_file(self, path: Path, record_size: int) -> None:
"""
Raises:
RmInvalidRecordSizeError:
"""
raise NotImplementedError
[docs]
@assignment
def destroy_file(self, path: Path) -> None:
"""
"""
raise NotImplementedError
[docs]
@assignment
def open_file(self, path: Path) -> RmFile:
"""
"""
raise NotImplementedError
[docs]
@assignment
def close_file(self, file: RmFile) -> None:
"""
"""
raise NotImplementedError