source: products/quintagroup.gdocs.spreadsheet/trunk/quintagroup/gdocs/spreadsheet/adapters.py

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

Added sorting title of columns

  • Property svn:eol-style set to native
File size: 1.8 KB
Line 
1from zope.interface import implements
2from zope.component import adapts, queryUtility
3
4from gdata.spreadsheet.service import SpreadsheetsService
5from gdata.spreadsheet.service import DocumentQuery as shDocumentQuery
6
7from quintagroup.gauth.interfaces import IGAuthUtility
8from quintagroup.gdocs.spreadsheet import logException, logger
9from quintagroup.gdocs.spreadsheet.interfaces import IGSpreadsheet
10from quintagroup.gdocs.spreadsheet.interfaces import IGSpreadsheetDataProvider
11
12
13class GSpreadsheetDataProvider(object):
14
15    adapts(IGSpreadsheet)
16    implements(IGSpreadsheetDataProvider)
17
18    def __init__(self, context):
19        gauth = queryUtility(IGAuthUtility) or queryUtility(IGAuthUtility, context=context)
20        self.context = context
21        self.shcl = SpreadsheetsService(gauth.email, gauth.password)
22        self.shcl.ProgrammaticLogin()
23
24    def getListFeed(self, query=None):
25        """ Get SpreadsheetsListFeed
26        """
27        return self._safeQuery(self.shcl.GetListFeed,
28                              self.context.spreadsheet_id,
29                              wksht_id=self.context.worksheet_id,
30                              query=query)
31
32    def getWorksheetColumnsInfo(self):
33        title_idxs = set()
34        query = shDocumentQuery()
35        query.max_results = '1'
36        feed = self.getListFeed(query=query)
37        if len(feed.entry):
38            title_idxs.update(feed.entry[0].custom.keys())
39        return sorted(title_idxs)
40
41    def _safeQuery(self, meth, *margs, **mkwargs):
42        # Make safe method call with logging information about exception
43        try:
44            return meth(*margs, **mkwargs)
45        except Exception:
46            logException('%s function call: key=%s, wksht_id=%s' % (
47                meth.__name__, self.context.spreadsheet_id,
48                self.context.worksheet_id), self.context)
49        return None
Note: See TracBrowser for help on using the repository browser.