def __convert(self, data): if isinstance(data, dict): list_ = [] for key, value in data.items(): phrase = \ 'K({})=V({})'.format( self.__convert(key), self.__convert(value)) list_.append(phrase) final = '; '.join(list_) return final elif isinstance(data, list): final = ', '.join([('LI(%s)' % (self.__convert(element))) \ for element \ in data]) return final elif isinstance(data, str): return utility.translate_filename_charset(data) elif isinstance(data, Number): return str(data) elif isinstance(data, datetime): return get_flat_normal_fs_time_from_dt(data) else: return data
def __insert_entry(self, filename, mime_type, parents, data_filepath=None, modified_datetime=None, accessed_datetime=None, is_hidden=False, description=None): if parents is None: parents = [] now_phrase = get_flat_normal_fs_time_from_dt() if modified_datetime is None: modified_datetime = now_phrase if accessed_datetime is None: accessed_datetime = now_phrase self.__log.info("Creating file with filename [%s] under parent(s) " "[%s] with mime-type [%s], mtime= [%s], atime= [%s]." % (filename, ', '.join(parents), mime_type, modified_datetime, accessed_datetime)) client = self.__auth.get_client() body = { 'title': filename, 'parents': [dict(id=parent) for parent in parents], 'mimeType': mime_type, 'labels': { "hidden": is_hidden }, 'description': description } if modified_datetime is not None: body['modifiedDate'] = modified_datetime if accessed_datetime is not None: body['lastViewedByMeDate'] = accessed_datetime args = { 'body': body } if data_filepath: args['media_body'] = MediaFileUpload(filename=data_filepath, \ mimetype=mime_type) self.__log.debug("Doing file-insert with:\n%s" % (args)) try: result = client.files().insert(**args).execute() except: self.__log.exception("Could not insert file [%s]." % (filename)) raise normalized_entry = NormalEntry('insert_entry', result) self.__log.info("New entry created with ID [%s]." % (normalized_entry.id)) return normalized_entry
def update_entry(self, normalized_entry, filename=None, data_filepath=None, mime_type=None, parents=None, modified_datetime=None, accessed_datetime=None, is_hidden=False, description=None): if not mime_type: mime_type = normalized_entry.mime_type self.__log.debug("Updating entry [%s].", normalized_entry) client = self.__auth.get_client() body = { 'mimeType': mime_type } if filename is not None: body['title'] = filename if parents is not None: body['parents'] = parents if is_hidden is not None: body['labels'] = { "hidden": is_hidden } if description is not None: body['description'] = description set_mtime = True if modified_datetime is not None: body['modifiedDate'] = modified_datetime else: body['modifiedDate'] = get_flat_normal_fs_time_from_dt() if accessed_datetime is not None: set_atime = 1 body['lastViewedByMeDate'] = accessed_datetime else: set_atime = 0 args = { 'fileId': normalized_entry.id, 'body': body, 'setModifiedDate': set_mtime, 'updateViewedDate': set_atime } if data_filepath: args['media_body'] = MediaFileUpload(data_filepath, mimetype=mime_type) result = client.files().update(**args).execute() normalized_entry = NormalEntry('update_entry', result) self.__log.debug("Entry with ID [%s] updated." % (normalized_entry.id)) return normalized_entry
def __convert(self, data): if isinstance(data, dict): list_ = [("K(%s)=V(%s)" % (self.__convert(key), self.__convert(value))) \ for key, value \ in data.iteritems()] final = '; '.join(list_) return final elif isinstance(data, list): final = ', '.join([('LI(%s)' % (self.__convert(element))) \ for element \ in data]) return final elif isinstance(data, unicode): return utility.translate_filename_charset(data) elif isinstance(data, Number): return str(data) elif isinstance(data, datetime): return get_flat_normal_fs_time_from_dt(data) else: return data
def update_entry(self, normalized_entry, filename=None, data_filepath=None, mime_type=None, parents=None, modified_datetime=None, accessed_datetime=None, is_hidden=False, description=None): if not mime_type: mime_type = normalized_entry.mime_type self.__log.info("Updating entry [%s]." % (normalized_entry)) try: client = self.get_client() except: self.__log.exception("There was an error while acquiring the " "Google Drive client (update_entry).") raise body = {'mimeType': mime_type} if filename is not None: body['title'] = filename if parents is not None: body['parents'] = parents if is_hidden is not None: body['labels'] = {"hidden": is_hidden} if description is not None: body['description'] = description set_mtime = True if modified_datetime is not None: body['modifiedDate'] = modified_datetime else: body['modifiedDate'] = get_flat_normal_fs_time_from_dt() if accessed_datetime is not None: set_atime = 1 body['lastViewedByMeDate'] = accessed_datetime else: set_atime = 0 args = { 'fileId': normalized_entry.id, 'body': body, 'setModifiedDate': set_mtime, 'updateViewedDate': set_atime } if data_filepath: args['media_body'] = MediaFileUpload(data_filepath, mime_type) try: result = client.files().update(**args).execute() except: self.__log.exception("Could not send update for file [%s]." % (filename)) raise try: normalized_entry = NormalEntry('update_entry', result) except: self.__log.exception("Could not normalize updated entry.") raise self.__log.info("Entry with ID [%s] updated." % (normalized_entry.id)) return normalized_entry
def update_entry(self, normalized_entry, filename=None, data_filepath=None, mime_type=None, parents=None, modified_datetime=None, accessed_datetime=None, is_hidden=False, description=None): _logger.info("Updating entry [%s].", normalized_entry) client = self.__auth.get_client() # Build request-body. body = {} if mime_type is not None: body['mimeType'] = mime_type else: body['mimeType'] = normalized_entry.mime_type if filename is not None: body['title'] = filename if parents is not None: body['parents'] = parents if is_hidden is not None: body['labels'] = {"hidden": is_hidden} if description is not None: body['description'] = description set_mtime = True if modified_datetime is not None: body['modifiedDate'] = modified_datetime else: body['modifiedDate'] = get_flat_normal_fs_time_from_dt() if accessed_datetime is not None: set_atime = True body['lastViewedByMeDate'] = accessed_datetime else: set_atime = False # Build request-arguments. args = { 'fileId': normalized_entry.id, 'body': body, 'setModifiedDate': set_mtime, 'updateViewedDate': set_atime, } if data_filepath is not None: _logger.debug("We'll be sending a file in the update: [%s] [%s]", normalized_entry.id, data_filepath) # We can only upload large files using resumable-uploads. args.update({ 'media_body': MediaFileUpload(data_filepath, mimetype=mime_type, resumable=True, chunksize=_DEFAULT_UPLOAD_CHUNK_SIZE_B), # TODO(dustin): Documented, but does not exist. # 'uploadType': 'resumable', }) _logger.debug("Sending entry update: [%s]", normalized_entry.id) request = client.files().update(**args) result = self.__finish_upload(normalized_entry.title, request, data_filepath is not None) normalized_entry = NormalEntry('update_entry', result) _logger.debug("Entry updated: [%s]", str(normalized_entry)) return normalized_entry
def __insert_entry(self, is_file, filename, parents, mime_type, data_filepath=None, modified_datetime=None, accessed_datetime=None, is_hidden=False, description=None): if parents is None: parents = [] now_phrase = get_flat_normal_fs_time_from_dt() if modified_datetime is None: modified_datetime = now_phrase if accessed_datetime is None: accessed_datetime = now_phrase _logger.info( "Creating entry with filename [%s] under parent(s) " "[%s] with mime-type [%s]. MTIME=[%s] ATIME=[%s] " "DATA_FILEPATH=[%s]", filename, ', '.join(parents), mime_type, modified_datetime, accessed_datetime, data_filepath) client = self.__auth.get_client() ## Create request-body. body = { 'title': filename, 'parents': [dict(id=parent) for parent in parents], 'labels': { "hidden": is_hidden }, 'mimeType': mime_type, } if description is not None: body['description'] = description if modified_datetime is not None: body['modifiedDate'] = modified_datetime if accessed_datetime is not None: body['lastViewedByMeDate'] = accessed_datetime ## Create request-arguments. args = { 'body': body, } if data_filepath: args.update({ 'media_body': MediaFileUpload(data_filepath, mimetype=mime_type, resumable=True, chunksize=_DEFAULT_UPLOAD_CHUNK_SIZE_B), # TODO(dustin): Documented, but does not exist. # 'uploadType': 'resumable', }) if gdrivefs.config.IS_DEBUG is True: _logger.debug("Doing file-insert with:\n%s", pprint.pformat(args)) request = client.files().insert(**args) response = self.__finish_upload(filename, request, data_filepath is not None) self.__assert_response_kind(response, 'drive#file') normalized_entry = NormalEntry('insert_entry', response) _logger.info("New entry created with ID [%s].", normalized_entry.id) return normalized_entry
def update_entry(self, normalized_entry, filename=None, data_filepath=None, mime_type=None, parents=None, modified_datetime=None, accessed_datetime=None, is_hidden=False, description=None): if not mime_type: mime_type = normalized_entry.mime_type self.__log.info("Updating entry [%s]." % (normalized_entry)) try: client = self.get_client() except: self.__log.exception("There was an error while acquiring the " "Google Drive client (update_entry).") raise body = { 'mimeType': mime_type } if filename is not None: body['title'] = filename if parents is not None: body['parents'] = parents if is_hidden is not None: body['labels'] = { "hidden": is_hidden } if description is not None: body['description'] = description set_mtime = True if modified_datetime is not None: body['modifiedDate'] = modified_datetime else: body['modifiedDate'] = get_flat_normal_fs_time_from_dt() if accessed_datetime is not None: set_atime = 1 body['lastViewedByMeDate'] = accessed_datetime else: set_atime = 0 args = { 'fileId': normalized_entry.id, 'body': body, 'setModifiedDate': set_mtime, 'updateViewedDate': set_atime } if data_filepath: args['media_body'] = MediaFileUpload(data_filepath, mime_type) try: result = client.files().update(**args).execute() except: self.__log.exception("Could not send update for file [%s]." % (filename)) raise try: normalized_entry = NormalEntry('update_entry', result) except: self.__log.exception("Could not normalize updated entry.") raise self.__log.info("Entry with ID [%s] updated." % (normalized_entry.id)) return normalized_entry
def update_entry(self, normalized_entry, filename=None, data_filepath=None, mime_type=None, parents=None, modified_datetime=None, accessed_datetime=None, is_hidden=False, description=None): _logger.info("Updating entry [%s].", normalized_entry) client = self.__auth.get_client() # Build request-body. body = {} if mime_type is not None: body['mimeType'] = mime_type else: body['mimeType'] = normalized_entry.mime_type if filename is not None: body['title'] = filename if parents is not None: body['parents'] = parents if is_hidden is not None: body['labels'] = { "hidden": is_hidden } if description is not None: body['description'] = description set_mtime = True if modified_datetime is not None: body['modifiedDate'] = modified_datetime else: body['modifiedDate'] = get_flat_normal_fs_time_from_dt() if accessed_datetime is not None: set_atime = True body['lastViewedByMeDate'] = accessed_datetime else: set_atime = False # Build request-arguments. args = { 'fileId': normalized_entry.id, 'body': body, 'setModifiedDate': set_mtime, 'updateViewedDate': set_atime, } if data_filepath is not None: _logger.debug("We'll be sending a file in the update: [%s] [%s]", normalized_entry.id, data_filepath) # We can only upload large files using resumable-uploads. args.update({ 'media_body': MediaFileUpload( data_filepath, mimetype=mime_type, resumable=True, chunksize=_DEFAULT_UPLOAD_CHUNK_SIZE_B), # TODO(dustin): Documented, but does not exist. # 'uploadType': 'resumable', }) _logger.debug("Sending entry update: [%s]", normalized_entry.id) request = client.files().update(**args) result = self.__finish_upload( normalized_entry.title, request, data_filepath is not None) normalized_entry = NormalEntry('update_entry', result) _logger.debug("Entry updated: [%s]", str(normalized_entry)) return normalized_entry
def __insert_entry(self, is_file, filename, parents, mime_type, data_filepath=None, modified_datetime=None, accessed_datetime=None, is_hidden=False, description=None): if parents is None: parents = [] now_phrase = get_flat_normal_fs_time_from_dt() if modified_datetime is None: modified_datetime = now_phrase if accessed_datetime is None: accessed_datetime = now_phrase _logger.info("Creating entry with filename [%s] under parent(s) " "[%s] with mime-type [%s]. MTIME=[%s] ATIME=[%s] " "DATA_FILEPATH=[%s]", filename, ', '.join(parents), mime_type, modified_datetime, accessed_datetime, data_filepath) client = self.__auth.get_client() ## Create request-body. body = { 'title': filename, 'parents': [dict(id=parent) for parent in parents], 'labels': { "hidden": is_hidden }, 'mimeType': mime_type, } if description is not None: body['description'] = description if modified_datetime is not None: body['modifiedDate'] = modified_datetime if accessed_datetime is not None: body['lastViewedByMeDate'] = accessed_datetime ## Create request-arguments. args = { 'body': body, } if data_filepath: args.update({ 'media_body': MediaFileUpload( data_filepath, mimetype=mime_type, resumable=True, chunksize=_DEFAULT_UPLOAD_CHUNK_SIZE_B), # TODO(dustin): Documented, but does not exist. # 'uploadType': 'resumable', }) if gdrivefs.config.IS_DEBUG is True: _logger.debug("Doing file-insert with:\n%s", pprint.pformat(args)) request = client.files().insert(**args) response = self.__finish_upload( filename, request, data_filepath is not None) self.__assert_response_kind(response, 'drive#file') normalized_entry = NormalEntry('insert_entry', response) _logger.info("New entry created with ID [%s].", normalized_entry.id) return normalized_entry