File size: 2,470 Bytes
a8cd886
a4d7e4d
 
 
644a2ce
a4d7e4d
 
 
 
 
 
a8cd886
64fdc3c
 
a4d7e4d
 
 
64fdc3c
a4d7e4d
a8cd886
a4d7e4d
 
64fdc3c
a1d6c04
a4d7e4d
 
deca531
a4d7e4d
 
 
 
 
 
 
 
64fdc3c
a8cd886
 
c33fac7
a8cd886
644a2ce
 
 
 
 
a4d7e4d
 
a1d6c04
a4d7e4d
 
 
 
a8cd886
 
6691f6c
a4d7e4d
64fdc3c
a8cd886
64fdc3c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
64
65
66
67
68
69
70
71
72
73
import gradio as gr
import requests
from huggingface_hub import whoami
from huggingface_hub.utils import build_hf_headers, hf_raise_for_status
from gradio_huggingfacehub_search import HuggingfaceHubSearch

ENDPOINT = "https://huggingface.co"
# ENDPOINT = "http://localhost:5564"

REPO_TYPES = ["model", "dataset", "space"]


def duplicate(source_repo, dst_repo, repo_type, private, oauth_token: gr.OAuthToken | None):
    print(oauth_token.token)
    try:
        if not repo_type in REPO_TYPES:
            raise ValueError("need to select valid repo type")
        _ = whoami(oauth_token.token)
        # ^ this will throw if token is invalid

        r = requests.post(
            f"{ENDPOINT}/api/{repo_type}s/{source_repo}/duplicate",
            headers=build_hf_headers(token=oauth_token.token),
            json={"repository": dst_repo, "private": private},
        )
        hf_raise_for_status(r)

        repo_url = r.json().get("url")

        return (
            f'Find your repo <a href=\'{repo_url}\' target="_blank" style="text-decoration:underline">here</a>',
            "sp.jpg",
        )

    except Exception as e:
        raise gr.Error(f"""Oops, you forgot to login. Please use the loggin button on the top left to migrate your repo {e}""")

interface = gr.Interface(
    fn=duplicate,
    inputs=[
        HuggingfaceHubSearch(
            placeholder="Source repository (e.g. osanseviero/src)",
            search_type=["model", "dataset", "space"],
            sumbit_on_select=False,
        ),
        gr.Textbox(placeholder="Destination repository (e.g. osanseviero/dst)"),
        gr.Dropdown(choices=REPO_TYPES, value="model"),
        gr.Checkbox(label="Make new repo private?"),
    ],
    outputs=[
        gr.Markdown(label="output"),
        gr.Image(show_label=False),
    ],
    title="Duplicate your repo!",
    description="Duplicate a Hugging Face repository! This Space is a an experimental demo.",
    allow_flagging="never",
    live=False
)

def swap_visibilty(profile: gr.OAuthProfile | None):
    return gr.update(elem_classes=["main_ui_logged_in"]) if profile else gr.update(elem_classes=["main_ui_logged_out"])
        
css = '''
.main_ui_logged_out{opacity: 0.3; pointer-events: none}
'''
with gr.Blocks(css=css) as demo:
    gr.LoginButton()
    with gr.Column(elem_classes="main_ui_logged_out") as main_ui:
        interface.render()
    demo.load(fn=swap_visibilty, outputs=main_ui)
    
demo.queue()
demo.launch()