[Bf-extensions-cvs] [1d9745fe] master: Rigify: remove instances of mutable default function arguments.

Alexander Gavrilov noreply at git.blender.org
Tue Nov 22 13:42:15 CET 2022


Commit: 1d9745fe1dd041b34e21cb363ce94c878cc17708
Author: Alexander Gavrilov
Date:   Mon Nov 21 16:44:24 2022 +0200
Branches: master
https://developer.blender.org/rBA1d9745fe1dd041b34e21cb363ce94c878cc17708

Rigify: remove instances of mutable default function arguments.

Use None, or empty tuples if iterable/sequence is sufficient.

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

M	rigify/feature_set_list.py
M	rigify/generate.py
M	rigify/metarig_menu.py
M	rigify/operators/upgrade_face.py
M	rigify/rig_lists.py
M	rigify/rigs/limbs/limb_rigs.py
M	rigify/rigs/limbs/super_finger.py
M	rigify/rigs/skin/skin_parents.py
M	rigify/utils/animation.py
M	rigify/utils/mechanism.py
M	rigify/utils/rig.py

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

diff --git a/rigify/feature_set_list.py b/rigify/feature_set_list.py
index dfba34bb..f901bb4c 100644
--- a/rigify/feature_set_list.py
+++ b/rigify/feature_set_list.py
@@ -1,6 +1,6 @@
 # SPDX-License-Identifier: GPL-2.0-or-later
 
-from typing import TYPE_CHECKING, List, Sequence
+from typing import TYPE_CHECKING, List, Sequence, Optional
 
 import bpy
 from bpy.props import StringProperty
@@ -95,8 +95,8 @@ def get_info_dict(feature_set: str):
     return {}
 
 
-# noinspection PyDefaultArgument
-def call_function_safe(module_name: str, func_name: str, args=[], kwargs={}):
+def call_function_safe(module_name: str, func_name: str,
+                       args: Optional[list] = None, kwargs: Optional[dict] = None):
     module = get_module_safe(module_name)
 
     if module:
@@ -105,7 +105,7 @@ def call_function_safe(module_name: str, func_name: str, args=[], kwargs={}):
         if callable(func):
             # noinspection PyBroadException
             try:
-                return func(*args, **kwargs)
+                return func(*(args or []), **(kwargs or {}))
             except Exception:
                 print(f"Rigify Error: Could not call function '{func_name}' of feature set "
                       f"'{module_name}': exception occurred.\n")
diff --git a/rigify/generate.py b/rigify/generate.py
index 515f1a18..adbfec10 100644
--- a/rigify/generate.py
+++ b/rigify/generate.py
@@ -4,6 +4,8 @@ import bpy
 import re
 import time
 
+from typing import Optional
+
 from .utils.errors import MetarigError
 from .utils.bones import new_bone
 from .utils.layers import ORG_LAYER, MCH_LAYER, DEF_LAYER, ROOT_LAYER
@@ -668,12 +670,12 @@ def create_selection_sets(obj: ArmatureObject, metarig: ArmatureObject):
         create_selection_set_for_rig_layer(obj, layer.name, i)
 
 
-# noinspection PyDefaultArgument
-def create_bone_groups(obj, metarig, priorities={}):
+def create_bone_groups(obj, metarig, priorities: Optional[dict[str, dict[int, float]]] = None):
     bpy.ops.object.mode_set(mode='OBJECT')
     pb = obj.pose.bones
     layers = metarig.data.rigify_layers
     groups = metarig.data.rigify_colors
+    priorities = priorities or {}
     dummy = {}
 
     # Create BGs
diff --git a/rigify/metarig_menu.py b/rigify/metarig_menu.py
index 3f3e7653..c40119fe 100644
--- a/rigify/metarig_menu.py
+++ b/rigify/metarig_menu.py
@@ -6,6 +6,7 @@ import traceback
 from string import capwords
 from collections import defaultdict
 from types import ModuleType
+from typing import Iterable
 
 import bpy
 
@@ -27,10 +28,9 @@ class ArmatureSubMenu(bpy.types.Menu):
             layout.operator(op, icon='OUTLINER_OB_ARMATURE', text=text)
 
 
-# noinspection PyDefaultArgument
 def get_metarigs(metarig_table: dict[str, ModuleType | dict],
                  base_dir: str, base_path: list[str], *,
-                 path: list[str] = [], nested=False):
+                 path: Iterable[str] = (), nested=False):
     """ Searches for metarig modules, and returns a list of the
         imported modules.
     """
