def apply_func(monad): return monad.result def monad_constructor(f): """ type constructor 1. log 2. build monad type """ LOG = "Function: {func_name}, Status: {status}, Message: {message}" APPLY_FUNC = apply_func message = "testing message." @functools.wraps(f) def wrap(*args, **kargs): try: result = f(*args, **kargs) if result: wrap.result = result wrap.success = True wrap.status = "OK." else: wrap.result = None wrap.success = False wrap.status = "Failed." except Exception as e: wrap.result = str(e) wrap.success = False wrap.status = "Failed." finally: wrap.apply = APPLY_FUNC wrap.log_msg = LOG.format( func_name=f.__name__, status=wrap.status, message=message) return wrap
@monad_constructor def none_func(): """None function :return: bool """ return True @monad_constructor def set_log(monad): """Setup log :param monad: function as monad :return: bool """ raise Exception("set log failed") @monad_constructor def access_xen(monad): return auth_info @monad_constructor def check_xen_status(monad): xen_auth = monad.apply(monad) #... def main(): none_func() set_log(none_func) access_xen(set_log) check_xen_status(access_xen) if __name__ == "__main__": try: main() except KeyboardInterrupt: exit(1)
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.