File size: 1,632 Bytes
a619cad
 
 
 
 
 
1ef2ed4
7c4b13d
 
faac2e1
 
7c4b13d
 
 
 
 
1ef2ed4
7c4b13d
 
 
 
 
 
 
 
 
 
 
 
1ef2ed4
7c4b13d
 
 
 
 
1ef2ed4
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
import urllib.parse  
import requests  
import io  
import json 


def download_gitlab_repo_to_hfspace(api_url, project_id, version):
    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)

        if response.status_code == 200:
            _upload_file_to_hfspace(response, api, DATA_DIR, HF_SPACE_NAME)
        else:
            print(f"Failed to download the release: {response.status_code} - {response.reason}")
            print(response.text)

    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, DATA_DIR, HF_SPACE_NAME):
    archive_bytes = io.BytesIO(response.content)
    # Extract filename from content-disposition header
    content_disposition = response.headers.get("content-disposition")
    if content_disposition and "filename=" in content_disposition:
        filename = content_disposition.split("filename=")[-1].strip('"')

        api.upload_file(
            path_or_fileobj=archive_bytes,
            path_in_repo=f"{DATA_DIR}/{filename}",
            repo_id=HF_SPACE_NAME,
            repo_type="space"
        )