api-rmarkdown / validator.py
manuelcaccone's picture
Upload folder using huggingface_hub
978295b verified
Raw
History Blame Contribute Delete
2.06 kB
import subprocess
from pathlib import Path
def validate_rmd(path):
rmd_path = Path(path)
if not rmd_path.is_file():
raise FileNotFoundError(f"File non trovato: {path}")
report_dir = rmd_path.parent
status = 200
error_message = ""
render_cmd = [
"Rscript", "--vanilla", "-e",
f"rmarkdown::render("
f"input = '{rmd_path.as_posix()}', "
f"output_format = c('html_document', 'latex_document'), "
f"output_dir = '{report_dir.as_posix()}')"
]
try:
result = subprocess.run(
render_cmd,
check=True,
capture_output=True,
text=True,
encoding='utf-8'
)
base_name = rmd_path.stem
html_file = report_dir / f"{base_name}.html"
tex_file = report_dir / f"{base_name}.tex"
if not (html_file.exists() and tex_file.exists()):
status = 404
error_message = "File di output non generati correttamente"
except subprocess.CalledProcessError as e:
status = 404
error_message = f"Errore durante il rendering:\n{e.stderr}"
except Exception as e:
status = 404
error_message = f"Errore imprevisto: {str(e)}"
status_file = report_dir / str(status)
with open(status_file, 'w', encoding='utf-8') as f:
if status == 404:
f.write(error_message)
return status, error_message if status == 404 else "OK"
def render_rmd_format(path, output_format):
rmd_path = Path(path)
if not rmd_path.is_file():
raise FileNotFoundError(f"File non trovato: {path}")
report_dir = rmd_path.parent
render_cmd = [
"Rscript", "--vanilla", "-e",
f"rmarkdown::render("
f"input = '{rmd_path.as_posix()}', "
f"output_format = '{output_format}', "
f"output_dir = '{report_dir.as_posix()}')"
]
result = subprocess.run(
render_cmd,
check=True,
capture_output=True,
text=True,
encoding='utf-8'
)
return result