[Bf-blender-cvs] [f1a65f5750d] master: Cleanup: use unpacking & generators to build classes

Campbell Barton noreply at git.blender.org
Wed Mar 13 03:33:59 CET 2019


Commit: f1a65f5750d6a7ce040325af49863a15427d39b1
Author: Campbell Barton
Date:   Wed Mar 13 13:03:54 2019 +1100
Branches: master
https://developer.blender.org/rBf1a65f5750d6a7ce040325af49863a15427d39b1

Cleanup: use unpacking & generators to build classes

No reason to make a classes tuple then manipulate it when
everything can be declared inline.

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

M	release/scripts/startup/bl_ui/space_userpref.py

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

diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index f20141bb13d..c11a802c90f 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -1044,7 +1044,6 @@ class PreferenceThemeSpacePanel:
 
 
 class ThemeGenericClassGenerator():
-    generated_classes = []
 
     @staticmethod
     def generate_panel_classes_for_wcols():
@@ -1073,15 +1072,13 @@ class ThemeGenericClassGenerator():
 
         for (name, wcol) in wcols:
             panel_id = "USERPREF_PT_theme_interface_" + wcol
-            paneltype = type(panel_id, (PreferenceThemeWidgetColorPanel, Panel), {
+            yield type(panel_id, (PreferenceThemeWidgetColorPanel, Panel), {
                 "bl_label": name,
                 "bl_options": {'DEFAULT_CLOSED'},
                 "draw": PreferenceThemeWidgetColorPanel.draw,
                 "wcol": wcol,
             })
 
-            ThemeGenericClassGenerator.generated_classes.append(paneltype)
-
     @staticmethod
     def generate_theme_area_child_panel_classes(parent_id, rna_type, theme_area, datapath):
         def generate_child_panel_classes_recurse(parent_id, rna_type, theme_area, datapath):
@@ -1098,7 +1095,7 @@ class ThemeGenericClassGenerator():
                     for prop in props_ls:
                         new_datapath = datapath + "." + prop.identifier if datapath else prop.identifier
                         panel_id = parent_id + "_" + prop.identifier
-                        paneltype = type(panel_id, (PreferenceThemeSpacePanel, Panel), {
+                        yield type(panel_id, (PreferenceThemeSpacePanel, Panel), {
                             "bl_label": rna_type.properties[prop.identifier].name,
                             "bl_parent_id": parent_id,
                             "bl_options": {'DEFAULT_CLOSED'},
@@ -1107,10 +1104,9 @@ class ThemeGenericClassGenerator():
                             "datapath": new_datapath,
                         })
 
-                        ThemeGenericClassGenerator.generated_classes.append(paneltype)
-                        generate_child_panel_classes_recurse(panel_id, prop.fixed_type, theme_area, new_datapath)
+                        yield from generate_child_panel_classes_recurse(panel_id, prop.fixed_type, theme_area, new_datapath)
 
-        generate_child_panel_classes_recurse(parent_id, rna_type, theme_area, datapath)
+        yield from generate_child_panel_classes_recurse(parent_id, rna_type, theme_area, datapath)
 
     @staticmethod
     def generate_panel_classes_from_theme_areas():
@@ -1122,7 +1118,7 @@ class ThemeGenericClassGenerator():
 
             panel_id = "USERPREF_PT_theme_" + theme_area.identifier.lower()
             # Generate panel-class from theme_area
-            paneltype = type(panel_id, (PreferenceThemeSpacePanel, Panel), {
+            yield type(panel_id, (PreferenceThemeSpacePanel, Panel), {
                 "bl_label": theme_area.name,
                 "bl_options": {'DEFAULT_CLOSED'},
                 "draw_header": PreferenceThemeSpacePanel.draw_header,
@@ -1132,8 +1128,7 @@ class ThemeGenericClassGenerator():
                 "datapath": theme_area.identifier.lower(),
             })
 
-            ThemeGenericClassGenerator.generated_classes.append(paneltype)
-            ThemeGenericClassGenerator.generate_theme_area_child_panel_classes(
+            yield from ThemeGenericClassGenerator.generate_theme_area_child_panel_classes(
                 panel_id, Theme.bl_rna.properties[theme_area.identifier.lower()].fixed_type,
                 theme_area, theme_area.identifier.lower())
 
@@ -2009,12 +2004,11 @@ class USERPREF_PT_studiolight_light_editor(Panel):
         layout.prop(system, "light_ambient")
 
 
-ThemeGenericClassGenerator.generate_panel_classes_for_wcols()
-
-# Order of registration defines order in UI, so dynamically generated classes are 'injected' in the intended order.
-classes = (USERPREF_PT_theme_user_interface,) + tuple(ThemeGenericClassGenerator.generated_classes)
-
-classes += (
+# Order of registration defines order in UI,
+# so dynamically generated classes are 'injected' in the intended order.
+classes = (
+    USERPREF_PT_theme_user_interface,
+    *ThemeGenericClassGenerator.generate_panel_classes_for_wcols(),
     USERPREF_HT_header,
     USERPREF_PT_navigation_bar,
     USERPREF_PT_save_preferences,
@@ -2089,12 +2083,11 @@ classes += (
     USERPREF_PT_studiolight_light_editor,
     USERPREF_PT_studiolight_matcaps,
     USERPREF_PT_studiolight_world,
-)
 
-# Add dynamically generated editor theme panels last, so they show up last in the theme section.
-ThemeGenericClassGenerator.generated_classes.clear()
-ThemeGenericClassGenerator.generate_panel_classes_from_theme_areas()
-classes += tuple(ThemeGenericClassGenerator.generated_classes)
+    # Add dynamically generated editor theme panels last,
+    # so they show up last in the theme section.
+    *ThemeGenericClassGenerator.generate_panel_classes_from_theme_areas(),
+)
 
 if __name__ == "__main__":  # only for live edit.
     from bpy.utils import register_class



More information about the Bf-blender-cvs mailing list