Pygin — Python adapter

Место, где разработчики плагинов могут поделиться своим опытом.
Post Reply
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Pygin — Python adapter

Post by DrKnS »

Image

Не прошло и трёх лет, как у меня дошли руки набросать демо для Python.
Умеет добавлять пункт в меню плагинов и показывать сакральную фразу под панелями.
User avatar
techie
Posts: 795
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 35 times
Been thanked: 6 times

Python adapter

Post by techie »

Latest post of the previous page:

Ещё было бы удобно для сортировки версий поменять имена архивов с pygin_89f1868_090517.7z на pygin_170509_89f1868.7z
User avatar
techie
Posts: 795
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 35 times
Been thanked: 6 times

Python adapter

Post by techie »

А что за магия такая - `import __hello__` - это питоновский код или С?

И вот это вот весьма странно:

Code: Select all

def GetGlobalInfoW(info):
	global Plugin
	Plugin = hello_world_plugin(info)
Лучше, если плагин объявит класс `hello_world_plugin(farapi.Plugin)`, и Far автоматом его пнёт после импорта плагина. Типа высокоуровневый API. https://stackoverflow.com/questions/588 ... m-this-one
User avatar
techie
Posts: 795
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 35 times
Been thanked: 6 times

Python adapter

Post by techie »

DrKnS wrote: Обновил архив в шапке.
Изменения преимущественно внутренние, из видимого наружу - теперь есть динамический модуль farapi, предоставляющий плагину функции Far.
Что-то не видно его.

Code: Select all

    import farapi
NameError: name 'farapi' is not defined
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Python adapter

Post by DrKnS »

techie wrote: А что за магия такая - `import __hello__` - это питоновский код или С?
Это такой встроенный хелловорлд.
Лучше, если плагин объявит класс `hello_world_plugin(farapi.Plugin)`, и Far автоматом его пнёт после импорта плагина. Типа высокоуровневый API.
Я думал об этом, но кто этот высокоуровневый API потом будет документировать?
А так оно более-менее похоже на то, что на api.farmanager.com.
Что-то не видно его.
Написано же - динамический. Он не импортируется, а приходит в SetStartupInfoW.
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

Python adapter

Post by Smitis »

В новой версии поломался вывод на экран из плагина helloworld. Или это так задумано?
Разум когда-нибудь победит.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Python adapter

Post by DrKnS »

Smitis, текущая стадия разработки не предполагает наличия обратной совместимости. Вывод на экран переделан, helloworld, идущий в комплекте, должен работать.
User avatar
techie
Posts: 795
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 35 times
Been thanked: 6 times

Python adapter

Post by techie »

DrKnS wrote: Это такой встроенный хелловорлд.
help(__hello__) co ccылкой на исходники было бы любопытно.
DrKnS wrote: Я думал об этом, но кто этот высокоуровневый API потом будет документировать?
А так оно более-менее похоже на то, что на api.farmanager.com.
Так и не надо выпиливать низкоуровневый. Оставить как есть. Документацию можно в README.md засунуть. Там всего-то 5е колбэков в http://api.farmanager.com/ru/basicapi/index.html нужно. Примера будет достаточно.
DrKnS wrote: Написано же - динамический. Он не импортируется, а приходит в SetStartupInfoW.
https://github.com/trexinc/evil-program ... l/30/files
User avatar
techie
Posts: 795
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 35 times
Been thanked: 6 times

Python adapter

Post by techie »

DrKnS wrote: Обновил архив в шапке.
Изменения преимущественно внутренние, из видимого наружу - теперь есть динамический модуль farapi, предоставляющий плагину функции Far.
Что-то там какие-то неизвестные функции:

Code: Select all

Available API:
 - GetUserScreen
 - SetUserScreen
 - __doc__
 - __loader__
 - __name__
 - __package__
 - __spec__
 - api_pointer
 - error
https://github.com/techtonik/discovery/ ... t__.py#L55
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Python adapter

Post by DrKnS »

techie wrote: Там всего-то 5е колбэков
Вы не туда смотрите.
Ну и это как бы абстракция ради абстракции, особого смысла пока не вижу.
User avatar
techie
Posts: 795
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 35 times
Been thanked: 6 times

Python adapter

Post by techie »

Лежит http://api.farmanager.com/ru/exported_f ... index.html однако и не грузиццо.

Абстракция не ради абстракции, а для программеров на Python. Основной же принцип языка в том, что код читается гораздо больше раз, чем пишется. Здесь тоже - сделать нормальный интерфейс для плагина, интуитивно понятный про чтении кода - большое дело. Мне легко, потому что я пытался на C плагины писать много лет назад, но посадить питоняшу без сакрального знания наваять плагин будет тяжеловато. Даже по образу и подобию.
User avatar
techie
Posts: 795
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 35 times
Been thanked: 6 times

Python adapter

Post by techie »

А как обращаться к полям https://api.farmanager.com/ru/structures/openinfo.html ? Там пустой dict в OpenW передаётся.

https://github.com/techtonik/discovery/ ... _init__.py
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Python adapter

Post by DrKnS »

Пока никак.
User avatar
techie
Posts: 795
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 35 times
Been thanked: 6 times

Python adapter

Post by techie »

Okay. Будем ждать. :bojan:
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Python adapter

Post by DrKnS »

techie wrote: Лучше, если плагин объявит класс
Ок, пусть будет класс.
В шапке.
User avatar
techie
Posts: 795
Joined: Mon 03 Oct, 2005 22:42
Has thanked: 35 times
Been thanked: 6 times

Python adapter

Post by techie »

pygin_140517_6b26d5f.7z - это клёвое имя, но pygin_170514_6b26d5f.7z лучше сортируется по имени.
clipboard.png
clipboard.png (7.58 KiB) Viewed 5062 times
Да, что-то мудрёно получается. Непонятно что в какой последовательности запускается. Может рановато пока убирать сишные заглушки?.. В общем надо чуток помедитировать.

FarPluginClass - это хорошо, но вот плохо, что в __init__ ему ничего не валится. Там farapi всякие и т.п. Идея высокоуровневого интерфейса в том, чтобы всю статическую информацию Far взял из свойств плагина, а остальное уже происходило во время и после инициализации.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Python adapter

Post by DrKnS »

techie wrote: в __init__ ему ничего не валится
Помедитировал, теперь валится.
Post Reply

Return to “Разработка плагинов”