Декоратор метода класса - получить аргументы для функции, изменить и передать дальше в функцию
Я ещё нуб в питоне, если вопрос покажется смешным, но разобраться не могу и ответа ни здесь ни вообще так и не нашел
Пишу класс ActivkaBackup() в котором есть несколько методов обращающихся к FTP серверам (получение списка файлов, списка файлов по фильтру, содержимого файла и т.п.) использую ftplib.FTP для подключения требуется host,user,passwd,acct но у меня 2 сервера, основной и резервный, разные хосты разные учетки. получаю их из ini файла при инициализации объекта класса
self.main_backup_server['ftp_user'] = myini.main_backup_server['user']
self.second_backup_server['ftp_user'] = myini.second_backup_server['user']
если методы в общем случае имеют вид someMetods(self, *args, **kwargs)
как сделать декоратор, который бы проверял, существует ли kwargs['second'] = True
в зависимости от этого добавлял в kwargs необходимые элементы и вызывал бы someMetods(self, *args, **kwargs)
с уже обновленными kwargs.
Написал декоратор:
def _set_ftp_var(func):
def wrapper(*args, **kwargs):
if kwargs.get('second'):
kwargs['host'] = self.second_backup_server['name']
kwargs['user'] = self.second_backup_server['ftp_user']
kwargs['passwd'] = self.second_backup_server['ftp_password']
kwargs['ftp_root'] = self.second_backup_server['ftp_root']
else:
kwargs['host'] = self.main_backup_server['name']
kwargs['user'] = self.main_backup_server['ftp_user']
kwargs['passwd'] = self.main_backup_server['ftp_password']
kwargs['ftp_root'] = self.main_backup_server['ftp_root']
return func(self, *args, **kwargs)
return wrapper()
но это неправильный код, в умных книгах примеры создания декоратора с передачей ему каких то параметров, а я хочу создать декоратор, который бы "копался" в параметрах оборачиваемой им функции и еще и дополнял их. А еще где его разместить, внутри класса или снаружи? Если снаружи, как ему self передать?
Буду признателен за любую мысль или ссылку на нее.