Spaces:
Running
Running
Update ipmentor/ui.py
Browse files- ipmentor/ui.py +19 -15
ipmentor/ui.py
CHANGED
|
@@ -41,29 +41,31 @@ def generate_diagram(ip_network: str, hosts_list: str, use_svg: bool = False):
|
|
| 41 |
return None, f"❌ Error: {str(e)}"
|
| 42 |
|
| 43 |
|
| 44 |
-
def generate_exercise(
|
| 45 |
"""
|
| 46 |
-
Generate a subnetting exercise.
|
| 47 |
|
| 48 |
Args:
|
| 49 |
-
num_subnets (str): Number of subnets to generate
|
| 50 |
use_vlsm (bool): Whether to use VLSM (different host counts per subnet)
|
| 51 |
|
| 52 |
Returns:
|
| 53 |
-
|
| 54 |
"""
|
| 55 |
try:
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 59 |
|
| 60 |
-
|
| 61 |
-
return
|
| 62 |
|
| 63 |
-
except ValueError:
|
| 64 |
-
return json.dumps({"error": "Invalid number of subnets"}, indent=2)
|
| 65 |
except Exception as e:
|
| 66 |
-
return json.dumps({"error": str(e)}, indent=2)
|
| 67 |
|
| 68 |
|
| 69 |
def create_interface():
|
|
@@ -116,12 +118,14 @@ def create_interface():
|
|
| 116 |
fn=generate_exercise,
|
| 117 |
api_name="generate_exercise",
|
| 118 |
inputs=[
|
| 119 |
-
gr.Textbox(label="Number of Subnets", placeholder="4", value="4"),
|
| 120 |
gr.Checkbox(label="Use VLSM (Variable Length Subnet Mask)", value=False)
|
| 121 |
],
|
| 122 |
-
outputs=
|
|
|
|
|
|
|
|
|
|
| 123 |
title="Subnetting Exercise Generator",
|
| 124 |
-
description="Generate random subnetting exercises. Enable VLSM for variable host requirements per subnet, or disable for equal division."
|
| 125 |
)
|
| 126 |
|
| 127 |
# Create main interface with custom header and description
|
|
|
|
| 41 |
return None, f"❌ Error: {str(e)}"
|
| 42 |
|
| 43 |
|
| 44 |
+
def generate_exercise(use_vlsm: bool = False):
|
| 45 |
"""
|
| 46 |
+
Generate a complete subnetting exercise with solution and diagram.
|
| 47 |
|
| 48 |
Args:
|
|
|
|
| 49 |
use_vlsm (bool): Whether to use VLSM (different host counts per subnet)
|
| 50 |
|
| 51 |
Returns:
|
| 52 |
+
tuple: (diagram_path, exercise_and_solution_json) for Gradio outputs
|
| 53 |
"""
|
| 54 |
try:
|
| 55 |
+
result_json = generate_exercise_core(use_vlsm)
|
| 56 |
+
result = json.loads(result_json)
|
| 57 |
+
|
| 58 |
+
if "error" in result:
|
| 59 |
+
return None, json.dumps(result, indent=2)
|
| 60 |
+
|
| 61 |
+
# Extract diagram path
|
| 62 |
+
diagram_path = result.get("diagram_path")
|
| 63 |
|
| 64 |
+
# Return diagram and formatted JSON
|
| 65 |
+
return diagram_path, json.dumps(result, indent=2)
|
| 66 |
|
|
|
|
|
|
|
| 67 |
except Exception as e:
|
| 68 |
+
return None, json.dumps({"error": str(e)}, indent=2)
|
| 69 |
|
| 70 |
|
| 71 |
def create_interface():
|
|
|
|
| 118 |
fn=generate_exercise,
|
| 119 |
api_name="generate_exercise",
|
| 120 |
inputs=[
|
|
|
|
| 121 |
gr.Checkbox(label="Use VLSM (Variable Length Subnet Mask)", value=False)
|
| 122 |
],
|
| 123 |
+
outputs=[
|
| 124 |
+
gr.Image(label="Network Diagram", type="filepath"),
|
| 125 |
+
gr.Textbox(label="Complete Exercise (Problem + Solution)", lines=30, interactive=False)
|
| 126 |
+
],
|
| 127 |
title="Subnetting Exercise Generator",
|
| 128 |
+
description="Generate complete random subnetting exercises with solution and diagram. Number of subnets (2-32) is randomly chosen. Enable VLSM for variable host requirements per subnet, or disable for equal division."
|
| 129 |
)
|
| 130 |
|
| 131 |
# Create main interface with custom header and description
|