def utimens(self, raw_path, times=None): """Set the file times.""" if times is not None: (atime, mtime) = times else: now = time() (atime, mtime) = (now, now) (entry, path, filename) = self.__get_entry_or_raise(raw_path) tz_get = lambda dt: datetime.fromtimestamp(dt, tzlocal()).\ astimezone(tzutc()) mtime_phrase = build_rfc3339_phrase(tz_get(mtime)) atime_phrase = build_rfc3339_phrase(tz_get(atime)) self.__log.debug("Updating entry [%s] with m-time [%s] and a-time " "[%s]." % (entry, mtime_phrase, atime_phrase)) try: entry = drive_proxy('update_entry', normalized_entry=entry, modified_datetime=mtime_phrase, accessed_datetime=atime_phrase) except: self.__log.exception("Could not update entry [%s] for times." % (entry)) raise FuseOSError(EIO) self.__log.debug("Entry [%s] mtime is now [%s] and atime is now " "[%s]." % (entry, entry.modified_date, entry.atime_byme_date)) return 0
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_obj = datetime.now().replace(tzinfo=tzlocal()).astimezone(tzutc()) now_phrase = build_rfc3339_phrase(now_obj) 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)) try: client = self.get_client() except: self.__log.exception("There was an error while acquiring the " "Google Drive client (insert_entry).") raise 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 try: normalized_entry = NormalEntry('insert_entry', result) except: self.__log.exception("Could not normalize created entry.") raise self.__log.info("New entry created with ID [%s]." % (normalized_entry.id)) return normalized_entry