|
|
|
|
|
|
|
""" |
|
Repository Input Component |
|
|
|
This module provides the UI component for entering a GitHub repository URL. |
|
""" |
|
|
|
import gradio as gr |
|
import re |
|
import logging |
|
|
|
logger = logging.getLogger(__name__) |
|
|
|
|
|
def validate_github_url(url): |
|
""" |
|
Validate that the input is a proper GitHub repository URL. |
|
|
|
Args: |
|
url (str): The URL to validate. |
|
|
|
Returns: |
|
str or None: Error message if invalid, None if valid. |
|
""" |
|
if not url: |
|
return None |
|
|
|
|
|
pattern = r'^https?://github\.com/[\w.-]+/[\w.-]+/?$' |
|
if not re.match(pattern, url): |
|
return "Please enter a valid GitHub repository URL" |
|
return None |
|
|
|
|
|
def create_repo_input(): |
|
""" |
|
Create the repository input component. |
|
|
|
Returns: |
|
tuple: (repo_url, github_token, submit_btn) - The repository URL input, GitHub token input, and submit button. |
|
""" |
|
with gr.Group(): |
|
gr.Markdown("### π GitHub Repository") |
|
|
|
repo_url = gr.Textbox( |
|
label="Repository URL", |
|
placeholder="https://github.com/username/repository", |
|
info="Enter the URL of a GitHub repository", |
|
) |
|
|
|
github_token = gr.Textbox( |
|
label="GitHub Token (Optional)", |
|
placeholder="For private repositories only", |
|
info="Required only for private repositories", |
|
type="password", |
|
visible=True |
|
) |
|
|
|
submit_btn = gr.Button( |
|
value="Analyze Repository", |
|
variant="primary", |
|
scale=0, |
|
) |
|
|
|
|
|
error_box = gr.Textbox( |
|
label="Error", |
|
visible=True, |
|
interactive=False, |
|
container=False, |
|
show_label=False |
|
) |
|
|
|
repo_url.change( |
|
fn=validate_github_url, |
|
inputs=[repo_url], |
|
outputs=[error_box], |
|
show_progress=False |
|
) |
|
|
|
return repo_url, github_token, submit_btn |