disable exc masking

This commit is contained in:
2025-08-16 19:03:13 +02:00
parent c49615aab6
commit 6dc4c9d1b3
2 changed files with 12 additions and 8 deletions
+8 -4
View File
@@ -21,6 +21,7 @@ class LatexModule(commands.Cog):
def __init__(self, bot: commands.Bot, logger_name: str): def __init__(self, bot: commands.Bot, logger_name: str):
self.bot = bot self.bot = bot
self.logger = logging.getLogger(logger_name) self.logger = logging.getLogger(logger_name)
self.logger_name = logger_name
# -------- /tex (PDF + diagnoza; log -> debug logger) -------- # -------- /tex (PDF + diagnoza; log -> debug logger) --------
@commands.hybrid_command( @commands.hybrid_command(
@@ -44,7 +45,7 @@ class LatexModule(commands.Cog):
try: try:
data = await att.read() data = await att.read()
self.logger.info("LaTeX read %s bytes from %s", len(data), att.filename) self.logger.info("LaTeX read %s bytes from %s", len(data), att.filename)
res = await compile_single_tex_bytes(data, att.filename, LATEX_TEX_ENGINE, LATEX_MAX_COMPILE_SECONDS, logger=self.logger) res = await compile_single_tex_bytes(data, att.filename, LATEX_TEX_ENGINE, LATEX_MAX_COMPILE_SECONDS, logger=self.logger_name)
self.logger.info("LaTeX result for %s: %s", att.filename, res) self.logger.info("LaTeX result for %s: %s", att.filename, res)
self.logger.info("LaTeX log (%s)\n%s", att.filename, (res["log_text"] or "")[-2000:]) self.logger.info("LaTeX log (%s)\n%s", att.filename, (res["log_text"] or "")[-2000:])
if res["ok"] and res["pdf_bytes"]: if res["ok"] and res["pdf_bytes"]:
@@ -61,11 +62,13 @@ class LatexModule(commands.Cog):
excerpt = data.decode("utf-8", errors="ignore")[:4000] excerpt = data.decode("utf-8", errors="ignore")[:4000]
except Exception: except Exception:
excerpt = "" excerpt = ""
advice = await ask_openai_diagnosis(res["log_text"] or "", excerpt, OPENAI_MODEL, logger=self.logger) advice = await ask_openai_diagnosis(res["log_text"] or "", excerpt, OPENAI_MODEL, logger=self.logger_name)
parts.append(f"❌ `{att.filename}` — błąd kompilacji.\nDiagnoza:\n{advice}") parts.append(f"❌ `{att.filename}` — błąd kompilacji.\nDiagnoza:\n{advice}")
raise
except Exception as e: except Exception as e:
self.logger.info("Exception %s: %s", att.filename, e) self.logger.info("Exception %s: %s", att.filename, e)
parts.append(f"⚠️ `{att.filename}` — wyjątek (szczegóły w logu).") parts.append(f"⚠️ `{att.filename}` — wyjątek (szczegóły w logu).")
raise
content = f"**LaTeX** — {len(atts)} plik(ów). Model: `{OPENAI_MODEL}`\n\n" + "\n\n".join(parts) content = f"**LaTeX** — {len(atts)} plik(ów). Model: `{OPENAI_MODEL}`\n\n" + "\n\n".join(parts)
await ctx.reply(content if len(content)<1900 else content[:1900]+"", files=files, mention_author=False) await ctx.reply(content if len(content)<1900 else content[:1900]+"", files=files, mention_author=False)
@@ -90,7 +93,7 @@ class LatexModule(commands.Cog):
for att in atts: for att in atts:
try: try:
data = await att.read() data = await att.read()
res = await compile_single_tex_bytes(data, att.filename, LATEX_TEX_ENGINE, LATEX_MAX_COMPILE_SECONDS, logger=self.logger) res = await compile_single_tex_bytes(data, att.filename, LATEX_TEX_ENGINE, LATEX_MAX_COMPILE_SECONDS, logger=self.logger_name)
self.logger.debug("LaTeX CLEAN (%s)\n%s", att.filename, (res["log_text"] or "")[-2000:]) self.logger.debug("LaTeX CLEAN (%s)\n%s", att.filename, (res["log_text"] or "")[-2000:])
if res["ok"] and res["pdf_bytes"]: if res["ok"] and res["pdf_bytes"]:
b = io.BytesIO(res["pdf_bytes"]) b = io.BytesIO(res["pdf_bytes"])
@@ -103,6 +106,7 @@ class LatexModule(commands.Cog):
except Exception as e: except Exception as e:
self.logger.debug("CLEAN exception %s: %s", att.filename, e) self.logger.debug("CLEAN exception %s: %s", att.filename, e)
parts.append(f"⚠️ `{att.filename}` — wyjątek (log w debug).") parts.append(f"⚠️ `{att.filename}` — wyjątek (log w debug).")
raise
await ctx.reply("**LaTeX clean** — " + ", ".join(parts), files=files, mention_author=False) await ctx.reply("**LaTeX clean** — " + ", ".join(parts), files=files, mention_author=False)
@@ -121,7 +125,7 @@ class LatexModule(commands.Cog):
return await interaction.followup.send(f"ZIP > {LATEX_MAX_ZIP_MB} MiB — za duży.", ephemeral=True) return await interaction.followup.send(f"ZIP > {LATEX_MAX_ZIP_MB} MiB — za duży.", ephemeral=True)
data = await archive.read() data = await archive.read()
out_zip_bytes, failed = await compile_zip_to_zip(data, LATEX_TEX_ENGINE, LATEX_MAX_COMPILE_SECONDS, logger=self.logger) out_zip_bytes, failed = await compile_zip_to_zip(data, LATEX_TEX_ENGINE, LATEX_MAX_COMPILE_SECONDS, logger=self.logger_name)
if not out_zip_bytes and failed: if not out_zip_bytes and failed:
return await interaction.followup.send("Brak PDF-ów. " + "; ".join(failed[:10]), ephemeral=True) return await interaction.followup.send("Brak PDF-ów. " + "; ".join(failed[:10]), ephemeral=True)
+4 -4
View File
@@ -30,7 +30,7 @@ def is_tex_attachment(att, max_mb: int) -> bool:
async def run_latex_two_passes( async def run_latex_two_passes(
tex_filename: str, workdir: Path, tex_engine: str, timeout_sec: int, logger=None tex_filename: str, workdir: Path, tex_engine: str, timeout_sec: int, logger:str=None
) -> Tuple[bool, str, Path]: ) -> Tuple[bool, str, Path]:
cmd = f"{tex_engine} -interaction=nonstopmode -halt-on-error -file-line-error -no-shell-escape {shlex.quote(tex_filename)}" cmd = f"{tex_engine} -interaction=nonstopmode -halt-on-error -file-line-error -no-shell-escape {shlex.quote(tex_filename)}"
logger = logging.getLogger(logger) if logger else None logger = logging.getLogger(logger) if logger else None
@@ -52,7 +52,7 @@ async def run_latex_two_passes(
try: try:
proc.kill() proc.kill()
except Exception: except Exception:
pass raise
return 124, f"[Timeout] Compilation exceeded {timeout_sec}s.\n" return 124, f"[Timeout] Compilation exceeded {timeout_sec}s.\n"
logs: List[str] = [] logs: List[str] = []
@@ -75,7 +75,7 @@ async def run_latex_two_passes(
async def compile_single_tex_bytes( async def compile_single_tex_bytes(
tex_bytes: bytes, filename: str, tex_engine: str, timeout_sec: int, logger=None tex_bytes: bytes, filename: str, tex_engine: str, timeout_sec: int, logger:str=None
) -> Dict[str, Optional[object]]: ) -> Dict[str, Optional[object]]:
if not is_safe_tex_name(filename): if not is_safe_tex_name(filename):
return { return {
@@ -107,7 +107,7 @@ async def compile_single_tex_bytes(
async def compile_zip_to_zip( async def compile_zip_to_zip(
zip_bytes: bytes, tex_engine: str, timeout_sec: int, logger=None zip_bytes: bytes, tex_engine: str, timeout_sec: int, logger:str=None
) -> Tuple[bytes, List[str]]: ) -> Tuple[bytes, List[str]]:
failed: List[str] = [] failed: List[str] = []
out_pdf_paths: List[Path] = [] out_pdf_paths: List[Path] = []