Spaces:
Running
Running
File size: 2,825 Bytes
6dffd1c d538aa9 6dffd1c d538aa9 6dffd1c 372531f |
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 aiofiles
import urllib
import mistune
async def write_to_file(filename: str, text: str) -> None:
"""Asynchronously write text to a file in UTF-8 encoding.
Args:
filename (str): The filename to write to.
text (str): The text to write.
"""
# Ensure text is a string
if not isinstance(text, str):
text = str(text)
# Convert text to UTF-8, replacing any problematic characters
text_utf8 = text.encode('utf-8', errors='replace').decode('utf-8')
async with aiofiles.open(filename, "w", encoding='utf-8') as file:
await file.write(text_utf8)
async def write_text_to_md(text: str, filename: str = "") -> str:
"""Writes text to a Markdown file and returns the file path.
Args:
text (str): Text to write to the Markdown file.
Returns:
str: The file path of the generated Markdown file.
"""
file_path = f"/tmp/outputs/{filename[:60]}.md"
await write_to_file(file_path, text)
return urllib.parse.quote(file_path)
async def write_md_to_pdf(text: str, filename: str = "") -> str:
"""Converts Markdown text to a PDF file and returns the file path.
Args:
text (str): Markdown text to convert.
Returns:
str: The encoded file path of the generated PDF.
"""
file_path = f"/tmp/outputs/{filename[:60]}.pdf"
try:
from md2pdf.core import md2pdf
md2pdf(file_path,
md_content=text,
# md_file_path=f"{file_path}.md",
css_file_path="./frontend/pdf_styles.css",
base_url=None)
print(f"Report written to {file_path}")
except Exception as e:
print(f"Error in converting Markdown to PDF: {e}")
return ""
encoded_file_path = urllib.parse.quote(file_path)
return encoded_file_path
async def write_md_to_word(text: str, filename: str = "") -> str:
"""Converts Markdown text to a DOCX file and returns the file path.
Args:
text (str): Markdown text to convert.
Returns:
str: The encoded file path of the generated DOCX.
"""
file_path = f"/tmp/outputs/{filename[:60]}.docx"
try:
from docx import Document
from htmldocx import HtmlToDocx
# Convert report markdown to HTML
html = mistune.html(text)
# Create a document object
doc = Document()
# Convert the html generated from the report to document format
HtmlToDocx().add_html_to_document(html, doc)
# Saving the docx document to file_path
doc.save(file_path)
print(f"Report written to {file_path}")
encoded_file_path = urllib.parse.quote(file_path)
return encoded_file_path
except Exception as e:
print(f"Error in converting Markdown to DOCX: {e}")
return "" |