Skip to content

Commit

Permalink
Add __main__.py
Browse files Browse the repository at this point in the history
  • Loading branch information
thombashi committed Apr 24, 2022
1 parent be502f9 commit c599ca8
Show file tree
Hide file tree
Showing 2 changed files with 115 additions and 1 deletion.
4 changes: 3 additions & 1 deletion setup.py
Expand Up @@ -38,6 +38,7 @@ def get_release_command_class() -> Dict[str, setuptools.Command]:
tests_requires = [line.strip() for line in f if line.strip()]

dumps_requires = ["pytablewriter>=0.64.0,<2"]
logging_requires = ["loguru>=0.4.1,<1"]
tests_requires = list(set(tests_requires + dumps_requires))

setuptools.setup(
Expand All @@ -60,8 +61,9 @@ def get_release_command_class() -> Dict[str, setuptools.Command]:
python_requires=">=3.6",
install_requires=install_requires,
extras_require={
"cli": dumps_requires + logging_requires,
"dumps": dumps_requires,
"logging": ["loguru>=0.4.1,<1"],
"logging": logging_requires,
"test": tests_requires,
},
classifiers=[
Expand Down
112 changes: 112 additions & 0 deletions sqliteschema/__main__.py
@@ -0,0 +1,112 @@
import errno
import sys
from textwrap import dedent

from .__version__ import __version__
from ._error import DataNotFoundError
from ._extractor import SQLiteSchemaExtractor
from ._logger import logger


class LogLevel:
DEBUG = "DEBUG"
INFO = "INFO"
QUIET = "QUIET"


def parse_option():
from argparse import ArgumentParser, RawDescriptionHelpFormatter

parser = ArgumentParser(
formatter_class=RawDescriptionHelpFormatter,
epilog=dedent(
"""\
Issue tracker: https://github.com/thombashi/sqliteschema/issues
"""
),
)
parser.add_argument("-V", "--version", action="version", version="%(prog)s " + __version__)

parser.add_argument("filepath", help="input SQLite file path")

group = parser.add_argument_group("Output")
parser.add_argument("-v", "--verbose", action="store_true", help="Shows verbose output.")

parser.add_argument("--table", dest="table_name", help="")
parser.add_argument("--format", dest="table_format", default="markdown", help="")

loglevel_dest = "log_level"
group = parser.add_mutually_exclusive_group() # type: ignore
group.add_argument(
"--debug",
dest=loglevel_dest,
action="store_const",
const=LogLevel.DEBUG,
default=LogLevel.INFO,
help="for debug print.",
)
group.add_argument(
"--quiet",
dest=loglevel_dest,
action="store_const",
const=LogLevel.QUIET,
default=LogLevel.INFO,
help="suppress execution log messages.",
)

return parser.parse_args()


def initialize_logger(name: str, log_level: str) -> None:
logger.remove()

if log_level == LogLevel.QUIET:
logger.disable(name)
return

if log_level == "DEBUG":
log_format = (
"<level>{level: <8}</level> | "
"<cyan>{name}</cyan>:"
"<cyan>{function}</cyan>:"
"<cyan>{line}</cyan> - <level>{message}</level>"
)
else:
log_format = "<level>[{level}]</level> {message}"

logger.add(sys.stderr, colorize=True, format=log_format, level=log_level)
logger.enable(name)


def main():
ns = parse_option()

initialize_logger(name="sqliteschema", log_level=ns.log_level)

extractor = SQLiteSchemaExtractor(ns.filepath)

verbosity_level = 3
if ns.verbose:
verbosity_level = 5

output_format = ns.table_format
table_name = ns.table_name

if table_name:
try:
print(
extractor.fetch_table_schema(table_name).dumps(
output_format=output_format, verbosity_level=verbosity_level
)
)
except DataNotFoundError:
logger.error(f"'{table_name}' not found in the database")
return errno.ENOENT
else:
print(extractor.dumps(output_format=output_format, verbosity_level=verbosity_level))

return 0


if __name__ == "__main__":
sys.exit(main())

0 comments on commit c599ca8

Please sign in to comment.