# Module `paroxython.cli_collect`

Walk a directory, tag its Python files and make a database of the results.

## Usage

    paroxython collect [options] DIRECTORY

## Options

    -c --cleanup=STR    Transformation to apply to the source code before
                        processing. [default: full]
                        Currently available:
                        • full: remove all blank lines, docstrings and
                                comments (except Paroxython hints).
                        • none: no transformation is applied.
    -e --skip=REGEX     Filter out any file whose name fully matches this
                        regular expression. NB: --glob precedes --skip.
                        [default: (__init__|setup|.*[-_]tests?)\.py]
    -g --glob=PATTERN   The names of the collected files must match this Unix-
                        like glob pattern (not a regular expression). Special
                        syntax: "**/" prefix means “this directory and all
                        subdirectories, recursively”. [default: **/*.py]
    --log               Print a detailed report of the labelling times.
    --no_timestamp      Don't store programs' last modification date.
    -o --output=PATH    The path of the resulting database. If not specified,
                        create a JSON file under the name "DIRECTORY_db.json".
                        Otherwise, use the extension (either ".json", ".sql"
                        or ".sqlite") to decide the format of the tag database.
                        [default: ]
    -t --taxonomy=PATH  The path of a TSV file mapping labels onto taxa. If not
                        specified, use the "taxonomy.tsv" present in DIRECTORY's
                        parent. If absent, 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 .goodies import print_exit
    from .make_db import TagDatabase

    def cli_wrapper(args):
        directory = Path(args["DIRECTORY"])
        if not directory.is_dir():
            print_exit(f"no directory at '{directory.absolute()}': aborted.")
        taxonomy = args.get("--taxonomy")
        if taxonomy:
            taxonomy_path = Path(taxonomy)
        else:
            taxonomy_path = directory.parent / "taxonomy.tsv"
            if not taxonomy_path.is_file():
                taxonomy_path = None
        db = TagDatabase(
            directory=directory,
            ignore_timestamps=args["--no_timestamp"],
            cleanup_strategy=args["--cleanup"],  # -> list_programs
            skip_pattern=args["--skip"],  # -> list_programs
            glob_pattern=args["--glob"],  # -> list_programs
            print_performances=args["--log"],  # -> labelled_programs
            taxonomy_path=taxonomy_path,  # -> Taxonomy
        )
        if not args["--output"]:
            db.write_json()
        elif args["--output"].endswith(".json"):
            db.write_json(Path(args["--output"]))
        elif args["--output"].endswith((".sqlite", ".sql")):
            db.write_sqlite(Path(args["--output"]))

## Functions

`def cli_wrapper(args)`
  Expand source code Browse GitHub

      def cli_wrapper(args):
          directory = Path(args["DIRECTORY"])
          if not directory.is_dir():
              print_exit(f"no directory at '{directory.absolute()}': aborted.")
          taxonomy = args.get("--taxonomy")
          if taxonomy:
              taxonomy_path = Path(taxonomy)
          else:
              taxonomy_path = directory.parent / "taxonomy.tsv"
              if not taxonomy_path.is_file():
                  taxonomy_path = None
          db = TagDatabase(
              directory=directory,
              ignore_timestamps=args["--no_timestamp"],
              cleanup_strategy=args["--cleanup"],  # -> list_programs
              skip_pattern=args["--skip"],  # -> list_programs
              glob_pattern=args["--glob"],  # -> list_programs
              print_performances=args["--log"],  # -> labelled_programs
              taxonomy_path=taxonomy_path,  # -> Taxonomy
          )
          if not args["--output"]:
              db.write_json()
          elif args["--output"].endswith(".json"):
              db.write_json(Path(args["--output"]))
          elif args["--output"].endswith((".sqlite", ".sql")):
              db.write_sqlite(Path(args["--output"]))