Source code for pantable.codeblock_to_table
from __future__ import annotations
from logging import getLogger
from typing import TYPE_CHECKING
from .ast import PanCodeBlock
from .util import EmptyTableError
if TYPE_CHECKING:
from typing import Optional, Union
from panflute.elements import CodeBlock, Doc
from panflute.table_elements import Table
logger = getLogger('pantable')
[docs]def codeblock_to_table(
options: Optional[dict] = None,
data: str = '',
element: Optional[CodeBlock] = None,
doc: Optional[Doc] = None,
) -> Union[Table, list, None]:
try:
pan_table_str = (
PanCodeBlock
.from_yaml_filter(options=options, data=data, element=element, doc=doc)
.to_pantablestr()
)
if pan_table_str.table_width is not None:
pan_table_str.auto_width()
return (
pan_table_str
.to_pantable()
.to_panflute_ast()
)
# delete element if table is empty (by returning [])
# element unchanged if include is invalid (by returning None)
except FileNotFoundError as e:
logger.error(f'{e} Codeblock shown as is.')
return None
except EmptyTableError:
logger.warning("table is empty. Deleted.")
# [] means delete the current element
return []
except ImportError as e:
logger.error(f'Some modules cannot be imported, Codeblock shown as is: {e}')
return None