inkstitch/inkstitch.py

74 wiersze
2.2 KiB
Python

import logging
import os
import sys
import traceback
from argparse import ArgumentParser
from io import StringIO
from inkex import errormsg
from lxml.etree import XMLSyntaxError
import lib.debug as debug
from lib import extensions
from lib.i18n import _
from lib.utils import restore_stderr, save_stderr, version
logger = logging.getLogger('shapely.geos')
logger.setLevel(logging.DEBUG)
shapely_errors = StringIO()
ch = logging.StreamHandler(shapely_errors)
ch.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
logger.addHandler(ch)
parser = ArgumentParser()
parser.add_argument("--extension")
my_args, remaining_args = parser.parse_known_args()
if os.path.exists(os.path.join(os.path.dirname(os.path.realpath(__file__)), "DEBUG")):
debug.enable()
extension_name = my_args.extension
# example: foo_bar_baz -> FooBarBaz
extension_class_name = extension_name.title().replace("_", "")
extension_class = getattr(extensions, extension_class_name)
extension = extension_class()
if hasattr(sys, 'gettrace') and sys.gettrace():
extension.run(args=remaining_args)
else:
save_stderr()
exception = None
try:
extension.run(args=remaining_args)
except (SystemExit, KeyboardInterrupt):
raise
except XMLSyntaxError:
msg = _("Ink/Stitch cannot read your SVG file. "
"This is often the case when you use a file which has been created with Adobe Illustrator.")
msg += "\n\n"
msg += _("Try to import the file into Inkscape through 'File > Import...' (Ctrl+I)")
errormsg(msg)
except Exception:
exception = traceback.format_exc()
finally:
restore_stderr()
if shapely_errors.tell():
errormsg(shapely_errors.getvalue())
if exception:
errormsg(_("Ink/Stitch experienced an unexpected error.") + "\n")
errormsg(_("If you'd like to help, please file an issue at "
"https://github.com/inkstitch/inkstitch/issues "
"and include the entire error description below:") + "\n")
errormsg(version.get_inkstitch_version() + "\n")
errormsg(exception)
sys.exit(1)
else:
sys.exit(0)