File size: 2,200 Bytes
97c98e3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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

import gradio as gr
from huggingface_hub import HfApi
import os
import shutil

# Initialize Hugging Face API
api = HfApi()

# Function to clean directory if exists and recreate it
def clean_directory(directory):
    if os.path.exists(directory):
        shutil.rmtree(directory)  # Remove the entire directory
    os.makedirs(directory)  # Recreate an empty directory

# Function to upload and push to Hugging Face
def push_to_huggingface(repo_name, file_or_directory, hf_token):
    # Ensure correct repo name format
    if not "/" in repo_name:
        repo_name = f"{hf_token.split(':')[0]}/{repo_name}"  # Assume the namespace is the user's namespace

    # Step 1: Handle directories or files
    target_dir = f"./{repo_name}"
    if os.path.isdir(file_or_directory):
        shutil.copytree(file_or_directory, target_dir, dirs_exist_ok=True)
    else:
        os.makedirs(target_dir, exist_ok=True)
        shutil.copy(file_or_directory.name, os.path.join(target_dir, os.path.basename(file_or_directory.name)))

    # Step 2: Check if the repository already exists, create if not
    try:
        api.create_repo(repo_name, token=hf_token)
    except Exception as e:
        if "already created" in str(e):
            print(f"Repository '{repo_name}' already exists, skipping creation.")
        else:
            raise e

    # Step 3: Push files using HTTP-based upload
    if os.path.isdir(target_dir):
        api.upload_folder(folder_path=target_dir, path_in_repo="", repo_id=repo_name, token=hf_token)
    else:
        api.upload_file(path_or_fileobj=target_dir, path_in_repo=os.path.basename(file_or_directory.name), repo_id=repo_name, token=hf_token)

    return f"Repository '{repo_name}' has been pushed to Hugging Face Hub successfully."

# Gradio Interface
interface = gr.Interface(
    fn=push_to_huggingface,
    inputs=[
        "text",    # Repository name
        "file",    # File or directory
        "text"     # Hugging Face Token
    ],
    outputs="text",
    title="Push File or Directory to Hugging Face",
    description="Upload any file or directory and push it to the Hugging Face Hub."
)

# Launch the interface
if __name__ == "__main__":
    interface.launch()