|
import gradio as gr |
|
import zipfile |
|
import io |
|
import re |
|
import traceback |
|
import os |
|
import tempfile |
|
|
|
def process_files(phase, objecten_file_data, templates_zip_file_data): |
|
try: |
|
|
|
content = objecten_file_data.decode('utf-8') |
|
t = content.strip().split('\n\n') |
|
phases = ["iFAT", "(i)SAT"] |
|
objs = {p: [] for p in phases} |
|
if phase in phases: |
|
objs = {phase: []} |
|
else: |
|
objs = {p: [] for p in phases} |
|
|
|
regObject = r"\d{4}[a-zA-Z]{2}" |
|
for g in t: |
|
ls = [line.strip() for line in g.strip().split('\n') if line.strip()] |
|
k = ls[0].strip() |
|
if k in objs: |
|
objs[k] = ls[1:] |
|
else: |
|
error_msg = f"Key [{k}] is not recognized." |
|
return None, error_msg |
|
|
|
|
|
for k in objs: |
|
objs[k] = [re.search(regObject, o).group(0) for o in objs[k] if re.search(regObject, o)] |
|
|
|
|
|
templates_zip_data = templates_zip_file_data |
|
with zipfile.ZipFile(io.BytesIO(templates_zip_data), 'r') as zip_ref: |
|
template_files = {info.filename: zip_ref.read(info.filename) for info in zip_ref.infolist()} |
|
|
|
|
|
temp_dir = tempfile.mkdtemp() |
|
output_zip_path = os.path.join(temp_dir, 'output.zip') |
|
|
|
|
|
with zipfile.ZipFile(output_zip_path, 'w') as zf: |
|
for k in objs: |
|
regPhase = '' |
|
if k == '(i)SAT': |
|
regPhase = r'sat' |
|
elif k == 'iFAT': |
|
regPhase = r'fat' |
|
|
|
|
|
phase_templates = [] |
|
for filename, file_data in template_files.items(): |
|
if re.search(regPhase, filename, re.IGNORECASE): |
|
phase_templates.append((filename, file_data)) |
|
|
|
if not phase_templates: |
|
error_msg = f"Phase {k} has no templates." |
|
return None, error_msg |
|
|
|
for o in objs[k]: |
|
folder_path = f"{o}/" |
|
for template_filename, file_content in phase_templates: |
|
|
|
if re.search(r"hut_\d{4}[a-zA-Z]{2}", template_filename, re.IGNORECASE): |
|
adjusted_filename = template_filename[:4] + o + template_filename[10:] |
|
else: |
|
adjusted_filename = template_filename |
|
|
|
file_path = folder_path + adjusted_filename |
|
zf.writestr(file_path, file_content) |
|
|
|
return output_zip_path, "" |
|
|
|
except Exception as e: |
|
|
|
error_msg = traceback.format_exc() |
|
return None, error_msg |
|
|
|
phase_options = ['iFAT', '(i)SAT', 'All'] |
|
|
|
interface = gr.Interface( |
|
fn=process_files, |
|
inputs=[ |
|
gr.Dropdown(choices=phase_options, label="Select Phase"), |
|
gr.File(label="Upload 'objecten.txt' File", type='binary'), |
|
gr.File(label="Upload Templates ZIP File", type='binary') |
|
], |
|
outputs=[ |
|
gr.File(label="Download ZIP File"), |
|
gr.Textbox(label="Error Log") |
|
], |
|
title="Template Folder Generator", |
|
description="Upload 'objecten.txt' and a ZIP file containing template files to generate folders and files." |
|
) |
|
|
|
interface.launch() |
|
|