Merge pull request #161 from 989onan/patch2

Fix error logging
This commit is contained in:
Onan Chew
2025-06-02 21:54:39 -04:00
committed by GitHub
21 changed files with 76 additions and 62 deletions
+6 -5
View File
@@ -1,3 +1,4 @@
import traceback
import bpy import bpy
import numpy as np import numpy as np
import threading import threading
@@ -18,7 +19,7 @@ from bpy.utils import register_class
from ..core.logging_setup import logger from ..core.logging_setup import logger
from ..core.translations import t from ..core.translations import t
from ..core.dictionaries import bone_names from ..core.dictionaries import bone_names
from .dictionaries import reverse_bone_lookup, bone_names from .dictionaries import reverse_bone_lookup, bone_names, simplify_bonename
class SceneMatClass(PropertyGroup): class SceneMatClass(PropertyGroup):
mat: PointerProperty(type=Material) mat: PointerProperty(type=Material)
@@ -201,8 +202,8 @@ def apply_pose_as_rest(context: Context, armature_obj: Object, meshes: List[Obje
return True, t("Operation.pose_applied") return True, t("Operation.pose_applied")
except Exception as e: except Exception as e:
logger.error(f"Error applying pose as rest: {str(e)}") logger.error(f"Error applying pose as rest:", exception=e)
return False, str(e) return False, traceback.format_exc()
def apply_armature_to_mesh(armature_obj: Object, mesh_obj: Object) -> None: def apply_armature_to_mesh(armature_obj: Object, mesh_obj: Object) -> None:
"""Apply armature deformation to mesh""" """Apply armature deformation to mesh"""
@@ -336,7 +337,7 @@ def join_mesh_objects(context: Context, meshes: List[Object], progress: Optional
return joined_mesh return joined_mesh
except Exception as e: except Exception as e:
logger.error(f"Failed to join meshes: {str(e)}") logger.error(f"Failed to join meshes:", exception=e)
return None return None
@@ -366,7 +367,7 @@ def fix_uv_coordinates(context: Context) -> None:
logger.debug(f"UV Fix - Successfully processed {obj.name}") logger.debug(f"UV Fix - Successfully processed {obj.name}")
except Exception as e: except Exception as e:
logger.warning(f"UV Fix - Skipped processing for {obj.name}: {str(e)}") logger.warning(f"UV Fix - Skipped processing for {obj.name}:", exception=e)
finally: finally:
bpy.ops.object.mode_set(mode='OBJECT') bpy.ops.object.mode_set(mode='OBJECT')
+2 -2
View File
@@ -16,7 +16,7 @@ logger: logging.Logger = logging.getLogger(__name__)
import importlib.util import importlib.util
if importlib.util.find_spec("io_scene_valvesource") is not None: if importlib.util.find_spec("io_scene_valvesource") is not None:
from io_scene_valvesource.import_smd import SmdImporter from io_scene_valvesource.import_smd import SmdImporter # type: ignore
class ImportProgress: class ImportProgress:
"""Tracks and logs the progress of multi-file imports""" """Tracks and logs the progress of multi-file imports"""
@@ -84,7 +84,7 @@ def import_multi_files(
progress.update(file["name"]) progress.update(file["name"])
except Exception as e: except Exception as e:
logger.error(f"Import failed: {str(e)}", exc_info=True) logger.error(f"Import failed:", exception=e)
raise raise
ImportMethod = Callable[[str, List[Dict[str, str]], str], None] ImportMethod = Callable[[str, List[Dict[str, str]], str], None]
+1 -1
View File
@@ -22,7 +22,7 @@ def configure_logging(enabled: bool = False) -> None:
logger.addHandler(handler) logger.addHandler(handler)
def error_with_traceback(msg, *args, **kwargs): def error_with_traceback(msg, *args, **kwargs):
if kwargs.get('exc_info', False) or isinstance(msg, Exception): if isinstance(kwargs.get('exception', None), Exception):
full_msg = f"{msg}\n{traceback.format_exc()}" full_msg = f"{msg}\n{traceback.format_exc()}"
_original_error(full_msg, *args, **{**kwargs, 'exc_info': False}) _original_error(full_msg, *args, **{**kwargs, 'exc_info': False})
else: else:
+4 -3
View File
@@ -1,3 +1,4 @@
import traceback
from types import FrameType from types import FrameType
import bpy import bpy
import bpy_extras import bpy_extras
@@ -92,15 +93,15 @@ class AvatarToolkit_OT_ConvertResonite(Operator):
progress.step(t("Tools.convert_resonite.processing", name=bone.name)) progress.step(t("Tools.convert_resonite.processing", name=bone.name))
except Exception as e: except Exception as e:
logger.error(f"Error during Resonite conversion: {str(e)}") logger.error(f"Error during Resonite conversion:", exception=e)
self.report({'ERROR'}, str(e)) self.report({'ERROR'}, traceback.format_exc())
return {'CANCELLED'} return {'CANCELLED'}
finally: finally:
try: try:
bpy.ops.object.mode_set(mode='OBJECT') bpy.ops.object.mode_set(mode='OBJECT')
except Exception as e: except Exception as e:
logger.warning(f"Error returning to object mode: {str(e)}") logger.warning(f"Error returning to object mode:", exception=e)
if translate_bone_fails > 0: if translate_bone_fails > 0:
logger.info(f"Conversion completed with {translate_bone_fails} untranslated bones") logger.info(f"Conversion completed with {translate_bone_fails} untranslated bones")
+1 -1
View File
@@ -306,6 +306,6 @@ class AvatarToolKit_OT_AtlasMaterials(Operator):
return {"FINISHED"} return {"FINISHED"}
except Exception as e: except Exception as e:
logger.error(f"Error creating material atlas: {str(e)}", exc_info=True) logger.error(f"Error creating material atlas:", exception=e)
self.report({'ERROR'}, t("TextureAtlas.atlas_error")) self.report({'ERROR'}, t("TextureAtlas.atlas_error"))
raise e raise e
+3 -2
View File
@@ -1,3 +1,4 @@
import traceback
import bpy import bpy
import numpy as np import numpy as np
from typing import List, Optional, Dict, Set, Tuple, Any from typing import List, Optional, Dict, Set, Tuple, Any
@@ -72,8 +73,8 @@ class AvatarToolkit_OT_MergeArmature(bpy.types.Operator):
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Error merging armatures: {str(e)}") logger.error(f"Error merging armatures:", exception=e)
self.report({'ERROR'}, str(e)) self.report({'ERROR'}, traceback.format_exc())
return {'CANCELLED'} return {'CANCELLED'}
def delete_rigidbodies_and_joints(armature: Object) -> None: def delete_rigidbodies_and_joints(armature: Object) -> None:
+3 -2
View File
@@ -1,3 +1,4 @@
import traceback
import bpy import bpy
from bpy.types import Operator, Context, Object, ArmatureModifier, VertexGroup from bpy.types import Operator, Context, Object, ArmatureModifier, VertexGroup
from mathutils import Vector from mathutils import Vector
@@ -115,8 +116,8 @@ class AvatarToolkit_OT_AttachMesh(Operator):
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Failed to attach mesh: {str(e)}") logger.error(f"Failed to attach mesh:", exception=e)
self.report({'ERROR'}, str(e)) self.report({'ERROR'}, traceback.format_exc())
return {'CANCELLED'} return {'CANCELLED'}
def validate_mesh_transforms(mesh: Optional[Object]) -> tuple[bool, str]: def validate_mesh_transforms(mesh: Optional[Object]) -> tuple[bool, str]:
+4 -4
View File
@@ -105,7 +105,7 @@ class CreateEyesAV3Button(bpy.types.Operator):
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Eye tracking setup failed: {str(e)}") logger.error(f"Eye tracking setup failed:", exception=e)
return {'CANCELLED'} return {'CANCELLED'}
class CreateEyesSDK2Button(bpy.types.Operator): class CreateEyesSDK2Button(bpy.types.Operator):
@@ -197,7 +197,7 @@ class CreateEyesSDK2Button(bpy.types.Operator):
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Eye tracking setup failed: {str(e)}") logger.error(f"Eye tracking setup failed:", exception=e)
return {'CANCELLED'} return {'CANCELLED'}
class EyeTrackingBackup: class EyeTrackingBackup:
@@ -223,7 +223,7 @@ class EyeTrackingBackup:
json.dump(self.bone_positions, f) json.dump(self.bone_positions, f)
return True return True
except Exception as e: except Exception as e:
logger.error(f"Backup failed: {str(e)}") logger.error(f"Backup failed:", exception=e)
return False return False
def restore_bone_positions(self, armature) -> bool: def restore_bone_positions(self, armature) -> bool:
@@ -244,7 +244,7 @@ class EyeTrackingBackup:
return True return True
except Exception as e: except Exception as e:
logger.error(f"Restore failed: {str(e)}") logger.error(f"Restore failed:", exception=e)
return False return False
class EyeTrackingValidator: class EyeTrackingValidator:
+6 -5
View File
@@ -1,3 +1,4 @@
import traceback
import bpy import bpy
import re import re
from typing import Set, Dict, List, Optional, Tuple from typing import Set, Dict, List, Optional, Tuple
@@ -113,7 +114,7 @@ class AvatarToolkit_OT_CombineMaterials(Operator):
try: try:
num_combined = self.consolidate_materials(meshes) num_combined = self.consolidate_materials(meshes)
except Exception as e: except Exception as e:
logger.error(f"Material consolidation failed: {str(e)}") logger.error(f"Material consolidation failed:", exception=e)
self.report({'ERROR'}, t("Optimization.error.consolidation")) self.report({'ERROR'}, t("Optimization.error.consolidation"))
return {'CANCELLED'} return {'CANCELLED'}
progress.step("Consolidated materials") progress.step("Consolidated materials")
@@ -121,7 +122,7 @@ class AvatarToolkit_OT_CombineMaterials(Operator):
try: try:
num_cleaned = self.clean_material_slots(meshes) num_cleaned = self.clean_material_slots(meshes)
except Exception as e: except Exception as e:
logger.error(f"Material slot cleanup failed: {str(e)}") logger.error(f"Material slot cleanup failed:", exception=e)
self.report({'ERROR'}, t("Optimization.error.slot_cleanup")) self.report({'ERROR'}, t("Optimization.error.slot_cleanup"))
return {'CANCELLED'} return {'CANCELLED'}
progress.step("Cleaned material slots") progress.step("Cleaned material slots")
@@ -129,7 +130,7 @@ class AvatarToolkit_OT_CombineMaterials(Operator):
try: try:
num_removed = clear_unused_data_blocks() num_removed = clear_unused_data_blocks()
except Exception as e: except Exception as e:
logger.error(f"Data block cleanup failed: {str(e)}") logger.error(f"Data block cleanup failed:", exception=e)
self.report({'ERROR'}, t("Optimization.error.data_cleanup")) self.report({'ERROR'}, t("Optimization.error.data_cleanup"))
return {'CANCELLED'} return {'CANCELLED'}
progress.step("Removed unused data blocks") progress.step("Removed unused data blocks")
@@ -142,8 +143,8 @@ class AvatarToolkit_OT_CombineMaterials(Operator):
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Failed to combine materials: {str(e)}") logger.error(f"Failed to combine materials:", exception=e)
self.report({'ERROR'}, t("Optimization.error.combine_materials", error=str(e))) self.report({'ERROR'}, t("Optimization.error.combine_materials", error=traceback.format_exc()))
return {'CANCELLED'} return {'CANCELLED'}
def consolidate_materials(self, meshes: List[Object]) -> int: def consolidate_materials(self, meshes: List[Object]) -> int:
+5 -4
View File
@@ -1,3 +1,4 @@
import traceback
import bpy import bpy
from typing import Set, List, Tuple, ClassVar from typing import Set, List, Tuple, ClassVar
from bpy.types import Operator, Context, Object from bpy.types import Operator, Context, Object
@@ -52,8 +53,8 @@ class AvatarToolkit_OT_JoinAllMeshes(Operator):
return {'CANCELLED'} return {'CANCELLED'}
except Exception as e: except Exception as e:
logger.error(f"Failed to join meshes: {str(e)}") logger.error(f"Failed to join meshes:", exception=e)
self.report({'ERROR'}, t("Optimization.error.join_meshes", error=str(e))) self.report({'ERROR'}, t("Optimization.error.join_meshes", error=traceback.format_exc()))
return {'CANCELLED'} return {'CANCELLED'}
class AvatarToolkit_OT_JoinSelectedMeshes(Operator): class AvatarToolkit_OT_JoinSelectedMeshes(Operator):
@@ -96,6 +97,6 @@ class AvatarToolkit_OT_JoinSelectedMeshes(Operator):
return {'CANCELLED'} return {'CANCELLED'}
except Exception as e: except Exception as e:
logger.error(f"Failed to join selected meshes: {str(e)}") logger.error(f"Failed to join selected meshes:", exception=e)
self.report({'ERROR'}, t("Optimization.error.join_selected", error=str(e))) self.report({'ERROR'}, t("Optimization.error.join_selected", error=traceback.format_exc()))
return {'CANCELLED'} return {'CANCELLED'}
+4 -4
View File
@@ -164,7 +164,7 @@ class AvatarToolkit_OT_RemoveDoubles(Operator):
return {'RUNNING_MODAL'} return {'RUNNING_MODAL'}
except Exception as e: except Exception as e:
logger.error(f"Error in execute: {str(e)}") logger.error(f"Error in execute:", exception=e)
return {'CANCELLED'} return {'CANCELLED'}
def modify_mesh(self, context: Context, mesh: MeshEntry) -> None: def modify_mesh(self, context: Context, mesh: MeshEntry) -> None:
@@ -188,7 +188,7 @@ class AvatarToolkit_OT_RemoveDoubles(Operator):
mesh["mesh"].select_set(False) mesh["mesh"].select_set(False)
except Exception as e: except Exception as e:
logger.error(f"Error in modify_mesh: {str(e)}") logger.error(f"Error in modify_mesh:", exception=e)
def modify_mesh_advanced(self, context: Context, mesh_entry: MeshEntry) -> int: def modify_mesh_advanced(self, context: Context, mesh_entry: MeshEntry) -> int:
"""Advanced mesh modification with shape key handling""" """Advanced mesh modification with shape key handling"""
@@ -221,7 +221,7 @@ class AvatarToolkit_OT_RemoveDoubles(Operator):
return len(final_merged_vertex_group) return len(final_merged_vertex_group)
except Exception as e: except Exception as e:
logger.error(f"Error in modify_mesh_advanced: {str(e)}") logger.error(f"Error in modify_mesh_advanced:", exception=e)
return 1 return 1
def apply_final_merging(self, context: Context, mesh_entry: MeshEntry, vertex_group: list[int], merge_distance: float) -> None: def apply_final_merging(self, context: Context, mesh_entry: MeshEntry, vertex_group: list[int], merge_distance: float) -> None:
@@ -310,5 +310,5 @@ class AvatarToolkit_OT_RemoveDoubles(Operator):
return {'RUNNING_MODAL'} return {'RUNNING_MODAL'}
except Exception as e: except Exception as e:
logger.error(f"Error in modal: {str(e)}") logger.error(f"Error in modal:", exception=e)
return {'CANCELLED'} return {'CANCELLED'}
+9 -8
View File
@@ -1,3 +1,4 @@
import traceback
import bpy import bpy
from typing import Set, Dict, List, Tuple, Optional, Any from typing import Set, Dict, List, Tuple, Optional, Any
from bpy.props import StringProperty from bpy.props import StringProperty
@@ -63,8 +64,8 @@ class AvatarToolkit_OT_StartPoseMode(Operator):
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Failed to start pose mode: {str(e)}") logger.error(f"Failed to start pose mode:", exception=e)
self.report({'ERROR'}, t("PoseMode.error.start", error=str(e))) self.report({'ERROR'}, t("PoseMode.error.start", error=traceback.format_exc()))
return {'CANCELLED'} return {'CANCELLED'}
class AvatarToolkit_OT_StopPoseMode(Operator): class AvatarToolkit_OT_StopPoseMode(Operator):
@@ -86,8 +87,8 @@ class AvatarToolkit_OT_StopPoseMode(Operator):
bpy.ops.object.mode_set(mode='OBJECT') bpy.ops.object.mode_set(mode='OBJECT')
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Failed to stop pose mode: {str(e)}") logger.error(f"Failed to stop pose mode:", exception=e)
self.report({'ERROR'}, t("PoseMode.error.stop", error=str(e))) self.report({'ERROR'}, t("PoseMode.error.stop", error=traceback.format_exc()))
return {'CANCELLED'} return {'CANCELLED'}
class AvatarToolkit_OT_ApplyPoseAsRest(Operator, BatchPoseOperationMixin): class AvatarToolkit_OT_ApplyPoseAsRest(Operator, BatchPoseOperationMixin):
@@ -130,8 +131,8 @@ class AvatarToolkit_OT_ApplyPoseAsRest(Operator, BatchPoseOperationMixin):
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Failed to apply pose as shape key: {str(e)}") logger.error(f"Failed to apply pose as shape key:", exception=e)
self.report({'ERROR'}, t("PoseMode.error.shapekey", error=str(e))) self.report({'ERROR'}, t("PoseMode.error.shapekey", error=traceback.format_exc()))
return {'CANCELLED'} return {'CANCELLED'}
class AvatarToolkit_OT_ApplyPoseAsShapekey(Operator, BatchPoseOperationMixin): class AvatarToolkit_OT_ApplyPoseAsShapekey(Operator, BatchPoseOperationMixin):
@@ -161,6 +162,6 @@ class AvatarToolkit_OT_ApplyPoseAsShapekey(Operator, BatchPoseOperationMixin):
logger.info("Successfully applied pose as rest") logger.info("Successfully applied pose as rest")
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Failed to apply pose as rest: {str(e)}") logger.error(f"Failed to apply pose as rest:", exception=e)
self.report({'ERROR'}, t("PoseMode.error.rest_pose", error=str(e))) self.report({'ERROR'}, t("PoseMode.error.rest_pose", error=traceback.format_exc()))
return {'CANCELLED'} return {'CANCELLED'}
+5 -4
View File
@@ -1,3 +1,4 @@
import traceback
import bpy import bpy
import numpy as np import numpy as np
from bpy.types import Operator, Context from bpy.types import Operator, Context
@@ -43,8 +44,8 @@ class AvatarToolkit_OT_ApplyTransforms(Operator):
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Failed to apply transforms: {str(e)}") logger.error(f"Failed to apply transforms:", exception=e)
self.report({'ERROR'}, str(e)) self.report({'ERROR'}, traceback.format_exc())
return {'CANCELLED'} return {'CANCELLED'}
class AvatarToolkit_OT_CleanShapekeys(Operator): class AvatarToolkit_OT_CleanShapekeys(Operator):
@@ -87,6 +88,6 @@ class AvatarToolkit_OT_CleanShapekeys(Operator):
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Failed to clean shape keys: {str(e)}") logger.error(f"Failed to clean shape keys:", exception=e)
self.report({'ERROR'}, str(e)) self.report({'ERROR'}, traceback.format_exc())
return {'CANCELLED'} return {'CANCELLED'}
+2 -1
View File
@@ -1,3 +1,4 @@
import traceback
import bpy import bpy
import re import re
from bpy.types import Operator, Context, EditBone, Object, Armature, Mesh from bpy.types import Operator, Context, EditBone, Object, Armature, Mesh
@@ -99,7 +100,7 @@ class AvatarToolKit_OT_CreateDigitigradeLegs(Operator):
return True return True
except Exception as e: except Exception as e:
self.report({'ERROR'}, t("Tools.digitigrade_error", error=str(e))) self.report({'ERROR'}, t("Tools.digitigrade_error", error=traceback.format_exc()))
return False return False
def execute(self, context: Context) -> set[str]: def execute(self, context: Context) -> set[str]:
+7 -6
View File
@@ -1,3 +1,4 @@
import traceback
import bpy import bpy
import math import math
from typing import Set, List from typing import Set, List
@@ -51,8 +52,8 @@ class AvatarToolkit_OT_ConnectBones(Operator):
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Failed to connect bones: {str(e)}") logger.error(f"Failed to connect bones:", exception=e)
self.report({'ERROR'}, str(e)) self.report({'ERROR'}, traceback.format_exc())
return {'CANCELLED'} return {'CANCELLED'}
class AvatarToolkit_OT_MergeToActive(Operator): class AvatarToolkit_OT_MergeToActive(Operator):
@@ -105,8 +106,8 @@ class AvatarToolkit_OT_MergeToActive(Operator):
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Failed to merge bones: {str(e)}") logger.error(f"Failed to merge bones:", exception=e)
self.report({'ERROR'}, str(e)) self.report({'ERROR'}, traceback.format_exc())
return {'CANCELLED'} return {'CANCELLED'}
class AvatarToolkit_OT_MergeToParent(Operator): class AvatarToolkit_OT_MergeToParent(Operator):
@@ -157,6 +158,6 @@ class AvatarToolkit_OT_MergeToParent(Operator):
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Failed to merge bones: {str(e)}") logger.error(f"Failed to merge bones:", exception=e)
self.report({'ERROR'}, str(e)) self.report({'ERROR'}, traceback.format_exc())
return {'CANCELLED'} return {'CANCELLED'}
+3 -2
View File
@@ -1,3 +1,4 @@
import traceback
import bpy import bpy
from bpy.types import Operator, Context from bpy.types import Operator, Context
from ...core.translations import t from ...core.translations import t
@@ -33,7 +34,7 @@ class AvatarToolKit_OT_SeparateByMaterials(Operator):
self.report({'INFO'}, t("Tools.separate_materials_success")) self.report({'INFO'}, t("Tools.separate_materials_success"))
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
self.report({'ERROR'}, str(e)) self.report({'ERROR'}, traceback.format_exc())
return {'CANCELLED'} return {'CANCELLED'}
class AvatarToolKit_OT_SeparateByLooseParts(Operator): class AvatarToolKit_OT_SeparateByLooseParts(Operator):
@@ -65,5 +66,5 @@ class AvatarToolKit_OT_SeparateByLooseParts(Operator):
self.report({'INFO'}, t("Tools.separate_loose_success")) self.report({'INFO'}, t("Tools.separate_loose_success"))
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
self.report({'ERROR'}, str(e)) self.report({'ERROR'}, traceback.format_exc())
return {'CANCELLED'} return {'CANCELLED'}
+3 -2
View File
@@ -1,3 +1,4 @@
import traceback
import bpy import bpy
from typing import Dict, List, Set, Optional, Tuple, Any from typing import Dict, List, Set, Optional, Tuple, Any
from bpy.types import Operator, Context, Object, PoseBone, EditBone, Bone, Constraint from bpy.types import Operator, Context, Object, PoseBone, EditBone, Bone, Constraint
@@ -57,8 +58,8 @@ class AvatarToolkit_OT_ConvertRigifyToUnity(Operator):
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Failed to convert Rigify: {str(e)}", exc_info=True) logger.error(f"Failed to convert Rigify:", exception=e)
self.report({'ERROR'}, str(e)) self.report({'ERROR'}, traceback.format_exc())
return {'CANCELLED'} return {'CANCELLED'}
def cleanup_extra_bones(self, armature: Object) -> None: def cleanup_extra_bones(self, armature: Object) -> None:
+3 -2
View File
@@ -1,3 +1,4 @@
import traceback
import bpy import bpy
import math import math
from typing import Dict, List, Set, Tuple, Optional, Any, Union from typing import Dict, List, Set, Tuple, Optional, Any, Union
@@ -103,8 +104,8 @@ class AvatarToolkit_OT_StandardizeArmature(Operator):
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Failed to standardize armature: {str(e)}") logger.error(f"Failed to standardize armature:", exception=e)
self.report({'ERROR'}, str(e)) self.report({'ERROR'}, traceback.format_exc())
try: try:
if original_mode == 'EDIT_ARMATURE': if original_mode == 'EDIT_ARMATURE':
+1 -1
View File
@@ -246,7 +246,7 @@ class AvatarToolkit_OT_AlignUVEdgesToTarget(Operator):
logger.info(f"Finished mesh {source} for UV's") logger.info(f"Finished mesh {source} for UV's")
except Exception as e: except Exception as e:
logger.error(f"Error processing source {source}: {str(e)}") logger.error(f"Error processing source {source}:", exception=e)
return {'CANCELLED'} return {'CANCELLED'}
bpy.ops.object.mode_set(mode=prev_mode) bpy.ops.object.mode_set(mode=prev_mode)
+3 -2
View File
@@ -1,6 +1,7 @@
# This code was taken from Cats Blender Plugin Unoffical, some of this code is by the original developers, however was improved by myself. # This code was taken from Cats Blender Plugin Unoffical, some of this code is by the original developers, however was improved by myself.
# Didn't think it was necessary to re-make something that works well. # Didn't think it was necessary to re-make something that works well.
import traceback
import bpy import bpy
from typing import Dict, List, Optional, Tuple, Any, Set, Union from typing import Dict, List, Optional, Tuple, Any, Set, Union
from bpy.types import Operator, Context, Object, ShapeKey from bpy.types import Operator, Context, Object, ShapeKey
@@ -222,8 +223,8 @@ class ATOOLKIT_OT_create_visemes(Operator):
self.report({'INFO'}, t("Visemes.success")) self.report({'INFO'}, t("Visemes.success"))
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Error creating visemes: {str(e)}") logger.error(f"Error creating visemes:", exception=e)
self.report({'ERROR'}, str(e)) self.report({'ERROR'}, traceback.format_exc())
return {'CANCELLED'} return {'CANCELLED'}
def create_visemes(self, context: Context, mesh: Object) -> None: def create_visemes(self, context: Context, mesh: Object) -> None:
+1 -1
View File
@@ -81,7 +81,7 @@ class AvatarToolKit_OT_ExpandSectionMaterials(Operator):
return {'FINISHED'} return {'FINISHED'}
except Exception as e: except Exception as e:
logger.error(f"Error loading materials: {str(e)}", exc_info=True) logger.error(f"Error loading materials:", exception=e)
self.report({'ERROR'}, t("TextureAtlas.load_error")) self.report({'ERROR'}, t("TextureAtlas.load_error"))
return {'CANCELLED'} return {'CANCELLED'}