Source code for remarking.cli.commands.csv_writer_command

import csv
import io
import typing as T
from typing import List

import click

from remarking import models
from remarking.cli import common, log
from remarking.cli import writer as writer_
from remarking.cli import writer_command


[docs]class CSVWriter(writer_.Writer): """ Writes normalized documents and highlights to csv table. Resembles: .. code-block:: text highlight_text,highlight_page_number,document_name Alice was sitting curled up in a corner of the great arm-chair,11,Through the Looking Glass :param documents: The list of documents to generate a csv for. :param highlights: The list of highlights to generate a csv for. :param columns: The columns to print for the csv. A list of columns can be found by running ``remarking list columns`` :param delimiter: The delimiter to use for the csv. """ def __init__(self, documents: List[models.Document], highlights: List[models.Highlight], columns: T.Optional[List[str]] = None, delimiter: str = None) -> None: self.delimiter = delimiter or "," self.columns = columns self.highlights, self.headers = common.get_column_filtered_highlights_and_header(documents, highlights, columns) def write(self, logger: log.CommandLineLogger) -> None: output = io.StringIO(newline='') writer = csv.DictWriter(output, delimiter=self.delimiter, fieldnames=self.headers) writer.writeheader() writer.writerows(self.highlights) logger.output_result(output.getvalue())
[docs]class CSVWriterCommand(writer_command.WriterCommand): """ The writer command implementaton for the ``csv`` output writer. """ def name(self) -> str: return "csv" def options(self) -> List[writer_command.ClickOption]: return common.column_based_output_options + [click.option( "--delimiter", default=",", help="Delimiter to use to split columns" )] def long_description(self) -> str: return """Output highlights normalized with documents as csv. Check out `remarking list columns` for a list of columns to choose from for the `--columns` option. """ def short_description(self) -> str: return "Output highlights normalized with documents as CSV" def writer(self, documents: List[models.Document], highlights: List[models.Highlight], **kwargs: T.Any) -> writer_.Writer: delimiter = kwargs['delimiter'] columns = kwargs['columns'] return CSVWriter(documents, highlights, columns, delimiter)