Key-value хранилище
Обновлено: 9 сент. 2019 г.

Реализация Key-value хранилища внутри Revit файла.
Если не хочется вникать просто скопируйте код и не забудьте поправить импорты если нужно.
Ограничения: ключ и значение могут быть только строками.
Пример использования
Реализация
Подробное описание работы с 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 объекта, только теперь мы добавляем пару ключ-значение в сам словарь