163 lines
4.5 KiB
Python
163 lines
4.5 KiB
Python
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))
|