Key-value хранилище

Обновлено: 9 сент. 2019 г.

#revit #api #python

Реализация Key-value хранилища внутри Revit файла.


Если не хочется вникать просто скопируйте код и не забудьте поправить импорты если нужно.

Storage.py

Ограничения: ключ и значение могут быть только строками.



Пример использования

Реализация

Подробное описание работы с ExtensibleStorage см. по ссылкам ниже.

Основные этапы будут следующие:

  • Создать или взять из памяти экземпляр Schema c одним единственным полем-словарем

  • Создать или взять через коллектор экземпляр DataStorage c нужной Schema

  • Создать или извлечь из DataStorage Entity объект

  • Создать или извлечь из Entity словарь (Dictionary<string, string>)

  • Записать по ключу значение в словарь

  • Поместить измененный словарь обратно в Entity

  • Поместить измененный Entity обратно в DataStorage

Весь этот ужас возьмет на себя класс Storage.


Класс Storage.py

Schema

Взять существующую схему по Guid

Либо создать новую с помощью SchemaBuilder:

Методом AddMapField() мы создаём новое поле, в которое будем сохранять наш словарь, указав что ключ и значение у нас будут типа str.

К сожалению поддержки объектов любого типа для значений нет, только Entity.

Cхему возвращает метод .Finish()

DataStorage

При создании нового DataStorage помещаем в него Entity объект с помощью SetEntity(), в который предварительно помещаем новый словарь.

Так как питоновский словарь по понятным причинам не подходит, используем .NET-овский: Dictionary[str, str]()

При использовании метода Entity.Set<T>() указывается не тип Dictionary, а Интерфейс IDictionary.

Метод .set(key, value)

Шаги практически полностью повторяют инициализацию DataStorage объекта, только теперь мы добавляем пару ключ-значение в сам словарь


Весь класс Storage целиком


Ссылки

Просмотров: 668Комментариев: 0

Недавние посты

Смотреть все