Source code for pycharmers.cli.show

#coding: utf-8
import os
import re
import sys
import argparse

from ..__meta__ import __documentation__ as BASE_URL
from ..utils._path import REPO_DIR, CLI_DIR
from ..utils.generic_utils import str_strip
from ..utils.print_utils import Table
from ..utils.soup_utils import get_soup

from typing import List, Tuple

[docs]def show_command_line_programs(argv=sys.argv[1:]): """Show all Python-Charmers's command line programs. Args: -H/--head (str) : Show the first ``head`` rows for the table. -W/--width (int) : Table width. --description (bool) : Whether to show description or path. (default= ``False`` ) --tablefmt (str) : Table format. Note: When you run from the command line, execute as follows:: $ pycharmers-show Examples: >>> $ pycharmers-show +---------------------+----------------------------------------------------------------------------------+ | command | description | +=====================+==================================================================================+ | book2img | Convert Book into Sequential Images. | +---------------------+----------------------------------------------------------------------------------+ | cv-cascades | Control the OpenCV cascade Examples. | +---------------------+----------------------------------------------------------------------------------+ | cv-paper-scanner | Paper Scanner using OpenCV. | +---------------------+----------------------------------------------------------------------------------+ | cv-pencil-sketch | Convert the image like a pencil drawing. | +---------------------+----------------------------------------------------------------------------------+ | cv-window | Use :meth:`cvWindow <pycharmers.opencv.windows.cvWindow>` to control frames. | +---------------------+----------------------------------------------------------------------------------+ | form-auto-fill-in | Auto fill in your form using your saved information (or answer on the spot). | +---------------------+----------------------------------------------------------------------------------+ | jupyter-arrange | Arrange Jupyter Notebook. | +---------------------+----------------------------------------------------------------------------------+ | openBrowser | Display url using the default browser. | +---------------------+----------------------------------------------------------------------------------+ | pdfmine | Analyze PDF and extract various elements. | +---------------------+----------------------------------------------------------------------------------+ | regexp-replacement | String replacement in a file using regular expression | +---------------------+----------------------------------------------------------------------------------+ | render-template | Render templates. | +---------------------+----------------------------------------------------------------------------------+ | requirements-create | Create a ``requirements.text`` | +---------------------+----------------------------------------------------------------------------------+ | revise_text | Revise word file. | +---------------------+----------------------------------------------------------------------------------+ | pycharmers-show | Show all Python-Charmers's command line programs. | +---------------------+----------------------------------------------------------------------------------+ | tweetile | Divide one image into three so that you can tweet beautifully. | +---------------------+----------------------------------------------------------------------------------+ | video_of_lyric | Create a lyric Video. | +---------------------+----------------------------------------------------------------------------------+ | video_of_typing | Create a typing video. Before using this program, please do the following things | +---------------------+----------------------------------------------------------------------------------+ | video2gif | Convert Video into Gif. | +---------------------+----------------------------------------------------------------------------------+ """ parser = argparse.ArgumentParser(prog="pycharmers-show", add_help=True) parser.add_argument("-H", "--head", type=int, help="Show the first ``head`` rows for the table.") parser.add_argument("-W", "--width", type=int, help="Table width.") parser.add_argument("--description", action="store_true", help="Whether to show description or path. (default= ``False`` )") parser.add_argument("--tablefmt", choices=Table.SUPPORTED_FORMATS, default="github", help="The format of table.") parser.add_argument("--sphinx", action="store_true", help="Whether to create for sphinx rst file.") parser.add_argument("--github", action="store_true", help="Whether to create for github README.md file.") args = parser.parse_args(argv) head = args.head table_width = args.width sphinx = args.sphinx tablefmt = "rst" if sphinx else args.tablefmt paths = [] commands = [] descriptons = [] console_scripts = get_console_scripts() for command, path in console_scripts: f,i = path.split(":") try: exec(f"from {f} import {i}") descriptons.append(eval(f"{i}.__doc__.split('\\n')[0]")) except Exception as e: descriptons.append(f"Could not import it [{e.__class__.__name__}] {e}") if args.sphinx: command = f":func:`{command} <{f}.{i}>`" elif args.github: command = f"[`{command}`]({BASE_URL}/{f}.html#{f}.{i})" commands.append(command) paths.append(path) table = Table(tablefmt=tablefmt) table.set_cols(values=commands, colname="command", color="GREEN") if args.description: table.set_cols(values=descriptons, colname="description", color="BLUE", align="left") else: table.set_cols(values=paths, colname="path", color="BLUE", align="left") table.show(head=head, table_width=table_width)
[docs]def get_console_scripts(target:str="pyproject.toml") -> List[Tuple[str,str]]: """Get console script list. Args: target (str, optional) : Target filename. Defaults to ``"pyproject.toml"``. Returns: List[Tuple[str,str]]: List of console scripts (``(command, path)``). """ results = [] target_path = os.path.join(REPO_DIR, target) if os.path.exists(target_path): with open(target_path, mode="r") as f: lines = f.readlines() else: lines = get_soup(url=f"https://raw.githubusercontent.com/iwasakishuto/Python-Charmers/master/{target}").get_text().split("\n") is_cmd_scrip = False for line in lines: if line=="\n": is_cmd_scrip = False if is_cmd_scrip: m = re.search(pattern=r"^(.+?)\s+=\s?\"(.+?)\"\n$", string=line) if m is not None: results.append(m.groups()) if line.startswith("[tool.poetry.scripts]"): is_cmd_scrip = True return results