Python — функция повтора
В коде у меня есть много вызовов функций, которые выполняют другую задачу на удаленной БД, в случае, если я запускаю вызов, который в некоторых случаях возвращает код как http code = 202 ("принятие"), поэтому также требуется, чтобы задача была выполнена вызов другой функции в режиме "повторить попытку",
Код:
class Trg:
def __init__(self, **kwargs):
self.__dict__.update(kwargs)
self.kwargs = kwargs
self.trg_cb_connention = Cluster("http://"+ self._checkIfIP(self.TARGET_CB_DB)+ ":8091",ClusterOptions(PasswordAuthenticator(self.TARGET_USER,self.TARGET_PASSWORD)))
.....
.....
def _ConnectToBucket(self):
try:
bucket = self.trg_cb_connention.bucket(self.trg_bucket_name)
#means bucket exist ,otherwise create
return True
except Exception as e:
#bucket not exist ,creating
self._CreateBucket()
def _CreateBucket(self):
try:
self.bm = self.trg_cb_connention.buckets()
response = self.bm.create_bucket(CreateBucketSettings(name=self.trg_bucket_name, bucket_type="couchbase", ram_quota_mb=100))
if response.http_status == 202: #acepected
#means "acepected:"
#now call to function which validate the bucket created
self.retry_call(self._CheckBucketCreated())
else:
print("to check:",response)
def retry_call(function_name, args=None, kwargs=None, retries=300):
pass_on_args = args if args else []
pass_on_kwargs = kwargs if kwargs else {}
for index in range(1, retries+1):
try:
return function_name(*pass_on_args, **pass_on_kwargs)
except Exception as error:
if index == retries:
print("Failed %s attempts at calling: %s", retries, function_name)
raise
else:
print("Failed %d attempt(s) at calling: %s", index, function_name)
print("Retrying")
это не удалось для:
Failed %d attempt(s) at calling: %s 1 MIG_ilceosp089
....
.......
........
Retrying
Failed %s attempts at calling: %s 300 MIG_ilceosp089
Error 'Trg' object is not callable
во-первых, почему это не удается? второе - не уверен, что я делаю это правильно, и мне любопытно, как правильно выполнить такую операцию.