Spaces:
Sleeping
Sleeping
Use named tempfile to save the presentation
Browse files- app.py +13 -8
- pptx_helper.py +10 -4
app.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1 |
import os
|
|
|
2 |
import json5
|
3 |
import logging
|
4 |
import shutil
|
@@ -7,6 +8,7 @@ import streamlit as st
|
|
7 |
import streamlit.runtime.scriptrunner as st_sr
|
8 |
from typing import List, Tuple
|
9 |
import metaphor_python as metaphor
|
|
|
10 |
|
11 |
import llm_helper
|
12 |
import pptx_helper
|
@@ -248,23 +250,26 @@ def generate_slide_deck(json_str: str, pptx_template: str, progress_bar) -> List
|
|
248 |
progress_text = 'Creating the slide deck...give it a moment'
|
249 |
progress_bar.progress(75, text=progress_text)
|
250 |
|
251 |
-
# Get a unique name for the file to save -- use the session ID
|
252 |
-
ctx = st_sr.get_script_run_ctx()
|
253 |
-
session_id = ctx.session_id
|
254 |
-
timestamp = time.time()
|
255 |
-
output_file_name = f'{session_id}_{timestamp}.pptx'
|
|
|
|
|
|
|
256 |
|
257 |
logging.info('Creating PPTX file...')
|
258 |
all_headers = pptx_helper.generate_powerpoint_presentation(
|
259 |
json_str,
|
260 |
as_yaml=False,
|
261 |
slides_template=pptx_template,
|
262 |
-
|
263 |
)
|
264 |
progress_bar.progress(100, text='Done!')
|
265 |
|
266 |
-
with open(
|
267 |
-
st.download_button('Download PPTX file', f, file_name=
|
268 |
|
269 |
return all_headers
|
270 |
|
|
|
1 |
import os
|
2 |
+
import pathlib
|
3 |
import json5
|
4 |
import logging
|
5 |
import shutil
|
|
|
8 |
import streamlit.runtime.scriptrunner as st_sr
|
9 |
from typing import List, Tuple
|
10 |
import metaphor_python as metaphor
|
11 |
+
import tempfile
|
12 |
|
13 |
import llm_helper
|
14 |
import pptx_helper
|
|
|
250 |
progress_text = 'Creating the slide deck...give it a moment'
|
251 |
progress_bar.progress(75, text=progress_text)
|
252 |
|
253 |
+
# # Get a unique name for the file to save -- use the session ID
|
254 |
+
# ctx = st_sr.get_script_run_ctx()
|
255 |
+
# session_id = ctx.session_id
|
256 |
+
# timestamp = time.time()
|
257 |
+
# output_file_name = f'{session_id}_{timestamp}.pptx'
|
258 |
+
|
259 |
+
temp = tempfile.NamedTemporaryFile(delete=False, suffix='.pptx')
|
260 |
+
path = pathlib.Path(temp.name)
|
261 |
|
262 |
logging.info('Creating PPTX file...')
|
263 |
all_headers = pptx_helper.generate_powerpoint_presentation(
|
264 |
json_str,
|
265 |
as_yaml=False,
|
266 |
slides_template=pptx_template,
|
267 |
+
output_file_path=path
|
268 |
)
|
269 |
progress_bar.progress(100, text='Done!')
|
270 |
|
271 |
+
with open(path, 'rb') as f:
|
272 |
+
st.download_button('Download PPTX file', f, file_name='Presentation.pptx')
|
273 |
|
274 |
return all_headers
|
275 |
|
pptx_helper.py
CHANGED
@@ -1,3 +1,5 @@
|
|
|
|
|
|
1 |
from typing import List, Tuple
|
2 |
import json5
|
3 |
import logging
|
@@ -50,7 +52,7 @@ def generate_powerpoint_presentation(
|
|
50 |
structured_data: str,
|
51 |
as_yaml: bool,
|
52 |
slides_template: str,
|
53 |
-
|
54 |
) -> List:
|
55 |
"""
|
56 |
Create and save a PowerPoint presentation file containing the contents in JSON or YAML format.
|
@@ -58,7 +60,7 @@ def generate_powerpoint_presentation(
|
|
58 |
:param structured_data: The presentation contents as "JSON" (may contain trailing commas) or YAML
|
59 |
:param as_yaml: True if the input data is in YAML format; False if it is in JSON format
|
60 |
:param slides_template: The PPTX template to use
|
61 |
-
:param
|
62 |
:return A list of presentation title and slides headers
|
63 |
"""
|
64 |
|
@@ -120,7 +122,7 @@ def generate_powerpoint_presentation(
|
|
120 |
title = slide.shapes.title
|
121 |
title.text = 'Thank you!'
|
122 |
|
123 |
-
presentation.save(
|
124 |
|
125 |
return all_headers
|
126 |
|
@@ -235,9 +237,13 @@ if __name__ == '__main__':
|
|
235 |
}
|
236 |
]
|
237 |
}'''
|
|
|
|
|
|
|
|
|
238 |
generate_powerpoint_presentation(
|
239 |
json5.loads(json_data),
|
240 |
as_yaml=False,
|
241 |
-
|
242 |
slides_template='Blank'
|
243 |
)
|
|
|
1 |
+
import pathlib
|
2 |
+
import tempfile
|
3 |
from typing import List, Tuple
|
4 |
import json5
|
5 |
import logging
|
|
|
52 |
structured_data: str,
|
53 |
as_yaml: bool,
|
54 |
slides_template: str,
|
55 |
+
output_file_path: pathlib.Path
|
56 |
) -> List:
|
57 |
"""
|
58 |
Create and save a PowerPoint presentation file containing the contents in JSON or YAML format.
|
|
|
60 |
:param structured_data: The presentation contents as "JSON" (may contain trailing commas) or YAML
|
61 |
:param as_yaml: True if the input data is in YAML format; False if it is in JSON format
|
62 |
:param slides_template: The PPTX template to use
|
63 |
+
:param output_file_path: The path of the PPTX file to save as
|
64 |
:return A list of presentation title and slides headers
|
65 |
"""
|
66 |
|
|
|
122 |
title = slide.shapes.title
|
123 |
title.text = 'Thank you!'
|
124 |
|
125 |
+
presentation.save(output_file_path)
|
126 |
|
127 |
return all_headers
|
128 |
|
|
|
237 |
}
|
238 |
]
|
239 |
}'''
|
240 |
+
|
241 |
+
temp = tempfile.NamedTemporaryFile(delete=False, suffix='.pptx')
|
242 |
+
path = pathlib.Path(temp.name)
|
243 |
+
|
244 |
generate_powerpoint_presentation(
|
245 |
json5.loads(json_data),
|
246 |
as_yaml=False,
|
247 |
+
output_file_path=path,
|
248 |
slides_template='Blank'
|
249 |
)
|