@@ -124,8 +124,10 @@ armature_submenus = []
 menu_funcs = []
 
 
-# noinspection PyDefaultArgument
-def create_metarig_ops(dic=metarigs):
+def create_metarig_ops(dic: dict | None = None):
+    if dic is None:
+        dic = metarigs
+
     """Create metarig add Operators"""
     for metarig_category in dic:
         if metarig_category == "external":
@@ -153,8 +155,10 @@ def create_menu_funcs():
         menu_funcs += [make_metarig_menu_func(mop.bl_idname, text)]
 
 
-# noinspection PyDefaultArgument,BlIdLowercase
-def create_armature_submenus(dic=metarigs):
+# noinspection BlIdLowercase
+def create_armature_submenus(dic: dict | None = None):
+    if dic is None:
+        dic = metarigs
     global menu_funcs
     metarig_categories = list(dic.keys())
     metarig_categories.sort()
diff --git a/rigify/operators/upgrade_face.py b/rigify/operators/upgrade_face.py
index 8a99fd2a..30996d53 100644
--- a/rigify/operators/upgrade_face.py
+++ b/rigify/operators/upgrade_face.py
@@ -305,13 +305,12 @@ connect_ends_map = {
 }
 
 
-# noinspection PyDefaultArgument
 def set_rig(
     obj, name_map, bone, rig=None,
     connect_ends=None, priority=0, middle=0, sharpen=None,
     falloff=None, spherical=None, falloff_length=False, scale=False,
     glue_copy=None, glue_reparent=False,
-    params={}, **_kwargs
+    params=None, **_kwargs
 ):
     bone = name_map.get(bone, bone)
     if rig is not None:
