source: products/qMemberdataExport/tags/0.1.0/Extensions/getMemberData.py @ 2111

Last change on this file since 2111 was 1, checked in by myroslav, 18 years ago

Building directory structure

  • Property svn:eol-style set to native
File size: 1.7 KB
Line 
1def getMemberData(self, start=0, batch=400, exclude_props=None, include_props=None):
2
3    import csv
4    from cStringIO import StringIO
5    from DateTime import DateTime
6    from Products.qMemberdataExport import getRegisteredMemberdataHandlers as registry
7    from Products.qMemberdataExport.config import EXCLUDE_PROPS, CLEAR_CACHE_COUNTER
8
9    if exclude_props is None: exclude_props = EXCLUDE_PROPS
10
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    #PASMemberdata handler doesn't set this attribute
25    memberdatahandler.fieldnames = memberdatahandler.listAllMemberProperties(exclude_props, include_props)
26
27    if batch > len(members) - start: batch = len(members) - start
28
29    members_list = []
30    counter = 0
31
32    for member in members[start:start+batch]:
33        counter += 1
34        if counter % CLEAR_CACHE_COUNTER == 0: 
35            self._p_jar.sync()
36        members_list.append(memberdatahandler.getMemberProperties(member, exclude_props, include_props))
37
38    res = StringIO()
39    writer = csv.DictWriter(res, fieldnames = memberdatahandler.fieldnames, extrasaction='ignore', quoting=csv.QUOTE_ALL)
40
41    # writing header row
42    writer.writer.writerow(memberdatahandler.fieldnames)
43    # writing body of csv file
44    writer.writerows(members_list)
45
46    # setting headers for attaching file
47    self.REQUEST.RESPONSE.setHeader('Content-Type', 'text/csv')
48    self.REQUEST.RESPONSE.setHeader('Content-Disposition', 'attachment; filename=memberdata-%s.csv' % DateTime().strftime("%Y-%m-%d-%H-%M-%S"))
49
50    return res.getvalue()
Note: See TracBrowser for help on using the repository browser.