File size: 3,086 Bytes
a619cad
 
 
 
 
 
00e9206
 
 
 
 
4cff537
7c4b13d
 
faac2e1
 
7c4b13d
00e9206
 
7c4b13d
fa8d129
00e9206
 
 
312e934
 
 
 
 
597c491
00e9206
 
 
 
 
597c491
 
 
00e9206
 
312e934
597c491
00e9206
597c491
fa8d129
ff7881c
fa8d129
7c4b13d
00e9206
7c4b13d
 
00e9206
7c4b13d
 
00e9206
 
4a8e6b0
ff7881c
00e9206
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import urllib.parse  
import requests  
import io  
import json 


import logging

# Set up logging
logging.basicConfig(level=logging.ERROR, format='%(asctime)s - %(levelname)s - %(message)s')

def download_gitlab_repo_to_hfspace(api_url, project_id, version, target_folder):
    try:
        # Construct the URL for the release's zip file
        encoded_project_id = urllib.parse.quote(project_id, safe="")
        url = f"{api_url}/projects/{encoded_project_id}/repository/archive.zip?sha={version}"

        logging.info(f"Constructed URL: {url}")

        # Send GET request to download the zip file
        response = requests.get(url)
        logging.info(f"HTTP GET Request sent to {url}, Status Code: {response.status_code}")

        if response.status_code == 200:
            content_disposition = response.headers.get('content-disposition')
            if content_disposition:
                filename = content_disposition.split('filename=')[-1].strip('\"')
            else:
                filename = 'archive.zip'  # Fallback to a default name if not found

            logging.info(f"Filename determined: {filename}")
        else:
            logging.error(f"Failed to download the file. HTTP Status: {response.status_code}")
            return

        existing_files = api.list_repo_files(repo_id=HF_SPACE_NAME, repo_type='space')
        target_path = f"{target_folder}/{filename}"

        logging.info(f"Target Path: '{target_path}'")
        logging.info(f"Existing Files: {[repr(file) for file in existing_files]}")
        
        if target_path in existing_files:
            logging.warning(f"File '{target_path}' already exists in the repository. Skipping upload...")
            print(f"File '{target_path}' already exists in the repository. Skipping upload...")
        else:
            _upload_file_to_hfspace(response, api, target_path, HF_SPACE_NAME)

    except FileNotFoundError:
        logging.error("The config.json file was not found. Please ensure it exists in the project directory.")
        print("The config.json file was not found. Please ensure it exists in the project directory.")
    except json.JSONDecodeError:
        logging.error("Failed to parse the config.json file. Please ensure it contains valid JSON.")
        print("Failed to parse the config.json file. Please ensure it contains valid JSON.")
    except Exception as e:
        logging.error(f"An unexpected error occurred: {e}")
        print(f"An unexpected error occurred: {e}")

def _upload_file_to_hfspace(response, api, target_path, HF_SPACE_NAME):
    try:
        archive_bytes = io.BytesIO(response.content)
        logging.info(f"Preparing to upload file to '{target_path}'")
        api.upload_file(
            path_or_fileobj=archive_bytes,
            path_in_repo=target_path,
            repo_id=HF_SPACE_NAME,
            repo_type="space"
        )
        logging.info(f"File successfully uploaded to '{target_path}'")
    except Exception as e:
        logging.error(f"Error during file upload: {e}")
        print(f"Error during file upload: {e}")