def add_user(username, topic_id, dbconn): logging.info("Adding user %s to topic %s" % (username, topic_id)) try: cursor = dbconn.cursor() user_id = user.user_id_from_username(username, dbconn) except MySQLdb.Error as e: logging.error("MySQL error in add_user 1: " + e[1]) return Status.DBError if type(user_id) == Status.NoSuchUser: return user_id findSQL = "SELECT * FROM topic_users WHERE user_id='%s' AND topic_id='%s'" % (user_id, topic_id) try: result = cursor.execute(findSQL) except MySQLdb.Error as e: logging.error("MySQL error in add_user 2: " + e[1]) return Status.DBError if result == 1: logging.info("User already in topic") return Status.UserAlreadyInTopic insertSQL = "INSERT INTO topic_users (topic_id, user_id) VALUES('%s', '%s')" % (topic_id, user_id) try: result = cursor.execute(insertSQL) except MySQLdb.Error as e: logging.error("MySQL error in add_user 3: " + e[1]) return Status.DBError if result != 1: logging.error("Found an oddity in add_user: couldn't insert!") return Status.CouldNotAddUser updateSQL = "UPDATE topics SET num_users=(num_users+1) where topic_id='%s'" % topic_id try: result = cursor.execute(updateSQL) logging.debug("just ran %s: %s" % (updateSQL, result)) except MySQLdb.Error as e: logging.error("MySQL error in add_user 4: " + e[1]) return Status.CouldNotIncrementUserCount logging.info("User added to topic") return Status.UserAddedToTopic
def post_message(topic_id, username, message, dbconn): logging.info('posting message on topic %s from user %s' % (topic_id, username)) username = MySQLdb.escape_string(username) try: cursor = dbconn.cursor() user_id = user.user_id_from_username(username, dbconn) except MySQLdb.Error as e: logging.error("MySQL error in add_user 1: " + e[1]) return Status.DBError messageSQL = "INSERT INTO messages(user_id, topic_id, message, timestamp) VALUES ('%s', '%s', '%s', NOW())" messageSQL %= (user_id, topic_id, MySQLdb.escape_string(message)) try: cursor.execute(messageSQL) return Status.SuccessfulPost except MySQLdb.Error as e: logging.error("MySQL error on message post: " + e[1]) return Status.DBError
def user_in_topic(username, topic_id, dbconn): try: cursor = dbconn.cursor() user_id = user.user_id_from_username(username, dbconn) except MySQLdb.Error as e: logging.error("MySQL error in add_user 1: " + e[1]) return Status.DBError findSQL = "SELECT user_id FROM topic_users WHERE user_id='%s' AND topic_id='%s'" % (user_id, topic_id) try: result = cursor.execute(findSQL) except MySQLdb.Error as e: logging.error("MySQL error in user_in_topic: " + e[1]) return Status.DBError if result > 0: if result > 1: logging.warn('There is a duplicate record for a "topic_user"') return Status.UserAlreadyInTopic else: return Status.UserNotInTopic