pyceo/ceo/tui/positions/GetPositionsView.py

68 lines
1.7 KiB
Python

from asciimatics.widgets import Layout, Text, Button
from zope import component
from ...utils import http_get
from ..CeoFrame import CeoFrame
from ceo_common.interfaces import IConfig
position_names = {
'president': "President",
'vice-president': "Vice President",
'treasurer': "Treasurer",
'secretary': "Secretary",
'sysadmin': "Sysadmin",
'cro': "Chief Returning Officer",
'librarian': "Librarian",
'imapd': "IMAPD",
'webmaster': "Web Master",
'offsck': "Office Manager",
}
class GetPositionsView(CeoFrame):
def __init__(self, screen, width, height, model, readonly=True):
super().__init__(
screen, height, width, model,
'GetPositions',
on_load = self._on_load)
layout = Layout([100], fill_frame=True)
self.add_layout(layout)
cfg = component.getUtility(IConfig)
avail = cfg.get('positions_available')
required = cfg.get('positions_required')
self._positions = []
for pos in avail:
widget = Text(
f"{'*' if pos in required else ' '}{position_names.get(pos, pos)}:",
pos,
readonly=readonly,
)
self._positions.append(widget)
layout.add_widget(widget)
self.add_flash_message_layout()
self._add_buttons()
self.fix()
def _add_buttons(self):
self.add_buttons(
next_btn_text="Change",
next_scene='SetPositions',
back_btn=True,
)
def _on_load(self):
res = http_get('/api/positions')
if res.status_code != 200:
return
positions = res.json()
for pos in self._positions:
pos.value = positions.get(pos.name)