File size: 2,074 Bytes
a619cad
 
 
 
 
 
4cff537
7c4b13d
 
faac2e1
 
7c4b13d
 
4a8e6b0
fa8d129
312e934
fa8d129
312e934
 
 
 
 
597c491
 
 
 
 
 
312e934
597c491
 
fa8d129
ff7881c
fa8d129
597c491
7c4b13d
 
 
 
 
 
 
 
4a8e6b0
 
 
ff7881c
7c4b13d
 
 
 
ff7881c
7c4b13d
 
1ef2ed4
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
import urllib.parse  
import requests  
import io  
import json 


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}"

        # Send GET request to download the zip file
    #    response = requests.get(url, stream=True)
        response = requests.get(url)
        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

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

        print(f"Target Path: '{target_path}'")
        print(f"Existing Files: {[repr(file) for file in existing_files]}")
        
        if target_path in existing_files:
            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:
        print("The config.json file was not found. Please ensure it exists in the project directory.")
    except json.JSONDecodeError:
        print("Failed to parse the config.json file. Please ensure it contains valid JSON.")
    except Exception as e:
        print(f"An error occurred: {e}")





def _upload_file_to_hfspace(response, api, target_path, HF_SPACE_NAME):
    archive_bytes = io.BytesIO(response.content)
    # Extract filename from content-disposition header
        api.upload_file(
            path_or_fileobj=archive_bytes,
            path_in_repo= target_path,
            repo_id=HF_SPACE_NAME,
            repo_type="space"
        )