Source code for pycdsl.cli

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Console script for PyCDSL"""

###############################################################################

import sys
import logging
import argparse

from .corpus import CDSLCorpus
from .shell import CDSLShell
from .constants import (
    DEFAULT_SCHEME,
    DEFAULT_SEARCH_MODE,
    DEFAULT_HISTORY_FILE,
    DEFAULT_STARTUP_SCRIPT
)
from . import __version__

###############################################################################

ROOT_LOGGER = logging.getLogger()
if not ROOT_LOGGER.hasHandlers():
    ROOT_LOGGER.addHandler(logging.StreamHandler())
ROOT_LOGGER.setLevel(logging.INFO)

###############################################################################


[docs]def main(): """Command Line Interface for PyCDSL""" description = ( "Access dictionaries from Cologne Digital Sanskrit Lexicon (CDSL)" ) parser = argparse.ArgumentParser(description=description) parser.add_argument( "-i", "--interactive", action="store_true", help="start in an interactive REPL mode" ) parser.add_argument( "-s", "--search", help="search pattern (ignored if `--interactive` mode is set)" ) parser.add_argument( "-p", "--path", help="path to installation" ) parser.add_argument( "-d", "--dicts", nargs="+", help="dictionary id(s)" ) parser.add_argument( "-sm", "--search-mode", default=DEFAULT_SEARCH_MODE, help="search mode" ) parser.add_argument( "-is", "--input-scheme", default=DEFAULT_SCHEME, help="input transliteration scheme" ) parser.add_argument( "-os", "--output-scheme", default=DEFAULT_SCHEME, help="output transliteration scheme" ) parser.add_argument( "-hf", "--history-file", default=DEFAULT_HISTORY_FILE, help="path to the history file" ) parser.add_argument( "-sc", "--startup-script", default=DEFAULT_STARTUP_SCRIPT, help="path to the startup script" ) parser.add_argument( "-u", "--update", action="store_true", help="update specified dictionaries" ) parser.add_argument( "-dbg", "--debug", action="store_true", help="turn debug mode on" ) parser.add_argument( "-v", "--version", action="version", version=f"%(prog)s {__version__}", help="show version and exit" ) args = vars(parser.parse_args()) # arguments data_dir = args.get("path") dict_ids = args.get("dicts") search_mode = args.get("search_mode") input_scheme = args.get("input_scheme") output_scheme = args.get("output_scheme") history_file = args.get("history_file") startup_script = args.get("startup_script") flag_update = args.get("update") flag_debug = args.get("debug") flag_interactive = args.get("interactive") search_pattern = args.get("search") # debug if flag_debug: ROOT_LOGGER.setLevel(logging.DEBUG) if flag_interactive: # interactive cdsl_shell = CDSLShell( data_dir=data_dir, dict_ids=dict_ids, search_mode=search_mode, input_scheme=input_scheme, output_scheme=output_scheme, history_file=history_file, startup_script=startup_script ) cdsl_shell.cdsl.setup(dict_ids=dict_ids, update=flag_update) return cdsl_shell.cmdloop() else: # non-interactive shell command cdsl = CDSLCorpus( data_dir=data_dir, search_mode=search_mode, input_scheme=input_scheme, output_scheme=output_scheme ) cdsl.setup(dict_ids=dict_ids, update=flag_update) if not flag_update and not search_pattern: print("Must specify a search pattern in non-interactive mode.") parser.print_help() return 1 # search if search_pattern: all_results = cdsl.search(pattern=search_pattern) for dict_id, dict_results in all_results.items(): n_results = len(dict_results) print( "\n" f"Found {n_results} results in the dictionary '{dict_id}'." "\n" ) for result in dict_results: print(result) return 0
############################################################################### if __name__ == "__main__": sys.exit(main()) # pragma: no cover