【问题标题】:initialize logger in class to use in retry decorator在类中初始化记录器以在重试装饰器中使用
【发布时间】:2020-02-13 07:36:18
【问题描述】:

我正在编写一个数据库客户端,我想在重试装饰器中使用特定的记录器:

import pandas as pd
from retry import retry
from set_up.SetUp import set_logging, set_up_environment, get_retry_parameters


class DBClient:
    def __init__(self):
        self.log = set_logging()
        self.connection = set_up_environment()
        self.tries,self.delay = get_retry_parameters()

    @retry(tries=tries, delay=delay, logger=log)
    def get_artist_table(self):

是否有可能使用我在重试装饰器中实例化类的变量(它是一个外部库)。

【问题讨论】:

    标签: python unit-testing mocking decorator


    【解决方案1】:

    使用 retry_call 代替重试。这应该足以满足您的要求。 https://github.com/invl/retry/blob/master/retry/api.py#L79

    import pandas as pd
    from set_up.SetUp import set_logging, set_up_environment, get_retry_parameters
    from retry.api import retry_call
    
    def retrydecorator(func):
        def inner(self, *fargs, **fkwargs):
            result = retry_call(func, fargs=(self,)+fargs, fkwargs=fkwargs, tries=self.tries, delay=self.delay, logger=self.log)
            return result
        return inner
    
    class DBClient:
        def __init__(self):
            self.log = set_logging()
            self.connection = set_up_environment()
            self.tries,self.delay = get_retry_parameters()
    
        @retrydecorator
        def get_artist_table(self):
            pass
    

    【讨论】:

    • 非常感谢,这就像一个魅力,我只是无法将我的头包裹起来,但你救了我!
    猜你喜欢
    • 2014-03-15
    • 1970-01-01
    • 2013-03-17
    • 2023-04-08
    • 2019-09-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    相关资源
    最近更新 更多