Поиск объекта по имени в поле объектов.

Автор feron, 17.10.23, 23:36:40

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

feron

Доброго,

Цель: есть имя объекта - нужно вывести все (или до первого включения) цепочки объектов которые приходят к искомому объекту.
Например: ищу объект HideMessage получаю все способы как прийти к этому объекту - KompasApi5V16::Application::HideMessage

Пока первичный набросок (глубина поиска - 4 уровень)

https://disk.yandex.ru/d/rS34vc6S4MMaBA

Вират Лакх

HideMessage - это не объект.
Заменил ваш модуль на генерируемый - не работает.
Можете перечислить уровни?
1 - библиотека? Но Вы их не перебираете. Минус один уровень.
2 - имя класса/типа
3 - имя метода/функции
4 - имя свойства в словаре/словарях
Вывести цепочки - это не цель, а задача или средство. А цель формирования цепочки - ускорить написание кода?

feron

Цитата: Вират Лакх от 18.10.23, 08:41:55HideMessage - это не объект.

Локально да, рассматриваем изначально как неизвестное.

Цитата: Вират Лакх от 18.10.23, 08:41:55Заменил ваш модуль на генерируемый - не работает.
Пока что не может приводить к соответствующим типам динамические объекты - пока еще решается вопрос.

Цитата: Вират Лакх от 18.10.23, 08:41:55Можете перечислить уровни?
1 - библиотека? Но Вы их не перебираете. Минус один уровень.
2 - имя класса/типа
3 - имя метода/функции
4 - имя свойства в словаре/словарях
В этом наброске - глубина поиска = 4

Пытаюсь прийти этой форме разбора:
inspect.ismodule - библиотека?
inspect.isclass - имя класса/типа ?
inspect.isabstract  - имя абстрактного класса?
inspect.ismethod - имя метода?
inspect.isfunction - имя функции?
а вот тут пока незнаю - имя свойства в словаре/словарях

Цитата: Вират Лакх от 18.10.23, 08:41:55А цель формирования цепочки - ускорить написание кода?
да!

В будущем добавлю функции определения типа выделенного объекта и относительно указанного объекта выводить цепочку.
Пока не пойму как программно к интерфейсу рассматриваемого объекта привести интерфейс другого объекта и получить дополнительные свойства/функции и тд.

Вират Лакх

Как Вам такой вариант?
name = 'HideMessage'

from win32com.client import gencache
api5 = gencache.EnsureModule('{0422828C-F174-495E-AC5D-D31014DBBE87}', 0, 1, 0)
api7 = gencache.EnsureModule('{69AC2981-37C0-4379-84FD-5DD2F3C0A520}', 0, 1, 0)
con0 = gencache.EnsureModule('{75C9F5D0-B5B8-4526-8681-9903C567D2ED}', 0, 1, 0)
con3 = gencache.EnsureModule('{2CAF168C-7961-4B90-9DA2-701419BEEFE3}', 0, 1, 0)

for tlb in (api5, api7, con0, con3):
types = dict(filter(lambda x: isinstance(x[1], type), tlb.__dict__.items()))
if name in types:
print(f'{tlb.__name__}.{name} - {types[name].__doc__}')
for typ in types:
defs = types[typ].__dict__
if name in defs:
if typ == 'constants':
d = defs[name]
z = '='
else:
d = defs[name].__doc__
z = '-'
print(f'{tlb.__name__}.{typ}.{name} {z} {d}')
else:
get = defs.get('_prop_map_get_')
put = defs.get('_prop_map_put_')
if put and name in put:
print(f'{tlb.__name__}.{typ}.{name} - Свойство (запись)')
elif get and name in get:
print(f'{tlb.__name__}.{typ}.{name} - Свойство (чтение)')
+ Благодарностей: 1

feron

Да похоже но есть но - при указании name = 'PointsBuildingType'
получаю: win32com.gen_py.69AC2981-37C0-4379-84FD-5DD2F3C0A520x0x1x0.INurbsByPoints.PointsBuildingType - Свойство (запись)

А хотелось бы как один из вариантов что то вроде:
ksDocument2D::ViewsAndLayersManager::Views::IDrawingContainer::Objects::INurbsByPoints::PointsBuildingType

p3452

- Сизифов труд:
Один и тот же объект можно получить через разные интерфейсы.
Один и тот же объект можно получить как опускаясь так и поднимаясь по "структуре".
Один и тот же объект можно получить несколькими путями, даже при одном направлении движения по "структуре".

feron

p3452 вот вот я об этом и писал + приращение интерфейсов.

Вират Лакх

Это Вам надо иерархию откуда-то брать. Как её из библиотеки типов получить?
Иногда один и тот же объект можно получить разными способами.
Чтобы подниматься наверх, думаю, нужно получать свойство Parent.
Скорее всего не обойдётся без Type и Reference.

feron

Цитата: Вират Лакх от 18.10.23, 12:57:46Это Вам надо иерархию откуда-то брать. Как её из библиотеки типов получить?

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

Но это конечно же не даст полную картину, но уже хоть что то.

Вират Лакх

#9
У-у... Искусственный интеллект прям, chatForumAscon.
SDK появилась в браузерной версии. Может лучше шпарить её?
Например, если написано, что данный интерфейс можно получить преобразованием такого-то интерфейса, то мы можем написать это: модуль.Интерфейс(интерфейс).
Вы как хотите, ткнуть на объект, selected objects скажет его интерфейс. Допустим, это отрезок, являющийся элементом коллекции. Конкретно его мы как получим при прямом ходе?
Когда мы через Parent получим родителя, то как нам узнать, каким способом получить от родителя нужное?
Upd.
Можно тупо перебрать свойства родителя. Есть вероятность получить данный объект.

feron

Да "прямого" решения не будет - это будет что то вроде комплекса извлеченных данных/костылей и тд и тп.


Вират Лакх

В каком файле находятся Константы > Константы системы > Типы системных папок
Например, sptWORK_FILES ?

Nipal

+ Благодарностей: 1

Вират Лакх

В питоновском варианте оно вроде с компас-макро идёт. А если он не установлен или удалён... Поэтому и не нашёл. По-хорошему разработчику бы его поместить тоже в SDK к другим типам этого файла.

p3452

Цитата: Вират Лакх от 01.11.23, 08:03:57По-хорошему разработчику бы его поместить тоже в SDK к другим типам этого файла.
?
Так уже давно включено в SDK (KAPITypes.dll) и в Справке SDK то же присутствует
KAPITypes.png

Вират Лакх


feron

Цитата: feron от 18.10.23, 13:05:32Написал робота который сканирует форум и извлекает примеры кодов так он сможет представить иерархию.

Все хорошо вот только на форуме не предусмотрена метка правильного ответа (как и в других форумах) а опираться на счетчик благодарностей думаю не лучшая идея..

Цитата: Вират Лакх от 18.10.23, 13:34:27У-у... Искусственный интеллект прям, chatForumAscon.
Да, скормив эту базу нейронке - она автоматом сгенерирует решение. Но тут есть одно но весь код должен быть закомментирован..

Цитата: Вират Лакх от 18.10.23, 13:34:27SDK появилась в браузерной версии. Может лучше шпарить её?
Попробовал, нейронка не правильно собирает код..