Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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)
Example #4
0
    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)