File size: 3,254 Bytes
06626f0
1130bd7
 
 
 
a996c52
1130bd7
 
 
 
 
 
 
 
 
 
 
5fa3d68
1130bd7
 
 
 
 
 
 
 
 
5fa3d68
1130bd7
 
 
184f2d6
1130bd7
 
 
 
 
 
 
 
 
09d275f
1130bd7
 
 
 
 
 
184f2d6
1130bd7
 
 
184f2d6
1130bd7
 
 
 
 
 
 
 
 
06626f0
1130bd7
 
 
 
 
 
 
 
 
5fa3d68
1130bd7
5fa3d68
1130bd7
 
 
 
 
 
 
 
 
 
 
 
 
 
5fa3d68
1130bd7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import gradio as gr
import zipfile
import io
import re
import traceback

def process_files(phase, objecten_file_dict, template_files_data):
    try:
        # Read and process the 'objecten.txt' file
        content = objecten_file_dict['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 = g.strip().split('\n')
            k = ls[0]
            if k in objs:
                objs[k] = ls[1:]
            else:
                error_msg = f"Key [{k}] is not recognized."
                return None, error_msg

        # Extract object codes
        for k in objs:
            objs[k] = [re.search(regObject, o).group(0) for o in objs[k] if re.search(regObject, o)]

        # Create an in-memory ZIP file
        zip_buffer = io.BytesIO()
        with zipfile.ZipFile(zip_buffer, 'w') as zf:
            for k in objs:
                regPhase = ''
                if k == '(i)SAT':
                    regPhase = r'sat'
                elif k == 'iFAT':
                    regPhase = r'fat'

                # Filter template files for this phase
                phase_templates = []
                for file_dict in template_files_data:
                    filename = file_dict['name']
                    if re.search(regPhase, filename, re.IGNORECASE):
                        phase_templates.append(file_dict)

                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 file_dict in phase_templates:
                        template_filename = file_dict['name']
                        # Adjust filename if needed
                        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_content = file_dict['data']
                        file_path = folder_path + adjusted_filename
                        zf.writestr(file_path, file_content)
        zip_buffer.seek(0)
        return zip_buffer, None
    except Exception as e:
        # Capture the full traceback
        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 Template Files", type='binary', multiple=True)
    ],
    outputs=[
        gr.File(label="Download ZIP File"),
        gr.Textbox(label="Error Log", lines=15)
    ],
    title="Template Folder Generator",
    description="Upload 'objecten.txt' and template files to generate folders and files."
)

interface.launch()