Доходность от плагина зависимости?

Я хочу сделать плагин парсера, который будет переводить сообщения свободной формы в команды бота и запускать их из других плагинов. Допустим, у меня есть PluginA и PluginB, который зависит от PluginA. На плагине у меня есть команда:

    @botcmd
    def do_on_a(self, msg):
      yield "yielding first msg from A {}".format(msg)
      sleep(5)
      yield "yielding second msg from A {}".format(msg)

Единственный способ запустить его из PluginB - это создать список из генератора:

    @botcmd
    def get_from_a(self, msg, args):
      yield list(self.get_plugin('PluginA').do_on_A(msg))

Но таким образом я получаю оба сообщения PluginA за один раз. Есть ли способ получать сообщения от PluginA, когда они появляются? Также, возможно, я могу просто сформировать команду бота в плагине и отправить ее errbot, как будто я отправляю ее из бэкэнда? Что-то вроде:

    @botcmd
    def get_from_a(self, msg, args):
      send "!do_on_a"

1 ответ

Решение

Вы должны убедиться, что команда из плагина B (которая вызывает A) является генератором, который выдает элементы, которые производит команда из плагина A. Самый простой - это использовать yield from синтаксис, введенный в Python 3.3:

@botcmd
def get_from_a(self, msg, args):
  yield from self.get_plugin('PluginA').do_on_A(msg)
Другие вопросы по тегам