Перейти к основному содержимому
Версия: 2.2.2-1

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 😁