from dataclasses import dataclass, make_dataclass, field, MISSING def fields(raw_class): return [v for k, v in raw_class.__dict__.items() if k[:2] != "__" and k[-2:] != "__"] @dataclass class ColumnContent: name: str type: str displayed_by_default: bool hidden: bool = False never_hidden: bool = False def cc(name: str, typ: str, displayed: bool, hidden: bool = False, never_hidden: bool = False): # helper that returns a dataclasses Field with a default_factory return field(default_factory=lambda: ColumnContent(name, typ, displayed, hidden, never_hidden)) auto_eval_column_dict = [ ("eval_name", ColumnContent, cc("Eval Name", "str", True)), ("result_name", ColumnContent, cc("Result Name", "str", False)), ("date", ColumnContent, cc("Submission Date", "str", True)), ("miou", ColumnContent, cc("mIoU ⬆️", "number", True)), ("accuracy", ColumnContent, cc("Accuracy ⬆️", "number", False)), ] AutoEvalColumn = make_dataclass("AutoEvalColumn", auto_eval_column_dict, frozen=True) def col(field_name: str) -> ColumnContent: f = AutoEvalColumn.__dataclass_fields__[field_name] if f.default is not MISSING: return f.default return f.default_factory() COLS = [ col(fname).name for fname in AutoEvalColumn.__dataclass_fields__.keys() if not col(fname).hidden ]