| Commit message (Collapse) | Author | Files | Lines |
|
recent checkins.
|
|
- There's no more GetConfigInfo() in the mixin classes. All admin
ui categories and content comes from components in the new
Mailman.Gui package.
- All MailList attribute access for user-centric information is
moved out of here into the OldStyleMemberships (a subclass, aka
implementation of the MemberAdaptor interface).
- An extension mechanism to MailList objects has been added. Drop
a file called extend.py in the lists/<yourlist> directory; this
gets execfile'd, and the function extend() is called after the
instance is initialized. Use this to override anything
(e.g. the _memberadaptor attribute).
- Lots of code reorganization.
Specific changes:
MailList subclasses: Added TopicMgr
__init__(): Don't call MailCommandHandler.__init__() explicitly.
Instead, loop through base classes calling their __init__()'s if
they have them.
Initialize _memberadaptor to be an OldStyleMemberships instance.
After the instance has been locked and loaded <snort!> execfile
extend.py and run its extend() function, if it has one.
InitTempVars(): Like __init__(), cycle through all base classes,
calling each's InitTempVars() if they have one. Also, instantiate
the gui components by dir'ing the Gui package and instantiating
each callable not prefixed by _ (they will be the individual
classes).
GetMembers(), GetDigestMembers(), GetDeliveryMembers(),
GetDigestDeliveryMembers(), __AddMember(),
GetUserSubscribedAddress(), GetUserCanonicalAddress(),
GetUserOption(), SetUserOption(), FindUser(): Removed.
__getattr__(): Added for auto-delegation first to the _memberadaptor,
and then to the gui components.
__repr__(): Change the printable representation slightly so that
"(unlocked)" is printed if the list is unlocked, and also to not
include the class/module name. Also use %x format instead of
coercing the id to hex().
InitVars(): Add usernames and passwords dicts for traditional
membership management. Like __init__(), cycle through all base
classes, calling each's InitVars() if they have one. Set
self.password here instead of in SecurityManager's InitVar().
GetConfigCategories(): New method which returns a CategoryDict
instance (subclass of UserDict), containing the order
ADMIN_CATEGORIES as extracted from the gui components
GetConfigCategory() methods.
GetConfigSubCategories(): For a particular category, get the list of
subcategories by calling a gui component's
GetConfigSubCategories() method if it has one.
GetConfigInfo(): Delegate to gui components.
Save(): Ignore attributes if their name starts with _ (like before) or
if their value type is MethodType.
AddMember(): Rewrite to use (Python 2.2's) rfc822.parseaddr() which
supplants Utils.ParseAddrs(). We also don't remove spaces from
the name any more, but we do still lowercase the domain. Also,
IsMember() -> isMember(). Call ApprovedAddMember() passing in the
fullname. Same with HoldSubscription().
ApprovedAddMembers(): Use MemberAdaptor API, and
rfc822.parseaddr().
DeleteMember() -> ApprovedDeleteMember(). Also rewrite to use
MemberAdaptor API.
ChangeMemberName(): New method which changes a member's real name,
both for this list, and globally.
ChangeMemberAddress(), ApprovedChangeMemberAddress(): Use
MemberAdaptor API.
ProcessConfirmation(): DeleteMember() -> ApprovedDeleteMember().
GetPreferredLanguage(): Allow name to default to None, meaning return
the list's preferred_language.
|
|
MMAlreadyAMember: Make these class based exceptions.
MemberError, NotAMemberError, AlreadyReceivingDigests,
AlreadyReceivingRegularDeliveries, CantDigestError, MustDigestError:
Add these "new wave" exceptions, which are raised by the
MemberAdaptors.
NB: I really need to go through and make all the exceptions sane!
|
|
API instead, e.g.
IsMember() -> isMember()
self.passwords.* -> getMemberPassword()
ConfirmUserPassword() -> [do the comparison ourselves]
ChangeUserPassword() -> setMemberPassword()
GetUserOption() -> getMemberOption()
GetDigestMembers() -> getDigestMemberKeys()
GetMembers() -> getRegularMemberKeys()
DeleteMember() -> ApprovedDeleteMember()
option_info: Make order agree w/ option_desc.
ProcessPasswordCmd(): Fix the response string so that it isn't broken
on two lines. Remove unnecessary exception handlers.
be raised.
ProcessOptionsCmd(), ProcessSetCmd(), ProcessUnsubscribeCmd(): Rewrite
and simply to use the new membership API. Remove unnecessary
exception handlers.
ProcessSetCommand(): Split usage printing into __setcmd_usage()
method.
|
|
API instead, e.g.
GetDigestMembers() -> getDigestMemberKeys()
GetUserOption() -> getMemberOption()
GetMembers() -> getRegularMemberKeys()
FormatOptionButton(): Add ReceiveNonmatchingTopics flag.
FormatBox(): Add optional `value' parameter, which if supplied is the
default value for teh input box (default is the empty string).
|
|
depends on it).
ADMIN_CATEGORIES: Here's where we define the category names for the
admin ui.
Topics: A new widget type.
ReceiveNonmatchingTopics: New member option flag controlling whether a
user receives or ignores a message that does not matching any topics.
|
|
API instead, e.g.
GetUserOption() -> getMemberOption()
GetPreferredLanguage() -> getMemberLanguage()
IsMember() -> isMember()
GetDigestDeliveryMembers() -> getDigestMemberKeys()
ToDigest.py: clear the one_last_digest() dictionary after sending the
digest.
|
|
API instead, e.g.
GetUserOption() -> getMemberOption()
GetUserSubscribedAddress() -> getMemberCPAddress()
|
|
API instead, e.g.
GetMembers()/GetDigestMembers() -> getMembers()
GetUserSubscribedAddress() -> getMemberCPAddress()
GetDeliveryMembers() -> getRegularMemberKeys()
GetDigestDeliveryMembers() -> getDigestMemberKeys()
|
|
|