source: products/quintagroup.gdocs.spreadsheet/trunk/quintagroup/gdocs/spreadsheet/browser/worksheetview.py @ 2706

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

Rename id, class and interface of worksheet view

File size: 3.0 KB
Line 
1from zope.component import queryUtility
2from zope.component import queryAdapter
3from zope.interface import implements, Interface
4
5from Products.Five import BrowserView
6from Products.CMFCore.utils import getToolByName
7
8from plone.memoize.view import memoize_contextless
9
10from quintagroup.gauth.interfaces import IGAuthUtility
11from gdata.spreadsheet.service import SpreadsheetsService
12from gdata.spreadsheet.service import DocumentQuery as shDocumentQuery
13from gdata.spreadsheet import SpreadsheetsListFeed
14
15from quintagroup.gdocs.spreadsheet import spreadsheetMessageFactory as _
16from quintagroup.gdocs.spreadsheet import logException, logger
17from quintagroup.gdocs.spreadsheet.interfaces import IGSpreadsheet
18from quintagroup.gdocs.spreadsheet.interfaces import IGSpreadsheetDataProvider
19
20
21class IWorksheetView(Interface):
22    """
23    Worksheet view interface
24    """
25
26    def renderWorksheet(ssh_id, wsh_idx, startrow_idx):
27        """
28            ssh_id - Id of the spreadsheet
29            wsh_id - Id of the worksheet
30            startrow_idx - index of row, from which table should be rendered
31        """
32
33
34class WorksheetView(BrowserView):
35    """
36    Worksheet browser view
37    """
38    implements(IWorksheetView)
39
40    def __init__(self, context, request):
41        self.context = context
42        self.request = request
43        self.query = shDocumentQuery()
44
45    @property
46    def portal_catalog(self):
47        return getToolByName(self.context, 'portal_catalog')
48
49    @property
50    def portal(self):
51        return getToolByName(self.context, 'portal_url').getPortalObject()
52
53    @memoize_contextless
54    def renderWorksheet(self, ssh_id="", wsh_id='', startrow_idx=0):
55        """
56        """
57        table = ''
58        feed = IGSpreadsheetDataProvider(self.context).getListFeed()
59        if isinstance(feed, SpreadsheetsListFeed):
60            # akc is a list of keys of all columns. The context is GSpreadsheet content type
61            akc = self.context.all_keys_columns
62            # key_title_columns is list of tuples with two elements (column_key, column_title or column_key)
63            key_title_columns = [(e['column_key'], e['column_title'] or e['column_key'])
64                for e in self.context.order_columns if e['column_key'] in akc]
65            if key_title_columns:
66                # Prepare table
67                table = "<table id=\"sshwsh\">"
68                table += "<tr>"
69                table += ''.join(["<th>%s</th>" % el[1] for el in key_title_columns])
70                table += "</tr>"
71                for i, entry in enumerate(feed.entry):
72                    if i >= startrow_idx:
73                        td_row = "<tr>"
74                        for key in zip(*key_title_columns)[0]:
75                            td_row += "<td>%s</td>" \
76                                % (not (entry.custom[key].text == 'None') and entry.custom[key].text or '')
77                        td_row += "</tr>\n"
78                        table += td_row
79                table += "</table>"
80        return table
Note: See TracBrowser for help on using the repository browser.