1
1
import streamlit as st
2
2
import re
3
- from src .common import page_setup , save_params
3
+ from src .common import page_setup , save_params , v_space
4
4
5
5
fixed_mod_cysteine = ['No modification' ,
6
6
'Carbamidomethyl (+57)' ,
@@ -24,14 +24,29 @@ def validateSequenceInput(input_seq):
24
24
pattern = re .compile ("^[ac-ik-wyAC-IK-WY]+$" ) # only alphabet except for BJXZ
25
25
if not pattern .match (seq ):
26
26
return False
27
-
28
27
return True
29
28
30
29
30
+ def emptySequenceInput ():
31
+ for key in ['input_sequence' , 'fixed_mod_cysteine' , 'fixed_mod_methionine' ]:
32
+ if key in st .session_state :
33
+ del st .session_state [key ]
34
+ st .session_state ['reset_sequence_input' ] = True
35
+
36
+
31
37
# page initialization
32
38
params = page_setup ()
33
39
34
- st .title ("Proteoform Sequence Input" )
40
+ # for resetting the form (cannot be done after form is instantiated)
41
+ if 'reset_sequence_input' not in st .session_state :
42
+ st .session_state ['reset_sequence_input' ] = False
43
+
44
+ # title and reset buttons
45
+ c1 , c2 = st .columns ([8 , 1 ])
46
+ c1 .title ("Proteoform Sequence Input" )
47
+ v_space (1 , c2 )
48
+ if c2 .button ('Reset' ):
49
+ emptySequenceInput ()
35
50
36
51
# if any sequence was submitted before
37
52
if 'input_sequence' in st .session_state and st .session_state .input_sequence \
@@ -45,6 +60,13 @@ def validateSequenceInput(input_seq):
45
60
and 'selected_fixed_mod_methionine' not in st .session_state :
46
61
st .session_state ['selected_fixed_mod_methionine' ] = st .session_state .fixed_mod_methionine
47
62
63
+ # clean up the entries of form, if needed
64
+ if st .session_state ['reset_sequence_input' ]:
65
+ st .session_state ['sequence_text' ] = ''
66
+ st .session_state ['selected_fixed_mod_cysteine' ] = 'No modification'
67
+ st .session_state ['selected_fixed_mod_methionine' ] = 'No modification'
68
+ st .session_state ['reset_sequence_input' ] = False
69
+
48
70
with st .form ('sequence_input' ):
49
71
# sequence
50
72
st .text_area ('Proteoform sequence' , key = 'sequence_text' )
@@ -55,11 +77,16 @@ def validateSequenceInput(input_seq):
55
77
key = 'selected_fixed_mod_cysteine' , placeholder = 'No modification' )
56
78
c2 .selectbox ('Fixed modification: Methionine' , fixed_mod_methionine ,
57
79
key = 'selected_fixed_mod_methionine' , placeholder = 'No modification' )
58
- _ , c2 = st .columns ([9 , 1 ])
80
+ _ , c2 = st .columns ([8 , 1 ])
59
81
submitted = c2 .form_submit_button ("Save" )
60
82
if submitted :
61
- if 'sequence_text' in st .session_state and validateSequenceInput (st .session_state ['sequence_text' ]):
62
- st .success ('Proteoform sequence is submitted' )
83
+ if 'input_sequence' in st .session_state : # initialize
84
+ del st .session_state ['input_sequence' ]
85
+ if st .session_state ['sequence_text' ] == '' :
86
+ emptySequenceInput ()
87
+ st .rerun ()
88
+ elif validateSequenceInput (st .session_state ['sequence_text' ]):
89
+ st .success ('Proteoform sequence is submitted: ' + st .session_state ['sequence_text' ])
63
90
# save information for sequence view
64
91
st .session_state ['input_sequence' ] = '' .join (st .session_state ['sequence_text' ].split ()).upper ()
65
92
@@ -70,7 +97,6 @@ def validateSequenceInput(input_seq):
70
97
if 'selected_fixed_mod_methionine' in st .session_state \
71
98
and st .session_state ['selected_fixed_mod_methionine' ] != 'No modification' :
72
99
st .session_state ['fixed_mod_methionine' ] = st .session_state .selected_fixed_mod_methionine
73
- del st .session_state ['sequence_text' ]
74
100
else :
75
101
st .error ('Error: sequence input is not valid' )
76
102
0 commit comments