Использование Python-декораторов для удаления файлов после загрузки - PullRequest
0 голосов
/ 20 сентября 2019

Пытаясь обернуть голову вокруг декораторов в Python

Я пытаюсь написать класс, который содержит 2 функции:

  1. Функция, которая принимает 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)

Любая помощь будет высоко ценится ...

...