0

I have a requirement to read a file from a folder SubFoldinabctentacles in bucket abctentacles (GCS), convert it to UTF-8 without BOM and move it to outbound folder in the same bucket i.e. abctentacles.

I have created a cloud function to run the below python code. ( runtime 3.10), but i keep getting an error

import codecs
import os
import tempfile
from pathlib import Path
import chardet

from google.cloud import storage

def convert_encoding(content):
    
    encoding = chardet.detect(content)['encoding']

    decoded_content = content.decode(encoding)
    encoded_content = decoded_content.encode('utf-8')

    return encoded_content

def move_file(source_bucket, source_file, destination_folder):

client = storage.Client()

    source_bucket_obj = client.get_bucket(source_bucket)

    source_blob = source_bucket_obj.blob(source_file)
    destination_file_path = os.path.join(destination_folder, os.path.basename(source_file))

    destination_blob = source_bucket_obj.copy_blob(source_blob, source_bucket_obj, destination_file_path)

    source_blob.delete()

def convert_encoding_and_move(event, context):
    source_bucket = 'abctentacles'
    source_file = 'SubFoldinabctentacles/A{CM}_C{foo}.JSONL'
    destination_folder = 'outbound'  

    client = storage.Client()

    source_bucket_obj = client.get_bucket(source_bucket)

    source_blob = source_bucket_obj.blob(source_file)

    file_content = source_blob.download_as_bytes()

    encoded_content = convert_encoding(file_content)

    destination_blob = source_bucket_obj.blob(os.path.join(destination_folder, os.path.basename(source_file)))

    destination_blob.upload_from_string(encoded_content)

    move_file(source_bucket, source_file, destination_folder)

convertFileEncodingdgm4igqwci4d Traceback (most recent call last): File "/layers/google.python.pip/pip/lib/python3.10/site-packages/google/cloud/storage/client.py", line 1099, in download_blob_to_file blob_or_uri._do_download( File "/layers/google.python.pip/pip/lib/python3.10/site-packages/google/cloud/storage/blob.py", line 984, in _do_download response = download.consume(transport, timeout=timeout) File "/layers/google.python.pip/pip/lib/python3.10/site-packages/google/resumable_media/requests/download.py", line 237, in consume return _request_helpers.wait_and_retry( File "/layers/google.python.pip/pip/lib/python3.10/site-packages/google/resumable_media/requests/_request_helpers.py", line 155, in wait_and_retry response = func() File "/layers/google.python.pip/pip/lib/python3.10/site-packages/google/resumable_media/requests/download.py", line 219, in retriable_request self._process_response(result) File "/layers/google.python.pip/pip/lib/python3.10/site-packages/google/resumable_media/_download.py", line 188, in _process_response _helpers.require_status_code( File "/layers/google.python.pip/pip/lib/python3.10/site-packages/google/resumable_media/_helpers.py", line 108, in require_status_code raise common.InvalidResponse( google.resumable_media.common.InvalidResponse: ('Request failed with status code', 404, 'Expected one of', <HTTPStatus.OK: 200>, <HTTPStatus.PARTIAL_CONTENT: 206>)

does anyone know what this issue is all about? and how to fix it.

dat
  • 1,580
  • 1
  • 21
  • 30

0 Answers0