Source code for pyexlatex.logic.output.sources
import os
from typing import Optional, List
from pyexlatex.logic.output.fileops import _copy_if_needed
from pyexlatex.texgen.replacements.filename import _latex_valid_basename
from pyexlatex.typing import StrListOrNone, BytesListOrNone, StrList, BytesList
[docs]def output_sources_return_tex_input_paths(outfolder: str, image_paths: StrListOrNone = None,
image_binaries: BytesListOrNone = None) -> Optional[List[str]]:
tex_inputs: Optional[List[str]]
if image_paths:
# Copy first time for creation of pdf
sources_tempfolder = os.path.join(outfolder, 'Sources')
tex_inputs = [os.path.abspath(outfolder), os.path.abspath(sources_tempfolder), '.']
if not os.path.exists(sources_tempfolder):
os.makedirs(sources_tempfolder)
if image_binaries:
_write_image_paths_and_binaries_to_folder(sources_tempfolder, image_paths, image_binaries)
else:
[_copy_if_needed(filepath, os.path.join(sources_tempfolder, _latex_valid_basename(filepath)))
for filepath in image_paths]
else:
tex_inputs = None
return tex_inputs
def _write_image_paths_and_binaries_to_folder(folder: str, image_paths: StrList, image_binaries: BytesList):
if len(image_binaries) != len(image_paths):
raise ValueError('must have equal image_binaries and image_path lengths if image_binaries are passed')
for filepath, binary in zip(image_paths, image_binaries):
image_outpath = os.path.join(folder, _latex_valid_basename(filepath))
with open(image_outpath, 'wb') as f:
f.write(binary)