• borolgs

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 целиком


Ссылки

Просмотров: 0
  • YouTube - Белый круг
  • Facebook - Белый круг
  • Instagram - Белый круг

+7 (495) 766-89-13

Россия, город Москва, проспект Мира д.3 стр.3, эт. 4 

м. Сухаревская (выход 3)