diff --git a/advlabdb/advlabdb_independent_funs.py b/advlabdb/advlabdb_independent_funs.py index df32ade..072d9c8 100644 --- a/advlabdb/advlabdb_independent_funs.py +++ b/advlabdb/advlabdb_independent_funs.py @@ -18,8 +18,17 @@ def parse_bool(str): raise ValueError(f'Can not parse a bool from "{str}"') +def deep_getattr(object, composed_name): + names = composed_name.split(".") + attr = getattr(object, names[0]) + for name in names[1:]: + attr = getattr(attr, name) + + return attr + + def missing_formatter(view, context, model, name): - attr = getattr(model, name) + attr = deep_getattr(model, name) if attr is None: return Markup("MISSING") @@ -27,8 +36,16 @@ def missing_formatter(view, context, model, name): def str_without_semester_formatter(view, context, model, name): - attr = getattr(model, name) + attr = deep_getattr(model, name) if attr is not None: return attr.str_without_semester() return attr + + +def str_formatter(view, context, model, name): + attr = deep_getattr(model, name) + if attr is not None: + return attr.str() + + return attr