Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
import tempfile | |
import gradio as gr | |
from huggingface_hub import create_repo, whoami, repo_exists, upload_folder, snapshot_download, logging | |
from huggingface_hub.utils import disable_progress_bars | |
import os | |
disable_progress_bars() | |
logging.set_verbosity(51) | |
def submit(source_repo, token): | |
try: | |
hfa = os.getenv('HFA_TOKEN') | |
org = "huggingface-assignments" | |
username = whoami(token)["name"] | |
target_repo = f"{org}/{username}-submission-0" | |
while repo_exists(target_repo, token=hfa): | |
dst_split = target_repo.split('-') | |
dst_index = int(dst_split[-1]) | |
dst_split[-1] = str(dst_index + 1) | |
target_repo = '-'.join(dst_split) | |
create_repo(target_repo, token=hfa, private=True) | |
with tempfile.TemporaryDirectory() as tmp: | |
snapshot_download(source_repo, local_dir=tmp, local_dir_use_symlinks=False, token=token) | |
upload_folder(repo_id=target_repo, folder_path=tmp, token=hfa) | |
except Exception: | |
return "There was an error. Contact lysandre@huggingface.co for help." | |
return "Success! Your submission has been entered." | |
description = "<h3>Submit your Hugging Face assignment.</h3> \nEnter the source repository (that should be private " \ | |
"and only " \ | |
"accessible to you!) and your read token. \n\nWe'll duplicate it privately so that we may take a look. " \ | |
"We do not save your read token." | |
article = "<p>Find your read token at <a href='https://huggingface.co/settings/token' target='_blank'>token settings" \ | |
"</a></p>" | |
with gr.Blocks(title="Submit your assignment!") as demo: | |
with gr.Column(): | |
gr.Markdown(description) | |
with gr.Column(): | |
source = gr.Textbox(label='Source repository', placeholder="Source repository (e.g. lysandre/submission)") | |
token = gr.Textbox(label='Read token', placeholder="Read access token") | |
with gr.Row(): | |
button = gr.Button("Submit", variant="primary") | |
with gr.Column(): | |
output = gr.Markdown() | |
gr.Markdown(article) | |
button.click(submit, inputs=[source, token], outputs=output, concurrency_limit=1) | |
demo.queue(max_size=10).launch(show_api=True) | |