Создание плагина, расширяющего возможности БД
Алгоритм
Текущая архитектура платформы 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.