Example #1
0
def process_gdrive_file(file_id,
                        folder_id,
                        postfix,
                        separator,
                        is_uploaded=False):
    """Process gdrive file to new folder with renaming"""
    http_auth = get_http_auth()
    try:
        drive_service = discovery.build(API_SERVICE_NAME,
                                        API_VERSION,
                                        http=http_auth)
        file_meta = drive_service.files().get(fileId=file_id).execute()
        new_file_name = generate_file_name(file_meta['name'], postfix,
                                           separator)
        if is_uploaded:
            #  if file was uploaded from a local folder, FE put it into
            #  a gdrive folder, we just need to rename file.
            response = rename_file_request(drive_service,
                                           file_id,
                                           body={'name': new_file_name})
        else:
            body = _build_request_body(folder_id, new_file_name)
            response = copy_file_request(drive_service, file_id, body)
        validate_response(response)
    except HttpAccessTokenRefreshError:
        handle_token_error()
    except HttpError as ex:
        hande_http_error(ex)
    except Exception as ex:
        logger.error(ex.message)
        raise InternalServerError('Processing of the file failed due to'
                                  ' internal server error.')
    return response
Example #2
0
def get_gdrive_file_data(file_data):
    """Get text/csv data from gdrive file"""
    http_auth = get_http_auth()
    try:
        drive_service = discovery.build(API_SERVICE_NAME,
                                        API_VERSION,
                                        http=http_auth)
        # check file type
        file_meta = drive_service.files().get(fileId=file_data['id']).execute()
        if file_meta.get('mimeType') == 'text/csv':
            file_data = drive_service.files().get_media(
                fileId=file_data['id']).execute()
        else:
            file_data = drive_service.files().export_media(
                fileId=file_data['id'], mimeType='text/csv').execute()
        csv_data = read_csv_file(StringIO(file_data))
    except AttributeError:
        # when file_data has no splitlines() method
        raise BadRequest('Wrong file format.')
    except HttpAccessTokenRefreshError:
        handle_token_error('Try to reload /import page')
    except HttpError as ex:
        hande_http_error(ex)
    except Exception as ex:
        logger.error(ex.message)
        raise InternalServerError(
            'Import failed due to internal server error.')
    return csv_data, file_data, file_meta.get('name')
Example #3
0
def get_gdrive_file_data(file_data):
  """Get text/csv data from gdrive file"""
  http_auth = get_http_auth()
  try:
    drive_service = discovery.build(API_SERVICE_NAME, API_VERSION,
                                    http=http_auth)
    # check file type
    file_meta = drive_service.files().get(fileId=file_data['id']).execute()
    if file_meta.get('mimeType') == 'text/csv':
      file_data = drive_service.files().get_media(
          fileId=file_data['id']).execute()
    else:
      file_data = drive_service.files().export_media(
          fileId=file_data['id'], mimeType='text/csv').execute()
    csv_data = read_csv_file(StringIO(file_data))
  except AttributeError:
    # when file_data has no splitlines() method
    raise BadRequest(errors.WRONG_FILE_FORMAT)
  except HttpAccessTokenRefreshError:
    handle_token_error('Try to reload /import page')
  except HttpError as ex:
    hande_http_error(ex)
  except Exception as ex:
    logger.error(ex.message)
    raise InternalServerError(errors.INTERNAL_SERVER_ERROR)
  return csv_data, file_data, file_meta.get('name')
Example #4
0
def process_gdrive_file(file_id, folder_id, is_uploaded=False):
    """Process gdrive file to new folder"""
    http_auth = get_http_auth()
    try:
        drive_service = discovery.build(API_SERVICE_NAME,
                                        API_VERSION,
                                        http=http_auth)
        file_meta = drive_service.files().get(
            fileId=file_id, fields='id,webViewLink,name').execute()
        if is_uploaded:
            response = file_meta
        else:
            response = drive_service.files().list(
                q="name contains '{}'".format(file_meta['name']),
                spaces='drive',
                fields='files(parents, name)').execute()
            file_name = _generate_new_file_name(response.get('files', []),
                                                file_meta['name'], folder_id)
            body = _build_request_body(folder_id, file_name)
            response = copy_file_request(drive_service, file_id, body)
        validate_response(response)
    except HttpAccessTokenRefreshError:
        handle_token_error()
    except HttpError as ex:
        handle_http_error(ex)
    except Exception as ex:
        logger.error(ex.message)
        raise InternalServerError(errors.INTERNAL_SERVER_ERROR)
    return response
