Source code for skidl.netlist_to_skidl_main
# -*- coding: utf-8 -*-
# The MIT License (MIT) - Copyright (c) 2016-2021 Dave Vandenbout.
"""
Command-line program to convert a netlist into an equivalent SKiDL program.
"""
from __future__ import ( # isort:skip
absolute_import,
division,
print_function,
unicode_literals,
)
import argparse
import logging
import os
import shutil
import sys
from builtins import open
from future import standard_library
from .netlist_to_skidl import netlist_to_skidl
from .pckg_info import __version__
standard_library.install_aliases()
###############################################################################
# Command-line interface.
###############################################################################
[docs]def main():
parser = argparse.ArgumentParser(
description="A Python package for textually describing circuit schematics."
)
parser.add_argument(
"--version", "-v", action="version", version="skidl " + __version__
)
parser.add_argument(
"--input",
"-i",
nargs=1,
type=str,
metavar="file.net",
help="Netlist input file.",
)
parser.add_argument(
"--output",
"-o",
nargs=1,
type=str,
metavar="file.py",
help="Output file for SKiDL code.",
)
parser.add_argument(
"--overwrite", "-w", action="store_true", help="Overwrite an existing file."
)
parser.add_argument(
"--nobackup",
"-nb",
action="store_true",
help="Do *not* create backups before modifying files. "
+ "(Default is to make backup files.)",
)
parser.add_argument(
"--debug",
"-d",
nargs="?",
type=int,
default=0,
metavar="LEVEL",
help="Print debugging info. (Larger LEVEL means more info.)",
)
args = parser.parse_args()
logger = logging.getLogger("netlist_to_skidl")
if args.debug is not None:
log_level = logging.DEBUG + 1 - args.debug
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(log_level)
logger.addHandler(handler)
logger.setLevel(log_level)
if args.input is None:
logger.critical("Hey! Give me some netlist files!")
sys.exit(2)
if args.output is None:
print("Hey! I need some place where I can store the SKiDL code!")
sys.exit(1)
for file in args.output:
if os.path.isfile(file):
if not args.overwrite and args.nobackup:
logger.critical(
"File {} already exists! Use the --overwrite option to "
+ "allow modifications to it or allow backups.".format(file)
)
sys.exit(1)
if not args.nobackup:
# Create a backup file.
index = 1 # Start with this backup file suffix.
while True:
backup_file = file + ".{}.bak".format(index, file)
if not os.path.isfile(backup_file):
# Found an unused backup file name, so make backup.
shutil.copy(file, backup_file)
break # Backup done, so break out of loop.
index += 1 # Else keep looking for an unused backup file name.
skidl_code = netlist_to_skidl(args.input[0])
open(args.output[0], "w").write(skidl_code)
###############################################################################
# Main entrypoint.
###############################################################################
if __name__ == "__main__":
main()