[Checkins] SVN: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/ Copyright added and methods memoized.
Charlie Clark
charlie at begeistert.org
Mon Oct 11 14:40:06 EDT 2010
Log message for revision 117460:
Copyright added and methods memoized.
Changed:
U Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/members.py
U Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/test_members.py
-=-
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/members.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/members.py 2010-10-11 18:27:55 UTC (rev 117459)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/members.py 2010-10-11 18:40:05 UTC (rev 117460)
@@ -1,8 +1,18 @@
-"""
-Forms for managing members
-"""
+##############################################################################
+#
+# Copyright (c) 2008 Zope Foundation and Contributors.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+""" Forms for managing members """
+
from logging import getLogger
-LOG = getLogger("Manage Members Form")
from zope.interface import Interface
from zope.formlib import form
@@ -22,6 +32,7 @@
from Products.CMFDefault.browser.content.folder import BatchViewBase
from Products.CMFDefault.browser.content.interfaces import IBatchForm
+
class IMemberItem(Interface):
"""Schema for portal members """
@@ -33,13 +44,13 @@
required=False,
readonly=True
)
-
+
email = TextLine(
title=_(u"E-mail Address"),
required=False,
readonly=True
)
-
+
last_login = Date(
title=_(u"Last Login"),
required=False,
@@ -49,7 +60,7 @@
class MemberProxy(object):
"""Utility class wrapping a member for display purposes"""
-
+
def __init__(self, member):
login_time = member.getProperty('login_time')
self.login_time = '2000/01/01' and '---' or login_time.Date()
@@ -60,7 +71,7 @@
class Manage(BatchViewBase, EditFormBase):
-
+
label = _(u"Manage Members")
template = ViewPageTemplateFile("members.pt")
delete_template = ViewPageTemplateFile("members_delete.pt")
@@ -68,7 +79,7 @@
prefix = 'form' # required for hidden fields to work
form_fields = form.FormFields()
hidden_fields = form.FormFields(IBatchForm)
-
+
manage_actions = form.Actions(
form.Action(
name='new',
@@ -84,7 +95,7 @@
validator=('validate_items')
)
)
-
+
delete_actions = form.Actions(
form.Action(
name='delete',
@@ -99,10 +110,11 @@
)
actions = manage_actions + delete_actions
+ @memoize
def _get_items(self):
mtool = self._getTool('portal_membership')
return mtool.listMembers()
-
+
def members_exist(self, action=None):
return len(self._getBatchObj()) > 0
@@ -111,7 +123,8 @@
ids = [k[:-7] for k, v in data.items()
if v is True and k.endswith('.select')]
return ids
-
+
+ @memoize
def member_fields(self):
"""Create content field objects only for batched items
Also create pseudo-widget for each item
@@ -125,7 +138,7 @@
members.append(MemberProxy(item))
self.listBatchItems = members
return fields
-
+
def setUpWidgets(self, ignore_request=False):
"""Create widgets for the members"""
super(Manage, self).setUpWidgets(ignore_request)
@@ -144,20 +157,20 @@
def handle_add(self, action, data):
"""Redirect to the join form where managers can add users"""
return self._setRedirect('portal_actions', 'user/join')
-
+
def handle_select_for_deletion(self, action, data):
"""Identify members to be deleted and redirect to confirmation
template"""
self.guillotine = ", ".join(self._get_ids(data))
return self.delete_template()
-
+
def handle_delete(self, action, data):
"""Delete selected members"""
mtool = self._getTool('portal_membership')
mtool.deleteMembers(self._get_ids(data))
self.status = _(u"Selected members deleted")
self._setRedirect('portal_actions', "global/manage_members")
-
+
def handle_cancel(self, action, data):
"""Don't delete anyone, return to list"""
self.status = _(u"Deletion broken off")
@@ -165,28 +178,31 @@
class Roster(BatchViewBase):
-
+
hidden_fields = form.FormFields(IBatchForm)
form_fields = form.FormFields()
actions = ()
template = ViewPageTemplateFile("members_list.pt")
-
+
+ @property
+ @memoize
def mtool(self):
return self._getTool('portal_membership')
-
+
+ @memoize
def isUserManager(self):
- return self.mtool().checkPermission('Manage users',
- self.mtool().getMembersFolder()
+ return self.mtool.checkPermission('Manage users',
+ self.mtool.getMembersFolder()
)
-
+
@memoize
def _get_items(self):
(key, reverse) = self.context.getDefaultSorting()
items = self.mtool().getRoster()
items = sort(items, ((key, 'cmp', reverse and 'desc' or 'asc'),))
- return items
return LazyFilter(items, skip='View')
-
+
+ @memoize
def listBatchItems(self):
members = []
for item in self._getBatchObj():
@@ -196,4 +212,3 @@
member['listed'] = member['listed'] and _(u"Yes") or _("No")
members.append(member)
return members
-
\ No newline at end of file
Modified: Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/test_members.py
===================================================================
--- Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/test_members.py 2010-10-11 18:27:55 UTC (rev 117459)
+++ Products.CMFDefault/trunk/Products/CMFDefault/browser/membership/tests/test_members.py 2010-10-11 18:40:05 UTC (rev 117460)
@@ -10,8 +10,7 @@
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
-""" Test Products.CMFDefault.browser.folder
-"""
+""" Tests for membership views """
import unittest
@@ -34,26 +33,26 @@
class DummyUser(DummyUser):
-
+
def getProperty(self, attr):
return None
class DummyMemberTool(object):
-
+
def __init__(self):
self.members = {}
-
+
def listMembers(self):
return self.members.values()
-
+
def addMember(self, member):
self.members[member.getId()] = member
-
+
def deleteMembers(self, member_ids):
for i in member_ids:
del self.members[i]
-
+
def isAnonymousUser(self):
return True
@@ -78,13 +77,13 @@
for i in range(batch_size + 2):
user_id = "Dummy%s" % i
self._make_one(user_id)
-
+
def test_getNavigationURL(self):
url = 'http://example.com/members.html'
self._make_batch()
view = Manage(self.site, TestRequest(ACTUAL_URL=url))
self.assertTrue(view._getNavigationURL(25) == url + "?form.b_start=25")
-
+
def test_view(self):
view = Manage(self.site, TestRequest())
self.assertTrue(IBrowserPublisher.providedBy(view))
@@ -114,7 +113,7 @@
view._get_ids({'stupid.name.select.select':True}),
['stupid.name.select']
)
-
+
def test_handle_select_for_deletion(self):
view = Manage(self.site, TestRequest())
self.assertTrue(view.guillotine == None)
More information about the checkins
mailing list