import bpy import types bl_info = { "name": "Buggy", "description": "Bugtastic", "author": "Bug Contributors", "blender": (2, 80, 0), "version": (0, 0, 999999), "location": "File > Export, File > Import, Scene / Object / Material / Mesh Properties", "tracker_url": "https://github.com/IfcOpenShell/IfcOpenShell/issues", "category": "Import-Export", } class OverrideDelete(bpy.types.Operator): bl_idname = "object.delete" bl_label = "Delete" bl_options = {"REGISTER", "UNDO"} use_global: bpy.props.BoolProperty(default=False) confirm: bpy.props.BoolProperty(default=True) @classmethod def poll(cls, context): return True def execute(self, context): # print('RUNNING OVERRIDE DELETE') bpy.types.Scene.counter += 1 return {"FINISHED"} class OverrideDeleteEmpty(bpy.types.Operator): bl_idname = "object.delete" bl_label = "Delete" bl_options = {"REGISTER", "UNDO"} use_global: bpy.props.BoolProperty(default=False) confirm: bpy.props.BoolProperty(default=True) @classmethod def poll(cls, context): return True def execute(self, context): # print('RUNNING OVERRIDE DELETE') bpy.types.Scene.counter += 0 return {"FINISHED"} def count_operators(obj): total = 0 for name in dir(obj): subthing = getattr(obj, name) if isinstance(subthing, types.ModuleType): t = count_operators(subthing) total += t else: total += 1 return total def register(): bpy.types.Scene.counter = 0 for i in range(1000): class asdf_template(bpy.types.Operator): bl_idname = f'bim.asdf{i}' bl_label = "asdfa" def execute(self, context): return {"FINISHED"} bpy.utils.register_class(asdf_template) total = count_operators(bpy.ops) print(total) counter_before = bpy.types.Scene.counter bpy.utils.register_class(OverrideDelete) bpy.ops.object.delete() assert bpy.types.Scene.counter == (counter_before + 1), f"Fail type 1 at {total}" counter_before = bpy.types.Scene.counter bpy.utils.register_class(OverrideDeleteEmpty) bpy.ops.object.delete() assert bpy.types.Scene.counter == counter_before, f"Fail type 2 at {total}" register()