Save Call

Общее

Этот скрипт содержит в себе декоратор для сохранения результата работы любой функции в базу. Оборачивает любую функцию, и принимает параметры “request_id”, “uniq”, “file_type”.

Принцип работы: Генерирует unique_id по имени функции и переданным в нее параметрам. Делает SELECT из таблицы adplatform.api.request_log по request_id и проверяет наличие там unique_id. Если есть десерелизует уже записанный результат и возвращает его. Если нет, то выполняет функцию, серелизует результат её работы и записывает в базу вместе с параметрами с которыми она была вызвана.

Параметры вызова

“request_id” - Тип uuid. Уникальный id операции.
Если не передан, декоратор просто вернет результат работы без записи в базу.

“uniq” - Тип list. Определяет какие ключи словаря kwargs записывать как уникальный идентификатор вызова функции.

“file_type” - Тип str. Определяет какой формат возвращает функция, приводит этот формат к JSON, для дальнейшей записи в базу. Если не передан, то конвертации не произойдет и будет попытка записать в базу “как есть”. ВНИМАНИЕ! В базу не может быть записан не JSON. Поддерживаемые форматы: ‘suds’, ‘zeep’, ‘text’, ‘fc_obj(facebook_object)’

Примеры

Пример 1

Получение статистики за месяц.


import requests

from src.engine.save_call import save_call

url = 'http://book.pythontips.com/en/latest/lambdas.html'


@save_call(request_id='32d14289-5f83-4829-a87f-e83cc51a7020', uniq=['url', ])
def save_requests_get(*args, **kwargs):
    res = requests.get(*args, **kwargs)
    return res.text


s = save_requests_get(url=url)
r = requests.get(url=url).text

print(type(s))
print(type(r))
print(r == s)