Changeset 652
- Timestamp:
- 11/23/06 10:23:20
- Files:
-
- qMemberdataExport/trunk/CMFMemberdataHandler.py (modified) (1 diff)
- qMemberdataExport/trunk/Extensions/Install.py (modified) (2 diffs)
- qMemberdataExport/trunk/config.py (modified) (1 diff)
- qMemberdataExport/trunk/tests/commonTestingStuff.py (modified) (4 diffs)
- qMemberdataExport/trunk/tests/runtests.sh (deleted)
- qMemberdataExport/trunk/tests/testExternalMethod.py (modified) (2 diffs)
- qMemberdataExport/trunk/tests/testFunctional.py (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
qMemberdataExport/trunk/CMFMemberdataHandler.py
r651 r652 42 42 schema = member.getSchema() 43 43 fields = [f.getName() for f in schema.filterFields() 44 if (f.getName() not in exclude_props) and (include_props and f.getName() in include_props or not i clude_props)]44 if (f.getName() not in exclude_props) and (include_props and f.getName() in include_props or not include_props)] 45 45 for field in fields: 46 46 if field not in all_props: qMemberdataExport/trunk/Extensions/Install.py
r651 r652 23 23 else: out.write('%s external method already exists in portal\n' % EXTERNAL_METHOD) 24 24 25 def addPythonScript(self, out):26 """Add a PythonScript to portal root directory """27 28 if not hasattr(self, PYTHON_SCRIPT):29 factory = self.manage_addProduct['PythonScripts']30 factory.manage_addPythonScript(PYTHON_SCRIPT)31 script = getattr(self, PYTHON_SCRIPT)32 if script: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)35 out.write('%s python script added to portal\n' % PYTHON_SCRIPT)36 else: out.write('installation procedure could not create python script\n')37 else: out.write('%s python script already exists in portal\n' % PYTHON_SCRIPT)38 39 25 def install(self): 40 26 """ Product installation """ … … 44 30 # add external method 45 31 addExternalMethod(self, out) 46 47 # add python script48 # addPythonScript(self, out)49 32 50 33 return out.getvalue() qMemberdataExport/trunk/config.py
r651 r652 4 4 5 5 EXTERNAL_METHOD = 'export_memberdata_as_csv' 6 PYTHON_SCRIPT = 'exportMemberData'7 6 8 7 CLEAR_CACHE_COUNTER = 100 qMemberdataExport/trunk/tests/commonTestingStuff.py
r651 r652 5 5 from Products.PloneTestCase import PloneTestCase 6 6 7 from Products.qMemberdataExport.config import PYTHON_SCRIPT,EXTERNAL_METHOD7 from Products.qMemberdataExport.config import EXTERNAL_METHOD 8 8 9 PRODUCTS=('qMemberdataExport',) 9 try: 10 from Products import CMFMember 11 cmfmember_installed = True 12 except ImportError: 13 cmfmember_installed = False 14 15 PRODUCTS = ['qMemberdataExport',] 16 17 if cmfmember_installed: PRODUCTS.append('CMFMember') 10 18 11 19 map(PloneTestCase.installProduct, PRODUCTS) … … 31 39 from cStringIO import StringIO 32 40 from Products.qMemberdataExport import getRegisteredMemberdataHandlers as registry 41 from Products.qMemberdataExport import CMFMemberdataHandler, BaseMemberdataHandler 33 42 34 43 datahandler = False 35 44 36 45 for handler in registry(): 37 46 try: … … 40 49 except: 41 50 pass 51 42 52 if datahandler: 43 53 props = datahandler.listAllMemberProperties(exclude_props=EXCLUDE_PROPS, include_props=INCLUDE_PROPS) 54 if cmfmember_installed: 55 self.assertEquals(datahandler.__class__, CMFMemberdataHandler) 56 else: 57 self.assertEquals(datahandler.__class__, BaseMemberdataHandler) 44 58 else: 45 props = [p for p in ['id',]+getToolByName(self.portal, 'portal_memberdata').propertyIds() if p not in EXCLUDE_PROPS] 59 self.fail('Registry does not have needed memberdata handler') 60 46 61 reader = csv.DictReader(StringIO(data), fieldnames = props, quoting=csv.QUOTE_ALL) 62 47 63 i = 0 48 64 res = [] 49 65 for row in reader: 50 66 properties = {} 51 if i != 0 and row['id'] != 'test_user_1_':67 if i != 0 and row['id'] not in ['test_user_1_', 'portal_owner']: 52 68 for field in row.keys(): 53 69 properties[field] = row[field] 54 70 res.append(properties) 55 71 i += 1 72 56 73 self.failUnless(i-2 == len(PORTAL_MEMBERS), 'CSV output does not matcht to amount of portal members') 74 57 75 members = [memb.copy() for memb in PORTAL_MEMBERS] 58 76 for memb in members: 59 77 del memb['roles'] 60 78 del memb['last_login_time'] 79 61 80 return (members, res) 62 81 … … 97 116 EXCLUDE_PROPS = ['portrait', 'password', 'mail_me', 98 117 'confirm_password','login_time', 'last_login_time', 99 'listed','fc_internal_data', 'review_state', ] 118 'listed','fc_internal_data', 'review_state', 119 'roles', 'domains', 'groups'] 100 120 101 INCLUDE_PROPS = ['id', 'fullname', 'email' , 'roles', 'domains', 'groups']121 INCLUDE_PROPS = ['id', 'fullname', 'email'] qMemberdataExport/trunk/tests/testExternalMethod.py
r651 r652 14 14 def afterSetUp(self): 15 15 """ AfterSetUp features """ 16 17 self.loginAsPortalOwner() 16 18 self.qi = getToolByName(self.portal, 'portal_quickinstaller') 17 self.qi.installProduct(PRODUCT)18 19 self.method = getattr(self.portal, EXTERNAL_METHOD) 19 20 self.membership = self.portal.portal_membership … … 24 25 """ Test external script for good csv output stream """ 25 26 27 if cmfmember_installed: 28 getToolByName(self.portal, 'cmfmember_control').upgrade(swallow_errors=0) 26 29 forCompare = parseCSV(self, self.method(self.portal, exclude_props=EXCLUDE_PROPS, include_props=INCLUDE_PROPS)) 27 30 self.failUnless(forCompare[0] == forCompare[1], 'Bad output from external method script') qMemberdataExport/trunk/tests/testFunctional.py
r651 r652 17 17 self.loginAsPortalOwner() 18 18 self.qi = getToolByName(self.portal, 'portal_quickinstaller') 19 self.qi.installProduct(PRODUCT)20 19 self.membership = self.portal.portal_membership 20 self.path = '%s/%s' % (self.portal.id, EXTERNAL_METHOD) 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, EXTERNAL_METHOD), {'exclude_props':[], 'include_props':INCLUDE_PROPS}, "GET")24 25 def sendRequest(self, path, params={}, method="POST"):26 """ Utility function """27 28 return self.publish(path, self.auth, extra=params, request_method=method)29 30 23 31 24 def testExternalMethod(self): 32 """ Test ex portMemberData python script"""25 """ Test external method script for publishing """ 33 26 34 forCompare = parseCSV(self, self.response.getBody()) 27 if cmfmember_installed: 28 getToolByName(self.portal, 'cmfmember_control').upgrade(swallow_errors=0) 29 response = self.publish(self.path, self.auth, extra={'exclude_props':[], 'include_props':INCLUDE_PROPS}) 30 forCompare = parseCSV(self, response.getBody()) 35 31 self.failUnless(forCompare[0] == forCompare[1], '%s external method return bad CSV value' % EXTERNAL_METHOD) 36 32 … … 40 36 import re 41 37 pattern = re.compile(r'\s*attachment\;\s*filename=\s*memberdata\-\d{4}\-\d{2}\-\d{2}\-\d{2}\-\d{2}\-\d{2}\.csv\s*', re.I) 42 self.failUnless(pattern.search(self.response.getHeader('content-disposition')), 38 response = self.publish(self.path, self.auth, extra={'exclude_props':[], 'include_props':INCLUDE_PROPS}) 39 self.failUnless(pattern.search(response.getHeader('content-disposition')), 43 40 'Bad response header \'Content Disposition\'') 44 41 … … 46 43 """ Test response for content-type header """ 47 44 48 self.failUnless(self.response.getHeader('content-type').find('text/csv') != -1, 45 response = self.publish(self.path, self.auth, extra={'exclude_props':[], 'include_props':INCLUDE_PROPS}) 46 self.failUnless(response.getHeader('content-type').find('text/csv') != -1, 49 47 'Bad response header \'Content Type\'') 50 48 … … 52 50 """ Test external method for 'View' permission """ 53 51 54 response = self.publish( '%s/%s' % (self.portal.id, EXTERNAL_METHOD), 'barney:secret')52 response = self.publish(self.path, 'barney:secret') 55 53 type_header = response.getHeader('bobo-exception-type') 56 54 location_header = response.getHeader('location') or ''
