Source on GitHub

Module paroxython.cli_tag

Tag one Python file and output the table of its taxa or labels.

Usage

paroxython tag [options] FILENAME

Options

-f --format=FORMAT  Format of the output, either "md" (Markdown)
                    or "tsv" (Tab Separated Values). [default: md]
-l --labels         Output the labels instead of the taxa.
-t --taxonomy=PATH  The path of a TSV file mapping labels onto taxa.
                    If not specified, use the included default taxonomy:
                    <https://github.com/laowantong/paroxython/blob/0.7.0/paroxython/resources/taxonomy.tsv>
Expand source code Browse GitHub
from pathlib import Path
from typing import List, Tuple, Optional
from typing_extensions import Literal

from .goodies import couple_to_string, print_exit
from .parse_program import ProgramParser
from .list_programs import get_program
from .map_taxonomy import Taxonomy
from .user_types import Source


def main(
    source: Source,
    tags: Literal["Taxon", "Label"] = "Taxon",
    relative_path: Path = Path("."),
    output_format: Literal["md", "tsv"] = "md",
    taxonomy_path: Optional[Path] = None,
) -> str:
    program = get_program(source, relative_path)
    parse = ProgramParser()
    program.labels[:] = parse(program)
    couples: List[Tuple[str, str]] = [(tags, "Lines")]
    if tags == "Label":
        for (label_name, label_spans) in sorted(program.labels):
            s = ", ".join(map(couple_to_string, sorted(label_spans)))
            couples.append((label_name, s))
    else:
        taxonomy = Taxonomy(taxonomy_path)
        taxa = taxonomy.to_taxa(program.labels)
        for (taxon_name, taxon_spans) in sorted(taxa):
            s = ", ".join(map(couple_to_string, sorted(taxon_spans.elements())))
            couples.append((taxon_name, s))
    if output_format == "md":
        result = [f"| `{tag}` | {lines} |" for (tag, lines) in couples]
        result[0] = result[0].replace("`", "")
        result[1:1] = ["|:--|:--|"]
    else:
        result = [f"{tag}\t{lines}" for (tag, lines) in couples]
    return "\n".join(result)


def cli_wrapper(args):
    path = Path(args["FILENAME"])
    try:
        source = path.read_text()
    except Exception as e:
        print_exit(str(e))
    result = main(
        source=Source(source),
        tags="Label" if args["--labels"] else "Taxon",
        relative_path=path.parent,
        output_format=args["--format"],
        taxonomy_path=Path(args["--taxonomy"]) if args["--taxonomy"] else None,
    )
    print(result)

Functions

def main(source: Source,
tags: Literal['Taxon', 'Label'] = 'Taxon',
relative_path: pathlib.Path = PosixPath('.'),
output_format: Literal['md', 'tsv'] = 'md',
taxonomy_path: Union[pathlib.Path, NoneType] = None
) ‑> str
Expand source code Browse GitHub
def main(
    source: Source,
    tags: Literal["Taxon", "Label"] = "Taxon",
    relative_path: Path = Path("."),
    output_format: Literal["md", "tsv"] = "md",
    taxonomy_path: Optional[Path] = None,
) -> str:
    program = get_program(source, relative_path)
    parse = ProgramParser()
    program.labels[:] = parse(program)
    couples: List[Tuple[str, str]] = [(tags, "Lines")]
    if tags == "Label":
        for (label_name, label_spans) in sorted(program.labels):
            s = ", ".join(map(couple_to_string, sorted(label_spans)))
            couples.append((label_name, s))
    else:
        taxonomy = Taxonomy(taxonomy_path)
        taxa = taxonomy.to_taxa(program.labels)
        for (taxon_name, taxon_spans) in sorted(taxa):
            s = ", ".join(map(couple_to_string, sorted(taxon_spans.elements())))
            couples.append((taxon_name, s))
    if output_format == "md":
        result = [f"| `{tag}` | {lines} |" for (tag, lines) in couples]
        result[0] = result[0].replace("`", "")
        result[1:1] = ["|:--|:--|"]
    else:
        result = [f"{tag}\t{lines}" for (tag, lines) in couples]
    return "\n".join(result)
def cli_wrapper(args)
Expand source code Browse GitHub
def cli_wrapper(args):
    path = Path(args["FILENAME"])
    try:
        source = path.read_text()
    except Exception as e:
        print_exit(str(e))
    result = main(
        source=Source(source),
        tags="Label" if args["--labels"] else "Taxon",
        relative_path=path.parent,
        output_format=args["--format"],
        taxonomy_path=Path(args["--taxonomy"]) if args["--taxonomy"] else None,
    )
    print(result)