# MODULES from modules.session.session import wait def dict_key_verify(dictionary, keys, mode="and", *args, **kwargs): if mode != "and" and mode != "or": mode = "and" if type(keys) != list: keys = [keys] verified = [] if type(keys) != list: keys = [keys] for key in keys: if type(dictionary) != dict or key not in dictionary or not dictionary[key]: verified.append(False) else: verified.append(True) if mode == "and": if all(verified) == True: return True if mode == "or": if True in verified: return True return False # MODULES class request(): def __init__(self, sio, session=None, username=None): self.sio = sio self.session = session self.username = username def callback(self, callback, data): self.session.transfer = data def emit(self, event, info=None, callback_func="self.callback"): if callback_func == "self.callback": callback_func = self.callback if callback_func == None: self.sio.emit(event, info) return else: self.sio.emit(event, info, callback=callback_func) wait(self.session).wait() return self.session.transfer class account_page(request): def refresh(self): info = self.get_profile() return info def get_profile(self): info = {'username': self.username, 'name': self.username, 'role': "", 'occupation_name': "", 'team_name': "", 'biography': ""} profile_data = {'username': self.username, 'items': ['name', 'role', 'biography']} profile_info = self.emit('profile_get', profile_data) occupation_data = {'username': self.username, 'items': ['name']} occupation_info = self.emit('occupation_get', occupation_data) if dict_key_verify(occupation_info, 'name'): info['occupation_name'] = occupation_info['name'] team_data = {'username': self.username, 'items': ['name']} team_info = self.emit('team_get', team_data) if dict_key_verify(team_info, 'name'): info['team_name'] = team_info['name'] team_leader_info = self.emit('team_get_leaders') if dict_key_verify(team_leader_info, 'leaders'): if self.username in team_leader_info['leaders']: info['team_name'] += " (team lead)" for key in profile_info.keys(): if dict_key_verify(profile_info, key): info[key] = profile_info[key] return info def set_profile(self, item, new_value, username=None): profile = ['name', 'role', 'biography'] occupation = ['occupation_name'] team = ['team_name'] if item in profile: event = 'profile_set' if item == 'name': new_values = new_value.split(" ") if len(new_values) == 2: items = ['first_name', 'last_name'] if item in occupation: event = 'occupation_set' item = 'name' if item in team: event = 'team_set' item = 'name' if type(item) != list: items = [item] if type(new_value) != list: new_values = [new_value] for value, item in zip(new_values, items): data = {'username': None,'items': [item], item: value} if username: data['username'] = username self.emit('profile_set', data, None)