codex/backend-optimization #2

Merged
imelon merged 11 commits from codex/backend-optimization into master 2026-06-05 11:36:19 +08:00
3 changed files with 95 additions and 5 deletions
Showing only changes of commit 6c109708b8 - Show all commits
+7 -5
View File
@@ -6,6 +6,7 @@ from core.basic.equipment import OathSuit, Suit, get_equipment
from ..formula import 增幅计算, 强化技攻, 武器强化计算, 精通计算, 耳环计算, 左右计算, 锻造计算 from ..formula import 增幅计算, 强化技攻, 武器强化计算, 精通计算, 耳环计算, 左右计算, 锻造计算
from ..roleinfo import CharacterEmblemInfo, CharacterEquipInfo, CharacterOathInfo, get_key_by_value from ..roleinfo import CharacterEmblemInfo, CharacterEquipInfo, CharacterOathInfo, get_key_by_value
from .base import CharacterBase from .base import CharacterBase
from .config_view import CalcConfigView
@cache @cache
@@ -403,12 +404,13 @@ class CalcEquipMixin(CharacterBase):
# region 主计算入口 # region 主计算入口
def calc(self, setInfo: dict[str, dict]): def calc(self, setInfo: dict[str, dict]):
self.calc_init(setInfo) config = CalcConfigView(setInfo).as_legacy_dict()
self.calc_init(config)
self.SetBaseStatus() self.SetBaseStatus()
self.calc_jade(setInfo.get('jades', [])) self.calc_jade(config.get('jades', []))
self.calc_avatar(setInfo.get('avatar', {})) self.calc_avatar(config.get('avatar', {}))
self.calc_basic() self.calc_basic()
self.calc_sundry(setInfo.get('sundry', {})) self.calc_sundry(config.get('sundry', {}))
self.calc_emblems() self.calc_emblems()
suit = self.calc_suits() suit = self.calc_suits()
self.calc_equs() self.calc_equs()
@@ -430,7 +432,7 @@ class CalcEquipMixin(CharacterBase):
self.输出类型 = '魔法百分比' self.输出类型 = '魔法百分比'
else: else:
self.输出类型 = '物理百分比' self.输出类型 = '物理百分比'
skillInfos = self.calc_carry_skills(setInfo.get('DSB', False), setInfo.get('BUFF', False)) skillInfos = self.calc_carry_skills(config.get('DSB', False), config.get('BUFF', False))
info = self.get_carry_info() info = self.get_carry_info()
return {'uuid': uuid1().hex, 'skills': skillInfos, 'info': info, 'suits': suit, 'buffer': self.buffer} return {'uuid': uuid1().hex, 'skills': skillInfos, 'info': info, 'suits': suit, 'buffer': self.buffer}
@@ -0,0 +1,61 @@
from collections.abc import Mapping
from typing import Any
class CalcConfigView:
def __init__(self, raw: Mapping[str, Any] | None):
self.raw = dict(raw or {})
@property
def equips(self) -> dict[str, dict[str, Any]]:
return dict(self.raw.get('equips') or {})
@property
def oaths(self) -> dict[str, dict[str, Any]]:
return dict(self.raw.get('oaths') or {})
@property
def emblems(self) -> dict[str, dict[str, Any]]:
return dict(self.raw.get('emblems') or {})
@property
def skills(self) -> dict[str, dict[str, Any]]:
return dict(self.raw.get('skills') or {})
@property
def avatar(self) -> dict[str, Any]:
return dict(self.raw.get('avatar') or {})
@property
def sundry(self) -> dict[str, Any]:
return dict(self.raw.get('sundry') or {})
@property
def jades(self) -> dict[str, Any]:
return dict(self.raw.get('jades') or {})
@property
def options(self) -> dict[str, Any]:
return dict(self.raw.get('options') or {})
@property
def dsb(self) -> bool:
return bool(self.raw.get('DSB', False))
@property
def buff(self) -> bool:
return bool(self.raw.get('BUFF', False))
def as_legacy_dict(self) -> dict[str, Any]:
data = dict(self.raw)
data.setdefault('equips', {})
data.setdefault('oaths', {})
data.setdefault('emblems', {})
data.setdefault('skills', {})
data.setdefault('avatar', {})
data.setdefault('sundry', {})
data.setdefault('jades', {})
data.setdefault('options', {})
data.setdefault('DSB', False)
data.setdefault('BUFF', False)
return data
@@ -0,0 +1,27 @@
from core.basic.character.config_view import CalcConfigView
def test_config_view_provides_defaults():
view = CalcConfigView(None)
assert view.equips == {}
assert view.oaths == {}
assert view.emblems == {}
assert view.skills == {}
assert view.avatar == {}
assert view.sundry == {}
assert view.jades == {}
assert view.options == {}
assert view.dsb is False
assert view.buff is False
def test_config_view_preserves_legacy_keys():
view = CalcConfigView({'skills': {'100': {'lv': 1}}, 'BUFF': True})
data = view.as_legacy_dict()
assert data['skills'] == {'100': {'lv': 1}}
assert data['BUFF'] is True
assert data['DSB'] is False
assert data['equips'] == {}