Найти - Пользователи
Полная версия: Как сделать систему плагинов?
Начало » Python для новичков » Как сделать систему плагинов?
1
ivanzzzz
Есть данные и их иногда по разному нужно обрабатывать. Хочу сделать, что-то подобное плагинам чтобы-постоянно код не менять. Подключил например плагин на фильтрацию данных длинна, которых меньше 10 и он работает, не надо отключил и все. Есть примеры такой реализации?
MickeyMouse
делаешь модуль, сохраняешь в файле name.py

потом там, где надо его использовать:
import name
JOHN_16
MickeyMouse
вы уверены что понимаете что такое система плагинов? то что вы предложили это питоновские пакеты это не то же самое что плагины.
ivanzzzz
Думаю гуглится вполне. Я делал, но думаю на просторах сети более грамотные решение есть, нежели делаю я.
FishHook
ivanzzzz
Есть данные и их иногда по разному нужно обрабатывать. Хочу сделать, что-то подобное плагинам чтобы-постоянно код не менять. Подключил например плагин на фильтрацию данных длинна, которых меньше 10 и он работает, не надо отключил и все. Есть примеры такой реализации?

Первое, что приходит в голову, это запилить декоратор, который срабатывает при наличии соответствующего ключа в конфиге или по какому-то другому условию. Типа такого
    
def filter_func(data, length=10):
    return [d for d in data if len(d) >= length]
   
   
def capitalize(data):
    return [d.capitalize() for d in data]
   
   
PLUGINS = {"filter": filter_func,
           "capitalize": capitalize}
   
   
def plugin(name, *plugin_args, **plugin_kwargs):
    def decorator(func):
        def wrapper(*args, **kwargs):
            result = func(*args, **kwargs)
            if name in PLUGINS:
                result = PLUGINS[name](result, *plugin_args, **plugin_kwargs)
            return result
        return wrapper
    return decorator
   
   
@plugin("capitalize")
@plugin("filter", length=5)
def target():
    return ["eefqawefwefasdfasdfadfasdf", "dsa", "esadasdassda"]
   
print target()
doza_and
FishHook
Первое, что приходит в голову
Мне казалось что большинство плагинов находятся в папочке plugins и автоматом грузятся при старте приложения. Но конечно решения могут быть разные.

А ваши плагины похоже давно изобретены и называются пайпы операционной системы.

 cat data | capitalize | only_english | max_len 5  > result
FishHook
doza_and
Мне казалось что большинство плагинов находятся в папочке plugins и автоматом грузятся при старте приложения
Мне показалось, что в постановке задачи от топикстартера имеется в виду АОП, а не динамически подключаемые модули.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB