DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
daqconf
python
daqconf
cider
widgets
popups
edit_cell_screen.py
Go to the documentation of this file.
1
from
os
import
environ
2
3
from
textual.screen
import
ModalScreen
4
from
textual.app
import
ComposeResult
5
from
textual.widgets
import
Input, Label
6
from
textual.containers
import
Container
7
8
from
typing
import
Any
9
10
from
daqconf.cider.widgets.configuration_controller
import
ConfigurationController
11
12
class
EditCellScreen
(ModalScreen):
13
css_file_path = f
"{environ.get('DAQCONF_SHARE')}/config/textual_dbe/textual_css"
14
15
CSS_PATH = f
"{css_file_path}/edit_cell_layout.tcss"
16
17
def
__init__
(
18
self, event: Any, name: str |
None
=
None
, id: str |
None
=
None
, classes: str |
None
=
None
) ->
None
:
19
super().
__init__
(name=name, id=id, classes=classes)
20
"""Screen which pops up when a cell is clicked in the ConfigTable
21
"""
22
23
# Need to get the main screen configuration
24
main_screen = self.app.get_screen(
"main"
)
25
self.
_data_table
= main_screen.query_one(
"DataTable"
)
26
self.
_config_table
= main_screen.query_one(
"ConfigTable"
)
27
# self._config_table = main_screen.query_one("ConfigTable")
28
29
# Get necessary info from table
30
self.
_row_key
= event.row_key
31
self.
_current_row
= self.
_data_table
.get_row(event.row_key)
32
self.
_controller
= main_screen.query_one(ConfigurationController)
33
34
def
compose
(self) -> ComposeResult:
35
with
Container(id=
"edit_cell"
):
36
yield
Label(f
"Enter new value for {self._current_row[0]}"
)
37
yield
Input()
38
39
def
on_mount
(self) -> None:
40
"""Finds the cell that was clicked and populates the input field
41
"""
42
cell_input = self.query_one(Input)
43
# Harcoded...
44
cell_input.value = str(self.
_current_row
[1])
45
cell_input.focus()
46
47
def
on_input_submitted
(self, event: Input.Submitted) ->
None
:
48
"""Applies update to the configuration object
49
50
Arguments:
51
event -- Information from table row
52
"""
53
attr_name = self.
_current_row
[0]
54
update_value = event.value
55
attr_type = self.
_current_row
[2]
56
is_multivalue = self.
_current_row
[3]
57
58
# Need to properly cast to list
59
if
is_multivalue:
60
update_value=self.
process_multivalue_input
(update_value, attr_type)
61
else
:
62
update_value = self.
cast_to_type_by_str
(update_value, attr_type)
63
64
self.
_controller
.update_configuration(attr_name, update_value)
65
self.
_config_table
.update_table(self.
_controller
.current_dal)
66
67
self.app.pop_screen()
68
69
70
@classmethod
71
def
cast_to_type_by_str
(cls, input_variable: str, data_type: str):
72
"""Attempt to enforce type-checking/convertion on input variable based on type-name in table. Will not work for non-built-in types
73
"""
74
try
:
75
return
getattr(__builtins__, data_type)(input_variable)
76
except
:
77
return
input_variable
78
79
@classmethod
80
def
process_multivalue_input
(cls, input_value: str, data_type: str):
81
"""Processing required to ensure multi-variate objects are correctly placed in the table
82
83
"""
84
# Strip brackets
85
input_value = input_value.replace(
"["
,
""
)
86
input_value = input_value.replace(
"]"
,
""
)
87
# Strip space
88
input_value = input_value.replace(
" "
,
""
)
89
input_value = [cls.
cast_to_type_by_str
(i, data_type)
for
i
in
input_value.split(
","
)]
90
91
return
input_value
edit_cell_screen.EditCellScreen
Definition
edit_cell_screen.py:12
edit_cell_screen.EditCellScreen.on_input_submitted
None on_input_submitted(self, Input.Submitted event)
Definition
edit_cell_screen.py:47
edit_cell_screen.EditCellScreen.process_multivalue_input
process_multivalue_input(cls, str input_value, str data_type)
Definition
edit_cell_screen.py:80
edit_cell_screen.EditCellScreen._row_key
_row_key
Definition
edit_cell_screen.py:30
edit_cell_screen.EditCellScreen._controller
_controller
Definition
edit_cell_screen.py:32
edit_cell_screen.EditCellScreen._current_row
_current_row
Definition
edit_cell_screen.py:31
edit_cell_screen.EditCellScreen.__init__
None __init__(self, Any event, str|None name=None, str|None id=None, str|None classes=None)
Definition
edit_cell_screen.py:18
edit_cell_screen.EditCellScreen.cast_to_type_by_str
cast_to_type_by_str(cls, str input_variable, str data_type)
Definition
edit_cell_screen.py:71
edit_cell_screen.EditCellScreen._config_table
_config_table
Definition
edit_cell_screen.py:26
edit_cell_screen.EditCellScreen.on_mount
None on_mount(self)
Definition
edit_cell_screen.py:39
edit_cell_screen.EditCellScreen.compose
ComposeResult compose(self)
Definition
edit_cell_screen.py:34
edit_cell_screen.EditCellScreen._data_table
_data_table
Definition
edit_cell_screen.py:25
Generated on
for DUNE-DAQ by
1.17.0