1515from core .models import BaseModel
1616from ladder .models import BlockedHandle , Ladder , LadderEntry
1717
18+ from .ability import Ability
1819from .metadata import Metadata
1920
2021LOGGER = logging .getLogger ("django" )
@@ -99,6 +100,19 @@ def get_build(self, damage_out):
99100 return "Unknown"
100101 return damage_out [0 ]["name" ]
101102
103+ def check_breakdown (self , damage_out ):
104+ """
105+ Return the 'build' from the damage out entry.
106+ This is a hack that will just return the top DPS ability.
107+ """
108+ if not len (damage_out ):
109+ return {"valid" : True , "ability" : "" }
110+ for ability in damage_out :
111+ for ab in Ability .objects .filter (prohibited = True ):
112+ if ab .name == ability ["name" ]:
113+ return {"valid" : False , "ability" : ab .name }
114+ return {"valid" : True , "ability" : "" }
115+
102116 def update_metadata_from_remote (self ):
103117 """Updates Metadata from remote storage"""
104118 data = self .get_data ()
@@ -135,6 +149,7 @@ def update_metadata_file(self, file, force=False):
135149 )
136150
137151 # Add the damage out to the player.
152+ valid_map = {}
138153 for idx , player in enumerate (players ):
139154 handle = f"{ player [1 ]['name' ]} { player [1 ]['handle' ]} "
140155 for damage_out_player in damage_out ["players" ]:
@@ -143,6 +158,9 @@ def update_metadata_file(self, file, force=False):
143158 players [idx ][1 ]["build" ] = self .get_build (
144159 damage_out_player ["breakdown" ]
145160 )
161+ valid_map [handle ] = self .check_breakdown (
162+ damage_out_player ["breakdown" ]
163+ )
146164 break
147165
148166 if len (players ) == 0 :
@@ -190,8 +208,7 @@ def update_metadata_file(self, file, force=False):
190208
191209 if len (ladders ) == 0 :
192210 raise APIException (
193- f"{ combat .map } ({ combat .difficulty } Difficulty) at {
194- combat .start_time } has no matching ladder"
211+ f"{ combat .map } ({ combat .difficulty } Difficulty) at { combat .start_time } has no matching ladder"
195212 )
196213
197214 for _ , player in players :
@@ -200,6 +217,19 @@ def update_metadata_file(self, file, force=False):
200217 if ladder .is_solo and len (players ) != 1 :
201218 continue
202219
220+ valid = valid_map .get (full_name , None )
221+ print (valid )
222+ if valid and not valid ["valid" ]:
223+ results .append (
224+ {
225+ "name" : full_name ,
226+ "updated" : False ,
227+ "detail" : f"{ valid ['ability' ]} is a prohibited ability. Ladder entry will not be updated." ,
228+ "value" : player .get (ladder .metric ),
229+ }
230+ )
231+ continue
232+
203233 combat_time = ladder .combat_time_threshold (combat , players )
204234 if player ["combat_time" ] < combat_time :
205235 results .append (
@@ -228,8 +258,7 @@ def update_metadata_file(self, file, force=False):
228258 and player .get (ladder .metric ) > ladder .manual_review_threshold
229259 ):
230260 visible = False
231- manual_review = f", but result needs to be manually reviewed. Combat Log ID #{
232- self .pk } "
261+ manual_review = f", but result needs to be manually reviewed. Combat Log ID #{ self .pk } "
233262 else :
234263 visible = True
235264 manual_review = ""
0 commit comments