source: products/qMemberdataExport/trunk/Extensions/getMemberData.py @ 1061

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

Building directory structure

  • Property svn:eol-style set to native
File size: 1.6 KB
Line 
1def getMemberData(self, start=0, batch=4000, 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    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        if counter % CLEAR_CACHE_COUNTER == 0: 
31            self._p_jar.sync()
32        members_list.append(memberdatahandler.getMemberProperties(member, exclude_props, include_props))
33        counter += 1
34        print "Processed %d members. Current member id: %s" % (counter, str(member))
35
36    res = StringIO()
37    writer = csv.DictWriter(res, fieldnames = memberdatahandler.fieldnames, extrasaction='ignore', quoting=csv.QUOTE_ALL)
38
39    # writing header row
40    writer.writer.writerow(memberdatahandler.fieldnames)
41    # writing body of csv file
42    writer.writerows(members_list)
43
44    # setting headers for attaching file
45    self.REQUEST.RESPONSE.setHeader('Content-Type', 'text/csv')
46    self.REQUEST.RESPONSE.setHeader('Content-Disposition', 'attachment; filename=memberdata-%s.csv' % DateTime().strftime("%Y-%m-%d-%H-%M-%S"))
47
48    return res.getvalue()
Note: See TracBrowser for help on using the repository browser.