Доступ к членам списка 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'
Спасибо!