import os import sys import uuid import gradio as gr import requests import json import tarfile from pathlib import Path from huggingface_hub import (create_repo,get_full_repo_name,upload_file,CommitOperationAdd,HfApi) uid = uuid.uuid4() print(uid) isExist = os.path.exists(f'{uid}') if not isExist: os.makedirs(f'{uid}') #token_self = os.environ['HF_TOKEN'] o=os.environ['P'] model_list = [ ] types=[ "A", "B", "C", "R1", ] def show_s(name,d_app,token): api = HfApi(token=token) author=name s_ist = (api.list_spaces(author=author)) print (s_ist) file_j = open(f'{uid}/tmp_j','w') file_j.writelines(str(s_ist)) file_j.close() file_b = open(f'{uid}/tmp_j','r') r_file = file_b.readlines() spaces=[] spaces2=[] for line in r_file: if "'id':" in line: line = line.split(":",1)[1] line = line.split("/",1)[1] line2 = line.replace("'","").replace(",","").replace("\n","") spaces.append(line2) #print(f"{line2}") return(gr.update(label="Spaces", choices=[s for s in spaces]),gr.update(label="Spaces", choices=[s for s in spaces])) def show_s_d(name,d_app,token): api = HfApi(token=token) author=name s_ist = (api.list_spaces(author=author)) print (s_ist) file_j = open(f'{uid}/tmp_j','w') file_j.writelines(str(s_ist)) file_j.close() file_b = open(f'{uid}/tmp_j','r') r_file = file_b.readlines() spaces=[] spaces2=[] for line in r_file: if "'id':" in line: line = line.split(":",1)[1] line = line.split("/",1)[1] line2 = line.replace("'","").replace(",","").replace("\n","") spaces.append(line2) #print(f"{line2}") return(gr.update(label="Spaces", choices=[s for s in spaces])) def show_f(repo,name,token): api = HfApi(token=token) f_ist = (api.list_repo_files(repo_id=f'{repo}/{name}', repo_type="space")) return(gr.Dropdown.update(label="Files", choices=[f for f in f_ist])) def load_space(r_name,s_name,d_app): print(f'https://huggingface.co/spaces/{r_name}/{s_name}/raw/main/{d_app}') r = requests.get(f'https://huggingface.co/spaces/{r_name}/{s_name}/raw/main/{d_app}') file = open(f'{uid}/{d_app}','w') file.writelines(r.text) file.close() o_file = open(f'{uid}/mod_{d_app}','w') o_file.writelines(r.text) return r.text,r.text def load_space_d(r_name,s_name,d_app): print(f'https://huggingface.co/spaces/{r_name}/{s_name}/raw/main/{d_app}') r = requests.get(f'https://huggingface.co/spaces/{r_name}/{s_name}/raw/main/{d_app}') file = open(f'{uid}/d{d_app}','w') file.writelines(r.text) file.close() o_file = open(f'{uid}/mod_d_{d_app}','w') o_file.writelines(r.text) return r.text def upd(x,d_app): file = open(f'{uid}/{d_app}','w') file.writelines(x) file.close() o_file = open(f'{uid}/mod_{d_app}','w') o_file.writelines(x) return x def repl(rs,rt,d_app): file = open(f'{uid}/{d_app}','r') r_file = file.read() r_file = r_file.replace(f'{rs}',f'{rt}') o_file = open(f'{uid}/mod_{d_app}','w') o_file = o_file.write(r_file) file.close() return r_file, f'{uid}/mod_{d_app}' def get_f(r_name,spaces,token): api = HfApi(token=token) spaces_b=[] files_b=[] files_c=[] for space in spaces: isExist = os.path.exists(f'{space}') if not isExist: os.makedirs(f'{space}') f_ist = (api.list_repo_files(repo_id=f'{r_name}/{space}', repo_type="space")) for file in f_ist: t_file=open(f'{uid}/{space}-{file}','w') zz_file=open(f'{space}/{file}','w') r = requests.get(f'https://huggingface.co/spaces/{r_name}/{space}/raw/main/{file}') t_file.write(r.text) t_file.close() zz_file.write(r.text) zz_file.close() files_b.append(f'{uid}/{space}-{file}') with tarfile.open(f'{space}.tar.gz','w:gz') as tar: tar.add(f"./{space}",arcname=os.path.basename(f"./{space}")) spaces_b.append(f'{space}.tar.gz') return(files_b,spaces_b) def build_space(token,r_name,s_name,d_app,rd_name,sd_name,dd_app,priv): if token==None or token=="": token = token_self else: token = token pass if dd_app=="" or dd_app==None: dd_app=d_app if rd_name=="" or rd_name==None: rd_name=r_name if sd_name=="" or sd_name==None: sd_name=s_name api = HfApi(token=token) repo_name=f'{rd_name}/{sd_name}' print (repo_name) try: api.upload_file( path_or_fileobj=f"{uid}/mod_{d_app}", path_in_repo=f"{dd_app}", repo_id=repo_name, token=token, repo_type="space", ) if priv==True: api.update_repo_visibility(repo_id=repo_name,private=True,repo_type="space") #os.remove(f"{uid}at.py") return gr.HTML.update(f'''
Link to space https://huggingface.co/spaces/{repo_name}

