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
RevLine 
[2665]1from zope.component import queryUtility
[2654]2from zope.interface import implements, Interface
3
4from Products.Five import BrowserView
5from Products.CMFCore.utils import getToolByName
6
[2665]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
[2667]12from gdata.spreadsheet import SpreadsheetsListFeed
[2665]13
[2654]14from quintagroup.gdocs.spreadsheet import spreadsheetMessageFactory as _
[2665]15from quintagroup.gdocs.spreadsheet import logException, logger
[2654]16
17
[2665]18class IViewWorksheetView(Interface):
[2654]19    """
[2665]20    ViewWorksheet view interface
[2654]21    """
22
[2665]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        """
[2654]29
30
[2665]31class ViewWorksheetView(BrowserView):
[2654]32    """
[2665]33    ViewWorksheet browser view
[2654]34    """
[2665]35    implements(IViewWorksheetView)
[2654]36
37    def __init__(self, context, request):
38        self.context = context
39        self.request = request
[2665]40        self.query = shDocumentQuery()
[2654]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
[2665]50    @memoize_contextless
[2667]51    def renderWorksheet(self, ssh_id="", wsh_id='', startrow_idx=0):
[2654]52        """
53        """
[2668]54        table = ''
[2667]55        feed = self.getFeed(ssh_id, wsh_id, startrow_idx)
56        if isinstance(feed, SpreadsheetsListFeed):
[2668]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>"
[2667]77        return table
78
79    def getFeed(self, ssh_id="", wsh_id='', startrow_idx=0):
80        """ Get SpreadsheetsListFeed
81        """
[2665]82        # Authorization on spreadsheets.google.com
83        gauth = queryUtility(IGAuthUtility)
84        self.sh_client = SpreadsheetsService(email=gauth.email, password=gauth.password)
[2667]85        self.sh_client.ProgrammaticLogin()
[2665]86        try:
[2667]87            feed = self.sh_client.GetListFeed(ssh_id, wksht_id=wsh_id, query=self.query)
[2668]88            self.context.all_keys_columns = len(feed.entry) and feed.entry[0].custom.keys() or []
[2665]89        except Exception:
90            logException('GetListFeed function call: '
[2667]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.