File size: 3,920 Bytes
cad7678 46453e0 cad7678 46453e0 cad7678 46453e0 cad7678 46453e0 cad7678 |
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 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 |
import gradio as gr
from gradio.oauth import OAuthToken
from huggingface_hub import HfApi, whoami
from huggingface_hub.hf_api import DatasetInfo, ModelInfo, SpaceInfo
def get_token(oauth_token: OAuthToken):
return oauth_token.token
def list_orgs(oauth_token: OAuthToken = None):
if oauth_token is None:
return []
data = whoami(oauth_token.token)
if data["auth"]["type"] == "oauth":
organisations = [data["name"]] + [org["name"] for org in data["orgs"]]
else:
organisations = [
entry["entity"]["name"]
for entry in data["auth"]["accessToken"]["fineGrained"]["scoped"]
if "repo.write" in entry["permissions"]
]
organisations = [org for org in organisations if org != data["name"]]
organisations = [data["name"]] + organisations
return organisations
def get_org_dropdown(oauth_token: OAuthToken = None):
orgs = list_orgs(oauth_token)
return gr.Dropdown(
label="Organization",
choices=orgs,
value=orgs[0] if orgs else None,
allow_custom_value=True,
)
def get_resource_type_dropdown(
org_name: str, resource_type: str, oauth_token: OAuthToken = None
):
if oauth_token is None:
return ""
if not all([org_name, resource_type]):
return ""
hf_client = HfApi(token=oauth_token.token)
if resource_type == "model":
resources = hf_client.list_models(author=org_name)
elif resource_type == "dataset":
resources = hf_client.list_datasets(author=org_name)
elif resource_type == "space":
resources = hf_client.list_spaces(author=org_name)
else:
resources = []
resources = [resource.id for resource in resources]
return gr.Dropdown(
label="Resource",
choices=resources,
value=resources[0] if resources else None,
)
def get_resource(resource_id: str, resource_type: str, oauth_token: OAuthToken = None):
if oauth_token is None:
return ""
if not all([resource_id, resource_type]):
return ""
hf_client = HfApi(token=oauth_token.token)
resource: ModelInfo | DatasetInfo | SpaceInfo = hf_client.repo_info(
resource_id, repo_type=resource_type
)
return str(resource)
def delete_resource(
resource_id: str, resource_type: str, oauth_token: OAuthToken = None
):
if oauth_token is None:
return []
if not all([resource_id, resource_type]):
return []
hf_client = HfApi(token=oauth_token.token)
hf_client.delete_repo(resource_id, repo_type=resource_type, missing_ok=True)
return gr.Markdown(f"Deleted {resource_id}", visible=True)
with gr.Blocks() as demo:
gr.Markdown("# 🧹 🧼 🗑️ Hub Repo Cleaner 🗑️ 🧼 🧹")
gr.LoginButton()
org_name = gr.Dropdown(label="Organization", choices=list_orgs())
resource_type = gr.Dropdown(
label="Resource Type",
choices=["dataset", "model", "space"],
value="dataset",
)
resources = gr.Dropdown(label="Resources")
resource_info = gr.Code(language="json", label="Resource Info")
org_name.change(
get_resource_type_dropdown,
inputs=[org_name, resource_type],
outputs=[resources],
)
resource_type.change(
get_resource_type_dropdown,
inputs=[org_name, resource_type],
outputs=[resources],
)
resources.change(
get_resource,
inputs=[resources, resource_type],
outputs=[resource_info],
)
markdown = gr.Markdown("message", label="Message", visible=False)
button = gr.Button("Delete")
button.click(
delete_resource, inputs=[resources, resource_type], outputs=[markdown]
).then(
fn=get_resource_type_dropdown,
inputs=[org_name, resource_type],
outputs=[resources],
)
demo.load(get_org_dropdown, outputs=[org_name])
demo.launch()
|