fix: add safe decimal conversion to AttachmentConfig.from_dict and better error logging
- AttachmentConfig.from_dict now uses safe_decimal() for all decimal fields - Added traceback logging to _load_saved_loadouts to see exact error location - Handles int/float/Decimal/string values for all numeric fields
This commit is contained in:
parent
c7c16f65db
commit
97af63cbf9
|
|
@ -75,15 +75,25 @@ class AttachmentConfig:
|
|||
|
||||
@classmethod
|
||||
def from_dict(cls, data: dict) -> "AttachmentConfig":
|
||||
"""Create from dictionary with safe decimal conversion."""
|
||||
def safe_decimal(val):
|
||||
if isinstance(val, Decimal):
|
||||
return val
|
||||
if isinstance(val, (int, float)):
|
||||
return Decimal(str(val))
|
||||
if isinstance(val, str):
|
||||
return Decimal(val) if val else Decimal('0')
|
||||
return Decimal('0')
|
||||
|
||||
return cls(
|
||||
name=data['name'],
|
||||
item_id=data['item_id'],
|
||||
attachment_type=data['attachment_type'],
|
||||
decay_pec=Decimal(data['decay_pec']),
|
||||
damage_bonus=Decimal(data.get('damage_bonus', '0')),
|
||||
range_bonus=Decimal(data.get('range_bonus', '0')),
|
||||
efficiency_bonus=Decimal(data.get('efficiency_bonus', '0')),
|
||||
protection_bonus={k: Decimal(v) for k, v in data.get('protection_bonus', {}).items()},
|
||||
decay_pec=safe_decimal(data.get('decay_pec', '0')),
|
||||
damage_bonus=safe_decimal(data.get('damage_bonus', '0')),
|
||||
range_bonus=safe_decimal(data.get('range_bonus', '0')),
|
||||
efficiency_bonus=safe_decimal(data.get('efficiency_bonus', '0')),
|
||||
protection_bonus={k: safe_decimal(v) for k, v in data.get('protection_bonus', {}).items()},
|
||||
)
|
||||
|
||||
|
||||
|
|
@ -2371,7 +2381,9 @@ class LoadoutManagerDialog(QDialog):
|
|||
item.setToolTip(tooltip)
|
||||
self.saved_list.addItem(item)
|
||||
except Exception as e:
|
||||
import traceback
|
||||
logger.error(f"Failed to load {filepath}: {e}")
|
||||
logger.error(traceback.format_exc())
|
||||
continue
|
||||
except Exception as e:
|
||||
logger.error(f"Failed to list loadouts: {e}")
|
||||
|
|
|
|||
Loading…
Reference in New Issue