mirror of
https://gitlab.gnome.org/GNOME/gimp.git
synced 2025-07-04 01:43:24 +00:00

When the passed code had a bug, the plug-in was crashing along with the code given in argument. Instead, we must catch all exceptions and pass the error message raised by exec() to the core application.
72 lines
2.4 KiB
Python
72 lines
2.4 KiB
Python
#!/usr/bin/env python3
|
|
|
|
# Gimp-Python - allows the writing of Gimp plugins in Python.
|
|
# Copyright (C) 2006 Manish Singh <yosh@gimp.org>
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
import gi
|
|
gi.require_version('Babl', '0.1')
|
|
from gi.repository import Babl
|
|
gi.require_version('Gegl', '0.4')
|
|
from gi.repository import Gegl
|
|
gi.require_version('Gimp', '3.0')
|
|
from gi.repository import Gimp
|
|
from gi.repository import GObject
|
|
from gi.repository import GLib
|
|
from gi.repository import Gio
|
|
|
|
import sys
|
|
import traceback
|
|
|
|
|
|
def code_eval(procedure, run_mode, code, config, data):
|
|
retval = Gimp.PDBStatusType.SUCCESS
|
|
gerror = GLib.Error()
|
|
|
|
if code == '-':
|
|
code = sys.stdin.read()
|
|
|
|
try:
|
|
exec(code, globals())
|
|
except Exception as error:
|
|
retval = Gimp.PDBStatusType.CALLING_ERROR
|
|
gerror = GLib.Error(traceback.format_exc())
|
|
|
|
return procedure.new_return_values(retval, gerror)
|
|
|
|
class PythonEval (Gimp.PlugIn):
|
|
## GimpPlugIn virtual methods ##
|
|
def do_set_i18n(self, procname):
|
|
return True, 'gimp30-python', None
|
|
|
|
def do_query_procedures(self):
|
|
return ['python-fu-eval']
|
|
|
|
def do_create_procedure(self, name):
|
|
procedure = Gimp.BatchProcedure.new(self, name, "Python 3",
|
|
Gimp.PDBProcType.PLUGIN,
|
|
code_eval, None)
|
|
procedure.set_documentation ("Evaluate Python code",
|
|
"Evaluate python code under the python interpreter (primarily for batch mode)",
|
|
name)
|
|
|
|
procedure.set_attribution("Manish Singh",
|
|
"Manish Singh",
|
|
"2006")
|
|
|
|
return procedure
|
|
|
|
|
|
Gimp.main(PythonEval.__gtype__, sys.argv)
|