Vylepšený error handling, žádná chyba už není Exception, warningy používají pythoní warnings
This commit is contained in:
parent
6dd2cbc995
commit
d7bf7f0073
4 changed files with 25 additions and 9 deletions
|
@ -1,7 +1,7 @@
|
|||
|
||||
from panflute import Doc, Div
|
||||
import os
|
||||
|
||||
import warnings
|
||||
|
||||
# This class is used to keep state while transforming the document using
|
||||
# transform.py. For the context to be available to the html and TeX generators,
|
||||
|
@ -68,7 +68,7 @@ class Context:
|
|||
|
||||
def set_metadata(self, key: str, value):
|
||||
if key == "language":
|
||||
print("WARN: Setting language this way doesn't propagate to TeX. Either use the Front Matter or specify it additionally using the \\languagexx macro.")
|
||||
warnings.warn("Setting language this way doesn't propagate to TeX. Either use the Front Matter or specify it additionally using the \\languagexx macro.", UserWarning)
|
||||
meta = self.doc.metadata
|
||||
keys = key.split(".")
|
||||
for k in keys[:-1]:
|
||||
|
|
|
@ -7,6 +7,7 @@ from typing import Union, Dict
|
|||
import re
|
||||
import os
|
||||
import io
|
||||
import warnings
|
||||
|
||||
from pygments import highlight
|
||||
from pygments.lexers import get_lexer_by_name
|
||||
|
@ -107,6 +108,7 @@ class HTMLGenerator(OutputGenerator):
|
|||
self.generate_simple_block_tag(e, "main", self.common_attributes(e))
|
||||
|
||||
def generate_CodeBlock(self, e: CodeBlock):
|
||||
lexer = None
|
||||
if e.classes and len(e.classes) > 0 and (e.attributes["highlight"] == True or e.attributes["highlight"] == 'True'):
|
||||
# Syntax highlighting using pygments
|
||||
for cl in e.classes:
|
||||
|
@ -116,8 +118,9 @@ class HTMLGenerator(OutputGenerator):
|
|||
continue
|
||||
break
|
||||
else:
|
||||
lexer = None
|
||||
print(f"WARN: Syntax highligher does not have lexer for element with these classes: {e.classes}")
|
||||
warnings.warn(f"Syntax highligher does not have lexer for element with these classes: {e.classes}", UserWarning)
|
||||
|
||||
if lexer:
|
||||
formatter = HtmlFormatter(style=e.attributes["style"])
|
||||
result = highlight(e.text, lexer, formatter)
|
||||
self.writeraw(result)
|
||||
|
|
|
@ -7,6 +7,12 @@ from PIL import Image
|
|||
class FileInWrongDirError(Exception):
|
||||
pass
|
||||
|
||||
class InkscapeError(Exception):
|
||||
pass
|
||||
|
||||
class ImageMagickError(Exception):
|
||||
pass
|
||||
|
||||
class ImageProcessor:
|
||||
def __init__(self, public_dir: str, web_path: str, cache_dir: str, *lookup_dirs: List[str]):
|
||||
self.public_dir = public_dir
|
||||
|
@ -67,7 +73,7 @@ class ImageProcessor:
|
|||
height_arg = ['--export-height', str(height)] if height is not None else []
|
||||
dpi_arg = ['--export-dpi', str(dpi)] if dpi is not None else []
|
||||
if subprocess.run(['inkscape', full_path, '-o', target_path, *width_arg, *height_arg, *dpi_arg]).returncode != 0:
|
||||
raise Exception(f"Could not convert '{full_path}' to '{format}'")
|
||||
raise InkscapeError(f"Could not convert '{full_path}' to '{format}'")
|
||||
|
||||
# Convert everything else using ImageMagick.
|
||||
else:
|
||||
|
@ -75,7 +81,7 @@ class ImageProcessor:
|
|||
density_arg = ['-density', str(dpi)] if dpi is not None else []
|
||||
quality_arg = ['-quality', str(quality)] if quality is not None else []
|
||||
if subprocess.run(['convert', *density_arg, full_path, *resize_arg, *quality_arg, target_path]).returncode != 0:
|
||||
raise Exception(f"Could not convert '{full_path}' to '{format}'")
|
||||
raise ImageMagickError(f"Could not convert '{full_path}' to '{format}'")
|
||||
|
||||
return target_name
|
||||
|
||||
|
|
|
@ -9,6 +9,13 @@ from typing import Dict
|
|||
class KatexError(Exception):
|
||||
pass
|
||||
|
||||
class NPMNotFoundError(Exception):
|
||||
pass
|
||||
|
||||
class KatexServerError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class KatexClient:
|
||||
def __init__(self):
|
||||
# Create temporary directory for socket
|
||||
|
@ -24,7 +31,7 @@ class KatexClient:
|
|||
subprocess.run(["npm", "install"], cwd=srcdir+"/katex-server", check=True)
|
||||
except subprocess.CalledProcessError as e:
|
||||
if e.returncode == 127:
|
||||
raise Exception("npm not found. Node.js is required to use KaTeX.")
|
||||
raise NPMNotFoundError("npm not found. Node.js is required to use KaTeX.")
|
||||
else:
|
||||
raise e
|
||||
|
||||
|
@ -34,7 +41,7 @@ class KatexClient:
|
|||
|
||||
ok = self._server_process.stdout.readline()
|
||||
if ok != b"OK\n":
|
||||
raise Exception("Failed to connect to katex-server")
|
||||
raise KatexServerError("Failed to connect to katex-server")
|
||||
|
||||
self._client.connect(self._socket_file)
|
||||
|
||||
|
@ -49,7 +56,7 @@ class KatexClient:
|
|||
response = json.loads(data)
|
||||
|
||||
if "error" in response:
|
||||
raise Exception(response["error"])
|
||||
raise KatexServerError(response["error"])
|
||||
if "error" in response["results"][0]:
|
||||
raise KatexError(response["results"][0]["error"])
|
||||
else:
|
||||
|
|
Loading…
Reference in a new issue