| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
|
|
|
| |
into the IMailingList interface. OTOH, MemberAdaptor.py is completely useless
now (though not entirely eradicated), as is OldStyleMemberships.py.
versions.py isn't necessary any longer either because we'll have to do
database migrations (and conversions from MM2.1) completely differently.
New command line script 'set_members' which is used to take a CSV file and
syncing that to a list's membership.
Added back the DeliveryStatus.unknown item because we'll need it when we
migrate MM 2.1 databases.
|
| |
|
|
|
|
|
|
|
|
|
| |
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.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
bogus apparent messages into the error log, possibly inducing an admin to
visit a phishing site.
- options.py
Topics.py
Tagger.py
MailList.py
Utils.py
Version.py
versions.py
The processing of Topics regular expressions has changed. Previously the
Topics regexp was compiled in verbose mode but not documented as such
which caused some confusion. Also, the documentation indicated that topic
keywords could be entered one per line, but these entries were not
properly. Topics regexps are now compiled in non-verbose mode and multi-
line entries are 'ored'. Existing Topics regexps will be converted when
the list is updated so they will continue to work.
|
| |
|
|
| |
email.message_from_string(text, Message.Message)
(Sourceforge is migrating from 1.x - scary)
|
| |
|
|
|
|
| |
the builtin types. Two still remain: a check against ClassType and a check
against MethodType. Also, fix some hinky type comparisons to use isinstance()
consistently.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
| |
|
|
|
|
|
| |
email addresses
and regular expressions matching email addresses whose subscriptions are exempt
from admin approval. RFE 403066.
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
| |
message. This is especially the case when debugging your filtering
rules. To support this we now have a "filter action" which can be
Discard, Reject, Forward to Admin, Preserve on disk.
NewVars(): Add 'filter_action' if missing.
|
| |
|
|
| |
default.
|
| |
|
|
|
|
| |
NewVars(): Add pass_mime_types if missing.
Also, whitespace normalization and PyChecker cleanup.
|
| | |
|
| |
|
|
|
|
|
|
| |
and `member_posting_only' get translated into the new variables
`generic_nonmember_action', `default_member_moderation',
`accept_these_nonmembers', and member Moderate flags.
This (hopefully) closes SF bug #573071.
|
| |
|
|
|
|
|
|
| |
munging, separate from the mail list. This actually restores the
original Subject: field which is stashed away in the metadata when
it's munged in CookHeaders.
NewVar(): Add the news_prefix_subject_too attribute if it's missing.
|
| |
|
|
| |
missing.
|
| |
|
|
|
|
|
| |
delivery_status when deciding how/when to clean up the bounce_info
dict. Now we always clean it up by removing any bounce_info keys
which are "not isMember()" and which do not have an instance of
_BounceInfo in their value.
|
| |
|
|
|
|
| |
UpdateOldUsers(): Only zap bounce_info if there's no delivery_status
attribute, otherwise every time we changed DATA_FILE_VERSION, we'd zap
all the bounce information!
|
| | |
|
| |
|
|
|
| |
NewVars(): Add attributes filter_mime_types, filter_content, and
convert_html_to_plaintext if they are missing.
|
| |
|
|
|
|
| |
trolling through user_options), we must continue after deleting the
entry in user_options, otherwise the subsequent getMemberOption() call
will fail.
|
| | |
|
| |
|
|
|
|
|
| |
on disabled-due-to-bounces and removal-due-to-bounces. Specifically,
NewVars(): Add bounce_notify_owner_on_disable and
bounce_notify_owner_on_removal if missing.
|
| |
|
|
|
| |
the list's moderate attribute is enabled, then we need to set each
member's Moderate option to true.
|
| |
|
|
|
|
|
|
|
|
|
| |
user_options, skip the key if its not a member. This can happen when
upgrading legacy databases because I believe there were bugs long ago
that caused some keys to appear in user_options but not in members or
digest_members.
Also, we now have a mini-version id for the user_options stuff so
CanonicalizeUserOptions() won't try to run every time some other part
of the schema changes.
|
| |
|
|
| |
attribute.
|
| |
|
|
|
|
|
|
| |
written by Ben Gertzfield, ported to MM2.1 by Marc MERLIN.
Specifically,
NewVars(): Pick up the new_member_options attribute.
|
| |
|
|
| |
member_moderation_notice.
|
| |
|
|
|
|
|
|
| |
attribute in the latter function, only do it in the former function.
Otherwise every time the DATA_FILE_VERSION gets updated, all your
users' nomail options will be cleared. Arrrggghh!
Thanks to Dan Mick for enduring the pain.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
| |
minimum_removal_date, minimum_post_count_before_bounce_action,
automatic_bounce_action, and max_posts_between_bounces.
NewVars(): Add new bounce scoring attributes bounce_score_threshold,
bounce_info_stale_after, bounce_you_are_disabled_warnings,
bounce_you_are_disabled_warnings_interval.
UpdateOldVars(): Clear out bounce_info. We don't need to migrate any
of this data. Instead we'll just start bounce scoring from scratch.
|
| |
|
|
| |
DisableDelivery member option to the new delivery_status dictionary.
|
| |
|
|
| |
include_rfc2369_headers to the list object if they are missing.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the new ones. I think this is as close as we can get:
- add default_member_moderation, accept_these_nonmembers,
hold_these_nonmembers, reject_these_nonmembers,
discard_these_nonmembers, forward_auto_discards,
generic_nonmember_action
- moderated -> generic_nonmember_action, also if we were moderating
this list, then the generic_nonmember_action should be to hold the
message, otherwise it should be to accept it.
- for each address in forbidden_posters, if the address is a member,
set their moderate flag to true, otherwise add them to
hold_these_nonmembers.
- posters (fun! not.) and member_posting_only: if member_posting_only
== yes and there are posters, then they are members and non-members
we automatically accept. So for members, turn off their moderation
bit, and for non-members we add them to accept_these_nonmembers.
BUT! if member_post_only == no, posters is the list of addresses we
only accept, with all others being held. So, first turn the
moderation bit on for all members, then for addresses in posters
which are members, turn their moderation bit off, and for addresses
which are nonmembers, add them to accept_these_nonmembers. Phew!
|
| | |
|
| |
|
|
| |
NewVars(): Add available_languages attribute if missing.
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
attribute to those that should be zapped:
public_archive_file_dir
private_archive_file_dir
archive_directory
All three can be calculated, and it makes moving a list much easier if
they are, instead of being kept as attributes in the list.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
don't already have them:
- topics: a list of all admin specified topics
- topics_enabled: a flag specifying whether topics are enabled
- topics_bodylines_limit: the number of lines of the body that the
topic tagger should look for Subject: and Keywords: lines
- one_last_digest: A hold over from an earlier time, this holds
addresses of folks who switched from digest to regular
delivery
- usernames: holds the dictionary of email addresses to Real Names
but if a user has no assigned Real Name, they have no entry in
this dictionary.
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
| |
variable.
NewVars(): MailList objects grow a digest_volume_frequency and
digest_last_sent_at attributes.
|
| |
|
|
|
|
|
|
| |
MailList object. I don't think this was ever used and there are
better ways to do this now. Make sure this gets into the NEWS file.
NewVars(): Simplify interface by using a local=global trick (this
won't be necessary in Python 2.1!)
|
| |
|
|
|
| |
ZapOldVars(): Remove `num_spawns' attribute if the list object still
has it.
|