| Commit message (Collapse) | Author | Age | Files | Lines |
| | |
|
| | |
|
| |
|
|
|
|
|
|
| |
used where we used to do a try/except to temporarily change the global
translation language. This makes the code shorter and cleaner. E.g.
with i18n.using_language(another_language):
# do something
|
| |
|
|
|
|
| |
it hasn't yet. SendSubscribeAck(), SendUnsubscribeAck(), and
ApprovedDeleteMember() are all removed, though the latter is not yet
completely eradicated.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Pending.py module is removed. Added an interface to this functionality such
that any IPendable (essentially a key/value mapping) can be associated with a
token, and that token can be confirmed and has a lifetime. Any keys and
values can be stored, as long as both are unicodes.
Added a doctest.
Modified initialization of the database layer to support pluggability via
setuptools. No longer is this layer initialized from a module, but now it's
instantiated from a class that implements IDatabase. The StockDatabase class
implements the SQLAchemy/Elixir layer, but this can be overridden in a
setup.py. Bye bye MANAGERS_INIT_FUNCTION, we hardly knew ye.
Added a package Mailman.app which will contain certain application specific
functionality. Right now, the only there there is an IRegistar
implementation, which didn't seem to fit anywhere else.
Speaking of which, the IRegistrar interface implements all the logic related
to registration and verification of email addresses. Think the equivalent of
MailList.AddMember() except generalized out of a mailing list context. This
latter will eventually go away. The IRegistrar sends the confirmation email.
Added an IDomain interface, though the only implementation of this so far
lives in the registration.txt doctest. This defines the context necessary for
domain-level things, like address confirmation.
A bunch of other cleanups in modules that are necessary due to the refactoring
of Pending, but don't affect anything that's actually tested yet, so I won't
vouch for them (except that they don't throw errors on import!).
Clean up Defaults.py; also turn the functions seconds(), minutes(), hours()
and days() into their datetime.timedelta equivalents.
Consolidated the bogus email address exceptions.
In some places where appropriate, use email 4.0 module names instead of the
older brand.
Switch from Mailman.Utils.unique_message_id() to email.utils.make_msgid()
everywhere. This is because we need to allow sending not in the context of a
mailing list (i.e. domain-wide address confirmation message). So we can't use
a Message-ID generator that requires a mailing list. OTOH, this breaks
Message-ID collision detection in the mail->news gateway. I'll fix that
eventually.
Remove the 'verified' row on the Address table. Now verification is checked
by Address.verified_on not being None.
|
| |
|
|
|
|
|
|
|
|
|
| |
Ignore mailman.egg-info
In bin/make_instance.py: Catch and ignore import errors when importing
Mailman.i18n. Before this script has actually been run, there won't be enough
infrastructure in place of the import to succeed. Include several other fixes
in this file.
Add install_requires to the setup script.
|
| | |
|
| |
|
| |
The caller may want to override the list setting.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
name in more than one domain.
- Totally eradicate MAILMAN_SITE_LIST, and in fact the entire need for a site
list. The functions that the site list previously performed are either
removed or supported in other ways. For example, instead of forwarding
owner bounces to the site list, we now have a SITE_OWNER_ADDRESS which
should point to a human, and such bounces are sent there instead. There's
also a "no reply" email address that should be set up to go to devnull. For
any message that never expects a reply, the sender is set to this address.
- Remove the Site.py module. It was an experimental approach to trying to
support virtual domains, and we're going to do it so much better now that
this module is no longer necessary. Site._makedirs() -> Utils.makedir().
- VIRTUAL_HOST_OVERVIEW is completely removed, since now virtual hosts are
always enabled. Virtual domains should be added to mailman.cfg by using the
new add_domain() function. add_virtualhost() is gone. If no virtual
domains are added explicitly, we add the default one that configure guessed
(but we never add that if domains are added explicitly).
- Utils.get_domain() -> Utils.get_request_domain()
- withlist code cleanup and make sure that we load etc/mailman.cfg
- A new base exception called MailmanException is added, from which all
exceptions defined in Errors.py ultimately derive. MailmanError is retained
and derives from MailmanException.
- BadDomainSpecificationError is added.
- Remove the -V/--virtual-host-overview option from list_lists and add instead
-d/--domain and -f/--full.
- bin/update probably works but needs more testing.
- bin/newlist and bin/rmlist take fqdn list names, but default to the default
domain if @whatever isn't given. newlist's -u/--urlhost and -e/--emailhost
options are removed. The domain that the list is being added to must
already exist.
- Minor code cleanup in Message.py
- Bump version to 2.2.0a1
- The Configuration object grows a .domain dictionary which maps email hosts
to url hosts. The reverse mapping is supported, but not directly; use
Configuration.get_email_host() instead.
- Mailman/Cgi/create is converted from mm_cfg to config, and some minor code
cleanup is performed. Also, convert to __i18n_templates__ = True.
- New MailList APIs:
+ property .fqdn_listname
+ GetNoReplyEmail()
+ Create() API changes and refactoring.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
traces of our crufty old Syslog. Most of this work was purely mechanical,
except for:
1) Initializing the loggers. For this, there's a new module
Mailman/loginit.py (yes all modules from now on will use PEP 8
names). We can't call this 'logging.py' because that will
interfere with importing the stdlib module of the same name (can
you say Python 2.5 and absolute imports?).
If you want to write log messages both to the log file and to
stderr, pass True to loginit.initialize(). This will turn on
propagation of log messages to the parent 'mailman' logger, which
is set up to print to stderr. This is how bin/qrunner works when
not running as a subprocess of mailmanctl.
2) The driver script. I had to untwist the StampedLogger stuff and
implement differently printing exceptions and such to log/error
because standard logging objects don't have a write() method. So
we write to a cStringIO and then pass that to the logger.
3) SMTPDirect.py because of the configurability of the log messages.
This required changing SafeDict into a dict subclass (which is
better than using UserDicts anyway -- yay Python 2.3!). It's
probably still possible to flummox things up if you change the
name of the loggers in the SMTP_LOG_* variables in mm_cfg.py.
However, the worst you can do is cause output to go to stderr and
not go to a log file.
Note too that all entry points into the Mailman system must call
Mailman.loginit.initialize() or the log output will go to stderr
(which may occasionally be what you want). Currently all CGIs and
qrunners should be working properly.
I wish I could have tested all code paths that touch the logger, but
that's infeasible. I have tested this, but it's possible that there
were some mistakes in the translation.
- Mailman.Bouncers.BounceAPI.Stop is a singleton, but not a class
instance any more.
- True/False code cleanup, PEP 8 import restructuring, whitespace
normalization, and copyright year updates, as appropriate.
|
| |
|
|
|
|
|
|
|
|
|
| |
- Remove True/False binding cruft
- Remove __future__ statements for nested scopes
- Remove ascii_letters import hack from Utils.py
- Remove mimetypes.guess_all_extensions import hack from Scrubber.py
- In Pending.py, set _missing to object() (better than using [])
Also, update copyright years where appropriate, and re-order imports more to
my PEP 8 tastes. Whitespace normalize.
|
| | |
|
| | |
|
| |
|
|
| |
Also, i18n fix.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
| |
list but attempts to confirm to a different list, we want to disallow
this and send notifications to the owners of both attacked lists.
Closes SF bug # 703941 by Stuart Bishop.
Also True/False where appropriate.
|
| | |
|
| |
|
|
|
|
|
|
| |
subscribeack.txt, as 'user' (like userpass.txt already has.) This allows you
to write subscribeack.txt's that go like:
You subscribed using the email address %(user)s. If you wish to change
this, please visit ... [etc]
|
| |
|
|
|
| |
argument, because by the time we get here, the member has already been
unsubscribed.
|
| |
|
|
|
|
|
|
| |
is changing. We no longer pass the sender in since that's calculated
to be the site list's -bounces address to prevent mail loops when a
list's owner bounces.
Problem diagnosed by Peer Heinlein.
|
| |
|
|
|
| |
these messages are destined for one recipient anyway, we'll turn on
VERP if VERP_PERSONALIZED_DELIVERIES is enabled.
|
| |
|
|
|
| |
argument (since they can calculate that from the mlist argument).
Found by Mentor Cana.
|
| | |
|
| |
|
|
|
|
| |
OwnerNotification class in Message.py. We don't need the recips
argument since we're always going to calculate that from self's owners
and moderators (if the tomoderators flag is true).
|
| |
|
|
| |
specified. Patch supplied by Tokio Kikuchi.
|
| |
|
|
| |
messages into a single method.
|
| |
|
|
| |
Tollef Fog Heen, with a friendly reminder from Marc MERLIN.
|
| |
|
|
| |
to the subscription notification.
|
| |
|
|
|
|
| |
SendUnsubscribeAck(), MailUserPassword(): These now look like they're
coming from the -bounces address instead of the -admin address, which
is deprecated.
|
| |
|
|
|
|
|
|
| |
creating the UserNotification message object, pass in the language
that the message should be in. This allows us to get the character
set and header encodings right.
Patch by Ben Gertzfield.
|
| |
|
|
| |
sent to the user when they're unsubscribed.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
getMemberPassword(user). First, we assert that the user is a
member because there should be no way to get here if that's not
the case. Second, it is a nasty bug if the user does not have a
valid password, but one that the list administrator really can do
little about. Instead, if the user is found to have a `false'
password, we simply assign them a new one, which is fine because
they're asking for their password now, so we'll just ship them the
new one.
This means we no longer need templates/*/nopass.txt, soon to be
deleted. It also means that we won't raise MMBadUserError here,
which is fine because the caller never checked for that exception
anyway. ;)
|
| |
|
|
| |
GetPreferredLanguage() -> getMemberLanguage()
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
GetConfigInfo(): Removed. All admin ui gui elements are moved into
components in the Mailman/Gui subdirectory.
All membership related attribute access should use the MemberAdaptor
API instead, e.g.
IsMember() -> isMember()
GetUserOption() -> getMemberOption()
SetUserOption() -> setMemberOption()
Also use ApprovedDeleteMember() instead of DeleteMember().
Deliverer.py:
Remove last vestiges of os.environ['LANG']
Digester.py:
SetUserDigest(): Removed. This is replaced by
OldStyleMemberships's setMemberOption() method when flag ==
mm_cfg.Digests
|
| |
|
|
|
|
|
|
|
| |
in the userpass.txt notification. Change the 'adminaddr' key to
'owneraddr' since we want them to contact the list-owner@ with
questions, not the list-admin@ (which does bounce processing).
Also, sent the message as if it were coming from the -admin address
not the -request address.
|
| |
|
|
|
|
|
|
| |
user's preferred language, also pass in self so maketext() can dig out
the list's preferred language if for some odd reason the user's
preferred language can't be found.
Also, remove the obsolete os.environ['LANG'] setting.
|
| |
|
|
|
|
|
| |
Fix the Utils.maketext() calls to pass the language in as a keyword
argument.
Fix some _() wrappings to use local variables.
|
| |
|
|
|
|
|
|
| |
De-string-module-ify.
References to HandlerAPI module removed.
Use new mimelib interface.
|
| |
|
|
|
| |
SendSubscribeAck(), SendUnsubscribeAck(), MailUserPassword(): Set
$LANG to user's preferred language. Call maketext() with language.
|
| | |
|
| |
|
|
|
| |
this message should not be archived. Set "X-No-Archive: yes". Closes
SF bug #114193.
|
| |
|
|
| |
absolute=1)
|
| |
|
|
| |
wasn't set.
|
| | |
|
| |
|
|
|
|
| |
of listname-admin as the sender of the acknowledgment.
MailUserPassword(): Removed some debugging code.
|
| |
|
|
| |
text, otherwise this messes up the message headers.
|
| |
|
|
|
|
|
|
| |
message pipeline modules. Specifically,
AddNonStandardHeaders(), SendTextToUser(), DeliverToUser(),
QuotePeriods(), DeliverToOwner(), DeliverToList(),
CreateSubscribeAck(): All these methods have been removed.
|
| |
|
|
|
| |
X-Confirm-Reading-To: to get automated receipts, so we need to remove
this header too.
|