[Bf-blender-cvs] [c78c4252669] master: PyAPI: expose 'bl_options' for operators in bpy.ops

Campbell Barton noreply at git.blender.org
Tue Sep 1 09:05:45 CEST 2020


Commit: c78c4252669a83c90188d90df6089f6e3a7b31c6
Author: Campbell Barton
Date:   Tue Sep 1 17:02:51 2020 +1000
Branches: master
https://developer.blender.org/rBc78c4252669a83c90188d90df6089f6e3a7b31c6

PyAPI: expose 'bl_options' for operators in bpy.ops

Useful for checking which operators are only for internal use.

===================================================================

M	release/scripts/modules/bpy/ops.py
M	source/blender/makesrna/RNA_enum_types.h
M	source/blender/makesrna/intern/rna_wm.c
M	source/blender/python/intern/bpy_operator.c

===================================================================

diff --git a/release/scripts/modules/bpy/ops.py b/release/scripts/modules/bpy/ops.py
index 4e226f80f79..c2245d908b5 100644
--- a/release/scripts/modules/bpy/ops.py
+++ b/release/scripts/modules/bpy/ops.py
@@ -27,6 +27,7 @@ op_poll = ops_module.poll
 op_call = ops_module.call
 op_as_string = ops_module.as_string
 op_get_rna_type = ops_module.get_rna_type
+op_get_bl_options = ops_module.get_bl_options
 
 
 class BPyOps:
@@ -209,6 +210,10 @@ class BPyOpsSubModOp:
         """Internal function for introspection"""
         return op_get_rna_type(self.idname())
 
+    @property
+    def bl_options(self):
+        return op_get_bl_options(self.idname())
+
     def __repr__(self):  # useful display, repr(op)
         # import bpy
         return op_as_string(self.idname())
diff --git a/source/blender/makesrna/RNA_enum_types.h b/source/blender/makesrna/RNA_enum_types.h
index fb9b62e729a..08442a36c87 100644
--- a/source/blender/makesrna/RNA_enum_types.h
+++ b/source/blender/makesrna/RNA_enum_types.h
@@ -117,6 +117,8 @@ extern const EnumPropertyItem rna_enum_motionpath_bake_location_items[];
 extern const EnumPropertyItem rna_enum_event_value_items[];
 extern const EnumPropertyItem rna_enum_event_type_items[];
 extern const EnumPropertyItem rna_enum_event_type_mask_items[];
+
+extern const EnumPropertyItem rna_enum_operator_type_flag_items[];
 extern const EnumPropertyItem rna_enum_operator_return_items[];
 extern const EnumPropertyItem rna_enum_operator_property_tags[];
 
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index bfd99c01551..f248764eab9 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -438,8 +438,7 @@ static const EnumPropertyItem keymap_modifiers_items[] = {
 };
 #endif
 
-#ifndef RNA_RUNTIME
-static const EnumPropertyItem operator_flag_items[] = {
+const EnumPropertyItem rna_enum_operator_type_flag_items[] = {
     {OPTYPE_REGISTER,
      "REGISTER",
      0,
@@ -465,7 +464,6 @@ static const EnumPropertyItem operator_flag_items[] = {
     {OPTYPE_INTERNAL, "INTERNAL", 0, "Internal", "Removes the operator from search results"},
     {0, NULL, 0, NULL, NULL},
 };
-#endif
 
 const EnumPropertyItem rna_enum_operator_return_items[] = {
     {OPERATOR_RUNNING_MODAL,
@@ -1928,7 +1926,7 @@ static void rna_def_operator(BlenderRNA *brna)
 
   prop = RNA_def_property(srna, "bl_options", PROP_ENUM, PROP_NONE);
   RNA_def_property_enum_sdna(prop, NULL, "type->flag");
-  RNA_def_property_enum_items(prop, operator_flag_items);
+  RNA_def_property_enum_items(prop, rna_enum_operator_type_flag_items);
   RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL | PROP_ENUM_FLAG);
   RNA_def_property_ui_text(prop, "Options", "Options for this operator type");
 
@@ -2020,7 +2018,7 @@ static void rna_def_macro_operator(BlenderRNA *brna)
 
   prop = RNA_def_property(srna, "bl_options", PROP_ENUM, PROP_NONE);
   RNA_def_property_enum_sdna(prop, NULL, "type->flag");
-  RNA_def_property_enum_items(prop, operator_flag_items);
+  RNA_def_property_enum_items(prop, rna_enum_operator_type_flag_items);
   RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL | PROP_ENUM_FLAG);
   RNA_def_property_ui_text(prop, "Options", "Options for this operator type");
 
diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c
index 274c1934e9e..6d86d788644 100644
--- a/source/blender/python/intern/bpy_operator.c
+++ b/source/blender/python/intern/bpy_operator.c
@@ -436,12 +436,22 @@ static PyObject *pyop_getrna_type(PyObject *UNUSED(self), PyObject *value)
   return (PyObject *)pyrna;
 }
 
+static PyObject *pyop_get_bl_options(PyObject *UNUSED(self), PyObject *value)
+{
+  wmOperatorType *ot;
+  if ((ot = ot_lookup_from_py_string(value, "get_bl_options")) == NULL) {
+    return NULL;
+  }
+  return pyrna_enum_bitfield_to_py(rna_enum_operator_type_flag_items, ot->flag);
+}
+
 static struct PyMethodDef bpy_ops_methods[] = {
     {"poll", (PyCFunction)pyop_poll, METH_VARARGS, NULL},
     {"call", (PyCFunction)pyop_call, METH_VARARGS, NULL},
     {"as_string", (PyCFunction)pyop_as_string, METH_VARARGS, NULL},
     {"dir", (PyCFunction)pyop_dir, METH_NOARGS, NULL},
     {"get_rna_type", (PyCFunction)pyop_getrna_type, METH_O, NULL},
+    {"get_bl_options", (PyCFunction)pyop_get_bl_options, METH_O, NULL},
     {"macro_define", (PyCFunction)PYOP_wrap_macro_define, METH_VARARGS, NULL},
     {NULL, NULL, 0, NULL},
 };



More information about the Bf-blender-cvs mailing list