''') except Exception as e: return gr.HTML.update(f"""{str(e)}""") def checkp(p): if p == o: return gr.update(visible=False), gr.update(visible=True) elif p != o: return None, None with gr.Blocks() as build: with gr.Row(visible=True) as no: pass_box=gr.Textbox() pass_btn=gr.Button() with gr.Box(visible=False) as yes: with gr.Row(): gr.Column(scale=1) with gr.Column(scale=3): with gr.Box(): with gr.Row(): with gr.Column(): r_name = gr.Textbox(label="Source Repo") s_name = gr.Dropdown(label="Spaces", choices=[]) d_app = gr.Dropdown(label="Files", choices=[]) s_btn = gr.Button("Show") l_btn = gr.Button("Load") with gr.Column(): rd_name = gr.Textbox(label="Dest Repo") sd_name = gr.Dropdown(label="Spaces", choices=[]) dd_app = gr.Dropdown(label="Files", choices=[]) sd_btn = gr.Button("Show") ld_btn = gr.Button("Load") with gr.Box(): r_s = gr.Textbox(label="Replace") r_w = gr.Textbox(label="with:") r_btn = gr.Button("Replace") with gr.Column(): with gr.Row(): with gr.Column(scale=3): token = gr.Textbox(label="auth") inbut = gr.Button("Update Repo") priv = gr.Checkbox(label="Private",value=True) output_html = gr.HTML("""""") gr.Column(scale=1) with gr.Accordion("Files",open=False): with gr.Tab("Modify"): files=gr.File() with gr.Tab("Download"): with gr.Row(): ss_name = gr.Dropdown(label="Spaces", choices=[],multiselect=True) f_btn=gr.Button() with gr.Row(): a_files=gr.File() z_files=gr.File() with gr.Row(): rm_but=gr.Button("Update Source") with gr.Tab("Source"): with gr.Row(): r_t=gr.Textbox(lines=30,max_lines=100) m_t=gr.Textbox(lines=30,max_lines=100) with gr.Tab("Mod Source"): with gr.Row(): rm_t=gr.Textbox(lines=30,max_lines=100,interactive=True) mm_t=gr.Textbox(lins=30,max_lines=100) with gr.Tab("Dest"): with gr.Row(): rd_t=gr.Textbox(lines=30,max_lines=100) md_t=gr.Textbox(lins=30,max_lines=100) au=gr.Textbox(visible=False) uu=gr.Textbox(visible=False) def cyc(x): return x,None rm_but.click(upd,[rm_t,d_app],[r_t]) f_btn.click(get_f,[r_name,ss_name,token],[a_files,z_files]) r_t.change(cyc,r_t,[m_t,files]) sd_btn.click(show_s_d,rd_name,[sd_name]) sd_name.change(show_f,[rd_name,sd_name],dd_app) ld_btn.click(load_space_d,[rd_name,sd_name,dd_app],[rd_t]) s_btn.click(show_s,r_name,[s_name,ss_name]) s_name.change(show_f,[r_name,s_name],d_app) l_btn.click(load_space,[r_name,s_name,d_app],[r_t,rm_t]) r_btn.click(repl,[r_s,r_w,d_app], [m_t,files]) pass_btn.click(checkp,pass_box,[no,yes]) inbut.click(build_space,[token,r_name,s_name,d_app,rd_name,sd_name,dd_app,priv],output_html) build.queue(concurrency_count=10).launch()