Spaces:
Runtime error
Runtime error
a-v-bely
commited on
Commit
·
6cf0970
1
Parent(s):
9c14039
Update app
Browse files
pages/2_👨🏫_Начало_работы.py
CHANGED
|
@@ -232,7 +232,7 @@ if st.session_state.get('-LOGGED_IN_BOOL-'):
|
|
| 232 |
save_type='download',
|
| 233 |
save_name=USER__SAVE_IN_CLOUD_FILE_NAME,
|
| 234 |
cefr_level=CEFR_TEXT_LEVEL,
|
| 235 |
-
|
| 236 |
creator_name=st.session_state.get('-USER_NAME-'),
|
| 237 |
generated_result=__TASK_DATA__,
|
| 238 |
distractor_model=DISTRACTOR_MODEL)
|
|
|
|
| 232 |
save_type='download',
|
| 233 |
save_name=USER__SAVE_IN_CLOUD_FILE_NAME,
|
| 234 |
cefr_level=CEFR_TEXT_LEVEL,
|
| 235 |
+
timestamp=str(datetime.datetime.now())[:-7],
|
| 236 |
creator_name=st.session_state.get('-USER_NAME-'),
|
| 237 |
generated_result=__TASK_DATA__,
|
| 238 |
distractor_model=DISTRACTOR_MODEL)
|
pages/4_📝_Онлайн-тест (эксперимент).py
CHANGED
|
@@ -54,7 +54,7 @@ if st.session_state.get('-ONLINE_TEST_READY-') and st.session_state.get('-LOGGED
|
|
| 54 |
save_type='online_test',
|
| 55 |
save_name=st.session_state['-UPLOAD_CLOUD_FILE_NAME-'],
|
| 56 |
cefr_level=st.session_state['-LOADED_CEFR_LEVEL-'],
|
| 57 |
-
|
| 58 |
creator_name=st.session_state.get('-USER_NAME-'),
|
| 59 |
test_taker_name=st.session_state.get('-USER_NAME-'),
|
| 60 |
test_taker_answers=RETURN_TEST_DATA,
|
|
|
|
| 54 |
save_type='online_test',
|
| 55 |
save_name=st.session_state['-UPLOAD_CLOUD_FILE_NAME-'],
|
| 56 |
cefr_level=st.session_state['-LOADED_CEFR_LEVEL-'],
|
| 57 |
+
timestamp=str(datetime.datetime.now())[:-7],
|
| 58 |
creator_name=st.session_state.get('-USER_NAME-'),
|
| 59 |
test_taker_name=st.session_state.get('-USER_NAME-'),
|
| 60 |
test_taker_answers=RETURN_TEST_DATA,
|
utilities_database/user_database_utils.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
import re
|
|
|
|
| 2 |
import secrets
|
| 3 |
-
import requests
|
| 4 |
import pandas as pd
|
| 5 |
import streamlit as st
|
| 6 |
from trycourier import Courier
|
|
@@ -14,27 +14,20 @@ def check_usr_pass(user_log_in_database, user_name: str, password: str) -> bool:
|
|
| 14 |
"""
|
| 15 |
Authenticates the user_name and password.
|
| 16 |
"""
|
| 17 |
-
registered_user = user_log_in_database.
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
return False
|
| 23 |
-
except VerifyMismatchError:
|
| 24 |
-
pass
|
| 25 |
-
except IndexError:
|
| 26 |
-
pass
|
| 27 |
-
return False
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
def load_lottie_url(url: str) -> str or None:
|
| 31 |
-
"""
|
| 32 |
-
Fetches the lottie animation using the URL.
|
| 33 |
-
"""
|
| 34 |
-
r = requests.get(url)
|
| 35 |
-
if r.status_code != 200:
|
| 36 |
-
return None
|
| 37 |
-
return r.json()
|
| 38 |
|
| 39 |
|
| 40 |
def check_valid_name(name_sign_up: str) -> bool:
|
|
@@ -51,20 +44,21 @@ def check_valid_name(name_sign_up: str) -> bool:
|
|
| 51 |
|
| 52 |
def check_valid_email(email_sign_up: str) -> bool:
|
| 53 |
"""
|
| 54 |
-
Checks if the user entered a valid
|
| 55 |
"""
|
| 56 |
regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+')
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
return
|
|
|
|
| 61 |
|
| 62 |
|
| 63 |
def check_unique_email(user_log_in_database, email_sign_up: str) -> bool:
|
| 64 |
"""
|
| 65 |
-
Checks if the
|
| 66 |
"""
|
| 67 |
-
authorized_users_data = user_log_in_database.
|
| 68 |
if len(authorized_users_data) == 0:
|
| 69 |
return True
|
| 70 |
return False
|
|
@@ -90,11 +84,9 @@ def check_unique_usr(user_log_in_database, user_name_sign_up: str):
|
|
| 90 |
Checks if the user_name already exists (since user_name needs to be unique),
|
| 91 |
also checks for non-empty user_name.
|
| 92 |
"""
|
| 93 |
-
authorized_users_data = user_log_in_database.
|
| 94 |
if len(authorized_users_data) != 0:
|
| 95 |
return False
|
| 96 |
-
if user_name_sign_up in authorized_users_data:
|
| 97 |
-
return False
|
| 98 |
non_empty_check = non_empty_str_check(user_name_sign_up)
|
| 99 |
if not non_empty_check:
|
| 100 |
return None
|
|
@@ -102,24 +94,25 @@ def check_unique_usr(user_log_in_database, user_name_sign_up: str):
|
|
| 102 |
|
| 103 |
|
| 104 |
def register_new_usr(user_log_in_database, name_sign_up: str, email_sign_up: str, user_name_sign_up: str,
|
| 105 |
-
password_sign_up: str, professional_level: str) -> None:
|
| 106 |
"""
|
| 107 |
Saves the information of the new user in the _secret_auth.json file.
|
| 108 |
"""
|
| 109 |
new_usr_data = {'user_name': user_name_sign_up,
|
| 110 |
'name': name_sign_up,
|
| 111 |
-
'
|
| 112 |
'password': ph.hash(password_sign_up),
|
| 113 |
-
'professional_level': professional_level
|
|
|
|
| 114 |
|
| 115 |
-
return user_log_in_database.
|
| 116 |
|
| 117 |
|
| 118 |
def check_user_name_exists(user_log_in_database, user_name: str) -> bool:
|
| 119 |
"""
|
| 120 |
Checks if the user_name exists in the _secret_auth.json file.
|
| 121 |
"""
|
| 122 |
-
authorized_users_data = user_log_in_database.
|
| 123 |
if len(authorized_users_data) == 1:
|
| 124 |
return True
|
| 125 |
return False
|
|
@@ -127,9 +120,9 @@ def check_user_name_exists(user_log_in_database, user_name: str) -> bool:
|
|
| 127 |
|
| 128 |
def check_email_exists(user_log_in_database, email_forgot_passwd: str):
|
| 129 |
"""
|
| 130 |
-
Checks if the
|
| 131 |
"""
|
| 132 |
-
authorized_users_data = user_log_in_database.
|
| 133 |
if len(authorized_users_data) == 1:
|
| 134 |
return True, authorized_users_data[0]['user_name']
|
| 135 |
return False, None
|
|
@@ -137,7 +130,7 @@ def check_email_exists(user_log_in_database, email_forgot_passwd: str):
|
|
| 137 |
|
| 138 |
def generate_random_passwd() -> str:
|
| 139 |
"""
|
| 140 |
-
Generates a random password to be sent in
|
| 141 |
"""
|
| 142 |
password_length = 10
|
| 143 |
return secrets.token_urlsafe(password_length)
|
|
@@ -146,7 +139,7 @@ def generate_random_passwd() -> str:
|
|
| 146 |
def send_passwd_in_email(auth_token: str, user_name_forgot_passwd: str, email_forgot_passwd: str, company_name: str,
|
| 147 |
random_password: str) -> None:
|
| 148 |
"""
|
| 149 |
-
Triggers an
|
| 150 |
"""
|
| 151 |
client = Courier(auth_token=auth_token)
|
| 152 |
|
|
@@ -171,9 +164,8 @@ def change_passwd(user_log_in_database, email_forgot_passwd: str, random_passwor
|
|
| 171 |
"""
|
| 172 |
Replaces the old password with the newly generated password.
|
| 173 |
"""
|
| 174 |
-
user_key = user_log_in_database.fetch({'e-mail': email_forgot_passwd}).items[0]['key']
|
| 175 |
updates = {'password': ph.hash(random_password)}
|
| 176 |
-
return user_log_in_database.update(updates,
|
| 177 |
|
| 178 |
|
| 179 |
def check_current_passwd(user_log_in_database, email_reset_passwd: str, current_passwd: str = None) -> bool:
|
|
@@ -181,7 +173,7 @@ def check_current_passwd(user_log_in_database, email_reset_passwd: str, current_
|
|
| 181 |
Authenticates the password entered against the user_name when
|
| 182 |
resetting the password.
|
| 183 |
"""
|
| 184 |
-
authorized_user_data = user_log_in_database.
|
| 185 |
if current_passwd is None:
|
| 186 |
current_passwd = 'b'
|
| 187 |
try:
|
|
@@ -192,18 +184,23 @@ def check_current_passwd(user_log_in_database, email_reset_passwd: str, current_
|
|
| 192 |
return False
|
| 193 |
|
| 194 |
|
| 195 |
-
def save_data_in_database(user_task_database, save_type, save_name, cefr_level,
|
| 196 |
generated_result=None, test_taker_name=None, test_taker_answers=None, test_taker_result=None,
|
| 197 |
-
comments=None, distractor_model=None):
|
| 198 |
-
|
| 199 |
-
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
| 205 |
-
|
| 206 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 207 |
if save_name == '' and save_type == 'download':
|
| 208 |
save_name = generated_result['name']
|
| 209 |
if len(already_saved_names) != 0 and save_type == 'download':
|
|
@@ -219,7 +216,7 @@ def save_data_in_database(user_task_database, save_type, save_name, cefr_level,
|
|
| 219 |
'save_type': save_type,
|
| 220 |
'save_name': save_name,
|
| 221 |
'cefr_level': cefr_level,
|
| 222 |
-
'
|
| 223 |
'creator_name': creator_name,
|
| 224 |
'generated_result': generated_result,
|
| 225 |
'distractor_model': distractor_model
|
|
@@ -229,55 +226,45 @@ def save_data_in_database(user_task_database, save_type, save_name, cefr_level,
|
|
| 229 |
'save_type': save_type,
|
| 230 |
'save_name': save_name,
|
| 231 |
'cefr_level': cefr_level,
|
| 232 |
-
'
|
| 233 |
'creator_name': creator_name,
|
| 234 |
'test_taker_name': test_taker_name,
|
| 235 |
'test_taker_answers': test_taker_answers,
|
| 236 |
'generated_result': generated_result,
|
| 237 |
'test_taker_result': test_taker_result,
|
| 238 |
'comments': comments}
|
| 239 |
-
user_task_database.
|
| 240 |
if save_type == 'download':
|
| 241 |
-
|
|
|
|
| 242 |
elif save_type == 'online_test':
|
| 243 |
return st.success('Ответы успешно сохранены!')
|
| 244 |
|
| 245 |
|
| 246 |
def load_user_tasks_data(user_task_database, save_type, creator_name=None, test_taker_name=None):
|
| 247 |
if save_type == 'download':
|
| 248 |
-
|
| 249 |
-
|
| 250 |
-
|
| 251 |
-
|
| 252 |
-
|
| 253 |
-
user_data = user_task_database.fetch({'creator_name': creator_name, 'save_type': save_type}, last=_last)
|
| 254 |
-
_last = user_data.last
|
| 255 |
-
names = [item['save_name'] for item in ITEMS]
|
| 256 |
-
cefr_level = [item['cefr_level'] for item in ITEMS]
|
| 257 |
-
time_stamps = [item['time_stamp'] for item in ITEMS]
|
| 258 |
-
return_data = pd.DataFrame([names, cefr_level, time_stamps]).transpose()
|
| 259 |
return_data.columns = ['Название', 'Уровень', 'Время создания']
|
| 260 |
else:
|
| 261 |
-
|
| 262 |
-
|
| 263 |
-
|
| 264 |
-
|
| 265 |
-
|
| 266 |
-
|
| 267 |
-
|
| 268 |
-
names = [item['save_name'] for item in ITEMS]
|
| 269 |
-
cefr_level = [item['cefr_level'] for item in ITEMS]
|
| 270 |
-
time_stamps = [item['time_stamp'] for item in ITEMS]
|
| 271 |
-
creator_name = [item['creator_name'] for item in ITEMS]
|
| 272 |
-
test_taker_result = [item['test_taker_result'] for item in ITEMS]
|
| 273 |
-
return_data = pd.DataFrame([names, cefr_level, test_taker_result, time_stamps, creator_name]).transpose()
|
| 274 |
return_data.columns = ['Название', 'Уровень', 'Оценка', 'Дата прохождения', 'Автор заданий']
|
| 275 |
return return_data
|
| 276 |
|
| 277 |
|
| 278 |
def load_users_particular_task(user_task_database, load_mode, creator_name, save_name, cefr_level,):
|
| 279 |
-
return_data = user_task_database.
|
| 280 |
-
|
| 281 |
-
|
| 282 |
-
|
|
|
|
| 283 |
return return_data
|
|
|
|
| 1 |
import re
|
| 2 |
+
import json
|
| 3 |
import secrets
|
|
|
|
| 4 |
import pandas as pd
|
| 5 |
import streamlit as st
|
| 6 |
from trycourier import Courier
|
|
|
|
| 14 |
"""
|
| 15 |
Authenticates the user_name and password.
|
| 16 |
"""
|
| 17 |
+
registered_user = user_log_in_database.select('*').eq('user_name', user_name).execute()
|
| 18 |
+
if not registered_user.data:
|
| 19 |
+
return False
|
| 20 |
+
else:
|
| 21 |
+
try:
|
| 22 |
+
passwd_verification_bool = ph.verify(registered_user.data[0]['password'], password)
|
| 23 |
+
if passwd_verification_bool:
|
| 24 |
+
return True
|
| 25 |
+
return False
|
| 26 |
+
except VerifyMismatchError:
|
| 27 |
+
pass
|
| 28 |
+
except IndexError:
|
| 29 |
+
pass
|
| 30 |
return False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
|
| 32 |
|
| 33 |
def check_valid_name(name_sign_up: str) -> bool:
|
|
|
|
| 44 |
|
| 45 |
def check_valid_email(email_sign_up: str) -> bool:
|
| 46 |
"""
|
| 47 |
+
Checks if the user entered a valid email while creating the account.
|
| 48 |
"""
|
| 49 |
regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Z|a-z]{2,})+')
|
| 50 |
+
return True
|
| 51 |
+
|
| 52 |
+
# if re.fullmatch(regex, email_sign_up):
|
| 53 |
+
# return True
|
| 54 |
+
# return False
|
| 55 |
|
| 56 |
|
| 57 |
def check_unique_email(user_log_in_database, email_sign_up: str) -> bool:
|
| 58 |
"""
|
| 59 |
+
Checks if the email already exists (since email needs to be unique).
|
| 60 |
"""
|
| 61 |
+
authorized_users_data = user_log_in_database.select('*').eq('email', email_sign_up).execute().data
|
| 62 |
if len(authorized_users_data) == 0:
|
| 63 |
return True
|
| 64 |
return False
|
|
|
|
| 84 |
Checks if the user_name already exists (since user_name needs to be unique),
|
| 85 |
also checks for non-empty user_name.
|
| 86 |
"""
|
| 87 |
+
authorized_users_data = user_log_in_database.select('*').eq('user_name', user_name_sign_up).execute().data
|
| 88 |
if len(authorized_users_data) != 0:
|
| 89 |
return False
|
|
|
|
|
|
|
| 90 |
non_empty_check = non_empty_str_check(user_name_sign_up)
|
| 91 |
if not non_empty_check:
|
| 92 |
return None
|
|
|
|
| 94 |
|
| 95 |
|
| 96 |
def register_new_usr(user_log_in_database, name_sign_up: str, email_sign_up: str, user_name_sign_up: str,
|
| 97 |
+
password_sign_up: str, professional_level: str, timestamp: str) -> None:
|
| 98 |
"""
|
| 99 |
Saves the information of the new user in the _secret_auth.json file.
|
| 100 |
"""
|
| 101 |
new_usr_data = {'user_name': user_name_sign_up,
|
| 102 |
'name': name_sign_up,
|
| 103 |
+
'email': email_sign_up,
|
| 104 |
'password': ph.hash(password_sign_up),
|
| 105 |
+
'professional_level': professional_level,
|
| 106 |
+
'created_at': timestamp}
|
| 107 |
|
| 108 |
+
return user_log_in_database.insert(new_usr_data).execute()
|
| 109 |
|
| 110 |
|
| 111 |
def check_user_name_exists(user_log_in_database, user_name: str) -> bool:
|
| 112 |
"""
|
| 113 |
Checks if the user_name exists in the _secret_auth.json file.
|
| 114 |
"""
|
| 115 |
+
authorized_users_data = user_log_in_database.select('*').eq('user_name', user_name).execute().data
|
| 116 |
if len(authorized_users_data) == 1:
|
| 117 |
return True
|
| 118 |
return False
|
|
|
|
| 120 |
|
| 121 |
def check_email_exists(user_log_in_database, email_forgot_passwd: str):
|
| 122 |
"""
|
| 123 |
+
Checks if the email entered is present in the _secret_auth.json file.
|
| 124 |
"""
|
| 125 |
+
authorized_users_data = user_log_in_database.select('*').eq('email', email_forgot_passwd).execute().data
|
| 126 |
if len(authorized_users_data) == 1:
|
| 127 |
return True, authorized_users_data[0]['user_name']
|
| 128 |
return False, None
|
|
|
|
| 130 |
|
| 131 |
def generate_random_passwd() -> str:
|
| 132 |
"""
|
| 133 |
+
Generates a random password to be sent in email.
|
| 134 |
"""
|
| 135 |
password_length = 10
|
| 136 |
return secrets.token_urlsafe(password_length)
|
|
|
|
| 139 |
def send_passwd_in_email(auth_token: str, user_name_forgot_passwd: str, email_forgot_passwd: str, company_name: str,
|
| 140 |
random_password: str) -> None:
|
| 141 |
"""
|
| 142 |
+
Triggers an email to the user containing the randomly generated password.
|
| 143 |
"""
|
| 144 |
client = Courier(auth_token=auth_token)
|
| 145 |
|
|
|
|
| 164 |
"""
|
| 165 |
Replaces the old password with the newly generated password.
|
| 166 |
"""
|
|
|
|
| 167 |
updates = {'password': ph.hash(random_password)}
|
| 168 |
+
return user_log_in_database.update(updates).eq('email', email_forgot_passwd).execute()
|
| 169 |
|
| 170 |
|
| 171 |
def check_current_passwd(user_log_in_database, email_reset_passwd: str, current_passwd: str = None) -> bool:
|
|
|
|
| 173 |
Authenticates the password entered against the user_name when
|
| 174 |
resetting the password.
|
| 175 |
"""
|
| 176 |
+
authorized_user_data = user_log_in_database.select('*').eq('email', email_reset_passwd).execute().data[0]
|
| 177 |
if current_passwd is None:
|
| 178 |
current_passwd = 'b'
|
| 179 |
try:
|
|
|
|
| 184 |
return False
|
| 185 |
|
| 186 |
|
| 187 |
+
def save_data_in_database(user_task_database, save_type, save_name, cefr_level, created_at, creator_name=None,
|
| 188 |
generated_result=None, test_taker_name=None, test_taker_answers=None, test_taker_result=None,
|
| 189 |
+
comments=None, distractor_model=None, allow=False):
|
| 190 |
+
already_saved = user_task_database.select('*').execute().data
|
| 191 |
+
already_saved_names = [task for task in already_saved
|
| 192 |
+
if (task['creator_name']==creator_name
|
| 193 |
+
& task['save_name']==save_name
|
| 194 |
+
& task['cefr_level']==cefr_level)]
|
| 195 |
+
already_saved_tasks = [task for task in already_saved
|
| 196 |
+
if (task['creator_name']==creator_name
|
| 197 |
+
& task['generated_result']==generated_result
|
| 198 |
+
& task['cefr_level']==cefr_level)]
|
| 199 |
+
already_saved_tests = [task for task in already_saved
|
| 200 |
+
if (task['test_taker_name']==test_taker_name
|
| 201 |
+
& task['save_name']==save_name
|
| 202 |
+
& task['cefr_level']==cefr_level)]
|
| 203 |
+
|
| 204 |
if save_name == '' and save_type == 'download':
|
| 205 |
save_name = generated_result['name']
|
| 206 |
if len(already_saved_names) != 0 and save_type == 'download':
|
|
|
|
| 216 |
'save_type': save_type,
|
| 217 |
'save_name': save_name,
|
| 218 |
'cefr_level': cefr_level,
|
| 219 |
+
'created_at': created_at,
|
| 220 |
'creator_name': creator_name,
|
| 221 |
'generated_result': generated_result,
|
| 222 |
'distractor_model': distractor_model
|
|
|
|
| 226 |
'save_type': save_type,
|
| 227 |
'save_name': save_name,
|
| 228 |
'cefr_level': cefr_level,
|
| 229 |
+
'created_at': created_at,
|
| 230 |
'creator_name': creator_name,
|
| 231 |
'test_taker_name': test_taker_name,
|
| 232 |
'test_taker_answers': test_taker_answers,
|
| 233 |
'generated_result': generated_result,
|
| 234 |
'test_taker_result': test_taker_result,
|
| 235 |
'comments': comments}
|
| 236 |
+
user_task_database.insert(new_save_data).execute()
|
| 237 |
if save_type == 'download':
|
| 238 |
+
if allow:
|
| 239 |
+
return st.success('Задания успешно сохранены! Можете переходить на следующие вкладки')
|
| 240 |
elif save_type == 'online_test':
|
| 241 |
return st.success('Ответы успешно сохранены!')
|
| 242 |
|
| 243 |
|
| 244 |
def load_user_tasks_data(user_task_database, save_type, creator_name=None, test_taker_name=None):
|
| 245 |
if save_type == 'download':
|
| 246 |
+
user_data = user_task_database.select('*').eq('creator_name', creator_name).eq('save_type', save_type).execute().data
|
| 247 |
+
names = [item['save_name'] for item in user_data]
|
| 248 |
+
cefr_level = [item['cefr_level'] for item in user_data]
|
| 249 |
+
created_ats = [item['created_at'] for item in user_data]
|
| 250 |
+
return_data = pd.DataFrame([names, cefr_level, created_ats]).transpose()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 251 |
return_data.columns = ['Название', 'Уровень', 'Время создания']
|
| 252 |
else:
|
| 253 |
+
user_data = user_task_database.select('*').eq('test_taker_name', test_taker_name).eq('save_type', save_type).execute().data
|
| 254 |
+
names = [item['save_name'] for item in user_data]
|
| 255 |
+
cefr_level = [item['cefr_level'] for item in user_data]
|
| 256 |
+
created_ats = [item['created_at'] for item in user_data]
|
| 257 |
+
creator_name = [item['creator_name'] for item in user_data]
|
| 258 |
+
test_taker_result = [item['test_taker_result'] for item in user_data]
|
| 259 |
+
return_data = pd.DataFrame([names, cefr_level, test_taker_result, created_ats, creator_name]).transpose()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 260 |
return_data.columns = ['Название', 'Уровень', 'Оценка', 'Дата прохождения', 'Автор заданий']
|
| 261 |
return return_data
|
| 262 |
|
| 263 |
|
| 264 |
def load_users_particular_task(user_task_database, load_mode, creator_name, save_name, cefr_level,):
|
| 265 |
+
return_data = user_task_database.select('*').eq('creator_name', creator_name)\
|
| 266 |
+
.eq('save_name', save_name)\
|
| 267 |
+
.eq('save_type', load_mode)\
|
| 268 |
+
.eq('cefr_level',cefr_level).execute().data[0]['generated_result']
|
| 269 |
+
return_data = json.loads(return_data.replace("'", '"'), strict=False)
|
| 270 |
return return_data
|
utilities_database/user_database_widgets.py
CHANGED
|
@@ -1,17 +1,17 @@
|
|
| 1 |
-
from deta import Deta
|
| 2 |
import streamlit as st
|
|
|
|
|
|
|
| 3 |
from utilities_option_menu.option_menu import option_menu
|
| 4 |
import utilities_database.user_database_utils as db_utils
|
| 5 |
from utilities_database.user_database_utils import check_usr_pass
|
| 6 |
from utilities_cookies.encrypted_cookie_manager import EncryptedCookieManager
|
| 7 |
|
| 8 |
-
|
| 9 |
-
|
| 10 |
-
DETA_USER_TABLE = st.secrets['DETA_USER_SAVE_TEXT_TABLE']
|
| 11 |
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
user_save_text_table =
|
| 15 |
st.set_page_config(page_title='GenLexTasksEnter', layout="wide", page_icon=':es:')
|
| 16 |
|
| 17 |
login_call = 'Зарегистрироваться'
|
|
@@ -91,7 +91,7 @@ class LogIn:
|
|
| 91 |
login_submit_button = st.form_submit_button(label='Войти')
|
| 92 |
|
| 93 |
if login_submit_button:
|
| 94 |
-
authenticate_user_check = check_usr_pass(user_log_in_database=
|
| 95 |
user_name=user_name,
|
| 96 |
password=password)
|
| 97 |
|
|
@@ -119,18 +119,18 @@ class LogIn:
|
|
| 119 |
email_sign_up = st.text_input("E-mail *",
|
| 120 |
placeholder='Введите Ваш e-mail')
|
| 121 |
valid_email_check = db_utils.check_valid_email(email_sign_up)
|
| 122 |
-
unique_email_check = db_utils.check_unique_email(user_log_in_database=
|
| 123 |
email_sign_up=email_sign_up)
|
| 124 |
|
| 125 |
user_name_sign_up = st.text_input("Имя пользователя *",
|
| 126 |
-
placeholder='Введите имя пользователя')
|
| 127 |
-
unique_user_name_check = db_utils.check_unique_usr(user_log_in_database=
|
| 128 |
user_name_sign_up=user_name_sign_up)
|
| 129 |
|
| 130 |
password_sign_up = st.text_input("Пароль *",
|
| 131 |
placeholder='Введите пароль',
|
| 132 |
type='password')
|
| 133 |
-
professional_level = st.radio('Вы являетесь преподавателем
|
| 134 |
options=['Да', 'Нет'],
|
| 135 |
index=1,
|
| 136 |
horizontal=True)
|
|
@@ -156,12 +156,13 @@ class LogIn:
|
|
| 156 |
|
| 157 |
if valid_name_check:
|
| 158 |
if valid_email_check and unique_email_check and unique_user_name_check:
|
| 159 |
-
db_utils.register_new_usr(user_log_in_database=
|
| 160 |
name_sign_up=name_sign_up,
|
| 161 |
email_sign_up=email_sign_up,
|
| 162 |
user_name_sign_up=user_name_sign_up,
|
| 163 |
password_sign_up=password_sign_up,
|
| 164 |
-
professional_level=professional_level
|
|
|
|
| 165 |
st.success("Регистрация прошла успешно!")
|
| 166 |
|
| 167 |
def forgot_password(self) -> None:
|
|
@@ -171,13 +172,13 @@ class LogIn:
|
|
| 171 |
"""
|
| 172 |
with st.form("Forgot Password Form"):
|
| 173 |
email_forgot_passwd = st.text_input("Email", placeholder='Введите Ваш email')
|
|
|
|
|
|
|
|
|
|
| 174 |
|
| 175 |
forgot_passwd_submit_button = st.form_submit_button(label='Получить пароль')
|
| 176 |
|
| 177 |
if forgot_passwd_submit_button:
|
| 178 |
-
email_exists_check, user_name_forgot_passwd = db_utils.check_email_exists(
|
| 179 |
-
user_log_in_database=db,
|
| 180 |
-
email_forgot_passwd=email_forgot_passwd)
|
| 181 |
if not email_exists_check:
|
| 182 |
st.error("Пользователя с таким e-mail не существует!")
|
| 183 |
|
|
@@ -185,7 +186,7 @@ class LogIn:
|
|
| 185 |
random_password = db_utils.generate_random_passwd()
|
| 186 |
db_utils.send_passwd_in_email(self.auth_token, user_name_forgot_passwd, email_forgot_passwd,
|
| 187 |
self.company_name, random_password)
|
| 188 |
-
db_utils.change_passwd(user_log_in_database=
|
| 189 |
email_forgot_passwd=email_forgot_passwd,
|
| 190 |
random_password=random_password)
|
| 191 |
st.success("Временный пароль выслан Вам на почту!")
|
|
@@ -206,16 +207,16 @@ class LogIn:
|
|
| 206 |
new_passwd = st.text_input("Новый пароль", placeholder='Введите новый пароль',
|
| 207 |
type='password')
|
| 208 |
|
| 209 |
-
new_passwd_1 = st.text_input("Повторите новый пароль", placeholder='
|
| 210 |
type='password')
|
| 211 |
|
| 212 |
reset_passwd_submit_button = st.form_submit_button(label='Изменить пароль')
|
| 213 |
|
| 214 |
if reset_passwd_submit_button:
|
| 215 |
email_exists_check, user_name_reset_passwd = db_utils.check_email_exists(
|
| 216 |
-
user_log_in_database=
|
| 217 |
email_forgot_passwd=email_reset_passwd)
|
| 218 |
-
current_passwd_check = db_utils.check_current_passwd(user_log_in_database=
|
| 219 |
email_reset_passwd=email_reset_passwd,
|
| 220 |
current_passwd=current_passwd)
|
| 221 |
if not email_exists_check:
|
|
@@ -228,7 +229,7 @@ class LogIn:
|
|
| 228 |
st.error("Пароли не совпадают!")
|
| 229 |
|
| 230 |
if email_exists_check and current_passwd_check:
|
| 231 |
-
db_utils.change_passwd(user_log_in_database=
|
| 232 |
email_forgot_passwd=email_reset_passwd,
|
| 233 |
random_password=new_passwd)
|
| 234 |
st.success("Пароль успешно изменен!")
|
|
|
|
|
|
|
| 1 |
import streamlit as st
|
| 2 |
+
from datetime import datetime
|
| 3 |
+
from supabase import create_client, Client
|
| 4 |
from utilities_option_menu.option_menu import option_menu
|
| 5 |
import utilities_database.user_database_utils as db_utils
|
| 6 |
from utilities_database.user_database_utils import check_usr_pass
|
| 7 |
from utilities_cookies.encrypted_cookie_manager import EncryptedCookieManager
|
| 8 |
|
| 9 |
+
DB_URL = st.secrets['SUPABASE_URL']
|
| 10 |
+
DB_KEY = st.secrets['SUPABASE_KEY']
|
|
|
|
| 11 |
|
| 12 |
+
Client = create_client(DB_URL, DB_KEY)
|
| 13 |
+
user_login_table = Client.table('UserLogIn')
|
| 14 |
+
user_save_text_table = Client.table('TaskData')
|
| 15 |
st.set_page_config(page_title='GenLexTasksEnter', layout="wide", page_icon=':es:')
|
| 16 |
|
| 17 |
login_call = 'Зарегистрироваться'
|
|
|
|
| 91 |
login_submit_button = st.form_submit_button(label='Войти')
|
| 92 |
|
| 93 |
if login_submit_button:
|
| 94 |
+
authenticate_user_check = check_usr_pass(user_log_in_database=user_login_table,
|
| 95 |
user_name=user_name,
|
| 96 |
password=password)
|
| 97 |
|
|
|
|
| 119 |
email_sign_up = st.text_input("E-mail *",
|
| 120 |
placeholder='Введите Ваш e-mail')
|
| 121 |
valid_email_check = db_utils.check_valid_email(email_sign_up)
|
| 122 |
+
unique_email_check = db_utils.check_unique_email(user_log_in_database=user_login_table,
|
| 123 |
email_sign_up=email_sign_up)
|
| 124 |
|
| 125 |
user_name_sign_up = st.text_input("Имя пользователя *",
|
| 126 |
+
placeholder='Введите имя пользователя (латинские буквы и символы)')
|
| 127 |
+
unique_user_name_check = db_utils.check_unique_usr(user_log_in_database=user_login_table,
|
| 128 |
user_name_sign_up=user_name_sign_up)
|
| 129 |
|
| 130 |
password_sign_up = st.text_input("Пароль *",
|
| 131 |
placeholder='Введите пароль',
|
| 132 |
type='password')
|
| 133 |
+
professional_level = st.radio('Вы являетесь преподавателем испанского языка? *',
|
| 134 |
options=['Да', 'Нет'],
|
| 135 |
index=1,
|
| 136 |
horizontal=True)
|
|
|
|
| 156 |
|
| 157 |
if valid_name_check:
|
| 158 |
if valid_email_check and unique_email_check and unique_user_name_check:
|
| 159 |
+
db_utils.register_new_usr(user_log_in_database=user_login_table,
|
| 160 |
name_sign_up=name_sign_up,
|
| 161 |
email_sign_up=email_sign_up,
|
| 162 |
user_name_sign_up=user_name_sign_up,
|
| 163 |
password_sign_up=password_sign_up,
|
| 164 |
+
professional_level=professional_level,
|
| 165 |
+
timestamp=str(datetime.now())[:-7])
|
| 166 |
st.success("Регистрация прошла успешно!")
|
| 167 |
|
| 168 |
def forgot_password(self) -> None:
|
|
|
|
| 172 |
"""
|
| 173 |
with st.form("Forgot Password Form"):
|
| 174 |
email_forgot_passwd = st.text_input("Email", placeholder='Введите Ваш email')
|
| 175 |
+
email_exists_check, user_name_forgot_passwd = db_utils.check_email_exists(
|
| 176 |
+
user_log_in_database=user_login_table,
|
| 177 |
+
email_forgot_passwd=email_forgot_passwd)
|
| 178 |
|
| 179 |
forgot_passwd_submit_button = st.form_submit_button(label='Получить пароль')
|
| 180 |
|
| 181 |
if forgot_passwd_submit_button:
|
|
|
|
|
|
|
|
|
|
| 182 |
if not email_exists_check:
|
| 183 |
st.error("Пользователя с таким e-mail не существует!")
|
| 184 |
|
|
|
|
| 186 |
random_password = db_utils.generate_random_passwd()
|
| 187 |
db_utils.send_passwd_in_email(self.auth_token, user_name_forgot_passwd, email_forgot_passwd,
|
| 188 |
self.company_name, random_password)
|
| 189 |
+
db_utils.change_passwd(user_log_in_database=user_login_table,
|
| 190 |
email_forgot_passwd=email_forgot_passwd,
|
| 191 |
random_password=random_password)
|
| 192 |
st.success("Временный пароль выслан Вам на почту!")
|
|
|
|
| 207 |
new_passwd = st.text_input("Новый пароль", placeholder='Введите новый пароль',
|
| 208 |
type='password')
|
| 209 |
|
| 210 |
+
new_passwd_1 = st.text_input("Повторите новый пароль", placeholder='Повторите пароль',
|
| 211 |
type='password')
|
| 212 |
|
| 213 |
reset_passwd_submit_button = st.form_submit_button(label='Изменить пароль')
|
| 214 |
|
| 215 |
if reset_passwd_submit_button:
|
| 216 |
email_exists_check, user_name_reset_passwd = db_utils.check_email_exists(
|
| 217 |
+
user_log_in_database=user_login_table,
|
| 218 |
email_forgot_passwd=email_reset_passwd)
|
| 219 |
+
current_passwd_check = db_utils.check_current_passwd(user_log_in_database=user_login_table,
|
| 220 |
email_reset_passwd=email_reset_passwd,
|
| 221 |
current_passwd=current_passwd)
|
| 222 |
if not email_exists_check:
|
|
|
|
| 229 |
st.error("Пароли не совпадают!")
|
| 230 |
|
| 231 |
if email_exists_check and current_passwd_check:
|
| 232 |
+
db_utils.change_passwd(user_log_in_database=user_login_table,
|
| 233 |
email_forgot_passwd=email_reset_passwd,
|
| 234 |
random_password=new_passwd)
|
| 235 |
st.success("Пароль успешно изменен!")
|