Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions tryhackme/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from .utils import *
from .client import Client
from .user import User
from .badge import Badge

from .room import Room
from .task import PathTask, RoomTask
Expand Down
17 changes: 17 additions & 0 deletions tryhackme/badge.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@


class Badge:
def __init__(self, state, data):
self._state = state

self._from_data(data)

def _from_data(self, data):
self.title = data.get("title")
self.name = data.get("name")
self.description = data.get("description")
self._to_earn = data.get("toEarn", [])

@property
def to_earn(self):
return [self._state.get_room(room_code) for room_code in self._to_earn]
6 changes: 6 additions & 0 deletions tryhackme/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ def get_user(self, username):
except Exception as e:
raise e # * pre definition for when exception overruling is needed

def get_badge(self, badge_name):
return self._state.get_badge(badge_name)

def get_badges(self):
return self._state.badges

def get_practice_rooms(self):
practice_rooms = self.http.get_practise_rooms()
return_rooms = []
Expand Down
21 changes: 12 additions & 9 deletions tryhackme/state.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from .path import Path
from .module import Module
from .user import User, ClientUser
from .badge import Badge
from .serie import Serie
from .network import Network
from .vpn import VPN
Expand All @@ -29,6 +30,9 @@ def __init__(self, http : HTTP):
self._networks = weakref.WeakValueDictionary()
self.vpn = [] # ? hmm

def _sync(self):
for badge in self.http.get_all_badges(): self.store_badge(badge)

def get_client_user(self):
return self.user

Expand Down Expand Up @@ -89,21 +93,20 @@ def get_user(self, username):
return self._users[username]
except KeyError:
return self.store_user(username)
# TODO: badge class redirect

def store_badge(self, data):
badge_code = data.get("name")
badge_name = data.get("name")
try:
return self._badges[badge_code]
return self._badges[badge_name]
except KeyError:
# badge = Badge(state=self, data=data)
badge = data
self._badges[badge_code] = badge
badge = Badge(state=self, data=data)
self._badges[badge_name] = badge
return badge
def get_badge(self, badge_code):
def get_badge(self, badge_name):
try:
return self._badges[badge_code]
return self._badges[badge_name]
except KeyError:
return self.store_badge(badge_code)
return self.store_badge(badge_name)

def store_serie(self, data):
serie_code = data.get("id")
Expand Down