File size: 5,556 Bytes
0e82287 67b56c1 0e82287 1108709 0e82287 b24c605 1108709 67b56c1 b24c605 0e82287 b24c605 67b56c1 b24c605 67b56c1 b24c605 67b56c1 b24c605 1108709 67b56c1 0e82287 b24c605 0e82287 67b56c1 0e82287 1108709 0e82287 67b56c1 0e82287 1108709 0e82287 67b56c1 0e82287 1108709 0e82287 1108709 0e82287 67b56c1 0e82287 67b56c1 0e82287 8662493 b24c605 1108709 67b56c1 0e82287 |
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 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 |
import streamlit as st
from postly.clients.postly_client import PostlyClient
# Initialize the PostlyClient in Streamlit's session state
if "client" not in st.session_state:
st.session_state.client = PostlyClient()
client = st.session_state.client
# Initialize user session state
if "logged_in" not in st.session_state:
st.session_state.logged_in = False
if "current_user" not in st.session_state:
st.session_state.current_user = None
def register():
st.title("Register")
user_name = st.text_input("Enter user name")
password = st.text_input("Enter password", type="password")
if st.button("Register"):
if user_name and password:
try:
client.add_user(user_name, password)
st.session_state.logged_in = True
st.session_state.current_user = user_name
st.success(f"User '{user_name}' registered and logged in successfully.")
st.rerun()
except ValueError as e:
st.error(f"Error: {e}")
else:
st.error("Please enter both user name and password.")
def login():
st.title("Login")
user_name = st.text_input("Enter user name")
password = st.text_input("Enter password", type="password")
if st.button("Login"):
if client.authenticate_user(user_name, password):
st.session_state.logged_in = True
st.session_state.current_user = user_name
st.success(f"User '{user_name}' logged in successfully.")
st.rerun()
else:
st.error("Invalid user name or password.")
def logout():
st.session_state.logged_in = False
st.session_state.current_user = None
st.success("Logged out successfully.")
st.rerun()
def delete_own_user():
st.title("Delete Account")
if st.button("Delete Account"):
try:
client.delete_user(st.session_state.current_user)
st.success(f"User '{st.session_state.current_user}' deleted successfully.")
logout()
except KeyError as e:
st.error(f"Error: {e}")
def add_post():
st.title("Add Post")
post_text = st.text_area("Enter post text")
if st.button("Add Post"):
try:
client.add_post(st.session_state.current_user, post_text)
st.success("Post added successfully.")
except Exception as e:
st.error(f"Error: {e}")
def get_posts_for_user():
st.title("Get Posts for User")
users = client.get_users()
user_name = st.selectbox("Select user name", users)
if st.button("Get Posts"):
try:
posts = client.get_posts_for_user(user_name)
st.write(f"Posts for user '{user_name}':")
for post in posts:
st.write(post)
except KeyError as e:
st.error(f"Error: {e}")
def get_posts_for_topic():
st.title("Get Posts for Topic")
topics = client.get_topics()
topic = st.selectbox("Enter topic", topics)
if st.button("Get Posts"):
posts = client.get_posts_for_topic(topic)
st.write(f"Posts for topic '{topic}':")
for post in posts:
st.write(post)
def get_trending_topics():
st.title("Get Trending Topics")
current_timestamp = client.get_current_timestamp()
from_timestamp = st.number_input("Enter from timestamp", min_value=0, step=1)
to_timestamp = st.number_input(
"Enter to timestamp", min_value=0, max_value=current_timestamp, step=1, value=current_timestamp
)
if st.button("Get Trending Topics"):
try:
topics = client.get_trending_topics(int(from_timestamp), int(to_timestamp))
st.write("Trending topics:")
for topic in topics:
st.write(topic)
except ValueError as e:
st.error(f"Error: {e}")
def get_all_posts():
st.title("All Posts")
posts = client.get_posts()
all_posts = []
for user_name, user_posts in posts.items():
for post in user_posts:
all_posts.append((user_name, post))
sorted_posts = sorted(all_posts, key=lambda x: x[1].timestamp)
for user_name, post in sorted_posts:
st.markdown(f"**{user_name}**")
st.markdown(f"{post.content}")
st.markdown("---")
def main():
st.sidebar.title("Postly\nSimple social media platform")
if st.session_state.logged_in:
st.sidebar.write(f"Logged in as: {st.session_state.current_user}")
if st.sidebar.button("Logout"):
logout()
page = st.sidebar.selectbox(
"Choose an action",
[
"Add Post",
"Delete Account",
"Get Posts for User",
"Get Posts for Topic",
"Get Trending Topics",
"View All Posts",
],
index=5,
)
if page == "Add Post":
add_post()
elif page == "Delete Account":
delete_own_user()
elif page == "Get Posts for User":
get_posts_for_user()
elif page == "Get Posts for Topic":
get_posts_for_topic()
elif page == "Get Trending Topics":
get_trending_topics()
elif page == "View All Posts":
get_all_posts()
else:
page = st.sidebar.selectbox("Choose an action", ["Login", "Register"], index=0)
if page == "Login":
login()
elif page == "Register":
register()
if __name__ == "__main__":
main()
|