luisoala commited on
Commit
e7bc9a5
Β·
1 Parent(s): 0953dd4
Files changed (2) hide show
  1. app.py +51 -11
  2. validation.py +17 -36
app.py CHANGED
@@ -9,8 +9,13 @@ def process_file(file):
9
  results = []
10
  json_data = None
11
 
 
 
 
12
  # Check 1: JSON validation
13
  json_valid, json_message, json_data = validate_json(file.name)
 
 
14
  results.append(("JSON Format Validation", json_valid, json_message))
15
 
16
  if not json_valid:
@@ -18,6 +23,8 @@ def process_file(file):
18
 
19
  # Check 2: Croissant validation
20
  croissant_valid, croissant_message = validate_croissant(json_data)
 
 
21
  results.append(("Croissant Schema Validation", croissant_valid, croissant_message))
22
 
23
  if not croissant_valid:
@@ -25,10 +32,12 @@ def process_file(file):
25
 
26
  # Check 3: Records validation
27
  records_valid, records_message = validate_records(json_data)
 
 
28
  results.append(("Records Generation Test", records_valid, records_message))
29
 
30
- # Generate detailed report
31
- report = generate_validation_report(file.name, json_data, results)
32
 
33
  return results, report
34
 
@@ -73,7 +82,7 @@ def create_ui():
73
  validation_progress = gr.HTML(visible=False)
74
 
75
  # Collapsible report section
76
- with gr.Accordion("Full validation report as markdown file", visible=False) as report_group:
77
  with gr.Column():
78
  report_md = gr.File(
79
  label="Download Report",
@@ -180,9 +189,10 @@ def create_ui():
180
  .arrow-indicator {
181
  font-size: 14px;
182
  transition: transform 0.3s ease;
 
183
  }
184
  .arrow-down {
185
- transform: rotate(90deg);
186
  }
187
 
188
  /* Loading animation */
@@ -217,9 +227,23 @@ def create_ui():
217
  def on_tab_change(evt: gr.SelectData):
218
  tab_id = evt.value
219
  if tab_id == "Upload File":
220
- return "upload", """<div class="progress-status">Ready for upload</div>""", gr.update(visible=False)
 
 
 
 
 
 
 
221
  else:
222
- return "url", """<div class="progress-status">Enter a URL to fetch</div>""", gr.update(visible=False)
 
 
 
 
 
 
 
223
 
224
  def on_copy_click(report):
225
  return report
@@ -232,9 +256,21 @@ def create_ui():
232
 
233
  def on_file_upload(file):
234
  if file is None:
235
- return """<div class="progress-status">Ready for upload</div>""", gr.update(visible=False)
 
 
 
 
 
 
236
 
237
- return """<div class="progress-status">βœ… File uploaded successfully</div>""", gr.update(visible=False)
 
 
 
 
 
 
238
 
239
  def fetch_from_url(url):
240
  if not url:
@@ -345,12 +381,16 @@ def create_ui():
345
  report_filename if report else None # report_md
346
  ]
347
 
348
- # Connect UI events to functions
349
- tabs.select(on_tab_change, None, [active_tab, upload_progress, validation_results])
 
 
 
 
350
  file_input.change(
351
  on_file_upload,
352
  inputs=file_input,
353
- outputs=[upload_progress, validation_results]
354
  )
355
 
356
  # Add progress state handling
 
9
  results = []
10
  json_data = None
11
 
12
+ # Use just the filename instead of full path
13
+ filename = file.name.split("/")[-1]
14
+
15
  # Check 1: JSON validation
16
  json_valid, json_message, json_data = validate_json(file.name)
17
+ # Remove empty checkmarks from messages
18
+ json_message = json_message.replace("\nβœ“\n", "\n")
19
  results.append(("JSON Format Validation", json_valid, json_message))
20
 
21
  if not json_valid:
 
23
 
24
  # Check 2: Croissant validation
25
  croissant_valid, croissant_message = validate_croissant(json_data)
26
+ # Remove empty checkmarks from messages
27
+ croissant_message = croissant_message.replace("\nβœ“\n", "\n")
28
  results.append(("Croissant Schema Validation", croissant_valid, croissant_message))
29
 
30
  if not croissant_valid:
 
32
 
33
  # Check 3: Records validation
34
  records_valid, records_message = validate_records(json_data)
35
+ # Remove empty checkmarks from messages
36
+ records_message = records_message.replace("\nβœ“\n", "\n")
37
  results.append(("Records Generation Test", records_valid, records_message))
38
 
39
+ # Generate detailed report with just filename
40
+ report = generate_validation_report(filename, json_data, results)
41
 
42
  return results, report
43
 
 
82
  validation_progress = gr.HTML(visible=False)
83
 
84
  # Collapsible report section
85
+ with gr.Accordion("Download full validation repoort", visible=False) as report_group:
86
  with gr.Column():
