def do_create_user(self, arg): """ Command: create_user {UserID} {Name} {Birthday}(optional) Description: Create a new username """ parameters = arg.split() if len(parameters) < 2 or len(parameters) > 3: print_error_param_num() return condition = "UserID=\"{}\"".format( parameters[0] ) result = self.check_record_exist("Users", condition) if len(result) == 0: if len(parameters) == 2: values = "\"{}\",\"{}\",NULL".format( parameters[0], parameters[1] ) elif len(parameters) == 3: values = "\"{}\",\"{}\",\"{}\"".format( parameters[0], parameters[1], parameters[2] ) self.insert_record("Users", "", values) print_record_create_success("Username") elif len(result) == 1: print_record_already_exist("Username") else: print_error_duplicate_record_found()
def do_exit(self, arg): """ Command: exit Description: Exit the command line interface """ if len(arg) != 0: print_error_param_num() return return True
def do_read_user(self, arg): """ Command: read_user {UserID} {Type}(all/unread) Description: Read all unread posts by a followed user (cannot read yourself) """ if self.login_status == False: print_error_not_login() return parameters = arg.split() if len(parameters) != 2: print_error_param_num() return if parameters[0] == self.user_id: print_error_read_oneself() return if not (parameters[1] == READ_TYPE_ALL or parameters[1] == READ_TYPE_UNREAD): print_error_invalid_read_type() return condition = "UserID=\"{}\"".format( parameters[0] ) result = self.check_record_exist("Users", condition) if len(result) == 0: print_error_record_not_found("User") elif len(result) == 1: condition = "UserID=\"{}\" and FollowUserID=\"{}\"".format( self.user_id, parameters[0] ) result = self.check_record_exist("UserFollowsUser", condition) if len(result) == 0: print_error_not_following(parameters[0]) elif len(result) == 1: last_read_post_id = result[0][2] if last_read_post_id is None: last_read_post_id = -1 result = self.query_post_by_user(parameters[0], last_read_post_id, parameters[1]) if len(result) == 0: print_already_read_all_user(parameters[0]) else: print_post(result) condition = "UserID=\"{}\" and FollowUserID=\"{}\"".format( self.user_id, parameters[0] ) self.update_record("UserFollowsUser", "LastReadPost", result[0][0], condition) else: print_error_duplicate_record_found() else: print_error_duplicate_record_found()
def do_show_group(self, arg): """ Command: show_group Description: Show all groups """ if len(arg) != 0: print_error_param_num() return cursor = self.connection.cursor() query = "select * from UserGroups" cursor.execute(query) print("\nHeader:\n('GroupID', 'Name', 'CreatedBy')\nData:") print_cursor(cursor) cursor.close()
def do_show_topic(self, arg): """ Command: show_topic Description: Show all topics """ if len(arg) != 0: print_error_param_num() return cursor = self.connection.cursor() query = "select * from Topics" cursor.execute(query) print("\nHeader:\n('TopicID')\nData:") print_cursor(cursor) cursor.close()
def do_logout(self, arg): """ Command: logout Description: Logout from current user """ if len(arg) != 0: print_error_param_num() return if self.login_status == False: print_error_not_login() return self.user_id = "" self.login_status = False print_logout_success()
def do_show_user(self, arg): """ Command: show_user Description: List out all usernames """ if len(arg) != 0: print_error_param_num() return cursor = self.connection.cursor() query = "select * from Users" cursor.execute(query) print("\nHeader:\n('UserID', 'Name', 'Birthday')\nData:") print_cursor(cursor) cursor.close()
def do_create_group(self, arg): """ Command: create_group {Name} Description: Create a group """ if self.login_status == False: print_error_not_login() return parameters = arg.split() if len(parameters) != 1: print_error_param_num() return values = "\"{}\",\"{}\"".format( parameters[0], self.user_id ) group_id = self.insert_record("UserGroups", "(Name,CreatedBy)", values) print_record_create_success_with_id("Group", group_id)
def do_show_follow_topic(self, arg): """ Command: show_follow_topic Description: Show all topics you are following """ if len(arg) != 0: print_error_param_num() return if self.login_status == False: print_error_not_login() return cursor = self.connection.cursor() query = "select * from UserFollowsTopic where UserID = \"{}\"".format( self.user_id ) cursor.execute(query) print("\nlist of topic id you are currently following:\n") print_cursor(cursor, 1) cursor.close()
def do_follow_user(self, arg): """ Command: follow_user {UserID} Description: Follow a user (cannot follow yourself) """ if self.login_status == False: print_error_not_login() return parameters = arg.split() if len(parameters) != 1: print_error_param_num() return if parameters[0] == self.user_id: print_error_follow_oneself() return condition = "UserID=\"{}\"".format( parameters[0] ) result = self.check_record_exist("Users", condition) if len(result) == 0: print_error_record_not_found("User") elif len(result) == 1: user_name = result[0][1] condition = "UserID=\"{}\" and FollowUserID=\"{}\"".format( self.user_id, parameters[0] ) result = self.check_record_exist("UserFollowsUser", condition) if len(result) == 0: values = "\"{}\",\"{}\",NULL".format( self.user_id, parameters[0] ) self.insert_record("UserFollowsUser", "", values) print_follow_success("user", user_name) elif len(result) == 1: print_error_already_followed(user_name) else: print_error_duplicate_record_found() else: print_error_duplicate_record_found()
def do_login(self, arg): """ Command: login {UserID} Description: Login with a username """ parameters = arg.split() if len(parameters) != 1: print_error_param_num() return condition = "UserID=\"{}\"".format( parameters[0] ) result = self.check_record_exist("Users", condition) if len(result) == 0: print_error_record_not_found("Username") elif len(result) == 1: self.login_status = True self.user_id = result[0][0] print_login_success(result[0][1]) else: print_error_duplicate_record_found()
def do_init_post(self, arg): """ Command: init_post {Title} {TopicID},{TopicID} {Content} Description: Initial a post. Note {TopicID} need to be at least one """ if self.login_status == False: print_error_not_login() return parameters = arg.split(' ',2) if len(parameters) < 3: print_error_param_num() return topics = set(parameters[1].split(',')) topic_exists = True for _topic in topics: condition = "TopicID=\"{}\"".format( _topic ) result = self.check_record_exist("Topics", condition) if len(result) == 0: topic_exists = False break if not topic_exists: print_error_record_not_found("One of the topics is") else: values = "\"{}\",\"{}\",\"{}\",\"{}\"".format( parameters[0], POST_TYPE_INITIAL, parameters[2], self.user_id ) post_id = self.insert_record("Posts", "(Name,Type,Content,CreatedBy)", values) for _topic in topics: values = "\"{}\",\"{}\"".format( post_id, _topic ) self.insert_record("PostUnderTopic", "", values) print_record_create_success_with_id("Post", post_id)
def do_unfollow_user(self, arg): """ Command: unfollow_user {UserID} Description: Unfollow a user """ if self.login_status == False: print_error_not_login() return parameters = arg.split() if len(parameters) != 1: print_error_param_num() return condition = "UserID=\"{}\"".format( parameters[0] ) result = self.check_record_exist("Users", condition) if len(result) == 0: print_error_record_not_found("User") elif len(result) == 1: user_name = result[0][1] condition = "UserID=\"{}\" and FollowUserID=\"{}\"".format( self.user_id, parameters[0] ) result = self.check_record_exist("UserFollowsUser", condition) if len(result) == 0: print_error_not_following(parameters[0]) elif len(result) == 1: condition = "UserID=\"{}\" and FollowUserID=\"{}\"".format( self.user_id, parameters[0] ) self.remove_record("UserFollowsUser", condition) print_unfollow_success("user", user_name) else: print_error_duplicate_record_found() else: print_error_duplicate_record_found()
def do_leave_group(self, arg): """ Command: leave_group {GroupID} Description: Leave a group """ if self.login_status == False: print_error_not_login() return parameters = arg.split() if len(parameters) != 1: print_error_param_num() return condition = "GroupID=\"{}\"".format( parameters[0] ) result = self.check_record_exist("UserGroups", condition) if len(result) == 0: print_error_record_not_found("Group") elif len(result) == 1: group_name = result[0][1] condition = "UserID=\"{}\" and GroupID=\"{}\"".format( self.user_id, parameters[0] ) result = self.check_record_exist("UserJoinGroup", condition) if len(result) == 0: print_error_not_in_group() elif len(result) == 1: condition = "UserID=\"{}\" and GroupID=\"{}\"".format( self.user_id, parameters[0] ) self.remove_record("UserJoinGroup", condition) print_leave_group_success(group_name) else: print_error_duplicate_record_found() else: print_error_duplicate_record_found()
def do_create_topic(self, arg): """ Command: create_topic {TopicID} Description: Create a topic. Note that: {TopicID} will eliminate comma. """ parameters = arg.split() if len(parameters) != 1: print_error_param_num() return condition = "TopicID=\"{}\"".format( parameters[0] ) result = self.check_record_exist("Topics", condition) if len(result) == 0: values = "\"{}\"".format( parameters[0].replace(',','') ) self.insert_record("Topics", "", values) print_record_create_success("Topic") elif len(result) == 1: print_record_already_exist("Topic") else: print_error_duplicate_record_found()
def do_follow_topic(self, arg): """ Command: follow_topic {TopicID} Description: Follow a topic """ if self.login_status == False: print_error_not_login() return parameters = arg.split() if len(parameters) != 1: print_error_param_num() return condition = "TopicID=\"{}\"".format( parameters[0] ) result = self.check_record_exist("Topics", condition) if len(result) == 0: print_error_record_not_found("Topic") elif len(result) == 1: condition = "UserID=\"{}\" and FollowTopicID=\"{}\"".format( self.user_id, parameters[0] ) result = self.check_record_exist("UserFollowsTopic", condition) if len(result) == 0: values = "\"{}\",\"{}\",NULL".format( self.user_id, parameters[0] ) self.insert_record("UserFollowsTopic", "", values) print_follow_success("topic", parameters[0]) elif len(result) == 1: print_error_already_followed(parameters[0]) else: print_error_duplicate_record_found() else: print_error_duplicate_record_found()