source: products/quintagroup.gdocs.spreadsheet/trunk/quintagroup/gdocs/spreadsheet/browser/viewworksheetview.py @ 2667

Last change on this file since 2667 was 2667, checked in by liebster, 14 years ago

Added choose the titles of columns by contentype

File size: 3.2 KB
Line 
1from zope.component import queryUtility
2from zope.interface import implements, Interface
3
4from Products.Five import BrowserView
5from Products.CMFCore.utils import getToolByName
6
7from plone.memoize.view import memoize_contextless
8
9from quintagroup.gauth.interfaces import IGAuthUtility
10from gdata.spreadsheet.service import SpreadsheetsService
11from gdata.spreadsheet.service import DocumentQuery as shDocumentQuery
12from gdata.spreadsheet import SpreadsheetsListFeed
13
14from quintagroup.gdocs.spreadsheet import spreadsheetMessageFactory as _
15from quintagroup.gdocs.spreadsheet import logException, logger
16
17
18class IViewWorksheetView(Interface):
19    """
20    ViewWorksheet view interface
21    """
22
23    def renderWorksheet(ssh_id, wsh_idx, startrow_idx):
24        """
25            ssh_id - Id of the spreadsheet
26            wsh_id - Id of the worksheet
27            startrow_idx - index of row, from which table should be rendered
28        """
29
30
31class ViewWorksheetView(BrowserView):
32    """
33    ViewWorksheet browser view
34    """
35    implements(IViewWorksheetView)
36
37    def __init__(self, context, request):
38        self.context = context
39        self.request = request
40        self.query = shDocumentQuery()
41
42    @property
43    def portal_catalog(self):
44        return getToolByName(self.context, 'portal_catalog')
45
46    @property
47    def portal(self):
48        return getToolByName(self.context, 'portal_url').getPortalObject()
49
50    @memoize_contextless
51    def renderWorksheet(self, ssh_id="", wsh_id='', startrow_idx=0):
52        """
53        """
54        feed = self.getFeed(ssh_id, wsh_id, startrow_idx)
55        if isinstance(feed, SpreadsheetsListFeed):
56            indx_keys = filter(None, [elem['select_title'] for elem in self.context.title_column])
57            titles_columns = filter(None, [self.context.order_columns[int(i)] for i in indx_keys])
58
59            # Prepare table
60            table = "<table id=\"sshwsh\">"
61            table += "<tr>"
62            table += ''.join(["<th>%s</th>" % key for key in titles_columns])
63            table += "</tr>"
64            for i, entry in enumerate(feed.entry):
65                if i+1 > startrow_idx:
66                    td_row = "<tr>"
67                    for key in titles_columns:
68                        td_row += "<td>%s</td>" \
69                            % (not (entry.custom[key].text == 'None') and entry.custom[key].text or '')
70                    td_row += "</tr>\n"
71                    table += td_row
72            table += "</table>"
73        else:
74            table = ''
75        return table
76
77    def getFeed(self, ssh_id="", wsh_id='', startrow_idx=0):
78        """ Get SpreadsheetsListFeed
79        """
80        # Authorization on spreadsheets.google.com
81        gauth = queryUtility(IGAuthUtility)
82        self.sh_client = SpreadsheetsService(email=gauth.email, password=gauth.password)
83        self.sh_client.ProgrammaticLogin()
84        try:
85            feed = self.sh_client.GetListFeed(ssh_id, wksht_id=wsh_id, query=self.query)
86            self.context.order_columns = len(feed.entry) and feed.entry[0].custom.keys() or []
87        except Exception:
88            logException('GetListFeed function call: '
89                         'key=%s, wksht_id=%s' % (ssh_id, wsh_id), self.context)
90            feed = None
91        return feed
Note: See TracBrowser for help on using the repository browser.