27{
28 KLocalizedString::setApplicationDomain("kritarunner");
29 QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true);
31
32
33
35 app.setApplicationDisplayName(
"Krita Script Runner");
36 app.setApplicationName(
"kritarunner");
37 app.setOrganizationDomain(
"krita.org");
38
39 QCommandLineParser parser;
40 parser.setApplicationDescription("kritarunner executes one python script and then returns.");
41 parser.addVersionOption();
42 parser.addHelpOption();
43
44 QCommandLineOption scriptOption(
QStringList() <<
"s" <<
"script",
"The script to run. Do not append the .py extension.",
"script");
45 parser.addOption(scriptOption);
46
47 QCommandLineOption functionOption(
QStringList() <<
"f" <<
"function",
48 "The function to call (by default __main__ is called).", "function", "__main__");
49 parser.addOption(functionOption);
50
51 parser.addPositionalArgument("[argument(s)]", "The arguments for the script");
52 parser.process(app);
53
54 if (!parser.isSet(scriptOption)) {
55 qDebug("No script given, aborting.");
56 return 1;
57 }
58
59 qDebug() << "running:" << parser.value(scriptOption) << parser.value(functionOption);
60 qDebug() << parser.positionalArguments();
61
62 app.addResourceTypes();
63 app.registerResources();
65
66
67 QByteArray pythonPath = qgetenv("PYTHONPATH");
68 qDebug() << "\tPython path:" << pythonPath;
69
70 qDebug() << "Creating engine";
71
72
73
75
76 switch (initResult) {
78 break;
80 qWarning() << i18n("Cannot load Python library");
81 return 1;
83 qWarning() << i18n("Cannot set Python paths");
84 return 1;
86 qWarning() << i18n("Cannot load built-in pykrita module");
87 return 1;
88 default:
89 qWarning() << i18n("Unexpected error initializing python plugin.");
90 return 1;
91 }
92
93 qDebug() << "Try to import the pykrita module";
97
98 if (!pykritaPackage) {
99 qDebug("Cannot load the PyKrita module, aborting");
100 return 1;
101 }
102
103 PyObject *argsList = PyList_New(0);
104 Q_FOREACH(const QString arg, parser.positionalArguments()) {
105 PyObject*
const u = py.
unicode(arg);
106 PyList_Append(argsList,
u);
108 }
109
110 PyObject *args = PyTuple_New(1);
111 PyTuple_SetItem(args, 0, argsList);
112
113 py.
functionCall(parser.value(functionOption).toUtf8().constData(), parser.value(scriptOption).toUtf8().constData(), args);
114
115 Py_DECREF(argsList);
116 Py_DECREF(args);
117
119 return 0;
120}
QList< QString > QStringList
Base class for the Krita app.
static void testingInitializeDefaultSurfaceFormat()
static PyObject * unicode(const QString &string)
Convert a QString to a Python unicode object.
bool functionCall(const char *functionName, const char *moduleName=PYKRITA_ENGINE)
PyObject * moduleImport(const char *moduleName)
@ INIT_CANNOT_LOAD_PYKRITA_MODULE
@ INIT_CANNOT_LOAD_PYTHON_LIBRARY
@ INIT_CANNOT_SET_PYTHON_PATHS