Skip to content

Commit 3084fe9

Browse files
authored
Added Prohibited List (STOCD#105)
1 parent dab2e0b commit 3084fe9

32 files changed

Lines changed: 302 additions & 19 deletions

OSCR_django/settings.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@
5252
"combatlog.apps.CombatLogConfig",
5353
"ladder.apps.LadderConfig",
5454
"ui.apps.UIConfig",
55+
"system.apps.SystemConfig",
5556
]
5657

5758
MIDDLEWARE = [

OSCR_django/urls.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
path("", include("ladder.urls.ladder_entry")),
3737
path("", include("ladder.urls.variant")),
3838
path("", include("ui.urls.ui")),
39+
path("", include("system.urls.update")),
3940
]
4041

4142
if settings.ADMIN_PATH:

VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
2024.9.2.1
1+
2025.3.29.0

combatlog/admin.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from ladder.models import LadderEntry
88

9-
from .models import CombatLog, Metadata
9+
from .models import Ability, CombatLog, Metadata
1010

1111

1212
class LadderEntryInline(admin.StackedInline):
@@ -28,3 +28,8 @@ class MetadataAdmin(admin.ModelAdmin):
2828
class CombatLogAdmin(admin.ModelAdmin):
2929
inlines = [LadderEntryInline]
3030
exclude = ["metadata"]
31+
32+
33+
@admin.register(Ability)
34+
class AbilityAdmin(admin.ModelAdmin):
35+
exclude = []

combatlog/fixtures/ability.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
[
2+
{
3+
"model": "combatlog.Ability",
4+
"pk": 1,
5+
"fields": {
6+
"name": "Dilithium Detonator Charge",
7+
"prohibited": true
8+
}
9+
},
10+
{
11+
"model": "combatlog.Ability",
12+
"pk": 2,
13+
"fields": {
14+
"name": "Dilithium Destructor Charge",
15+
"prohibited": true
16+
}
17+
}
18+
]
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
# Generated by Django 5.1.7 on 2025-04-29 20:49
2+
3+
from django.db import migrations, models
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
('combatlog', '0003_metadata_damage_in_metadata_damage_out_and_more'),
10+
]
11+
12+
operations = [
13+
migrations.CreateModel(
14+
name='Ability',
15+
fields=[
16+
('id', models.AutoField(primary_key=True, serialize=False)),
17+
('name', models.TextField()),
18+
('prohibited', models.BooleanField()),
19+
],
20+
options={
21+
'abstract': False,
22+
},
23+
),
24+
]

combatlog/models/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
from .combatlog import *
22
from .metadata import *
3+
from .ability import *

combatlog/models/ability.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
"""Metadata Models"""
2+
3+
from django.db import models
4+
5+
from core.models import BaseModel
6+
7+
8+
class Ability(BaseModel):
9+
"""Combat Log Model"""
10+
11+
name = models.TextField()
12+
prohibited = models.BooleanField()
13+
14+
def __str__(self):
15+
return self.name + " (prohibited)" if self.prohibited else ""

combatlog/models/combatlog.py

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
from core.models import BaseModel
1616
from ladder.models import BlockedHandle, Ladder, LadderEntry
1717

18+
from .ability import Ability
1819
from .metadata import Metadata
1920

2021
LOGGER = 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 = ""

core/models/base.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
""" Base Model """
1+
"""Base Model"""
22

33
from django.db import models
44

@@ -19,3 +19,4 @@ class BaseNameModel(models.Model):
1919

2020
class Meta:
2121
abstract = True
22+
get_latest_by = "pk"

0 commit comments

Comments
 (0)