Логотип
Jython Support
13.03.2017

Новая штука для DC! В этот раз это плагин, который позволяет другим плагинам быть написанными на языке Python 2.5 2.7 (с v1.0.2). Ну, если быть более точным, называется он Jython и поддерживает не только модули, входящие в стандартную поставку Python-интерпретатора, но и библиотеки Java. Пример простейшего плагина для изучения присутствует в архиве для версий до 1.2.0 или его можно скачать отдельно для поздних версий (test_python).
По сути тут поддерживаются вызовы тех же функций, что и в Groovy-плагине (sendMessage(), addMessageListener(), getPluginDir() и т. д.), но мне пока не удалось элегантно "заинжектить" их в интерпретатор именно как функции*. Поэтому взаимодействие с системой сообщений приложения осуществляется через так называемую шину (bus) — специальный объект, проксирующий вызовы методов в Java-код.

* Сделать плагин наследником Java-класса, как сделано для Groovy-плагинов у меня не получилось. В многообразии Джавовских "коллбэков" я тоже плохо ориентируюсь. Ближе всего к желаемому результату получилось заинжектить Грувовский Closure. Но из Python-кода его приходится вызывать через callOn(), что ещё хуже, чем решение с шиной. Может потом я всё-таки что-нибудь придумаю. Или кто-нибудь подскажет. В любом случае, обратная совместимость с шиной будет сохранена.

Как обычно, два варианта установки, которым надо указать папку с DC.

Для особых "извращенцев", любящих голый код и ручную сборку, ссылка на ветку.

Скачать тестовый плагин-пример (для версий до 1.2.0 он включён в основной архив):

Также не забываем подписываться на мой канал в Telegram! Там новости, связанные с этим проектом, выходят первыми. А ещё я там публикую некоторые эксклюзивные штуки, связанные с мессенджером.


Обновление от 24 марта 2017 (v1.0.1)

Старые ссылки: ZIPак (v1.0.0), SFX (v1.0.0).


Обновление от 25 марта 2017 (v1.0.2)

Кроме того, я придумал, как мне кажется, оптимальный вариант для дистрибуции зависимостей. К JYTHON_PATH теперь отдельно добавляется папка __dependencies__ внутри папки Вашего плагина. Туда я и предлагаю устанавливать все зависимости с помощью следующей команды, чтобы не мешались:

pip install --target=__dependencies__ --ignore-installed <названия пакетов...>

Таким образом, Вы сможете распространять архив с плагином со всеми зависимостями внутри, и пользователю не надо будет ничего докачивать!

Старые ссылки: ZIPак (v1.0.1), SFX (v1.0.1).


Обновление от 17 апреля 2017 (v1.1.0)

Старые ссылки: ZIPак (v1.0.2), SFX (v1.0.2).


Обновление от 21 апреля 2017 (v1.1.1)

Исправлено несколько ошибок, в том числе с кодировками и кроссплатформенностью.

Старые ссылки: ZIPак (v1.1.0), SFX (v1.1.0).


Обновление от 28 мая 2017 (v1.2.0)

Помимо обновления тестового плагина под изменившийся API, а также добавления новой функции get_root_dir_path и мелких изменений вроде логгирования загрузки плагинов (раньше были типы ошибок, которые заканчивались исключением без указания источника; теперь выяснить виновника проще), была почти полностью переработана система работы с шиной. И это очень важный момент, поскольку содержит изменения, не совместимые с предыдущей версией!

В прошлых версиях был серьёзный баг: все загружающиеся плагины, пользующиеся моими модулями, переписывали для этих самых модулей общую ссылку на pluginProxy. Поэтому все плагины выполнялись от ID последнего загруженного плагина. Я придумал, как это исправить, но пришлось полностью изменить логику работы этих самых модулей.
В итоге теперь нельзя импортировать нужные функции из busproxy. Теперь нужно импортировать его и вызвать функцию inject, передав ей ссылку на шину и текущую область видимости. А меняя ссылку на область видимости, можно «инжектить» функции в другие модули. По умолчанию внедряются все функции, но можно ограничить только до перечисленных.
Также обратите внимание, что get_instance у модулей локализации и настроек теперь всегда требует ссылку на шину! Поэтому при необходимости либо передавайте её в другие модули, либо сделайте собственный статический класс-хранитель, который будете инициализировать в начале плагина, а дальше использовать из других модулей (подобный подход использован в плагине vk_message_reader, который будет опубликован на днях).

В общем, советую изучить плагин-пример, который, начиная с этого релиза, не включён в основной архив, а идёт отдельно, и посмотреть, как всё реализовано там. Ну а ещё есть же и документация.

Для работы требуется версия DC не ниже сборки от 30 апреля.

Старые ссылки: ZIPак (v1.1.1), SFX (v1.1.1).


Обновление от 9 сентября 2017 (v1.2.1)

Старые ссылки: