Пытаясь обернуть голову вокруг декораторов в Python
Я пытаюсь написать класс, который содержит 2 функции:
- Функция, которая принимает pandas DataFrame в качестве аргумента изаписывает его в текстовый файл, используя табуляцию.
def text_file(filename, df):
table = tabulate(filename, tablefmt="grid", headers=df.columns)
with open(filename, 'w') as f:
f.write(table)
Функция для загрузки файлов в Slack и удаления ее через 5 секунд
slack = Slacker(api_token)
def upload(func):
@functools.wraps(func)
def upload_wrapper(*args, **kwargs):
slack.files.upload(file,
channels=channel,
title=head,
initial_comment=comment)
time.sleep(5)
os.remove(file)
return upload_wrapper(*args, **kwargs)
Меня смущает понимание того, как использовать декораторы и как использовать args и kwargs.
Конечный результат моей структуры будет выглядеть примерно так:
from slacker import Slacker
from tabulate import tabulate
import functools
import time, os
class Slack:
def __init__(self, api_token, channel):
self.Slacker = Slacker(api_token)
self.channel = channel
@functools.wraps(func)
def upload(func):
def upload_wrapper(self, *args, **kwargs):
self.slack.files.upload(file,
channels=self.channel,
title=head,
initial_comment=comment)
time.sleep(5)
os.remove(file)
return upload_wrapper(self, *args, **kwargs)
def generate_text_file(self, filename, df):
table = tabulate(filename, tablefmt="grid", headers=df.columns)
with open(filename, 'w') as f:
f.write(table)
И моим желаемым результатом будет вызов функции, которая подготавливает файл для меня, затем загружает его в Slack и удаляет его, так что нетфайлы хранятся в системе (я бы запустил это через cronjob).
workspace_name = Slack(api_token, channel=channel_name)
df = some_pandas_function()
@upload
workspace_name.generate_text_file("filename.txt", df)
Любая помощь будет высоко ценится ...