-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdependencies-deta_space.py
140 lines (110 loc) · 4.04 KB
/
dependencies-deta_space.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
import streamlit as st
import streamlit_authenticator as stauth
from deta import Deta
import datetime
import re
import os
from dotenv import load_dotenv
load_dotenv()
deta = Deta(os.getenv("DETA_KEY"))
# Deta Base
db = deta.Base("streamlit-auth")
drive = deta.Drive("streamlit-drive")
response = drive.get_url("codebasics_faqs.csv")
print("Files", response)
# AUTHENTICATION
def insert_user(email, username, password):
date_joined = str(datetime.datetime.now())
return db.put(
{
"key": email,
"username": username,
"password": password,
"date_joined": date_joined,
"projects": {},
}
)
def fetch_users():
users = db.fetch()
return users.items
def get_user_emails():
users = db.fetch()
emails = []
for user in users.items:
emails.append(user["key"])
return emails
def get_usernames():
users = db.fetch()
usernames = []
for user in users.items:
usernames.append(user["key"])
return usernames
def validate_email(email):
pattern = "^[a-zA-Z0-9-_]+@[a-zA-Z0-9]+.[a-z]{1,3}$" # tesQQ12@gmail.com
if re.match(pattern, email):
return True
return False
def validate_username(username):
pattern = "^[a-zA-Z0-9]*$"
if re.match(pattern, username):
return True
return False
def sign_up():
with st.form(key="#", clear_on_submit=True):
st.subheader(":green[#]")
email = st.text_input(":blue[Email]", placeholder="Enter Your Email")
username = st.text_input(":blue[Username]", placeholder="Enter Your Username")
password1 = st.text_input(
":blue[Password]", placeholder="Enter Your Password", type="password"
)
password2 = st.text_input(
":blue[Confirm Password]",
placeholder="Confirm Your Password",
type="password",
)
if email:
if validate_email(email):
if email not in get_user_emails():
if validate_username(username):
if username not in get_usernames():
if len(username) >= 2:
if len(password1) >= 6:
if password1 == password2:
# Add User to DB
hashed_password = stauth.Hasher(
[password2]
).generate()
insert_user(email, username, hashed_password[0])
st.success("Account created successfully!!")
st.balloons()
else:
st.warning("Passwords Do Not Match")
else:
st.warning("Password is too Short")
else:
st.warning("Username Too short")
else:
st.warning("Username Already Exists")
else:
st.warning("Invalid Username")
else:
st.warning("Email Already exists!!")
else:
st.warning("Invalid Email")
btn1, btn2, btn3, btn4, btn5 = st.columns(5)
with btn3:
st.form_submit_button("#")
# PROJECTS
def get_projects(email):
projects_db = db.get(email)["projects"]
projects = list(projects_db.keys())
return projects
def insert_project(email, project_name, project_description):
prev_projects = db.get(email)["projects"]
new_project = {project_name: {"project_desc": project_description, "files": {}}}
new_project.update(prev_projects)
return db.update({"projects": new_project}, email)
def get_files(email, project_name):
files_db = db.get(email)["projects"][project_name]["files"]
files = list(files_db.keys())
return files_db