-
Notifications
You must be signed in to change notification settings - Fork 0
/
cli2.py
165 lines (150 loc) · 6.15 KB
/
cli2.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
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
import cmd
import requests
class SocialNetworkCLI(cmd.Cmd):
prompt = "(social-network) "
api_url = "http://localhost:5000" # Change if your API is hosted elsewhere
current_user = None
def do_exit(self, arg):
"""Exit the application."""
return True
def do_create_user(self, username):
"""Create a new user. Usage: create_user [username]"""
if not username:
print("Username is required.")
return
response = requests.post(f"{self.api_url}/register", json={"username": username})
if response.status_code == 201:
self.current_user = response.json()["user_id"]
print(f"User '{username}' created and logged in as user ID {self.current_user}.")
else:
print(f"Error: {response.json().get('error')}")
def do_list_users(self, arg):
"""List all users. Usage: list_users"""
response = requests.get(f"{self.api_url}/users")
if response.status_code == 200:
for user in response.json()["users"]:
print(f"User ID {user['id']}: {user['username']}")
else:
print("Error fetching users.")
def do_switch_user(self, user_id):
"""Switch to another user. Usage: switch_user [user_id]"""
try:
user_id = int(user_id)
except ValueError:
print("Invalid user ID.")
return
response = requests.get(f"{self.api_url}/users")
if user_id in [user["id"] for user in response.json()["users"]]:
self.current_user = user_id
print(f"Switched to user ID {self.current_user}.")
else:
print("User not found.")
def do_tweet(self, content):
"""Post a new tweet. Usage: tweet [content]"""
if not self.current_user:
print("Please switch to a user first.")
return
if not content:
print("Content is required.")
return
response = requests.post(
f"{self.api_url}/tweet", json={"user_id": self.current_user, "content": content}
)
if response.status_code == 201:
print("Tweet posted.")
else:
print(f"Error: {response.json().get('error')}")
def do_follow(self, followee_id):
"""Follow a user. Usage: follow [user_id]"""
if not self.current_user:
print("Please switch to a user first.")
return
try:
followee_id = int(followee_id)
except ValueError:
print("Invalid user ID.")
return
response = requests.post(
f"{self.api_url}/follow",
json={"follower_id": self.current_user, "followee_id": followee_id},
)
if response.status_code == 200:
print(f"Followed user ID {followee_id}.")
else:
print(f"Error: {response.json().get('error')}")
def do_unfollow(self, followee_id):
"""Unfollow a user. Usage: unfollow [user_id]"""
if not self.current_user:
print("Please switch to a user first.")
return
try:
followee_id = int(followee_id)
except ValueError:
print("Invalid user ID.")
return
response = requests.post(
f"{self.api_url}/unfollow",
json={"follower_id": self.current_user, "followee_id": followee_id},
)
if response.status_code == 200:
print(f"Unfollowed user ID {followee_id}.")
else:
print(f"Error: {response.json().get('error')}")
def do_followers(self, arg):
"""List followers of the current user. Usage: followers"""
if not self.current_user:
print("Please switch to a user first.")
return
response = requests.get(f"{self.api_url}/followers", params={"user_id": self.current_user})
if response.status_code == 200:
for user in response.json()["followers"]:
print(f"User ID {user['id']}: {user['username']}")
else:
print("Error fetching followers.")
def do_following(self, arg):
"""List users the current user is following. Usage: following"""
if not self.current_user:
print("Please switch to a user first.")
return
response = requests.get(f"{self.api_url}/following", params={"user_id": self.current_user})
if response.status_code == 200:
for user in response.json()["following"]:
print(f"User ID {user['id']}: {user['username']}")
else:
print("Error fetching following.")
def do_feed(self, arg):
"""View the user's feed. Usage: feed [page] [per_page]"""
if not self.current_user:
print("Please switch to a user first.")
return
args = arg.split()
page = int(args[0]) if args and args[0].isdigit() else 1
per_page = int(args[1]) if len(args) > 1 and args[1].isdigit() else 10
response = requests.get(
f"{self.api_url}/feed",
params={"user_id": self.current_user, "page": page, "per_page": per_page},
)
if response.status_code == 200:
for tweet in response.json()["tweets"]:
print(f"{tweet['id']}: {tweet['content']} (by user {tweet['user_id']})")
else:
print("Error fetching feed.")
def do_explore(self, arg):
"""View the latest tweets from all users. Usage: explore [page] [per_page]"""
args = arg.split()
page = int(args[0]) if args and args[0].isdigit() else 1
per_page = int(args[1]) if len(args) > 1 and args[1].isdigit() else 10
response = requests.get(
f"{self.api_url}/explore", params={"page": page, "per_page": per_page}
)
if response.status_code == 200:
tweets = response.json()["tweets"]
if not tweets:
print("No tweets found.")
else:
for tweet in tweets:
print(f"{tweet['id']}: {tweet['content']} (by user {tweet['user_id']})")
else:
print("Error fetching explore.")
if __name__ == "__main__":
SocialNetworkCLI().cmdloop()