def load_single_file()

in src/data_load/load.py [0:0]


def load_single_file(session, root, file):
    filepath = os.path.join(root, file)
    headers = get_headers(config)
    dir_name = root.split("/")[-1]

    logger.info(f"Starting upload for file: {filepath}")

    try:
        #####################
        # Get FileUrl
        #####################
        logger.debug(f"Requesting upload URL for: {filepath}")
        response = session.get(FILE_URL + "/files/uploadURL", json={}, headers=headers)
        logger.debug(f"Upload URL response status for {filepath}: {response.status_code}")

        if response.status_code != 200:
            logger.error(f"/files/uploadURL failed for {filepath} with response {response}")
            return FILE_UPLOAD_FAILED, filepath

        upload_url_response = response.json()
        signed_url = upload_url_response.get("Location").get("SignedURL")
        file_source = upload_url_response.get("Location").get("FileSource")
        logger.debug(f"Received signed URL for {filepath}")

        #####################
        # Put BLOB Data
        #####################
        logger.debug(f"Getting blob client for {filepath}")
        blob_client = BlobClient.from_blob_url(signed_url, max_single_put_size=MAX_CHUNK_SIZE * 1024)
        logger.debug(f"Opening file stream for {filepath}")
        with open(filepath, "rb") as file_stream:
            logger.debug(f"Uploading file to blob: {filepath}")
            upload_response = blob_client.upload_blob(file_stream, blob_type="BlockBlob", overwrite=True)
            logger.debug(f"Blob upload response for {filepath}: {upload_response}")

        #####################
        # Post MetaData
        #####################
        logger.debug(f"Populating metadata for {filepath}")
        metadata_body = json.dumps(populate_file_metadata(file_source, file, dir_name))
        logger.info(f"Posting request for file {filepath}: {metadata_body}")
        metadata_response = session.post(FILE_URL + "/files/metadata", metadata_body, headers=headers)
        logger.debug(f"Metadata response status for {filepath}: {metadata_response.status_code}")
        

        if metadata_response.status_code != 201:
            logger.error(f"/files/metadata failed for {filepath} with response {metadata_response.status_code} and body {metadata_response.text}")
            return FILE_UPLOAD_FAILED, filepath

        #####################
        # Get Record Version
        #####################
        file_id = metadata_response.json().get("id")
        logger.debug(f"Getting record version for {filepath} with file ID: {file_id}")
        version_response = session.get(STORAGE_URL + "/versions/" + file_id, headers=headers)
        logger.debug(f"Version response status for {filepath} with file ID: {file_id}: {version_response.status_code}")

        if version_response.status_code != 200:
            logger.error(f"/storage/versions failed for {filepath} with file ID {file_id} with response {version_response}")
            return FILE_UPLOAD_FAILED, filepath

        record_version = version_response.json().get("versions")[0]
        logger.debug(f"Record version for {filepath}: {record_version}")

        output = {
            "file_id": file_id,
            "file_source": file_source,
            "file_record_version": str(record_version),
            "Description": dir_name
        }

    except requests.exceptions.RequestException as e:
        logger.error(f"File Upload Failed: {file} Reason: {e}")
        return FILE_UPLOAD_FAILED, filepath

    logger.info(f"File Upload Completed: {file}")
    return FILE_UPLOAD_SUCCESS, (file, output)