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

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

CleanUp? code

File size: 2.7 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    @memoize_contextless
46    def renderWorksheet(self, ssh_id="", wsh_id='', startrow_idx=0):
47        """
48        """
49        table = ''
50        feed = IGSpreadsheetDataProvider(self.context).getListFeed()
51        if isinstance(feed, SpreadsheetsListFeed):
52            # akc is a list of keys of all columns. The context is GSpreadsheet content type
53            akc = self.context.all_keys_columns
54            # key_title_columns is list of tuples with two elements (column_key, column_title or column_key)
55            key_title_columns = [(e['column_key'], e['column_title'] or e['column_key'])
56                for e in self.context.order_columns if e['column_key'] in akc]
57            if key_title_columns:
58                # Prepare table
59                table = "<table id=\"sshwsh\">"
60                table += "<tr>"
61                table += ''.join(["<th>%s</th>" % el[1] for el in key_title_columns])
62                table += "</tr>"
63                for i, entry in enumerate(feed.entry):
64                    if i >= startrow_idx:
65                        td_row = "<tr>"
66                        for key in zip(*key_title_columns)[0]:
67                            td_row += "<td>%s</td>" \
68                                % (not (entry.custom[key].text == 'None') and entry.custom[key].text or '')
69                        td_row += "</tr>\n"
70                        table += td_row
71                table += "</table>"
72        return table
Note: See TracBrowser for help on using the repository browser.