Source code for pygerber.cli

# -*- coding: utf-8 -*-
from __future__ import annotations

from argparse import ArgumentParser, _ArgumentGroup, _MutuallyExclusiveGroup
from pathlib import Path

from .parser.pillow.cli import handle_pillow_cli

try:
    from .parser.blender.cli import handle_blender_cli
except ImportError:

[docs] def handle_blender_cli(*_): print( "bpy module has to be installed to allow 3D rendering, check Installation section of PyGerber's docs." ) exit(-1)
[docs]def get_argument_parser() -> ArgumentParser: parser = ArgumentParser( "pygerber", description="Script for 2D and 3D rendering of Gerber files." ) parser.add_argument( "--save", "-s", type=lambda value: Path(value).absolute(), required=True, metavar="<savepath>", help=( "Save path for output render, file format will be automatically determined from file " "extension. Check our documentation for list of supported extensions. https://pygerber.readthedocs.io/en/latest/" ), ) renderer_group: _MutuallyExclusiveGroup = parser.add_mutually_exclusive_group( required=True ) renderer_group.add_argument( "--pillow", "-p", help="Select pillow 2D rendering mode.", action="store_const", const="pillow", dest="renderer", ) renderer_group.add_argument( "--blender", "-b", help="Select blender 3D rendering mode.", action="store_const", const="blender", dest="renderer", ) source_group: _MutuallyExclusiveGroup = parser.add_mutually_exclusive_group( required=True ) __add_specfile_types_group(source_group) parser.add_argument( "--dry", help="Run, but don't render anything.", action="store_true", default=False, ) return parser
def __add_specfile_types_group(source_group: _ArgumentGroup): specfile_types_group: _MutuallyExclusiveGroup = ( source_group.add_mutually_exclusive_group() ) def validate(spectype_name): return lambda value: { "type": spectype_name, "filepath": Path(value).absolute(), } for name in ["yaml", "json", "toml"]: specfile_types_group.add_argument( f"--{name}", dest="specfile", type=validate(name), metavar="<filepath>", help=f"Use {name.upper()} specfile, from file <filepath>.", )
[docs]def handle_pygerber_cli(args): parser = get_argument_parser() args = parser.parse_args(args) if args.renderer == "pillow": handle_pillow_cli(args) elif args.renderer == "blender": handle_blender_cli(args)