Spaces:
Sleeping
Sleeping
| 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() | |