Module openapi_parser.cli

Expand source code
import sys
from logging import getLogger, StreamHandler
from typing import *

from .__init__ import __version__, __title__
from .exporter import PackageWriter
from .model import HavingId
from .parser.loader import *
from .util.utils import list_pop_any

JUSTIFICATION_SIZE = 140
def get_logger(verbose: bool = False):
    logger = getLogger('openapi-parser')
    handler = StreamHandler(sys.stdout)
    logger.addHandler(handler)
    if (verbose):
        handler.setLevel('DEBUG')
        logger.setLevel('DEBUG')
    else:
        handler.setLevel('INFO')
        logger.setLevel('INFO')
    
    return logger

def run(schema_file: str, *writer_args, verbose: bool = False, dry_run: bool = False, clean: bool = True) -> int:
    logger = get_logger(verbose=verbose)
    
    parser = OpenApiParser.open(schema_file)
    parser.load_all()
    
    for path, mdl in parser.loaded_objects.items():
        msg = ('# ' + type(mdl).__name__ + (f" '{mdl.id}'" if isinstance(mdl, HavingId) else '')).ljust(JUSTIFICATION_SIZE, ' ') + f" -- '{path}'"
        logger.debug(msg)
    logger.debug('# ' + '=' * JUSTIFICATION_SIZE)
    logger.debug('')
    
    package_writer = PackageWriter(parser, *writer_args, dry_run=dry_run)
    package_writer.write_package(clean=clean)
    return 0

def header_line() -> str:
    return f"Python OpenAPI Parser Command-Line Interface v{__version__}"
def version_line() -> str:
    return f"{__title__} {__version__}"
def usage_line() -> str:
    return 'python -m openapi_parser SCHEMA [DESTINATION] [PACKAGE_NAME]'
def usage_options() -> List[str]:
    return \
    [
        "-v, --verbose | Enables extra verbosity",
        "--dry-run     | Performs dry run (does not create any files)",
        "--no-cleanup  | Does not perform cleanup before running",
        "-h, --help -? | Print this message and exit",
        "-V, --version | Print version and exit",
    ]

def cli(args: Optional[List[str]] = None) -> int:
    if (args is None):
        args = sys.argv[1:]
    
    if (len(args) < 1):
        print(header_line(), file=sys.stderr)
        print(f"Not enough arguments, usage: {usage_line()}", file=sys.stderr)
        return 1
    
    help = bool(list_pop_any(args, '-h', '--help', '-?'))
    if (help):
        print(header_line())
        print(f"Usage: {usage_line()}")
        print()
        print("Options:")
        for opt in usage_options():
            print(' '*4 + opt)
        return 0
    
    version = bool(list_pop_any(args, '-V', '--version'))
    if (version):
        print(version_line())
        return 0
    
    verbose = bool(list_pop_any(args, '-v', '--verbose'))
    dry_run = bool(list_pop_any(args, '--dry-run'))
    clean = not bool(list_pop_any(args, '--no-cleanup'))
    schema_file = args.pop(0)
    
    return run(schema_file, *args, verbose=verbose, dry_run=dry_run, clean=clean)


__all__ = \
[
    'cli',
    'run',
    'get_logger',
    'usage_options',
    'version_line',
    'header_line',
    'usage_line',
    'JUSTIFICATION_SIZE',
]
__pdoc_extras__ = \
[
    'JUSTIFICATION_SIZE',
]

Functions

def cli(args: Optional[List[str]] = None) ‑> int
Expand source code
def cli(args: Optional[List[str]] = None) -> int:
    if (args is None):
        args = sys.argv[1:]
    
    if (len(args) < 1):
        print(header_line(), file=sys.stderr)
        print(f"Not enough arguments, usage: {usage_line()}", file=sys.stderr)
        return 1
    
    help = bool(list_pop_any(args, '-h', '--help', '-?'))
    if (help):
        print(header_line())
        print(f"Usage: {usage_line()}")
        print()
        print("Options:")
        for opt in usage_options():
            print(' '*4 + opt)
        return 0
    
    version = bool(list_pop_any(args, '-V', '--version'))
    if (version):
        print(version_line())
        return 0
    
    verbose = bool(list_pop_any(args, '-v', '--verbose'))
    dry_run = bool(list_pop_any(args, '--dry-run'))
    clean = not bool(list_pop_any(args, '--no-cleanup'))
    schema_file = args.pop(0)
    
    return run(schema_file, *args, verbose=verbose, dry_run=dry_run, clean=clean)
def get_logger(verbose: bool = False)
Expand source code
def get_logger(verbose: bool = False):
    logger = getLogger('openapi-parser')
    handler = StreamHandler(sys.stdout)
    logger.addHandler(handler)
    if (verbose):
        handler.setLevel('DEBUG')
        logger.setLevel('DEBUG')
    else:
        handler.setLevel('INFO')
        logger.setLevel('INFO')
    
    return logger
def header_line() ‑> str
Expand source code
def header_line() -> str:
    return f"Python OpenAPI Parser Command-Line Interface v{__version__}"
def run(schema_file: str, *writer_args, verbose: bool = False, dry_run: bool = False, clean: bool = True) ‑> int
Expand source code
def run(schema_file: str, *writer_args, verbose: bool = False, dry_run: bool = False, clean: bool = True) -> int:
    logger = get_logger(verbose=verbose)
    
    parser = OpenApiParser.open(schema_file)
    parser.load_all()
    
    for path, mdl in parser.loaded_objects.items():
        msg = ('# ' + type(mdl).__name__ + (f" '{mdl.id}'" if isinstance(mdl, HavingId) else '')).ljust(JUSTIFICATION_SIZE, ' ') + f" -- '{path}'"
        logger.debug(msg)
    logger.debug('# ' + '=' * JUSTIFICATION_SIZE)
    logger.debug('')
    
    package_writer = PackageWriter(parser, *writer_args, dry_run=dry_run)
    package_writer.write_package(clean=clean)
    return 0
def usage_line() ‑> str
Expand source code
def usage_line() -> str:
    return 'python -m openapi_parser SCHEMA [DESTINATION] [PACKAGE_NAME]'
def usage_options() ‑> List[str]
Expand source code
def usage_options() -> List[str]:
    return \
    [
        "-v, --verbose | Enables extra verbosity",
        "--dry-run     | Performs dry run (does not create any files)",
        "--no-cleanup  | Does not perform cleanup before running",
        "-h, --help -? | Print this message and exit",
        "-V, --version | Print version and exit",
    ]
def version_line() ‑> str
Expand source code
def version_line() -> str:
    return f"{__title__} {__version__}"