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)