import os
import multiprocessing
import sys

# 需要从官网上下载对应的sdk
sys.path.insert(0, '/root/paddle/bce-python-sdk-0.8.73')

#从Python SDK导入BOS配置管理模块以及安全认证模块
from baidubce.bce_client_configuration import BceClientConfiguration
from baidubce.auth.bce_credentials import BceCredentials
 
#导入BOS相关模块
from baidubce import exception
from baidubce.services import bos
from baidubce.services.bos import canned_acl
from baidubce.services.bos.bos_client import BosClient

def upload_handle(file_name, bucket_name):
    print(f'upload {file_name} ...')
    #设置BosClient的Host，Access Key ID和Secret Access Key
    bos_host = "paddlenlp.bj.bcebos.com"    
    access_key_id = "10b354ff6588425a9b95c441f82d6e57"
    secret_access_key = "8230a6f87e464754b5957137c798f334"

    config = BceClientConfiguration(credentials=BceCredentials(
        access_key_id, secret_access_key),
                                    endpoint=bos_host)
    bos_client = BosClient(config)
    upload_id = bos_client.initiate_multipart_upload(bucket_name,
                                                     file_name).upload_id
 
    fsize = os.path.getsize(file_name)
    fsize = fsize / float(1024 * 1024)
    if fsize < 200:
        chunk_size = 10
    else:
        chunk_size = 100
 
    result = bos_client.put_super_obejct_from_file(
        bucket_name,
        file_name,
        file_name,
        chunk_size=100,
        thread_num=multiprocessing.cpu_count())
    if result:
        print("Upload success!")
    else:
        print("Upload fail!")

    
from fastcore.all import *
def up(file, base_bucket_name="/models/community/laion/CLIP-ViT-B-32-laion2B-s34B-b79K"):
    parent_path = str(file.parent)
    if parent_path == ".":
        upload_handle(
            file_name=file.name,
            bucket_name=base_bucket_name
        )
    else:
        with working_directory(parent_path):
            bucket_name = os.path.join(base_bucket_name, parent_path)
            upload_handle(
                file_name=file.name,
                bucket_name=bucket_name
            )
ignore = "ipynb"
for e in Path(".").ls():
    if ignore in str(e):
        continue
    if os.path.isdir(e):
        pp = e.ls()
        for ppp in pp:
            if ignore in str(ppp):
                continue
            up(ppp)
    else:
        up(e)