31 lines
999 B
Python
31 lines
999 B
Python
import pickle
|
|
from pathlib import Path
|
|
|
|
from diceplayer.config import PlayerConfig
|
|
from diceplayer.environment import System
|
|
from diceplayer.logger import logger
|
|
from diceplayer.state.state_model import StateModel
|
|
|
|
|
|
class StateHandler:
|
|
def __init__(self, sim_dir: Path, state_file: str = "state.pkl"):
|
|
self._state_file = sim_dir / state_file
|
|
|
|
def get_state(self, config: PlayerConfig) -> StateModel | None:
|
|
if not self._state_file.exists():
|
|
return None
|
|
|
|
with self._state_file.open(mode="r") as f:
|
|
data = pickle.load(f)
|
|
|
|
model = StateModel.model_validate(data)
|
|
|
|
if hash(model.config) != hash(config):
|
|
logger.warning("The configuration in the state file does not match the provided configuration.")
|
|
return None
|
|
|
|
return model
|
|
|
|
def save_state(self, state: StateModel) -> None:
|
|
with self._state_file.open(mode="wb") as f:
|
|
pickle.dump(state.model_dump(), f) |