Доступ к членам списка Mailman 3 через консоль управления Python/Django

Я пытаюсь получить доступ к членам существующего списка рассылки Mailman 3 непосредственно из консоли управления Django на Debian Bullseye, где Mailman установлен из deb-пакетов (mailman3-full). Я могу подключиться к консоли администратора Django следующим образом (все 3 варианта, похоже, работают нормально):

$ /usr/share/mailman3-web/manage.py shell
$ mailman-web shell
$ mailman-web shell --settings /etc/mailman3/mailman-web.py
Python 3.9.2 (default, Feb 28 2021, 17:03:44)
>>> 

Но в консоли администратора Django некоторые компоненты mailman, похоже, отсутствуют.

Я пытаюсь получить доступ к менеджеру списка рассылки, как описано здесь: Docs > Models > The mailing list manager:

>>> from mailman.interfaces.listmanager import IListManager
>>> from zope.component import getUtility
>>> list_manager = getUtility(IListManager)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/zope/component/_api.py", line 169, in getUtility
    raise ComponentLookupError(interface, name)
zope.interface.interfaces.ComponentLookupError: (<InterfaceClass mailman.interfaces.listmanager.IListManager>, '')

Не могу понять, почему это ComponentLookupError происходит.

Также попытался получить доступ к списку с помощью реализации ListManager:

>>> from mailman.config import config
>>> from mailman.model.listmanager import ListManager
>>> list_manager = ListManager()

>>> list_manager.get('mynews@example.com')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/mailman/database/transaction.py", line 85, in wrapper
    return function(args[0], config.db.store, *args[1:], **kws)
AttributeError: 'NoneType' object has no attribute 'store'

>>> list_manager.get_by_list_id('mynews.example.com')
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python3/dist-packages/mailman/database/transaction.py", line 85, in wrapper
    return function(args[0], config.db.store, *args[1:], **kws)
AttributeError: 'NoneType' object has no attribute 'store'

Что я делаю не так? Ни один из примеров в документации по моделям Mailman 3 не работает, если я даже не зашел так далеко.

любая помощь очень ценится!

Вы просто используете неправильную оболочку. Вам следует использовать оболочку Mailman core shell вместо нее.

Доступ к нему возможен только через mailman shell в вашей системе, скорее всего.

Итак, mailman shell работает отлично, и я могу запустить это в интерактивном режиме:

from mailman.interfaces.listmanager import IListManager
from zope.component import getUtility
from mailman.testing.documentation import dump_list
from operator import attrgetter

def dump_members(roster):
    all_addresses = list(member.address for member in roster)
    sorted_addresses = sorted(all_addresses, key=attrgetter('email'))
    dump_list(sorted_addresses)

list_manager = getUtility(IListManager)
mlist = list_manager.get('ant@example.com')
dump_members(mlist.members.members)

но как я могу поместить это в скрипт, который можно запустить с помощью mailman withlist -r listmembers -l ant@example.com?

from mailman.testing.documentation import dump_list
from operator import attrgetter

def listmembers(mlist):
    roster = mlist.members.members
    all_addresses = list(member.address for member in roster)
    sorted_addresses = sorted(all_addresses, key=attrgetter('email'))
    dump_list(sorted_addresses)

куда мне поместить такой listmembers.py бегунок? Я пытался поместить его в каталог /usr/lib/python3/dist-packages/mailman/runners, но ничего не получилось:

$ mailman withlist -r listmembers -l ant@example.com
ModuleNotFoundError: No module named 'listmembers'

Спасибо!

Вернуться на верх