| def send_to_sandbox(code): | |
| wrapped_code=f""" | |
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <meta charset="UTF-8"> | |
| ... | |
| </body> | |
| </html> | |
| """ | |
| encoded_html=base64.b64encode(wrapped_code.encode('utf-8')).decode('utf-8') | |
| data_uri=f"data:text/html;charset=utf-8;base64,{encoded_html}" | |
| return f'<iframe src="{data_uri}" width="100%" height="920px" sandbox="allow-scripts allow-same-origin allow-forms allow-popups allow-modals allow-presentation" allow="display-capture"></iframe>' | |
| def demo_card_click(e: gr.EventData): | |
| ... | |
| return DEMO_LIST[index]['description'] | |
| def wrap_html_in_gradio_app(html_code): | |
| safe_html=html_code.replace('"""',r'\"\"\"') | |
| return ( | |
| 'import gradio as gr\n\n' | |
| 'def show_html():\n' | |
| f' return """{safe_html}"""\n\n' | |
| 'demo = gr.Interface(fn=show_html, inputs=None, outputs=gr.HTML())\n\n' | |
| 'if __name__ == "__main__":\n' | |
| ' demo.launch()\n' | |
| ) | |
| def deploy_to_spaces(code): | |
| if not code.strip(): return | |
| app_py=wrap_html_in_gradio_app(code.strip()) | |
| ... | |
| webbrowser.open_new_tab(full_url) | |
| def wrap_html_in_static_app(html_code): | |
| return html_code | |
| def deploy_to_spaces_static(code): | |
| if not code.strip(): return | |
| app_html=wrap_html_in_static_app(code.strip()) | |
| ... | |
| webbrowser.open_new_tab(full_url) | |
| def check_hf_space_url(url: str) -> Tuple[bool, Optional[str], Optional[str]]: | |
| import re | |
| url_pattern=re.compile( | |
| r'^(https?://)?(huggingface\.co|hf\.co)/spaces/([\w-]+)/([\w-]+)$', | |
| re.IGNORECASE | |
| ) | |
| match=url_pattern.match(url.strip()) | |
| if match: | |
| return True, match.group(3), match.group(4) | |
| return False, None, None | |
| def fetch_hf_space_content(username: str, project_name: str) -> str: | |
| try: | |
| api=HfApi() | |
| space_info=api.space_info(f"{username}/{project_name}") | |
| sdk=space_info.sdk | |
| ... | |
| return f"""IMPORTED PROJECT FROM HUGGING FACE SPACE | |
| ============================================== | |
| Space: {username}/{project_name} | |
| SDK: {sdk} | |
| Main File: {main_file} | |
| {file_content}""" | |
| except Exception as e: | |
| return f"Error fetching space content: {str(e)}" | |
| def load_project_from_url(url: str) -> Tuple[str, str]: | |
| is_valid,username,project_name=check_hf_space_url(url) | |
| if not is_valid: | |
| return "Error: Please enter a valid Hugging Face Spaces URL.\n\nExpected format: https://huggingface.co/spaces/username/project","" | |
| content=fetch_hf_space_content(username,project_name) | |
| if content.startswith("Error:"): | |
| return content,"" | |
| lines=content.split('\n') | |
| code_start=0 | |
| for i,line in enumerate(lines): | |
| if line.strip() and not line.startswith(('=','IMPORTED','Space:','SDK:','Main File:')): | |
| code_start=i | |
| break | |
| code_content='\n'.join(lines[code_start:]) | |
| return f"β Successfully imported project from {username}/{project_name}",code_content | |
| def deploy_to_user_space(code, space_name, sdk_name, profile=None, token=None): | |
| import shutil | |
| if not code.strip(): | |
| return gr.update(value="No code to deploy.", visible=True) | |
| if profile is None or token is None: | |
| return gr.update(value="Please log in with your Hugging Face account to deploy to your own Space. Otherwise, use the default deploy (opens in new tab).", visible=True) | |
| ... | |
| return gr.update(value=f"β {action_text}! [Open your Space here]({space_url})", visible=True) | |