BarBar288 commited on
Commit
fd6811c
·
verified ·
1 Parent(s): 43631a1

Update app.py

Browse files

//LOG_ 111524
Fixing stuff
//endlog
/commut

Files changed (1) hide show
  1. app.py +119 -1
app.py CHANGED
@@ -1,6 +1,35 @@
1
  import streamlit as st
2
  import random
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  class WheelOfNames:
5
  def __init__(self, names):
6
  self.names = names
@@ -47,11 +76,15 @@ class WheelOfNames:
47
  random.shuffle(names_copy)
48
 
49
  groups = []
50
- while names_copy:
51
  group = names_copy[:group_size]
52
  groups.append(group)
53
  names_copy = names_copy[group_size:]
54
 
 
 
 
 
55
  # Join groups into a single string
56
  groups_text = "\n".join(f"Group {i}: {', '.join(group)}" for i, group in enumerate(groups, 1))
57
  st.session_state.groups_text = groups_text
@@ -78,6 +111,91 @@ class WheelOfNames:
78
  st.session_state.name_list_text = "\n".join(self.names)
79
  st.session_state.result_label = ""
80
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
81
  def main():
82
  st.title("Wheel of Names")
83
 
 
1
  import streamlit as st
2
  import random
3
 
4
+ class WheelOfNames:
5
+ def __init__(self, names):
6
+ self.names = names
7
+
8
+ def add_name(self, name):
9
+ if name.strip():
10
+ self.names.append(name.strip())
11
+ st.session_state.name_list_text = "\n".join(self.names)
12
+
13
+ def upload_file(self):
14
+ uploaded_file = st.file_uploader("Upload a text file containing names", type=["txt"])
15
+ if uploaded_file:
16
+ self.names.extend([line.decode().strip() for line in uploaded_file])
17
+ st.session_state.name_list_text = "\n".join(self.names)
18
+
19
+ def save_file(self):
20
+ if self.names:
21
+ return "\n".join(self.names)
22
+ return None
23
+
24
+ def clear_names(self):
25
+ self.names = []
26
+ st.session_state.name_list_text = ""
27
+ st.session_state.groups_text = ""
28
+ st.session_state.result_label = ""
29
+
30
+ import streamlit as st
31
+ import random
32
+
33
  class WheelOfNames:
34
  def __init__(self, names):
35
  self.names = names
 
76
  random.shuffle(names_copy)
77
 
78
  groups = []
79
+ while len(names_copy) >= group_size:
80
  group = names_copy[:group_size]
81
  groups.append(group)
82
  names_copy = names_copy[group_size:]
83
 
84
+ # If there are remaining names, add them as a group
85
+ if names_copy:
86
+ groups.append(names_copy)
87
+
88
  # Join groups into a single string
89
  groups_text = "\n".join(f"Group {i}: {', '.join(group)}" for i, group in enumerate(groups, 1))
90
  st.session_state.groups_text = groups_text
 
111
  st.session_state.name_list_text = "\n".join(self.names)
112
  st.session_state.result_label = ""
113
 
114
+ def main():
115
+ st.title("Wheel of Names")
116
+
117
+ if 'names' not in st.session_state:
118
+ st.session_state.names = []
119
+ if 'name_list_text' not in st.session_state:
120
+ st.session_state.name_list_text = ""
121
+ if 'groups_text' not in st.session_state:
122
+ st.session_state.groups_text = ""
123
+ if'result_label' not in st.session_state:
124
+ st.session_state.result_label = ""
125
+ if 'group_size_var' not in st.session_state:
126
+ st.session_state.group_size_var = "2"
127
+ if'remove_used_names' not in st.session_state:
128
+ st.session_state.remove_used_names = False
129
+
130
+ wheel = WheelOfNames(st.session_state.names)
131
+
132
+ with st.sidebar:
133
+ st.subheader("Names")
134
+ name_entry = st.text_input("Enter a name")
135
+ if st.button("Add Name"):
136
+ wheel.add_name(name_entry)
137
+ st.session_state.names = wheel.names
138
+
139
+ wheel.upload_file()
140
+
141
+ if st.button("Save Names to File"):
142
+ names_data = wheel.save_file()
143
+ if names_data:
144
+ st.download_button(
145
+ label="Download Names",
146
+ data=names_data,
147
+ file_name="names.txt",
148
+ mime="text/plain"
149
+ )
150
+ else:
151
+ st.error("No names to save.")
152
+
153
+ if st.button("Clear Names"):
154
+ wheel.clear_names()
155
+ st.session_state.names = wheel.names
156
+
157
+ st.subheader("Names List")
158
+ st.text_area("Names List", value=st.session_state.name_list_text, height=110)
159
+
160
+ st.subheader("Group Size")
161
+ group_size_var = st.number_input("Enter group size", min_value=1, value=int(st.session_state.group_size_var))
162
+ st.session_state.group_size_var = str(group_size_var)
163
+
164
+ st.subheader("Sorting Options")
165
+ remove_used_names = st.checkbox("Remove Used Names After Sorting", value=st.session_state.remove_used_names)
166
+ st.session_state.remove_used_names = remove_used_names
167
+
168
+ if st.button("Sort into Groups"):
169
+ wheel.sort_into_groups()
170
+
171
+ st.subheader("Groups")
172
+ st.text_area("Groups List", value=st.session_state.groups_text, height=150)
173
+
174
+ st.subheader("Spin the Wheel")
175
+ if st.button("Spin"):
176
+ wheel.spin_wheel()
177
+
178
+ st.subheader("Result")
179
+ st.markdown(f"<h1 style='text-align: center;'>{st.session_state.result_label}</h1>", unsafe_allow_html=True)
180
+
181
+ if __name__ == "__main__":
182
+ main()
183
+
184
+ def spin_wheel(self):
185
+ if not self.names:
186
+ st.error("Please add or upload names first")
187
+ return
188
+
189
+ winning_name = random.choice(self.names)
190
+ st.session_state.result_label = winning_name
191
+
192
+ # Ask user if they want to remove the name
193
+ remove_name = st.button("Remove Selected Name", key="remove_name_button")
194
+ if remove_name:
195
+ self.names.remove(winning_name)
196
+ st.session_state.name_list_text = "\n".join(self.names)
197
+ st.session_state.result_label = ""
198
+
199
  def main():
200
  st.title("Wheel of Names")
201