121 lines
3.1 KiB
Python
121 lines
3.1 KiB
Python
# Copyright (c) 2021-2023, Manfred Moitzi
|
|
# License: MIT License
|
|
import sys
|
|
import argparse
|
|
from pathlib import Path
|
|
from ezdxf import options, print_config
|
|
from ezdxf import commands
|
|
from ezdxf.fonts import fonts
|
|
|
|
YES_NO = {True: "yes", False: "no"}
|
|
options.set(options.CORE, "LOAD_PROXY_GRAPHICS", "true")
|
|
|
|
|
|
def add_common_arguments(parser):
|
|
parser.add_argument(
|
|
"-V",
|
|
"--version",
|
|
action="store_true",
|
|
help="show version and exit",
|
|
)
|
|
parser.add_argument(
|
|
"-f",
|
|
"--fonts",
|
|
action="store_true",
|
|
help="rebuild system font cache and print all fonts found",
|
|
)
|
|
parser.add_argument(
|
|
"-v",
|
|
"--verbose",
|
|
action="store_true",
|
|
help="give more output",
|
|
)
|
|
parser.add_argument(
|
|
"--config",
|
|
action="store",
|
|
help="path to a config file",
|
|
)
|
|
parser.add_argument(
|
|
"--log",
|
|
action="store",
|
|
help='path to a verbose appending log, "stderr" logs to the '
|
|
"standard error stream",
|
|
)
|
|
|
|
|
|
def print_version(verbose=False):
|
|
print_config(verbose=verbose, stream=sys.stdout)
|
|
|
|
|
|
def print_available_fonts(verbose=False):
|
|
from ezdxf.fonts import fonts
|
|
print("Rebuilding system font cache.")
|
|
fonts.build_system_font_cache()
|
|
fonts.font_manager.print_available_fonts(verbose)
|
|
|
|
|
|
def setup_log(args):
|
|
import logging
|
|
from datetime import datetime
|
|
from io import StringIO
|
|
|
|
level = "DEBUG" if args.verbose else "INFO"
|
|
if args.log.lower() == "stderr":
|
|
logging.basicConfig(stream=sys.stderr, level=level)
|
|
else:
|
|
logging.basicConfig(filename=args.log, level=level)
|
|
print(f'Appending logs to file "{args.log}", logging level: {level}\n')
|
|
logger = logging.getLogger("ezdxf")
|
|
logger.info("***** Launch time: " + datetime.now().isoformat() + " *****")
|
|
if args.verbose:
|
|
s = StringIO()
|
|
print_config(verbose=True, stream=s)
|
|
logger.info("configuration\n" + s.getvalue())
|
|
|
|
|
|
DESCRIPTION = """
|
|
Command launcher for the Python package "ezdxf": https://pypi.org/project/ezdxf/
|
|
|
|
"""
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
"ezdxf",
|
|
description=DESCRIPTION,
|
|
)
|
|
add_common_arguments(parser)
|
|
subparsers = parser.add_subparsers(dest="command")
|
|
commands.add_parsers(subparsers)
|
|
|
|
args = parser.parse_args(sys.argv[1:])
|
|
help_ = True
|
|
if args.config:
|
|
config = Path(args.config)
|
|
if config.exists():
|
|
options.read_file(args.config)
|
|
if args.verbose:
|
|
print(f'using config file: "{config}"')
|
|
else:
|
|
print(f'config file "{config}" not found')
|
|
if args.log:
|
|
setup_log(args)
|
|
if args.version:
|
|
print_version(verbose=args.verbose)
|
|
help_ = False
|
|
if args.fonts:
|
|
print_available_fonts(args.verbose)
|
|
help_ = False
|
|
|
|
run = commands.get(args.command)
|
|
if run:
|
|
# For the case automatic font loading is disabled:
|
|
fonts.load()
|
|
run(args)
|
|
elif help_:
|
|
parser.print_help()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|