Pickle хранилище (pickle storage)
Кроме постоянной и временной хранилищ еще есть краткосрочное. Данные в нем можно хранить сроком 3-7 дней. Все данные хранятся в формате Pickle файлов, т.е. хранить можно почти любые Python объекты.
Данное хранилище используется скорее системой, однако никто не запрещает использовать его в модулях.
Сохранение
Сохранение данных осуществляется через функцию save_pickle:
Аргументы:
path(pathlib.Path|str) - путь к файлу.подсказкаСохранять файлы желательно либо в папке
/storage, либо в папке модуля.data(Any) - Python объект который нужно сохранитьttl(int) = Значение в конфиге (DEFAULT_PICKLE_STORAGE_FILES_TTL) (= 259200 = 3 дня) - Время жизни файла в секундах. По прошествии этого времени файл будет автоматически удалён. Рекомендуется устанавливать не более 7 дней (604800 секунд)
Возвращает: pathlib.Path - полный путь к файлу.
Пример:
SomeModule/__init__.py
data = mod # сохраним весь объект модуля, почему бы и нет ¯\_(ツ)_/¯
storage_folder = mod.path / 'storage'
storage_folder.mkdir(parents=True, exist_ok=True) # создаем папку если ее еще нет
path = storage_folder / "module_obj.pkl"
# Сохраняю данные без указания TTL,
# чтобы использовалось значение по умолчанию
# (пользователь может изменить его в конфиге)
path = save_pickle(path, data)
mod.logger.info(f"Сохранил объект модуля в {path}")
Получение
Получить данные можно с помощью load_pickle:
Аргументы:
path(pathlib.Path|str) - путь к файлу.
Возвращает: Any - данные
Пример:
SomeModule/__init__.py
path = mod.path / 'storage' / 'module_obj.pkl'
loaded_mod = load_pickle(path)
Удаление
Нужно просто удалить файл, например так:
SomeModule/__init__.py
file_path = mod.path / 'storage' / 'module_obj.pkl'
if file_path.exists():
file_path.unlink()
или так:
SomeModule/__init__.py
import os
file_path = mod.path / 'storage' / 'module_obj.pkl'
if os.path.exists(file_path):
os.remove(file_path)
Или подождать пока файл сам не удалится по TTL 😁