rohitdiwane commited on
Commit
bd378a0
·
verified ·
1 Parent(s): 0445a68

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +63 -0
app.py ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ from docx import Document
3
+ from docx.shared import Pt
4
+ import tempfile
5
+ import os
6
+
7
+
8
+ def build_docx(num_episodes, num_segments, episode_label, segment_label):
9
+ num_episodes = int(num_episodes)
10
+ num_segments = int(num_segments)
11
+ episode_label = episode_label.strip() or "Episode"
12
+ segment_label = segment_label.strip() or "Segment"
13
+
14
+ doc = Document()
15
+
16
+ for e in range(1, num_episodes + 1):
17
+ doc.add_heading(f"{episode_label} {e}", level=1)
18
+
19
+ for s in range(1, num_segments + 1):
20
+ doc.add_heading(f"{segment_label} {s}", level=2)
21
+ # 2 blank lines inside each segment
22
+ doc.add_paragraph("")
23
+ doc.add_paragraph("")
24
+
25
+ tmp_dir = tempfile.mkdtemp()
26
+ out_path = os.path.join(tmp_dir, "document_structure.docx")
27
+ doc.save(out_path)
28
+ return out_path
29
+
30
+
31
+ def generate(num_episodes, num_segments, episode_label, segment_label):
32
+ if num_episodes < 1 or num_segments < 1:
33
+ raise gr.Error("Episodes and Segments must be at least 1.")
34
+ path = build_docx(num_episodes, num_segments, episode_label, segment_label)
35
+ return path
36
+
37
+
38
+ with gr.Blocks(title="Docx Structure Generator") as demo:
39
+ gr.Markdown(
40
+ "## Docx Structure Generator\n"
41
+ "Creates a Word document with **Episodes (H1)** each containing **Segments (H2)**, "
42
+ "with 2 blank lines under every segment heading."
43
+ )
44
+
45
+ with gr.Row():
46
+ num_episodes = gr.Number(label="Number of Episodes", value=3, precision=0, minimum=1)
47
+ num_segments = gr.Number(label="Segments per Episode", value=3, precision=0, minimum=1)
48
+
49
+ with gr.Row():
50
+ episode_label = gr.Textbox(label="Episode Heading Label", value="Episode")
51
+ segment_label = gr.Textbox(label="Segment Heading Label", value="Segment")
52
+
53
+ generate_btn = gr.Button("Generate .docx", variant="primary")
54
+ output_file = gr.File(label="Download generated document")
55
+
56
+ generate_btn.click(
57
+ fn=generate,
58
+ inputs=[num_episodes, num_segments, episode_label, segment_label],
59
+ outputs=output_file,
60
+ )
61
+
62
+ if __name__ == "__main__":
63
+ demo.launch()