File size: 3,952 Bytes
0e82287
1108709
0e82287
 
 
1108709
0e82287
 
 
 
1108709
0e82287
 
 
 
 
 
 
1108709
0e82287
 
 
 
 
 
 
 
 
 
 
 
1108709
0e82287
 
1108709
 
0e82287
 
 
 
 
 
 
1108709
0e82287
 
1108709
 
0e82287
 
 
 
 
 
 
 
 
1108709
0e82287
 
1108709
 
0e82287
 
 
 
 
 
1108709
0e82287
 
1108709
0e82287
1108709
 
 
0e82287
 
 
 
 
 
 
 
1108709
 
0e82287
 
 
 
 
 
 
 
 
 
 
 
 
 
1108709
0e82287
8662493
1108709
 
 
 
 
 
 
 
 
 
 
 
 
0e82287
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1108709
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
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


def add_user():
    st.title("Add User")
    user_name = st.text_input("Enter user name")
    if st.button("Add User"):
        client.add_user(user_name)
        st.success(f"User '{user_name}' added successfully.")


def add_post():
    st.title("Add Post")
    users = client.get_users()
    user_name = st.selectbox("Select user name", users)
    post_text = st.text_area("Enter post text")
    if st.button("Add Post"):
        try:
            client.add_post(user_name, post_text)
            st.success("Post added successfully.")
        except Exception as e:
            st.error(f"Error: {e}")


def delete_user():
    st.title("Delete User")
    users = client.get_users()
    user_name = st.selectbox("Select user name", users)
    if st.button("Delete User"):
        try:
            client.delete_user(user_name)
            st.success(f"User '{user_name}' deleted successfully.")
        except KeyError 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}")
        st.rerun()


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")
    page = st.sidebar.selectbox(
        "Choose an action",
        [
            "Add User",
            "Add Post",
            "Delete User",
            "Get Posts for User",
            "Get Posts for Topic",
            "Get Trending Topics",
            "View All Posts",
        ],
        index=6,
    )

    if page == "Add User":
        add_user()
    elif page == "Add Post":
        add_post()
    elif page == "Delete User":
        delete_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()


if __name__ == "__main__":
    main()