Source code for steplib.modules.io.context

"""IOContext: per-scenario state for the io module (files, JSON, CSV)."""

from __future__ import annotations

import csv
from dataclasses import dataclass, field
from typing import Any, TextIO


[docs] @dataclass class IOContext: """Holds all io-module state for a scenario. Lives at ``context.steplib.io`` and is reset between scenarios. Attributes: variables: User-defined variables stored by file steps. _last_json: The last parsed JSON value (dict or list). _csv_writer: Active CSV writer instance, if any. _csv_file: Underlying file handle for the CSV writer, if any. """ variables: dict[str, Any] = field(default_factory=dict) _last_json: Any = None _csv_writer: csv.DictWriter[str] | None = None _csv_file: TextIO | None = None
[docs] def reset(self) -> None: """Reset per-scenario state, closing any open CSV writer.""" self.variables = {} self._last_json = None self._close_csv() self._csv_writer = None self._csv_file = None
[docs] def cleanup(self) -> None: """Clean up resources after the scenario.""" self._close_csv()
def _close_csv(self) -> None: """Close the CSV file handle if open.""" if self._csv_file is not None and not self._csv_file.closed: self._csv_file.close()