|
3 | 3 |
|
4 | 4 | from collections.abc import Iterable
|
5 | 5 | import functools
|
| 6 | +import inspect |
6 | 7 | import sys
|
7 | 8 | from typing import Callable, List, Optional, Tuple, Type, Union
|
8 | 9 |
|
@@ -39,6 +40,10 @@ def register_procedure(
|
39 | 40 | init_ui: bool = True,
|
40 | 41 | pdb_procedure_type: Gimp.PDBProcType = Gimp.PDBProcType.PLUGIN,
|
41 | 42 | 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, |
42 | 47 | ):
|
43 | 48 | # noinspection PyUnresolvedReferences
|
44 | 49 | """Registers a function as a GIMP procedure.
|
@@ -129,6 +134,20 @@ def register_procedure(
|
129 | 134 | You can use this function to call registration-related functions not
|
130 | 135 | available via this function, e.g. `Gimp.Procedure.set_argument_sync`
|
131 | 136 | 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. |
132 | 151 |
|
133 | 152 | Example:
|
134 | 153 |
|
@@ -198,6 +217,10 @@ def register_procedure(
|
198 | 217 | proc_dict['init_ui'] = init_ui
|
199 | 218 | proc_dict['pdb_procedure_type'] = pdb_procedure_type
|
200 | 219 | 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 |
201 | 224 |
|
202 | 225 |
|
203 | 226 | def _parse_and_check_parameters(parameters):
|
@@ -319,13 +342,48 @@ def _do_create_procedure(plugin_instance, proc_name):
|
319 | 342 | else:
|
320 | 343 | return None
|
321 | 344 |
|
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 | + ) |
329 | 387 |
|
330 | 388 | if proc_dict['arguments'] is not None:
|
331 | 389 | for name, params in proc_dict['arguments'].items():
|
|
0 commit comments