Skip to content

Commit e851ade

Browse files
committed
Refactor: Add get_user_belts util
1 parent d2c0da8 commit e851ade

File tree

3 files changed

+19
-16
lines changed

3 files changed

+19
-16
lines changed

dojo_plugin/__init__.py

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from .config import DOJO_HOST, bootstrap
2020
from .utils import unserialize_user_flag, render_markdown
2121
from .utils.discord import get_discord_user, get_discord_roles, add_role, send_message
22+
from .utils.dojo import get_user_belts
2223
from .pages.dojos import dojos, dojos_override
2324
from .pages.dojo import dojo
2425
from .pages.workspace import workspace
@@ -45,24 +46,10 @@ def solve(cls, user, team, challenge, request):
4546
if not discord_user:
4647
return
4748

48-
# TODO: Get this from dojo.yml
49-
belts = {
50-
"CSE 365 - Spring 2023": "Orange Belt",
51-
"CSE 466 - Fall 2022": "Yellow Belt",
52-
"CSE 494 - Spring 2023": "Blue Belt",
53-
}
5449
discord_roles = get_discord_roles()
55-
56-
dojos = Dojos.query.join(DojoChallenges).filter(Dojos.official, DojoChallenges.challenge == challenge)
57-
for dojo in dojos:
58-
belt = belts.get(dojo.name)
59-
if not belt:
60-
continue
61-
if not dojo.completed(user):
62-
continue
50+
for belt in get_user_belts(user):
6351
if discord_roles.get(belt) in discord_user["roles"]:
6452
continue
65-
6653
user_mention = f"<@{discord_user['user']['id']}>"
6754
message = f"{user_mention} earned their {belt}! :tada:"
6855
print(message, flush=True)

dojo_plugin/models/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ def solves(self, **kwargs):
195195
return DojoChallenges.solves(dojo=self, **kwargs)
196196

197197
def completed(self, user):
198-
return self.solves(user=user).count() == len(self.challenges)
198+
return self.solves(user=user, ignore_visibility=True, ignore_admins=False).count() == len(self.challenges)
199199

200200
def is_admin(self, user=None):
201201
if user is None:

dojo_plugin/utils/dojo/__init__.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,3 +397,19 @@ def get_current_dojo_challenge(user=None):
397397
DojoChallenges.dojo == Dojos.from_id(container.labels.get("dojo.dojo_id")).first())
398398
.first()
399399
)
400+
401+
402+
def get_user_belts(user):
403+
# TODO: Get this from dojo.yml
404+
belts = {
405+
"Orange Belt": ["cse365-s2023", "cse365-f2023"],
406+
"Yellow Belt": ["cse466-f2022", "cse466-f2023"],
407+
"Blue Belt": ["cse494-s2023"],
408+
}
409+
result = []
410+
for belt, dojo_ids in belts.items():
411+
dojos = Dojos.query.filter(Dojos.official, Dojos.id.in_(dojo_ids))
412+
if not any(dojo.completed(user) for dojo in dojos):
413+
break
414+
result.append(belt)
415+
return result

0 commit comments

Comments
 (0)