202 lines
5.7 KiB
Python
Executable File
202 lines
5.7 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
# Note: syntax in this file has to be kept compatible with Python 3, else
|
|
# Python errors in the compilation stage already, without showing
|
|
# user help about the incompatibility. To test, simply run
|
|
#
|
|
# python3 ./configtool.py
|
|
#
|
|
# This should show the explaining text rather than a SyntaxError.
|
|
#
|
|
# If you feel like porting Configtool to Python 3 compatibility altogether:
|
|
# patches are welcome! See https://docs.python.org/3/howto/pyporting.html
|
|
|
|
from __future__ import print_function
|
|
import sys
|
|
import time
|
|
|
|
if sys.version_info.major >= 3:
|
|
print(
|
|
"You are currently running Python3. Python3 is not supported.\n"
|
|
"Please try running with Python2.\n\n"
|
|
'It often works to type "python2 configtool.py" in the command line.'
|
|
)
|
|
time.sleep(10)
|
|
sys.exit(-1)
|
|
|
|
import getopt
|
|
import os.path
|
|
import inspect
|
|
|
|
from configtool.settings import Settings
|
|
from configtool.board import Board
|
|
from configtool.printer import Printer
|
|
|
|
cmdFolder = os.path.realpath(
|
|
os.path.abspath(os.path.split(inspect.getfile(inspect.currentframe()))[0])
|
|
)
|
|
|
|
verbose = 0
|
|
settings = None
|
|
board = None
|
|
printer = None
|
|
|
|
|
|
def getSettings(arg=None):
|
|
global settings
|
|
if arg or not settings:
|
|
settings = Settings(None, cmdFolder, arg)
|
|
settings.verbose = verbose
|
|
return settings
|
|
|
|
|
|
def cmdLoad(arg):
|
|
xx, ext = os.path.splitext(arg)
|
|
fn = os.path.basename(arg)
|
|
|
|
if ext == ".ini":
|
|
settings = getSettings(arg)
|
|
if not settings.loaded:
|
|
print("Failed to load settings file: %s." % arg)
|
|
sys.exit(2)
|
|
return
|
|
|
|
if ext == ".h":
|
|
if fn.startswith("board."):
|
|
global board
|
|
board = Board(getSettings())
|
|
ok, fn = board.loadConfigFile(arg)
|
|
if not ok:
|
|
print("Failed trying to load board file: %s." % fn)
|
|
sys.exit(2)
|
|
return
|
|
elif fn.startswith("printer."):
|
|
global printer
|
|
printer = Printer(getSettings())
|
|
ok, fn = printer.loadConfigFile(arg)
|
|
if not ok:
|
|
print("Failed trying to load printer file: %s" % fn)
|
|
sys.exit(2)
|
|
return
|
|
|
|
print("Unrecognized file: %s." % arg)
|
|
print("Expected one of *.ini, board.*.h or printer.*.h.")
|
|
sys.exit(2)
|
|
|
|
|
|
def cmdSave(arg):
|
|
xx, ext = os.path.splitext(arg)
|
|
fn = os.path.basename(arg)
|
|
|
|
if ext == ".ini":
|
|
if not getSettings(arg).save(arg):
|
|
print("Failed to save settings file: %s." % arg)
|
|
sys.exit(2)
|
|
return
|
|
|
|
if ext == ".h":
|
|
if fn.startswith("board."):
|
|
global board
|
|
if not board.saveConfigFile(arg, None):
|
|
print("Failed trying to save board file: %s." % arg)
|
|
sys.exit(2)
|
|
return
|
|
elif fn.startswith("printer."):
|
|
global printer
|
|
if not printer.saveConfigFile(arg, None):
|
|
print("Failed trying to save printer file: %s." % arg)
|
|
sys.exit(2)
|
|
return
|
|
|
|
print("Unrecognized file: %s." % arg)
|
|
print("Expected one of *.ini, board.*.h or printer.*.h.")
|
|
sys.exit(2)
|
|
|
|
|
|
def cmdShowAll():
|
|
names = {"configtool": getSettings(), "board": board, "printer": printer}
|
|
for namespace in names:
|
|
if names[namespace]:
|
|
values = names[namespace].getValues()
|
|
for k in sorted(values):
|
|
print("%s.%s: %s" % (namespace, k, str(values[k])))
|
|
|
|
|
|
def cmdHelp():
|
|
print(
|
|
"""Usage: %s [options]
|
|
|
|
Running without any options starts the gui (normal operation).
|
|
Following options are available for command line automation:
|
|
|
|
-h, --help Show this help text.
|
|
|
|
-v, --verbose Be more verbose. Can be applied multiple times
|
|
to get even more output.
|
|
|
|
-l <file>, --load=<file> Load a specific printer config, board config
|
|
or .ini file. Can be applied multiple times to
|
|
load multiple files.
|
|
|
|
Content of this file is valid before the GUI
|
|
loads, only. GUI will overwrite them with the
|
|
files found in config.h.
|
|
|
|
-s <file>, --save=<file> Save the config, printer or board file.
|
|
|
|
-a, --show-all Show all loaded variables and values.
|
|
|
|
-q, --quit Quit processing without launching the GUI.
|
|
"""
|
|
% sys.argv[0]
|
|
)
|
|
|
|
|
|
def CommandLine(argv):
|
|
""" Parse and act on command line arguments. All script automation commands
|
|
result in sys.exit() (i.e. they do not return from this function). Other
|
|
options like --debug will return to allow the gui to launch.
|
|
"""
|
|
global settings, verbose
|
|
|
|
try:
|
|
opts, args = getopt.getopt(
|
|
argv, "hvl:as:q", ["help", "verbose", "load=", "show-all", "save=", "quit"]
|
|
)
|
|
except getopt.GetoptError as err:
|
|
print(err)
|
|
print("Use '%s --help' to get help with command line options." % sys.argv[0])
|
|
sys.exit(2)
|
|
|
|
# Check for HELP first.
|
|
for opt, arg in opts:
|
|
if opt in ("-h", "--help"):
|
|
cmdHelp()
|
|
sys.exit()
|
|
|
|
# Now parse other options.
|
|
for opt, arg in opts:
|
|
if opt in ("-v", "--verbose"):
|
|
verbose += 1
|
|
getSettings()
|
|
|
|
elif opt in ("-l", "--load"):
|
|
cmdLoad(arg)
|
|
|
|
elif opt in ("-s", "--save"):
|
|
cmdSave(arg)
|
|
|
|
elif opt in ("-a", "--show-all"):
|
|
cmdShowAll()
|
|
|
|
elif opt in ("-q", "--quit"):
|
|
sys.exit()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
CommandLine(sys.argv[1:])
|
|
|
|
from configtool.gui import StartGui
|
|
|
|
StartGui(getSettings())
|