Source code for qass.tools.analyzer.testing

import json
from dataclasses import dataclass
from pathlib import Path
from typing import Union

from .buffer_parser import InvalidFileError


[docs] @dataclass class MockBuffer: """Mock buffer class that is able to parse JSON encoded files. All attributes in the JSON are added as fields in the object. .. note:: Currently this only allows the mocking of header attributes Creating a Mock Metadata Object:: # This object can either be created using the constructor from qass.tools.analyzer.testing import MockBuffer buffer = MockBuffer("/my/path/to/file", header_hash="0", process=1) Loading a file:: # By writing the desired attributes to a json file import json from pathlib import Path from qass.tools.analyzer.testing import MockBuffer file = Path("testfile.json") with open("file", "w") as f: json.dump({"header_hash": "0", "process": 1}) buffer = MockBuffer(file) # this step will load the json file into the dataclass with buffer: pass """ def __init__(self, filepath: Union[Path, str], **kwargs): self.filepath = filepath for key, value in kwargs.items(): setattr(self, key, value) def __enter__(self): """ Opens the file specified by ``self.filepath``, parses its JSON content, and populates the instance attributes with the loaded data. All key-value pairs from the JSON file are dynamically set as attributes on this instance. :returns: The instance itself with attributes populated from the file. :rtype: self :raises InvalidFileError: If the file is not a valid Buffer JSON file. :raises FileNotFoundError: If the specified filepath does not exist. :raises PermissionError: If there are insufficient permissions to read the file. .. note:: This method is automatically called when entering a ``with`` statement. .. code-block:: python :linenos: with BufferObject() as buffer: # buffer attributes are now loaded from file print(buffer.data) """ with open(self.filepath, "r") as f: try: data = json.load(f) except Exception: raise InvalidFileError("Not a Buffer file") for key, value in data.items(): setattr(self, key, value) return self def __exit__(self, *args, **kwargs): pass