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

Хранилище данных (module_sdk.storage)

ScanStatusStorage

from module_sdk.storage.storage import scan_status_storage

Синглтон scan_status_storage -- глобальный экземпляр, используется для добавления ассетов и управления статусом модуля.

Методы добавления ассетов

МетодТип данныхОписание
append_host_in_storage(data)CollectionHostДобавить один хост
append_account_in_storage(data)CollectionAccountДобавить один аккаунт
append_network_in_storage(data)CollectionNetworkДобавить одну сеть
append_external_address_in_storage(data)CollectionExternalAddressДобавить один внешний адрес
extend_external_address_in_storage(data)list[CollectionExternalAddress]Добавить список внешних адресов
append_global_metadata_in_storage(data)objectДобавить глобальные метаданные

Все методы append_* и extend_* автоматически проверяют порог max_chunk_size. Когда суммарное количество ассетов достигает порога, текущий набор сериализуется в JSON-файл и помещается в очередь пакетов.

Методы управления состоянием

МетодОписание
total_exist_assets_count() -> intКоличество ассетов в текущем (еще не упакованном) наборе
create_and_enqueue_packet()Вручную создать пакет из текущих данных и добавить в очередь
clear_data()Очистить текущие данные (host, account, network, external_address). global_metadata не очищается
clear_data_scan_status()Сбросить data в scan_info

Методы для работы с пакетами

МетодОписание
if_all_packet_ids_exist() -> boolЕсть ли неподтвержденные пакеты
get_first_all_packet_ids_id() -> Optional[int]Вернуть ID первого неподтвержденного пакета или None
find_packet_by_id(packet_id) -> Optional[Packet]Найти пакет по ID или вернуть None
confirm_packet_delivery(packet_id)Подтвердить доставку пакета. Если это был последний -- статус переходит в FINISH

Свойство scan_info

scan_status_storage.scan_info # -> ScanStatus
scan_status_storage.scan_info.status # -> "CREATE" | "RUN" | "ASSETS_READY" | "FINISH" | "ERROR"

Сериализация

scan_status_storage.to_json() # -> str (JSON-строка ScanStatus)

ScanStatusEnum

from module_sdk.storage.storage import ScanStatusEnum
ЗначениеСтрока
ScanStatusEnum.CREATE"CREATE"
ScanStatusEnum.RUN"RUN"
ScanStatusEnum.FINISH"FINISH"
ScanStatusEnum.ASSETS_READY"ASSETS_READY"
ScanStatusEnum.ERROR"ERROR"

Packet

from module_sdk.storage.storage import Packet

Pydantic-модель пакета данных.

ПолеТипОписание
idintНомер пакета (начинается с 1)
packetstrПуть к JSON-файлу с данными

Механизм чанкинга (подробно)

  1. Каждый вызов append_*_in_storage() добавляет ассет в CollectionAssets.__data

  2. После добавления SDK считает total_exist_assets_count() = сумма len(host) + len(account) + len(network) + len(external_address) + len(global_metadata)

  3. Если сумма >= max_chunk_size:

    • create_and_enqueue_packet() сериализует __data.to_dict() в файл {packet_id}.json

    • Пакет добавляется в __packet_queue

    • ID пакета добавляется в __all_packet_ids

    • __data очищается (host, account, network, external_address -- очищаются; global_metadata -- нет)

    • __next_packet_id инкрементируется

  4. После завершения custom_py_function в app_create_and_do_py():

    • Если в __data остались ассеты -- создается финальный пакет

    • Если __all_packet_ids непустой -> статус ASSETS_READY

    • Иначе -> статус FINISH