Как написать свой плагин

Пример написания плагина

Директория с плагинами для установленного приложения /var/www/geomongo/plugins.

Для создания плагина необходимо:

  1. создать каталог, название  – строчными буквами, слова разделены знаком нижнего подчеркивания;
  2. создать пустой файл __init__.py для того, чтобы данный каталог являлся python-пакетом;
  3. создать файл main.py c двумя функциями getPluginInfo() и getPluginResources()getPluginInfo() возвращает информацию о плагине, getPluginResources() –  словарь, который содержит пары ‘ссылка’: класс-наследник Resource.

Пример
Пусть существуют два класса-ресурса, которые мы хотим превратить в плагин.

test_resource_1.py:
 from flask.ext.restful import Resource
 class TestResource1(Resource):
   def get(self):
     return 'test_resource_1'
test_resource_2.py:
from flask.ext.restful import Resource
class TestResource2(Resource):
   def get(self):
     return 'test_resource_2'

Их необходимо подключить в main.py:

sys.path.append('../../plugins/test_plugin/')
# Хак, необходимый для того, чтобы ресурсы плагина было видно ( https://geo2tag.atlassian.net/browse/GT-1438)
from test_resource_1 import TestResource1
from test_resource_2 import TestResource2

а также создать обязательные для плагина функции getPluginResources() и getPluginInfo() main.py:

def getPluginResources():
    result = {'res1': TestResource1, 'res2':TestResource2}  
    return result

def getPluginInfo():
    info = 'This plugin was creating for present plugins feature. The function getPluginResources is for return TestResource1 and TestResource2 '
    return info

После этого необходимо создать /var/www/geomongo/plugins/test_plugin, и поместить туда main.py, test_resource_2.py, test_resource_1.py и пустой __init__.py.

Далее необходимо перезагрузить вебсервер, чтобы плагины поднялись:

sudo service apache2 restart

После этого плагины будут доступны по адресам:

http://geomongo/instance/plugin/test_plugin/res1

http://geomongo/instance/plugin/test_plugin/res2

ShareShare on FacebookShare on Google+Tweet about this on TwitterShare on LinkedInShare on VKEmail this to someone

Leave a Reply

Your email address will not be published. Required fields are marked *