From 8151a1a8f099077756bf92b3cf1f5c26e8f78e36 Mon Sep 17 00:00:00 2001 From: gnarlito Date: Tue, 23 Nov 2021 00:50:14 +0100 Subject: [PATCH 1/2] Added badges support --- tryhackme/badge.py | 17 +++++++++++++++++ tryhackme/client.py | 6 ++++++ tryhackme/state.py | 21 ++++++++++++--------- 3 files changed, 35 insertions(+), 9 deletions(-) create mode 100644 tryhackme/badge.py diff --git a/tryhackme/badge.py b/tryhackme/badge.py new file mode 100644 index 0000000..b94cd97 --- /dev/null +++ b/tryhackme/badge.py @@ -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] \ No newline at end of file diff --git a/tryhackme/client.py b/tryhackme/client.py index e789a2b..6236d4f 100644 --- a/tryhackme/client.py +++ b/tryhackme/client.py @@ -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 = [] diff --git a/tryhackme/state.py b/tryhackme/state.py index f340a6a..facfee0 100644 --- a/tryhackme/state.py +++ b/tryhackme/state.py @@ -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 @@ -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 @@ -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") From cce8b5b9e517218a6c2ae243031f4ed63bcdb328 Mon Sep 17 00:00:00 2001 From: gnarlito Date: Tue, 23 Nov 2021 00:55:01 +0100 Subject: [PATCH 2/2] added badge import to __init__ --- tryhackme/__init__.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tryhackme/__init__.py b/tryhackme/__init__.py index 468bd55..20209d1 100644 --- a/tryhackme/__init__.py +++ b/tryhackme/__init__.py @@ -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