87
  report_md = gr.File(
88
  label="Download Report",
 
189
  .arrow-indicator {
190
  font-size: 14px;
191
  transition: transform 0.3s ease;
192
+ transform: rotate(0deg); /* Point right by default */
193
  }
194
  .arrow-down {
195
+ transform: rotate(90deg); /* Point down when expanded */
196
  }
197
 
198
  /* Loading animation */
 
227
  def on_tab_change(evt: gr.SelectData):
228
  tab_id = evt.value
229
  if tab_id == "Upload File":
230
+ return [
231
+ "upload",
232
+ """<div class="progress-status">Ready for upload</div>""",
233
+ gr.update(visible=False),
234
+ gr.update(visible=False), # Hide report group
235
+ None, # Clear report text
236
+ None # Clear report file
237
+ ]
238
  else:
239
+ return [
240
+ "url",
241
+ """<div class="progress-status">Enter a URL to fetch</div>""",
242
+ gr.update(visible=False),
243
+ gr.update(visible=False), # Hide report group
244
+ None, # Clear report text
245
+ None # Clear report file
246
+ ]
247
 
248
  def on_copy_click(report):
249
  return report
 
256
 
257
  def on_file_upload(file):
258
  if file is None:
259
+ return [
260
+ """<div class="progress-status">Ready for upload</div>""",
261
+ gr.update(visible=False),
262
+ gr.update(visible=False), # Hide report group
263
+ None, # Clear report text
264
+ None # Clear report file
265
+ ]
266
 
267
+ return [
268
+ """<div class="progress-status">βœ… File uploaded successfully</div>""",
269
+ gr.update(visible=False),
270
+ gr.update(visible=False), # Hide report group
271
+ None, # Clear report text
272
+ None # Clear report file
273
+ ]
274
 
275
  def fetch_from_url(url):
276
  if not url:
 
381
  report_filename if report else None # report_md
382
  ]
383
 
384
+ # Connect UI events to functions with updated outputs
385
+ tabs.select(
386
+ on_tab_change,
387
+ None,
388
+ [active_tab, upload_progress, validation_results, report_group, report_text, report_md]
389
+ )
390
  file_input.change(
391
  on_file_upload,
392
  inputs=file_input,
393
+ outputs=[upload_progress, validation_results, report_group, report_text, report_md]
394
  )
395
 
396
  # Add progress state handling
validation.py CHANGED
@@ -63,48 +63,29 @@ def validate_records(json_data):
63
  error_message = f"❌ Unexpected error during records validation: {str(e)}\n\n{error_details}"
64
  return False, error_message
65
 
66
- def generate_validation_report(file_path, json_data, validation_results):
67
- """Generate a detailed markdown report of the validation results."""
68
  report = []
69
-
70
- # Header
71
  report.append("# CROISSANT VALIDATION REPORT")
72
  report.append("=" * 80)
73
- report.append("")
74
-
75
- # Validation Results Section
76
- report.append("## VALIDATION RESULTS")
77
  report.append("-" * 80)
78
- report.append(f"Starting validation for file: {file_path}")
79
 
80
- # Process each validation step
81
- for step_name, passed, message in validation_results:
82
- report.append("")
83
- report.append(f"### {step_name}")
84
- report.append("βœ“" if passed else "❌")
85
- report.append(message.replace("βœ…", "βœ“").replace("❌", "βœ—"))
86
-
87
- # Add extra details for record sets if available
88
- if step_name == "Records Generation Test" and json_data:
89
- try:
90
- dataset = mlc.Dataset(jsonld=json_data)
91
- for record_set in dataset.metadata.record_sets:
92
- report.append("")
93
- report.append(f"#### Record Set: {record_set.uuid}")
94
- report.append(f"Description: {record_set.description}")
95
- if record_set.data_types:
96
- report.append(f"Data Types: {record_set.data_types}")
97
- report.append("")
98
- report.append("Fields:")
99
- for field in record_set.fields:
100
- report.append(f"- {field.name} ({field.data_type})")
101
- if field.description:
102
- report.append(f" Description: {field.description}")
103
- except Exception as e:
104
- report.append(f"Error getting record set details: {str(e)}")
105
-
106
- # JSON-LD Reference Section
107
  report.append("")
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  report.append("## JSON-LD REFERENCE")
109
  report.append("=" * 80)
110
  report.append("")
 
63
  error_message = f"❌ Unexpected error during records validation: {str(e)}\n\n{error_details}"
64
  return False, error_message
65
 
66
+ def generate_validation_report(filename, json_data, results):
67
+ """Generate a detailed validation report in markdown format."""
68
  report = []
 
 
69
  report.append("# CROISSANT VALIDATION REPORT")
70
  report.append("=" * 80)
71
+ report.append("\n## VALIDATION RESULTS")
 
 
 
72
  report.append("-" * 80)
 
73
 
74
+ report.append(f"Starting validation for file: {filename}")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
75
  report.append("")
76
+
77
+ # Add validation results
78
+ for test_name, passed, message in results:
79
+ report.append(f"### {test_name}")
80
+ if passed:
81
+ report.append("βœ“")
82
+ report.append(message.strip()) # Remove any trailing newlines
83
+ else:
84
+ report.append("❌")
85
+ report.append(message.strip()) # Remove any trailing newlines
86
+ report.append("") # Add spacing between sections
87
+
88
+ # Add JSON-LD reference
89
  report.append("## JSON-LD REFERENCE")
90
  report.append("=" * 80)
91
  report.append("")