Создание плагина, расширяющего возможности БД

Алгоритм

Текущая архитектура платформы Geo2Tag не требует специальных настроек для создания плагина, расширяющего возможности БД, - разработчику плагина предоставляются интерфейсы для доступа к БД, используемые в ядре платформы. Исходный код данных интерфейсов описан в файле src/db_model.py.

Для расширения существующих методов работы с БД рекомендуется использовать функцию getDbObject(dbName). Данная функция возвращает объект типа Database (https://api.mongodb.org/python/2.7/api/pymongo/database.html#pymongo.database.Database) соответствующий базе данных с названием dbName. В случае если dbName не задано, то значением по умолчанию выступает название masterDb из конфигурационного файла платформы.

Пример

В качестве примера рассмотрим создание плагина, который выводит количество записей в коллекции log базы данных masterDb.

В качестве первого шага необходимо создать директорию плагина dbplugin, содержащую пустой файл config.ini

mkdir dbplugin/
touch dbplugin/config.ini

Далее необходимо создать следующий ресурс в файле dbplugin/test_resource_1.py:

from flask_restful import Resource
from db_model import getDbObject

# В данном классе определяется обработчик для веб-интерфейса http://<hostname>/instance/plugins/<plugin_name>/logCount
# Обработчик возвращает количество записей в коллекции log. 
class TestResource1(Resource):

    # Расположенный ниже код можно заменить на необходимые манипуляции с объектами БД
    # Подробнее о том, как обрабатывать аргументы запроса http://flask-restful-cn.readthedocs.io/en/0.3.4/quickstart.html#argument-parsing.
    def get(self):
 
        # getDbObject() - получение объекта БД,  
        # https://github.com/geo2tag/geo2tag/blob/2f4d92ce9d5452af66f9aba99e1fbec75f591280/src/db_model.py#L211 .
        # Интерфейс объекта БД - https://api.mongodb.com/python/current/api/pymongo/database.html
 
        # getDbObject()['log'] - получение доступа к коллекции log,  
        # https://api.mongodb.com/python/current/api/pymongo/collection.html
        return getDbObject()['log'].count()

После этого необходимо подключить ресурс в файле dbplugin/main.py плагина:

from test_resource_1 import TestResource1

# Обязательные для плагина функции.
def getPluginResources():
    # Содержимое словаря может содержать произвольное количество пар "относительный путь к запросу" - "класс-обработчик". 
    result = {'logCount': TestResource1}
    return result


def getPluginInfo():
    # Краткая информация о плагине.
    info = 'This plugin was creating for presenting db interaction demo . '
    return info

В результате в директории dbplugin будет содержаться плагин, расширяющий возможности по работе с БД в LBS-платформе Geo2Tag.