Skip to content

Commit cf7232b

Browse files
committed
Allow registering more procedure types
1 parent ee71f83 commit cf7232b

File tree

1 file changed

+65
-7
lines changed

1 file changed

+65
-7
lines changed

wrappers/procedure.py

+65-7
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33

44
from collections.abc import Iterable
55
import functools
6+
import inspect
67
import sys
78
from typing import Callable, List, Optional, Tuple, Type, Union
89

@@ -39,6 +40,10 @@ def register_procedure(
3940
init_ui: bool = True,
4041
pdb_procedure_type: Gimp.PDBProcType = Gimp.PDBProcType.PLUGIN,
4142
additional_init: Optional[Callable] = None,
43+
export_metadata: bool = False,
44+
interpreter_name: Optional[str] = None,
45+
extract_func: Optional[Callable] = None,
46+
extract_data: Optional[Iterable] = None,
4247
):
4348
# noinspection PyUnresolvedReferences
4449
"""Registers a function as a GIMP procedure.
@@ -129,6 +134,20 @@ def register_procedure(
129134
You can use this function to call registration-related functions not
130135
available via this function, e.g. `Gimp.Procedure.set_argument_sync`
131136
on individual procedure arguments.
137+
export_metadata: Indicates whether GIMP should handle metadata exporting.
138+
Applicable only if ``procedure_type`` is `Gimp.ExportProcedure` and
139+
otherwise ignored.
140+
See the documentation for `Gimp.ExportProcedure` for more information.
141+
interpreter_name: Name of the batch interpreter to be registered.
142+
Applicable only if ``procedure_type`` is `Gimp.BatchProcedure` and
143+
otherwise ignored.
144+
See the documentation for `Gimp.BatchProcedure` for more information.
145+
extract_func: See `Gimp.VectorLoadProcedure.new()` for more information.
146+
Applicable only if ``procedure_type`` is `Gimp.VectorLoadProcedure` and
147+
otherwise ignored.
148+
extract_data: See `Gimp.VectorLoadProcedure.new()` for more information.
149+
Applicable only if ``procedure_type`` is `Gimp.VectorLoadProcedure` and
150+
otherwise ignored.
132151
133152
Example:
134153
@@ -198,6 +217,10 @@ def register_procedure(
198217
proc_dict['init_ui'] = init_ui
199218
proc_dict['pdb_procedure_type'] = pdb_procedure_type
200219
proc_dict['additional_init'] = additional_init
220+
proc_dict['export_metadata'] = export_metadata
221+
proc_dict['interpreter_name'] = interpreter_name
222+
proc_dict['extract_func'] = extract_func
223+
proc_dict['extract_data'] = extract_data
201224

202225

203226
def _parse_and_check_parameters(parameters):
@@ -319,13 +342,48 @@ def _do_create_procedure(plugin_instance, proc_name):
319342
else:
320343
return None
321344

322-
procedure = proc_dict['procedure_type'].new(
323-
plugin_instance,
324-
proc_name,
325-
proc_dict['pdb_procedure_type'],
326-
_get_procedure_wrapper(
327-
proc_dict['procedure'], proc_dict['procedure_type'], proc_dict['init_ui']),
328-
proc_dict['run_data'])
345+
if not inspect.isclass(proc_dict['procedure_type']):
346+
raise TypeError('procedure_type is not a valid class type')
347+
348+
procedure_wrapper = _get_procedure_wrapper(
349+
proc_dict['procedure'], proc_dict['procedure_type'], proc_dict['init_ui'])
350+
351+
if issubclass(proc_dict['procedure_type'], Gimp.ExportProcedure):
352+
procedure = proc_dict['procedure_type'].new(
353+
plugin_instance,
354+
proc_name,
355+
proc_dict['pdb_procedure_type'],
356+
proc_dict['export_metadata'],
357+
procedure_wrapper,
358+
proc_dict['run_data'],
359+
)
360+
elif issubclass(proc_dict['procedure_type'], Gimp.BatchProcedure):
361+
procedure = proc_dict['procedure_type'].new(
362+
plugin_instance,
363+
proc_name,
364+
proc_dict['interpreter_name'],
365+
proc_dict['pdb_procedure_type'],
366+
procedure_wrapper,
367+
proc_dict['run_data'],
368+
)
369+
elif issubclass(proc_dict['procedure_type'], Gimp.VectorLoadProcedure):
370+
procedure = proc_dict['procedure_type'].new(
371+
plugin_instance,
372+
proc_name,
373+
proc_dict['pdb_procedure_type'],
374+
proc_dict['extract_func'],
375+
proc_dict['extract_data'],
376+
procedure_wrapper,
377+
proc_dict['run_data'],
378+
)
379+
else:
380+
procedure = proc_dict['procedure_type'].new(
381+
plugin_instance,
382+
proc_name,
383+
proc_dict['pdb_procedure_type'],
384+
procedure_wrapper,
385+
proc_dict['run_data'],
386+
)
329387

330388
if proc_dict['arguments'] is not None:
331389
for name, params in proc_dict['arguments'].items():

0 commit comments

Comments
 (0)