Changeset 646
- Timestamp:
- 11/23/06 02:49:32
- Files:
-
- qMemberdataExport/trunk/BaseMemberdataHandler.py (added)
- qMemberdataExport/trunk/CMFMemberdataHandler.py (added)
- qMemberdataExport/trunk/Extensions/Install.py (modified) (2 diffs)
- qMemberdataExport/trunk/Extensions/getMemberData.py (modified) (1 diff)
- qMemberdataExport/trunk/MemberdataHandlers.py (added)
- qMemberdataExport/trunk/__init__.py (modified) (1 diff)
- qMemberdataExport/trunk/config.py (modified) (1 diff)
- qMemberdataExport/trunk/tests/commonTestingStuff.py (modified) (5 diffs)
- qMemberdataExport/trunk/tests/runtests.sh (modified) (1 diff)
- qMemberdataExport/trunk/tests/testExternalMethod.py (modified) (1 diff)
- qMemberdataExport/trunk/tests/testFunctional.py (modified) (1 diff)
- qMemberdataExport/trunk/tests/testInstallation.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
qMemberdataExport/trunk/Extensions/Install.py
r645 r646 31 31 script = getattr(self, PYTHON_SCRIPT) 32 32 if script: 33 script.ZPythonScript_edit('', 'return context.%s(context)' % EXTERNAL_METHOD) 33 script.ZPythonScript_edit(params='start=0,batch=400,exclude_props=None,include_props=None', 34 body='return context.%s(context, start, batch, exclude_props, include_props)' % EXTERNAL_METHOD) 34 35 out.write('%s python script added to portal\n' % PYTHON_SCRIPT) 35 36 else: out.write('installation procedure could not create python script\n') … … 45 46 46 47 # add python script 47 addPythonScript(self, out)48 # addPythonScript(self, out) 48 49 49 50 return out.getvalue() qMemberdataExport/trunk/Extensions/getMemberData.py
r645 r646 1 def getMemberData( context):1 def getMemberData(self, start=0, batch=400, exclude_props=None, include_props=None): 2 2 3 3 import csv 4 4 from cStringIO import StringIO 5 5 from DateTime import DateTime 6 from Products.CMFCore.utils import getToolByName 6 from Products.qMemberdataExport import getRegisteredMemberdataHandlers as registry 7 from Products.qMemberdataExport.config import EXCLUDE_PROPS, CLEAR_CACHE_COUNTER 7 8 8 mdtool = getToolByName(context, 'portal_memberdata') 9 mtool = getToolByName(context, 'portal_membership') 9 if exclude_props is None: exclude_props = EXCLUDE_PROPS 10 10 11 props = ['id',] + mdtool.propertyIds() 12 members = mtool.listMembers() 11 memberdatahandler = False 12 13 for handler in registry(): 14 try: 15 memberdatahandler = handler(self) 16 break 17 except: 18 pass 19 20 if not memberdatahandler: return None 21 22 members = memberdatahandler.getAllMembers() 23 24 if batch > len(members) - start: batch = len(members) - start 25 26 members_list = [] 27 counter = 0 28 29 for member in members[start:start+batch]: 30 counter += 1 31 if counter % CLEAR_CACHE_COUNTER == 0: 32 self._p_jar.sync() 33 members_list.append(memberdatahandler.getMemberProperties(member, exclude_props, include_props)) 13 34 14 35 res = StringIO() 15 writer = csv.DictWriter(res, fieldnames = props, quoting=csv.QUOTE_ALL)36 writer = csv.DictWriter(res, fieldnames = memberdatahandler.fieldnames, quoting=csv.QUOTE_ALL) 16 37 17 38 # writing header row 18 writer.writer.writerow(props) 39 writer.writer.writerow(memberdatahandler.fieldnames) 40 # writing body of csv file 41 writer.writerows(members_list) 19 42 20 for member in members: 21 properties = {} 22 for propid in props: 23 properties[propid] = member.getProperty(propid, '') 24 writer.writerow(properties) 25 26 context.REQUEST.RESPONSE.setHeader('Content-Type', 'text/csv') 27 context.REQUEST.RESPONSE.setHeader('Content-Disposition', 'attachment; filename= memberdata-%s.csv' % DateTime().strftime("%Y-%m-%d-%H-%M-%S")) 43 # setting headers for attaching file 44 self.REQUEST.RESPONSE.setHeader('Content-Type', 'text/csv') 45 self.REQUEST.RESPONSE.setHeader('Content-Disposition', 'attachment; filename=memberdata-%s.csv' % DateTime().strftime("%Y-%m-%d-%H-%M-%S")) 28 46 29 47 return res.getvalue() qMemberdataExport/trunk/__init__.py
r645 r646 1 from Products.qMemberdataExport.config import GLOBALS 1 #from AccessControl import allow_module 2 2 3 #allow_module('Products.qMemberdataExport.MemberdataHandlers') 4 5 from MemberdataHandlers import getRegisteredMemberdataHandlers 6 7 # import BaseMemberdataHandler first for registering it as last (default) in list of all registered handlers 8 9 from BaseMemberdataHandler import BaseMemberdataHandler 10 from CMFMemberdataHandler import CMFMemberdataHandler qMemberdataExport/trunk/config.py
r645 r646 5 5 EXTERNAL_METHOD = 'export_memberdata_as_csv' 6 6 PYTHON_SCRIPT = 'exportMemberData' 7 8 CLEAR_CACHE_COUNTER = 100 9 EXCLUDE_PROPS = ['portrait', 'password', 'mail_me', 10 'confirm_password','login_time','last_login_time', 11 'listed','fc_internal_data', 'roles', 'groups', 12 'domains', 'review_state'] qMemberdataExport/trunk/tests/commonTestingStuff.py
r645 r646 5 5 from Products.PloneTestCase import PloneTestCase 6 6 7 from Products.qMemberdataExport.config import *7 from Products.qMemberdataExport.config import PYTHON_SCRIPT, EXTERNAL_METHOD 8 8 9 9 PRODUCTS=('qMemberdataExport',) … … 30 30 import csv 31 31 from cStringIO import StringIO 32 from Products.qMemberdataExport import getRegisteredMemberdataHandlers as registry 32 33 33 props = ['id',] + getToolByName(self.portal, 'portal_memberdata').propertyIds() 34 datahandler = False 35 36 for handler in registry(): 37 try: 38 datahandler = handler(self.portal) 39 break 40 except: 41 pass 42 if datahandler: 43 props = datahandler.listAllMemberProperties(exclude_props=EXCLUDE_PROPS, include_props=INCLUDE_PROPS) 44 else: 45 props = [p for p in ['id',]+getToolByName(self.portal, 'portal_memberdata').propertyIds() if p not in EXCLUDE_PROPS] 34 46 reader = csv.DictReader(StringIO(data), fieldnames = props, quoting=csv.QUOTE_ALL) 35 47 i = 0 … … 39 51 if i != 0 and row['id'] != 'test_user_1_': 40 52 for field in row.keys(): 41 if field in PROPERTIES_TO_COMPARE:properties[field] = row[field]53 properties[field] = row[field] 42 54 res.append(properties) 43 55 i += 1 44 56 self.failUnless(i-2 == len(PORTAL_MEMBERS), 'CSV output does not matcht to amount of portal members') 45 57 members = [memb.copy() for memb in PORTAL_MEMBERS] 46 for memb in members: del memb['roles'] 58 for memb in members: 59 del memb['roles'] 60 del memb['last_login_time'] 47 61 return (members, res) 48 62 … … 55 69 56 70 # testing stuff for adding members to portal 57 58 PROPERTIES_TO_COMPARE = ['id', 'fullname', 'email', 'last_login_time']59 60 71 PORTAL_MEMBERS = [{ 61 72 'id' : 'Fred', … … 83 94 'last_login_time' : '2003/12/31'}, 84 95 ] 96 97 EXCLUDE_PROPS = ['portrait', 'password', 'mail_me', 98 'confirm_password','login_time', 'last_login_time', 99 'listed','fc_internal_data', 'review_state', ] 100 101 INCLUDE_PROPS = ['id', 'fullname', 'email', 'roles', 'domains', 'groups'] qMemberdataExport/trunk/tests/runtests.sh
r645 r646 5 5 6 6 # full path to the python interpretor 7 export PYTHON="/ home/piv/python-2.4.3/bin/python"7 export PYTHON="/path/to/your/python" 8 8 9 9 # path to ZOPE_HOME/lib/python 10 export SOFTWARE_HOME="/ data/piv/work/zope-2.9.5/lib/python"10 export SOFTWARE_HOME="/path/to/your/software/home" 11 11 12 12 13 13 # path to your instance. Don't set it if you aren't having instance 14 export INSTANCE_HOME=" /home/piv/zinstances/something/"14 export INSTANCE_HOME="path/to/your/instance/home/" 15 15 16 16 ${PYTHON} runalltests.py qMemberdataExport/trunk/tests/testExternalMethod.py
r645 r646 24 24 """ Test external script for good csv output stream """ 25 25 26 forCompare = parseCSV(self, self.method(self.portal ))26 forCompare = parseCSV(self, self.method(self.portal, exclude_props=EXCLUDE_PROPS, include_props=INCLUDE_PROPS)) 27 27 self.failUnless(forCompare[0] == forCompare[1], 'Bad output from external method script') 28 28 qMemberdataExport/trunk/tests/testFunctional.py
r645 r646 21 21 for m in PORTAL_MEMBERS: 22 22 addMember(self, m['id'], m['fullname'], m['email'], m['roles'], m['last_login_time']) 23 self.response = self.sendRequest('%s/%s' % (self.portal.id, PYTHON_SCRIPT), { }, "GET")23 self.response = self.sendRequest('%s/%s' % (self.portal.id, PYTHON_SCRIPT), {'exclude_props':[], 'include_props':INCLUDE_PROPS}, "GET") 24 24 25 25 def sendRequest(self, path, params={}, method="POST"): qMemberdataExport/trunk/tests/testInstallation.py
r645 r646 26 26 '%s python script does not exist in portal' % PYTHON_SCRIPT) 27 27 28 def testMemberdataHandlersRegistry(self): 29 """ Test registration of memberdata handlers """ 30 from Products.qMemberdataExport import getRegisteredMemberdataHandlers as registry 31 self.failUnless(len(registry()) == 2, 'Bad registry data') 32 28 33 #tests.append(TestInstallation) 29 34
