def write_subfile(self) -> None: """Method to write the Latex subfile Returns: None """ if not isinstance(self.metadata, DataframeFileMetadata): raise ValueError( f"Incorrect metadata type loaded: {type(self.metadata)}") if pandas is None: raise EnvironmentError( "Dataframe pickle file support requires pandas. " "Please run `pip install gigaleaf[pandas]`") subfile_template = Template( r"""\documentclass[../../main.tex]{subfiles} % Subfile autogenerated by gigaleaf % Gigantum revision: $gigantum_version % Image content hash: $content_hash \begin{document} {$table} \end{document} """) with open( Path(Gigantum.get_project_root(), self.metadata.gigantum_relative_path).absolute().as_posix( ), 'rb') as f: df = pandas.read_pickle(f) table = df.to_latex(**self.metadata.to_latex_kwargs) filename = "gigantum/data/" + Path( self.metadata.gigantum_relative_path).name subfile_populated = subfile_template.substitute( filename=filename, gigantum_version=Gigantum.get_current_revision(), content_hash=self.metadata.content_hash, table=table) Path(self.subfile_filename).write_text(subfile_populated)
def write_subfile(self) -> None: """Method to write the Latex subfile Returns: None """ if not isinstance(self.metadata, CsvFileMetadata): raise ValueError( f"Incorrect metadata type loaded: {type(self.metadata)}") subfile_template = Template("""\documentclass[../../main.tex]{subfiles} % Subfile autogenerated by gigaleaf % Gigantum revision: $gigantum_version % Image content hash: $content_hash \\begin{document} \\begin{table}[ht] \\centering \\csvautotabular[respect all]{$filename} \\label{$label} {$caption} \\end{table} \\end{document} """) if self.metadata.caption: caption = f"\\caption{{{self.metadata.caption}}}" else: caption = "\n" filename = "gigantum/data/" + Path( self.metadata.gigantum_relative_path).name subfile_populated = subfile_template.substitute( filename=filename, gigantum_version=Gigantum.get_current_revision(), content_hash=self.metadata.content_hash, label=self.metadata.label, caption=caption) Path(self.subfile_filename).write_text(subfile_populated)
def write_subfile(self) -> None: """Method to write the Latex subfile Returns: None """ if not isinstance(self.metadata, ImageFileMetadata): raise ValueError( f"Incorrect metadata type loaded: {type(self.metadata)}") subfile_template = Template("""\documentclass[../../main.tex]{subfiles} % Subfile autogenerated by gigaleaf % Gigantum revision: $gigantum_version % Image content hash: $content_hash \\begin{document} \\begin{figure}[bh] \\includegraphics[width=$width, $alignment]{$filename} \\label{$label} {$caption} \\end{figure} \\end{document} """) if self.metadata.caption: caption = f"\\caption{{{self.metadata.caption}}}" else: caption = "\n" subfile_populated = subfile_template.substitute( filename=Path(self.metadata.gigantum_relative_path).stem, gigantum_version=Gigantum.get_current_revision(), content_hash=self.metadata.content_hash, width=self.metadata.width, alignment=self.metadata.alignment, caption=caption, label=self.metadata.label) Path(self.subfile_filename).write_text(subfile_populated)
def link(cls, relative_path: str, **kwargs: Dict[str, Any]) -> None: """Method to link a file output in a Gigantum Project to an Overleaf project Args: relative_path: relative path to the file from the current working dir, e.g. `../output/my_fig.png` **kwargs: args specific to each LinkedFile implementation Returns: None """ file_path = Path(relative_path).resolve() if file_path.is_file() is False: # File provided does not exist raise ValueError(f"The file {file_path} does not exist. Provide a relative path from the working" f"directory to your file. In Jupyter, the working directory is the directory containing " f"your notebook.") metadata_filename = cls.get_metadata_filename(relative_path) metadata_abs_filename = Path(Gigantum.get_overleaf_root_directory(), 'project', 'gigantum', 'metadata', metadata_filename) if metadata_abs_filename.exists() is True: # This is an update to the link, so get the current content hash for the file. with open(metadata_abs_filename, 'rt') as mf: current_metadata: Dict[str, Any] = json.load(mf) content_hash = current_metadata['content_hash'] else: # Set content hash to init so it is always detected as "modified" on first link content_hash = "init" full_kwargs = { "gigantum_relative_path": file_path.relative_to(Path(Gigantum.get_project_root()).resolve()).as_posix(), "gigantum_version": Gigantum.get_current_revision(), "classname": cls.__name__, "content_hash": content_hash, "metadata_filename": metadata_filename} full_kwargs.update(kwargs) cls.write_metadata(**full_kwargs)