Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 4, 2016 16:18:32

ivanzzzz
Зарегистрирован: 2016-08-23
Сообщения: 30
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать систему плагинов?

Есть данные и их иногда по разному нужно обрабатывать. Хочу сделать, что-то подобное плагинам чтобы-постоянно код не менять. Подключил например плагин на фильтрацию данных длинна, которых меньше 10 и он работает, не надо отключил и все. Есть примеры такой реализации?

Офлайн

#2 Дек. 4, 2016 18:18:24

MickeyMouse
Зарегистрирован: 2016-11-16
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Как сделать систему плагинов?

делаешь модуль, сохраняешь в файле name.py

потом там, где надо его использовать:
import name

Отредактировано MickeyMouse (Дек. 4, 2016 18:20:00)

Офлайн

#3 Дек. 4, 2016 18:39:34

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Как сделать систему плагинов?

MickeyMouse
вы уверены что понимаете что такое система плагинов? то что вы предложили это питоновские пакеты это не то же самое что плагины.
ivanzzzz
Думаю гуглится вполне. Я делал, но думаю на просторах сети более грамотные решение есть, нежели делаю я.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#4 Дек. 5, 2016 06:02:30

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как сделать систему плагинов?

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()



Отредактировано FishHook (Дек. 5, 2016 06:03:04)

Офлайн

#5 Дек. 5, 2016 08:43:00

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как сделать систему плагинов?

FishHook
Первое, что приходит в голову
Мне казалось что большинство плагинов находятся в папочке plugins и автоматом грузятся при старте приложения. Но конечно решения могут быть разные.

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

 cat data | capitalize | only_english | max_len 5  > result



Отредактировано doza_and (Дек. 5, 2016 08:43:55)

Офлайн

#6 Дек. 5, 2016 09:27:55

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Как сделать систему плагинов?

doza_and
Мне казалось что большинство плагинов находятся в папочке plugins и автоматом грузятся при старте приложения
Мне показалось, что в постановке задачи от топикстартера имеется в виду АОП, а не динамически подключаемые модули.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version