davidlms commited on
Commit
1f0ecf0
·
verified ·
1 Parent(s): decfedf

Update ipmentor/ui.py

Browse files
Files changed (1) hide show
  1. 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(num_subnets: str, use_vlsm: bool = False):
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
- str: Exercise specification in JSON format
54
  """
55
  try:
56
- num_subnets_int = int(num_subnets.strip())
57
- if num_subnets_int < 1:
58
- return json.dumps({"error": "Number of subnets must be at least 1"}, indent=2)
 
 
 
 
 
59
 
60
- result_json = generate_exercise_core(num_subnets_int, use_vlsm)
61
- return result_json
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=gr.Textbox(label="Exercise", lines=20, interactive=False),
 
 
 
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