Source code for bluebase.rm.manager

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