@@ -354,8 +353,9 @@ def set_rig(
             pbone.rigify_parameters.skin_glue_add_constraint = 'COPY_LOCATION_OWNER'
             pbone.rigify_parameters.skin_glue_add_constraint_influence = glue_copy
 
-        for k, v in params.items():
-            setattr(pbone.rigify_parameters, k, v)
+        if params:
+            for k, v in params.items():
+                setattr(pbone.rigify_parameters, k, v)
 
 
 def update_face_rig(obj):
diff --git a/rigify/rig_lists.py b/rigify/rig_lists.py
index 7ed25658..70f9db1b 100644
--- a/rigify/rig_lists.py
+++ b/rigify/rig_lists.py
@@ -4,16 +4,16 @@ import os
 import traceback
 import importlib
 import typing
-from typing import Optional
+
+from typing import Optional, Iterable
 
 from .utils.rig import RIG_DIR
 
 from . import feature_set_list
 
 
-# noinspection PyDefaultArgument
 def get_rigs(base_dir: str, base_path: list[str], *,
-             path: list[str] = [],
+             path: Iterable[str] = (),
              feature_set=feature_set_list.DEFAULT_NAME):
     """ Recursively searches for rig types, and returns a list.
 
diff --git a/rigify/rigs/limbs/limb_rigs.py b/rigify/rigs/limbs/limb_rigs.py
index 23a0eda7..0f78c739 100644
--- a/rigify/rigs/limbs/limb_rigs.py
+++ b/rigify/rigs/limbs/limb_rigs.py
@@ -3,7 +3,7 @@
 import bpy
 import json
 
-from typing import Optional, NamedTuple
+from typing import Optional, NamedTuple, Sequence
 from bpy.types import PoseBone, EditBone
 
 from ...utils.animation import add_generic_snap_fk_to_ik, add_fk_ik_snap_buttons
@@ -1152,12 +1152,11 @@ class POSE_OT_rigify_limb_ik2fk_bake(RigifyLimbIk2FkBase, RigifyBakeKeyframesMix
 ''']
 
 
-# noinspection PyDefaultArgument
 def add_limb_snap_ik_to_fk(panel: 'PanelLayout', *,
                            master: Optional[str] = None,
-                           fk_bones: list[str] = [],
-                           ik_bones: list[str] = [], tail_bones: list[str] = [],
-                           ik_ctrl_bones: list[str] = [], ik_extra_ctrls: list[str] = [],
+                           fk_bones: Sequence[str] = (),
+                           ik_bones: Sequence[str] = (), tail_bones: Sequence[str] = (),
+                           ik_ctrl_bones: Sequence[str] = (), ik_extra_ctrls: Sequence[str] = (),
                            rig_name=''):
     panel.use_bake_settings()
     panel.script.add_utilities(SCRIPT_UTILITIES_OP_SNAP_IK_FK)
@@ -1177,7 +1176,7 @@ def add_limb_snap_ik_to_fk(panel: 'PanelLayout', *,
     add_fk_ik_snap_buttons(
         panel, 'pose.rigify_limb_ik2fk_{rig_id}', 'pose.rigify_limb_ik2fk_bake_{rig_id}',
         label='IK->FK', rig_name=rig_name, properties=op_props,
-        clear_bones=ik_ctrl_bones + tail_bones + ik_extra_ctrls,
+        clear_bones=[*ik_ctrl_bones, *tail_bones, *ik_extra_ctrls],
     )
 
 
@@ -1261,11 +1260,10 @@ class POSE_OT_rigify_limb_toggle_pole_bake(RigifyLimbTogglePoleBase, RigifyBakeK
 ''']
 
 
-# noinspection PyDefaultArgument
 def add_limb_toggle_pole(panel: 'PanelLayout', *,
                          master: Optional[str] = None,
-                         ik_bones: list[str] = [], ik_ctrl_bones: list[str] = [],
-                         ik_extra_ctrls: list[str] = []):
+                         ik_bones: Sequence[str] = (), ik_ctrl_bones: Sequence[str] = (),
+                         ik_extra_ctrls: Sequence[str] = ()):
     panel.use_bake_settings()
     panel.script.add_utilities(SCRIPT_UTILITIES_OP_TOGGLE_POLE)
     panel.script.register_classes(SCRIPT_REGISTER_OP_TOGGLE_POLE)
diff --git a/rigify/rigs/limbs/super_finger.py b/rigify/rigs/limbs/super_finger.py
index 4c67203e..52e60f2d 100644
--- a/rigify/rigs/limbs/super_finger.py
+++ b/rigify/rigs/limbs/super_finger.py
@@ -3,7 +3,7 @@
 import bpy
 import json
 
-from typing import Optional
+from typing import Optional, Sequence
 from itertools import count
 
 from ...rig_ui_template import PanelLayout
@@ -589,10 +589,9 @@ class POSE_OT_rigify_finger_fk2ik_bake(RigifyFingerFk2IkBase, RigifyBakeKeyframe
 ''']
 
 
-# noinspection PyDefaultArgument
 def add_finger_snap_fk_to_ik(
         panel: 'PanelLayout', *, master: Optional[str] = None,
-        fk_bones: list[str] = [], ik_bones: list[str] = [],
+        fk_bones: Sequence[str] = (), ik_bones: Sequence[str] = (),
         ik_control: Optional[str] = None,
         ik_constraint_bone: Optional[str] = None,
         axis='+X', rig_name='', compact: Optional[bool] = None):
diff --git a/rigify/rigs/skin/skin_parents.py b/rigify/rigs/skin/skin_parents.py
index c075ca9f..d60ed1a1 100644
--- a/rigify/rigs/skin/skin_parents.py
+++ b/rigify/rigs/skin/skin_parents.py
@@ -328,10 +328,9 @@ class ControlBoneParentOffset(ControlBoneParentLayer):
 
         self.limit_distance = other.limit_distance + self.limit_distance
 
-    # noinspection PyDefaultArgument
     def add_copy_local_location(self, target: Lazy[str], *, influence: Lazy[float] = 1,
                                 influence_expr: Optional[str] = None,
-                                influence_vars: dict[str, Any] = {}):
+                                influence_vars: Optional[dict[str, Any]] = None):
         """
         Add a Copy Location (Local, Owner Orientation) offset.
         The influence may be specified as a (lazy) constant, or a driver expression
@@ -342,7 +341,7 @@ class ControlBoneParentOffset(ControlBoneParentLayer):
 
         if influence_expr:
             self.copy_local[target].drivers.append(
-                self.DriverEntry(influence_expr, influence_vars))
+                self.DriverEntry(influence_expr, influence_vars or {}))
         elif callable(influence):
             self.copy_local[target].lazy_entries.append(influence)
         else:
diff --git a/rigify/utils/animation.py b/rigify/utils/animation.py
index 660e340e

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-extensions-cvs mailing list