Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import requests | |
| import re | |
| import yaml | |
| def fetch_module(url: str) -> str: | |
| """ | |
| Fetch the raw content of a file from a GitHub URL. | |
| Args: | |
| url (str): The URL of the GitHub file. Can be a standard GitHub URL or a raw URL. | |
| Returns: | |
| str: The raw text content of the file. | |
| Raises: | |
| requests.HTTPError: If the HTTP request fails. | |
| """ | |
| if "github.com" in url and "raw.githubusercontent.com" not in url: | |
| url = url.replace("github.com", "raw.githubusercontent.com").replace("/blob/", "/") | |
| response = requests.get(url) | |
| response.raise_for_status() | |
| return response.text | |
| def extract_nfcore_meta_io(url: str) -> dict: | |
| """ | |
| Extract input and output metadata from a nf-core module YAML file. | |
| Args: | |
| url (str): The URL to the nf-core module's meta.yml file. | |
| Returns: | |
| dict: A dictionary with 'inputs' and 'outputs' keys, each containing lists of files or terms. | |
| Example: | |
| { | |
| "inputs": [...], | |
| "outputs": [...] | |
| } | |
| """ | |
| content = fetch_module(url) | |
| meta = yaml.safe_load(content) | |
| inputs = meta.get("input", []) | |
| outputs = meta.get("output", []) | |
| return {"inputs": inputs, "outputs": outputs} | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# Multi-Tool App") | |
| with gr.Tab("nf-core Module Meta i/o Extractor"): | |
| gr.Interface( | |
| fn=extract_nfcore_meta_io, | |
| inputs=gr.Textbox( | |
| placeholder="Paste nf-core module URL...", | |
| label="nf-core module meta.yml URL", | |
| info="Paste the URL to the meta.yml file of a nf-core module. Example: https://github.com/nf-core/modules/blob/master/modules/nf-core/fastqc/meta.yml" | |
| ), | |
| outputs=gr.JSON(label="Meta inputs and outputs"), | |
| title="nf-core Module Meta i/o Extractor", | |
| description="Extracts input/output files from a nf-core module's meta.yml file. Provide the URL to the meta.yml file in a nf-core module repository." | |
| ) | |
| # Launch the interface and MCP server | |
| if __name__ == "__main__": | |
| demo.launch(mcp_server=True) |