------------------------------------------------------------
revno: 6555
committer: Barry Warsaw <[EMAIL PROTECTED]>
branch nick: 3.0
timestamp: Wed 2007-09-19 22:35:37 -0400
message:
InitTempVars() is completely eradicated. The only bit I think we
still need temporarily is the _gui component initialization, so this
has been moved into MailList.__init__().
Fixed the __getattr__() super call to properly dispatch up.
Removed the _memberadaptor instance variable initialization. The
whole MemberAdaptor stuff is next on the chopping block.
Essentially MailList locking is gone too now, although it's not yet
completely eradicated. However, the __repr__() no longer states the
lock status.
The full_path property is now just an attribute on the underlying
MailingList database object.
modified:
Mailman/MailList.py
Mailman/database/model/mailinglist.py
Mailman/docs/hold.txt
Mailman/docs/membership.txt
Mailman/docs/requests.txt
TODO.txt
=== modified file 'Mailman/MailList.py'
--- a/Mailman/MailList.py 2007-09-19 11:28:58 +0000
+++ b/Mailman/MailList.py 2007-09-20 02:35:37 +0000
@@ -97,12 +97,16 @@
def __init__(self, data):
self._data = data
- # Only one level of mixin inheritance allowed
+ # Only one level of mixin inheritance allowed.
for baseclass in self.__class__.__bases__:
if hasattr(baseclass, '__init__'):
baseclass.__init__(self)
- # Initialize volatile attributes
- self.InitTempVars()
+ # Initialize the web u/i components.
+ self._gui = []
+ for component in dir(Gui):
+ if component.startswith('_'):
+ continue
+ self._gui.append(getattr(Gui, component)())
# Give the extension mechanism a chance to process this list.
try:
from Mailman.ext import init_mlist
@@ -114,15 +118,11 @@
def __getattr__(self, name):
missing = object()
if name.startswith('_'):
- return super(MailList, self).__getattr__(name)
+ return getattr(super(MailList, self), name)
# Delegate to the database model object if it has the attribute.
obj = getattr(self._data, name, missing)
if obj is not missing:
return obj
- # Delegate to the member adapter next.
- obj = getattr(self._memberadaptor, name, missing)
- if obj is not missing:
- return obj
# Finally, delegate to one of the gui components.
for guicomponent in self._gui:
obj = getattr(guicomponent, name, missing)
@@ -132,12 +132,7 @@
raise AttributeError(name)
def __repr__(self):
- if self.Locked():
- status = '(locked)'
- else:
- status = '(unlocked)'
- return '<mailing list "%s" %s at %x>' % (
- self.fqdn_listname, status, id(self))
+ return '<mailing list "%s" at %x>' % (self.fqdn_listname, id(self))
#
@@ -170,15 +165,6 @@
- #
- # Useful accessors
- #
- @property
- def full_path(self):
- return self._full_path
-
-
-
# IMailingListAddresses
@property
@@ -278,42 +264,6 @@
#
- # Instance and subcomponent initialization
- #
- def InitTempVars(self):
- """Set transient variables of this and inherited classes."""
- # Because of the semantics of the database layer, it's possible that
- # this method gets called more than once on an existing object. For
- # example, if the MailList object is expunged from the current db
- # session, then this may get called again when the object's persistent
- # attributes are re-read from the database. This can have nasty
- # consequences, so ensure that we're only called once.
- if hasattr(self, '_lock'):
- return
- # Attach a membership adaptor instance.
- parts = config.MEMBER_ADAPTOR_CLASS.split(DOT)
- adaptor_class = parts.pop()
- adaptor_module = DOT.join(parts)
- __import__(adaptor_module)
- mod = sys.modules[adaptor_module]
- self._memberadaptor = getattr(mod, adaptor_class)(self)
- self._make_lock(self.fqdn_listname)
- # Create the list's data directory.
- self._full_path = os.path.join(config.LIST_DATA_DIR,
self.fqdn_listname)
- Utils.makedirs(self._full_path)
- # Only one level of mixin inheritance allowed
- for baseclass in self.__class__.__bases__:
- if hasattr(baseclass, 'InitTempVars'):
- baseclass.InitTempVars(self)
- # Now, initialize our gui components
- self._gui = []
- for component in dir(Gui):
- if component.startswith('_'):
- continue
- self._gui.append(getattr(Gui, component)())
-
-
- #
# Web API support via administrative categories
#
def GetConfigCategories(self):
=== modified file 'Mailman/database/model/mailinglist.py'
--- a/Mailman/database/model/mailinglist.py 2007-08-06 03:49:04 +0000
+++ b/Mailman/database/model/mailinglist.py 2007-09-20 02:35:37 +0000
@@ -15,10 +15,12 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
+import os
+
from elixir import *
from zope.interface import implements
-from Mailman.Utils import fqdn_listname, split_listname
+from Mailman.Utils import fqdn_listname, makedirs, split_listname
from Mailman.configuration import config
from Mailman.interfaces import *
from Mailman.database.types import EnumType, TimeDeltaType
@@ -174,6 +176,8 @@
# 2-tuple of the date of the last autoresponse and the number of
# autoresponses sent on that date.
self.hold_and_cmd_autoresponses = {}
+ self.full_path = os.path.join(config.LIST_DATA_DIR, fqdn_listname)
+ makedirs(self.full_path)
# XXX FIXME
def _restore(self):
=== modified file 'Mailman/docs/hold.txt'
--- a/Mailman/docs/hold.txt 2007-09-17 02:10:05 +0000
+++ b/Mailman/docs/hold.txt 2007-09-20 02:35:37 +0000
@@ -19,12 +19,6 @@
>>> mlist._data.web_page_url = 'http://lists.example.com/'
>>> flush()
-XXX The Hold handler requires that the mailing list be locked because it
-touches the pending database. Eventually the pending database should be moved
-into the real database so that the lock is no longer necessary.
-
- >>> mlist.Lock()
-
Here's a helper function used when we don't care about what's in the virgin
queue or in the pending database.
@@ -380,4 +374,3 @@
Clean up.
>>> clear()
- >>> mlist.Unlock()
=== modified file 'Mailman/docs/membership.txt'
--- a/Mailman/docs/membership.txt 2007-08-06 03:49:04 +0000
+++ b/Mailman/docs/membership.txt 2007-09-20 02:35:37 +0000
@@ -19,7 +19,7 @@
>>> mlist = config.db.list_manager.create('[EMAIL PROTECTED]')
>>> flush()
>>> mlist
- <mailing list "[EMAIL PROTECTED]" (unlocked) at ...>
+ <mailing list "[EMAIL PROTECTED]" at ...>
>>> sorted(member.address.address for member in mlist.members.members)
[]
>>> sorted(user.real_name for user in mlist.members.users)
=== modified file 'Mailman/docs/requests.txt'
--- a/Mailman/docs/requests.txt 2007-09-16 16:08:24 +0000
+++ b/Mailman/docs/requests.txt 2007-09-20 02:35:37 +0000
@@ -48,7 +48,7 @@
>>> verifyObject(IListRequests, requests)
True
>>> requests.mailing_list
- <mailing list "[EMAIL PROTECTED]" (unlocked) at ...>
+ <mailing list "[EMAIL PROTECTED]" at ...>
Holding requests
=== modified file 'TODO.txt'
--- a/TODO.txt 2007-09-19 11:28:58 +0000
+++ b/TODO.txt 2007-09-20 02:35:37 +0000
@@ -3,7 +3,6 @@
Fix the XXX in model/requests.py where we need a flush because we can't get to
last_inserted_id()
-Get rid of InitTempVars()
Get rid of PickleTypes
Get rid of MailList class!
Add tests for bin/newlist and bin/rmlist
--
https://code.launchpad.net/~mailman-coders/mailman/3.0
You are receiving this branch notification because you are subscribed to it.
To unsubscribe from this branch go to
https://code.launchpad.net/~mailman-coders/mailman/3.0/+subscription/mailman-checkins.
_______________________________________________
Mailman-checkins mailing list
[email protected]
Unsubscribe:
http://mail.python.org/mailman/options/mailman-checkins/archive%40jab.org