12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- from view.python_core.io import read_check_yml_file
- import numpy as np
- import pathlib as pl
- class TapestryConfig(object):
- def __init__(
- self, yml_file, text_below_func, text_right_top_func=None, text_right_bottom_func=None,
- ):
- """
- :param yml_file: str, path of a yml file on the file system
- :param extra_formats: iterable of string, each representing an image extension (without the leading dot)
- :param text_below_func: a function that takes one argument - row of the measurement list for a measurement,
- and returns a string. This string will be placed below the overview frame
- :param text_right_top_func: a function that takes one argument - row of the measurement list for a measurement,
- and returns a string. This string will be placed on the top to the right of the overview. If None, the upper
- limit of the data shown in the overview image will be printed
- :param text_right_bottom_func: a function that takes one argument - row of the measurement list for
- a measurement, and returns a string. This string will be placed on the top to the right of the overview.
- If None, the lower limit of the data shown in the overview image will be printed
- """
- super().__init__()
- self.yml_file = yml_file
- self.yml_contents = read_check_yml_file(yml_file, dict)
- self.name = pl.Path(yml_file).stem
- self.text_below_func = text_below_func
- self.text_right_top_func = text_right_top_func
- self.text_right_bottom_func = text_right_bottom_func
- def iterrows(self):
- """
- Generator function
- can be used to iterate over information about rows as dictionaries
- """
- optional_entry_def = {"flags": dict,
- "extra_formats": list,
- "animal": str,
- "measus": list,
- "corresponding_movies": bool,
- "extra_movie_flags": dict}
- yml_contents_items = list(self.yml_contents.items())
- yml_keys = self.yml_contents.keys()
- assert len(yml_keys) == len(set(yml_keys)), f"In {self.yml_file}, Duplicate row names found! Please make sure" \
- f"each row has a unique name."
- first_row = yml_contents_items[0][1]
- assert "animal" in first_row, f"First row of all tapestry config files must contain the entry 'animal'." \
- f"This was not found in {self.yml_file}. Please add one!"
- assert "measus" in first_row, f"First row of all tapestry config files must contain the entry 'measus'." \
- f"This was not found in {self.yml_file}. Please add one!"
- assert len(first_row["measus"]) > 0, f"Entry 'measus' in the first row of {self.yml_file} is empty, which is " \
- f"invalid. Please add some measurement to it!"
- # check if all entries have the correct type
- for ind, (k, v) in enumerate(yml_contents_items):
- for entry, expected_type in optional_entry_def.items():
- if entry in v:
- tpye = type(v[entry])
- assert tpye is expected_type, f"Entry '{entry}' in {self.yml_file} is expected to be " \
- f"a {expected_type}. Got {tpye} instead"
- yield k, v
|