import json import random import string _HOME = 'home' _DETAILS = 'details' _EDIT = 'edit' _REMOVE = 'remove' _DOWNLOAD = 'download' _IMPORT_EXPORT = 'import_export' _DEBUG = 'debug' _RECORD_INFO = 'record_info' _NODE_SCREEN = 'screen' _NODE_RECORD_ID = 'record_id' _NODE_PREFILLED_JSON = 'prefilled_json' _NODE_GROUP = 'group' _NODE_RECORD_INFO_ID = 'record_info_id' def navigate_home() -> str: return '{}' def navigate_details(record_id) -> str: nav_dict = { _NODE_SCREEN: _DETAILS, _NODE_RECORD_ID: record_id } return json.dumps(nav_dict) def navigate_add() -> str: nav_dict = { _NODE_SCREEN: _EDIT, } return json.dumps(nav_dict) def navigate_edit(record_id) -> str: nav_dict = { _NODE_SCREEN: _EDIT, _NODE_RECORD_ID: record_id } return json.dumps(nav_dict) def navigate_remove(record_id) -> str: nav_dict = { _NODE_SCREEN: _REMOVE, _NODE_RECORD_ID: record_id } return json.dumps(nav_dict) def navigate_download_single(record_id) -> str: nav_dict = { _NODE_SCREEN: _DOWNLOAD, _NODE_RECORD_ID: record_id } return json.dumps(nav_dict) def navigate_download_group(group) -> str: nav_dict = { _NODE_SCREEN: _DOWNLOAD, _NODE_GROUP: group } return json.dumps(nav_dict) def get_nav_state(json_nav) -> dict: nav_dict = json.loads(json_nav) state = { 'is_home_visible': False, 'is_details_visible': False, 'is_edit_visible': False, 'is_remove_visible': False, 'is_download_visible': False, 'is_import_export_visible': False, 'is_debug_visible': False, 'details_record_id': '', 'edit_data': {}, 'remove_record_id': '', 'download_info': '', 'filter_state': {}, 'details_record_info_id': '' } if nav_dict.get(_NODE_SCREEN) is None: state['is_home_visible'] = True else: if nav_dict[_NODE_SCREEN] == _DETAILS: state['is_details_visible'] = True state['details_record_id'] = nav_dict[_NODE_RECORD_ID] elif nav_dict[_NODE_SCREEN] == _EDIT: state['is_edit_visible'] = True edit_data = {'token': generate_ui_token()} if nav_dict.get(_NODE_RECORD_ID) is not None: edit_data[_NODE_RECORD_ID] = nav_dict[_NODE_RECORD_ID] if nav_dict.get(_NODE_PREFILLED_JSON) is not None: edit_data[_NODE_PREFILLED_JSON] = nav_dict[_NODE_PREFILLED_JSON] state['edit_data'] = json.dumps(edit_data) elif nav_dict[_NODE_SCREEN] == _REMOVE: state['is_remove_visible'] = True state['remove_record_id'] = nav_dict[_NODE_RECORD_ID] elif nav_dict[_NODE_SCREEN] == _DOWNLOAD: state['is_download_visible'] = True download_dict = {'token': generate_ui_token()} if nav_dict.get(_NODE_RECORD_ID) is not None: download_dict[_NODE_RECORD_ID] = nav_dict[_NODE_RECORD_ID] if nav_dict.get(_NODE_GROUP) is not None: download_dict[_NODE_GROUP] = nav_dict[_NODE_GROUP] if nav_dict.get('filter_state') is not None: download_dict['filter_state'] = nav_dict['filter_state'] state['download_info'] = json.dumps(download_dict) elif nav_dict[_NODE_SCREEN] == _IMPORT_EXPORT: state['is_import_export_visible'] = True state['filter_state'] = nav_dict['filter_state'] elif nav_dict[_NODE_SCREEN] == _DEBUG: state['is_debug_visible'] = True elif nav_dict[_NODE_SCREEN] == _RECORD_INFO: state['details_record_info_id'] = nav_dict[_NODE_RECORD_INFO_ID] state['is_home_visible'] = True return state def get_download_record_id(data): download_dict = json.loads(data) if download_dict.get(_NODE_RECORD_ID) is None: return None else: return download_dict[_NODE_RECORD_ID] def get_download_group(data): download_dict = json.loads(data) if download_dict.get(_NODE_GROUP) is None: return None else: return download_dict[_NODE_GROUP] def get_download_filter_state(data): download_dict = json.loads(data) if download_dict.get('filter_state') is None: return None else: return download_dict['filter_state'] def generate_ui_token() -> str: characters = string.ascii_letters + string.digits return ''.join(random.choice(characters) for _ in range(6))