decorators.py 499 Bytes
def always_as_child(fn):
    """ 
        Tries to run child model method if relevant
        should be applied on KnowsChild child class
    """
    def f(self, *args, **kwargs):
        child_self = self.as_child()
        f_parent = getattr(self.__class__, fn.__name__)
        f_child = getattr(child_self.__class__, fn.__name__)

        if f_parent != f_child:
            return f_child(child_self, *args, **kwargs)
        else:
            return fn(self, *args, **kwargs)
    
    return f