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

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

Added field for define title of column

File size: 3.5 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        table = ''
55        feed = self.getFeed(ssh_id, wsh_id, startrow_idx)
56        if isinstance(feed, SpreadsheetsListFeed):
57            # akc is a list of keys of all columns. The context is GSpreadsheet content type
58            akc = self.context.all_keys_columns
59            # key_title_columns is list of tuples with two elements (column_key, column_title or column_key)
60            key_title_columns = [(e['column_key'], e['column_title'] or e['column_key'])
61                for e in self.context.order_columns if e['column_key'] in akc]
62            if key_title_columns:
63                # Prepare table
64                table = "<table id=\"sshwsh\">"
65                table += "<tr>"
66                table += ''.join(["<th>%s</th>" % el[1] for el in key_title_columns])
67                table += "</tr>"
68                for i, entry in enumerate(feed.entry):
69                    if i >= startrow_idx:
70                        td_row = "<tr>"
71                        for key in zip(*key_title_columns)[0]:
72                            td_row += "<td>%s</td>" \
73                                % (not (entry.custom[key].text == 'None') and entry.custom[key].text or '')
74                        td_row += "</tr>\n"
75                        table += td_row
76                table += "</table>"
77        return table
78
79    def getFeed(self, ssh_id="", wsh_id='', startrow_idx=0):
80        """ Get SpreadsheetsListFeed
81        """
82        # Authorization on spreadsheets.google.com
83        gauth = queryUtility(IGAuthUtility)
84        self.sh_client = SpreadsheetsService(email=gauth.email, password=gauth.password)
85        self.sh_client.ProgrammaticLogin()
86        try:
87            feed = self.sh_client.GetListFeed(ssh_id, wksht_id=wsh_id, query=self.query)
88            self.context.all_keys_columns = len(feed.entry) and feed.entry[0].custom.keys() or []
89        except Exception:
90            logException('GetListFeed function call: '
91                         'key=%s, wksht_id=%s' % (ssh_id, wsh_id), self.context)
92            feed = None
93        return feed
Note: See TracBrowser for help on using the repository browser.