예제 #1
0
 def Put(self,
         data,
         uri,
         extra_headers=None,
         url_params=None,
         escape_params=True,
         redirects_remaining=3,
         media_source=None,
         converter=None):
     self._put_data = None
     if not hasattr(self, '_put_count'):
         self._put_count = 0
     if hasattr(self, '_put_err'):
         # allow for a list of errors
         if type(self._put_err) == list:
             put_err = self._put_err.pop(0)
             if not len(self._put_err):
                 delattr(self, '_put_err')
         else:
             put_err = self._put_err
         if type(put_err) == tuple:
             raise put_err[0](put_err[1])
         else:
             raise put_err()
     # save the data for asserting against
     assert isinstance(data, str) or isinstance(data, unicode_str), \
         'Should be a string'
     self._put_data = pickle.loads(base64.urlsafe_b64decode(data))
     self._put_count += 1
     return MockEntry('', 'mockentry%3A' + '')
예제 #2
0
    def _read(self):
        from gdata.docs.service import DocumentQuery
        title_query = DocumentQuery(categories=[self.collection])
        title_query['title'] = self._get_doc_title()
        title_query['title-exact'] = 'true'
        docs = self.client.QueryDocumentListFeed(title_query.ToUri())

        if not docs.entry:
            if self.can_create:
                docs_entry = None
                keyring_dict = {}
            else:
                raise errors.InitError(
                    '%s not found in %s and create not permitted' %
                    (self._get_doc_title(), self.collection))
        else:
            docs_entry = docs.entry[0]
            file_contents = ''
            try:
                url = docs_entry.content.src
                url += '&exportFormat=txt'
                server_response = self.client.request('GET', url)
                if server_response.status != 200:
                    raise errors.InitError(
                        'Could not read existing Google Docs keyring')
                file_contents = server_response.read()
                if file_contents.startswith(codecs.BOM_UTF8):
                    file_contents = file_contents[len(codecs.BOM_UTF8):]
                keyring_dict = pickle.loads(
                    base64.urlsafe_b64decode(
                        file_contents.decode('string-escape')))
            except pickle.UnpicklingError as ex:
                raise errors.InitError(
                    'Could not unpickle existing Google Docs keyring', ex)
            except TypeError as ex:
                raise errors.InitError(
                    'Could not decode existing Google Docs keyring', ex)

        return docs_entry, keyring_dict
예제 #3
0
    def _read(self):
        from gdata.docs.service import DocumentQuery
        title_query = DocumentQuery(categories=[self.collection])
        title_query['title'] = self._get_doc_title()
        title_query['title-exact'] = 'true'
        docs = self.client.QueryDocumentListFeed(title_query.ToUri())

        if not docs.entry:
            if self.can_create:
                docs_entry = None
                keyring_dict = {}
            else:
                raise errors.InitError(
                    '%s not found in %s and create not permitted'
                    %(self._get_doc_title(), self.collection))
        else:
            docs_entry = docs.entry[0]
            file_contents = ''
            try:
                url = docs_entry.content.src
                url += '&exportFormat=txt'
                server_response = self.client.request('GET', url)
                if server_response.status != 200:
                    raise errors.InitError(
                        'Could not read existing Google Docs keyring')
                file_contents = server_response.read()
                if file_contents.startswith(codecs.BOM_UTF8):
                    file_contents = file_contents[len(codecs.BOM_UTF8):]
                keyring_dict = pickle.loads(base64.urlsafe_b64decode(
                    file_contents.decode('string-escape')))
            except pickle.UnpicklingError as ex:
                raise errors.InitError(
                    'Could not unpickle existing Google Docs keyring', ex)
            except TypeError as ex:
                raise errors.InitError(
                    'Could not decode existing Google Docs keyring', ex)

        return docs_entry, keyring_dict
예제 #4
0
 def Put(self, data, uri, extra_headers=None, url_params=None,
         escape_params=True, redirects_remaining=3, media_source=None,
         converter=None):
     self._put_data = None
     if not hasattr(self, '_put_count'):
         self._put_count = 0
     if hasattr(self, '_put_err'):
         # allow for a list of errors
         if type(self._put_err) == list:
             put_err = self._put_err.pop(0)
             if not len(self._put_err):
                 delattr(self, '_put_err')
         else:
             put_err = self._put_err
         if type(put_err) == tuple:
             raise put_err[0](put_err[1])
         else:
             raise put_err()
     # save the data for asserting against
     assert isinstance(data, str) or isinstance(data, unicode_str), \
         'Should be a string'
     self._put_data =  pickle.loads(base64.urlsafe_b64decode(data))
     self._put_count += 1
     return MockEntry('', 'mockentry%3A' + '')