from copy import deepcopy class Model: """A convenient place to store View data persistently.""" def __init__(self): self.screen = None self.views = [] self.title = None self.scene_stack = [] self.result_view_name = None self.error_message = None # view-specific data, to be used when e.g. resizing the window self._initial_viewdata = { 'AddUser': { 'uid': '', 'cn': '', 'program': '', 'forwarding_address': '', 'num_terms': '1', }, 'RenewUser': { 'uid': '', 'num_terms': '1', }, 'Transaction': { 'op_layout': None, 'msg_layout': None, 'labels': {}, 'status': 'not started', }, 'GetUser': { 'uid': '', }, 'ResetPassword': { 'uid': '', }, 'ChangeLoginShell': { 'uid': '', 'login_shell': '', }, 'SetForwardingAddresses': { 'uid': '', 'forwarding_addresses': [''], }, 'AddGroup': { 'cn': '', 'description': '', }, 'GetGroup': { 'cn': '', }, 'AddMemberToGroup': { 'cn': '', 'uid': '', 'subscribe': True, }, 'RemoveMemberFromGroup': { 'cn': '', 'uid': '', 'unsubscribe': True, }, 'CreateDatabase': { 'uid': '', }, 'ResetDatabasePassword': { 'uid': '', }, } self.viewdata = deepcopy(self._initial_viewdata) # data which is shared between multiple views self.is_club_rep = False self.confirm_lines = None self.operations = None self.deferred_req = None self.resp = None self.db_type = None self.user_dict = None def reset(self): self.viewdata = deepcopy(self._initial_viewdata) self.is_club_rep = False self.confirm_lines = None self.operations = None self.deferred_req = None self.resp = None self.db_type = None self.user_dict = None self.title = None self.error_message = None self.scene_stack.clear() self.result_view_name = None for view in self.views: if hasattr(view, '_ceoframe_on_reset'): view._ceoframe_on_reset()