Example #5
0
def process_gdrive_file(file_id, folder_id, postfix, separator,
                        is_uploaded=False):
  """Process gdrive file to new folder with renaming"""
  http_auth = get_http_auth()
  try:
    drive_service = discovery.build(
        API_SERVICE_NAME, API_VERSION, http=http_auth)
    file_meta = drive_service.files().get(fileId=file_id).execute()
    new_file_name = generate_file_name(file_meta['name'], postfix, separator)
    if is_uploaded:
      #  if file was uploaded from a local folder, FE put it into
      #  a gdrive folder, we just need to rename file.
      response = rename_file_request(drive_service, file_id,
                                     body={'name': new_file_name})
    else:
      body = _build_request_body(folder_id, new_file_name)
      response = copy_file_request(drive_service, file_id, body)
    validate_response(response)
  except HttpAccessTokenRefreshError:
    handle_token_error()
  except HttpError as ex:
    hande_http_error(ex)
  except Exception as ex:
    logger.error(ex.message)
    raise InternalServerError(errors.INTERNAL_SERVER_ERROR)
  return response
Example #6
0
def add_gdrive_file_folder(file_id, folder_id):
  """Add folder to gdrive file"""
  http_auth = get_http_auth()
  try:
    drive_service = discovery.build(
        API_SERVICE_NAME, API_VERSION, http=http_auth)
    response = add_folder_request(drive_service, file_id, folder_id)
  except HttpAccessTokenRefreshError:
    handle_token_error()
  except HttpError as ex:
    hande_http_error(ex)
  except Exception as ex:
    logger.error(ex.message)
    raise InternalServerError(errors.INTERNAL_SERVER_ERROR)
  return response['webViewLink']
Example #7
0
def add_gdrive_file_folder(file_id, folder_id):
  """Add folder to gdrive file"""
  http_auth = get_http_auth()
  try:
    drive_service = discovery.build(
        API_SERVICE_NAME, API_VERSION, http=http_auth)
    response = add_folder_request(drive_service, file_id, folder_id)
  except HttpAccessTokenRefreshError:
    handle_token_error()
  except HttpError as ex:
    hande_http_error(ex)
  except Exception as ex:
    logger.error(ex.message)
    raise InternalServerError(errors.INTERNAL_SERVER_ERROR)
  return response['webViewLink']
Example #8
0
def get_gdrive_file_link(file_id):
  """Returns file link"""
  http_auth = get_http_auth()
  try:
    drive_service = discovery.build(
        API_SERVICE_NAME, API_VERSION, http=http_auth)
    file_meta = drive_service.files().get(fileId=file_id,
                                          fields='webViewLink').execute()
  except HttpAccessTokenRefreshError:
    handle_token_error()
  except HttpError as ex:
    hande_http_error(ex)
  except Exception as ex:
    logger.error(ex.message)
    raise InternalServerError(errors.INTERNAL_SERVER_ERROR)
  return file_meta['webViewLink']
Example #9
0
def get_gdrive_file_link(file_id):
  """Returns file link"""
  http_auth = get_http_auth()
  try:
    drive_service = discovery.build(
        API_SERVICE_NAME, API_VERSION, http=http_auth)
    file_meta = drive_service.files().get(fileId=file_id,
                                          fields='webViewLink').execute()
  except HttpAccessTokenRefreshError:
    handle_token_error()
  except HttpError as ex:
    hande_http_error(ex)
  except Exception as ex:
    logger.error(ex.message)
    raise InternalServerError(errors.INTERNAL_SERVER_ERROR)
  return file_meta['webViewLink']
Example #10
0
def create_gdrive_file(csv_string, filename):
  """Post text/csv data to a gdrive file"""
  http_auth = get_http_auth()
  try:
    drive_service = discovery.build(API_SERVICE_NAME, API_VERSION,
                                    http=http_auth)
    # make export to sheets
    file_metadata = {
        'name': filename,
        'mimeType': 'application/vnd.google-apps.spreadsheet'
    }
    media = http.MediaInMemoryUpload(csv_string,
                                     mimetype='text/csv',
                                     resumable=True)
    result = drive_service.files().create(body=file_metadata,
                                          media_body=media,
                                          fields='id, name, parents').execute()
    return result
  except HttpAccessTokenRefreshError:
    handle_token_error()
  except HttpError as ex:
    hande_http_error(ex)
Example #11
0
def create_gdrive_file(csv_string, filename):
  """Post text/csv data to a gdrive file"""
  http_auth = get_http_auth()
  try:
    drive_service = discovery.build(API_SERVICE_NAME, API_VERSION,
                                    http=http_auth)
    # make export to sheets
    file_metadata = {
        'name': filename,
        'mimeType': 'application/vnd.google-apps.spreadsheet'
    }
    media = http.MediaInMemoryUpload(csv_string,
                                     mimetype='text/csv',
                                     resumable=True)
    result = drive_service.files().create(body=file_metadata,
                                          media_body=media,
                                          fields='id, name, parents').execute()
    return result
  except HttpAccessTokenRefreshError:
    handle_token_error()
  except HttpError as ex:
    hande_http_error(ex)