def test_create_karma_user(mock_empty_db_session, mock_slack_api_call): karma = Karma("ABC123", "XYZ123", "CHANNEL42") assert karma.giver.username == "pybob" assert karma.receiver.username == "clamytoe" first = db_session.create_session().query(KarmaUser).get("ABC123") second = db_session.create_session().query(KarmaUser).get("XYZ123") assert first.username == "pybob" assert second.username == "clamytoe"
def _get_notes_for_user(user: KarmaUser) -> list: return ( db_session.create_session() .query(KarmaNote) .filter_by(user_id=user.user_id) .all() )
def update_username(**kwargs): """Changes the Username""" user_id = kwargs.get("user_id").strip("<>@") session = create_session() karma_user: KarmaUser = session.query(KarmaUser).get(user_id) if not karma_user: return "User not found" old_username = karma_user.username user_info = settings.SLACK_CLIENT.api_call("users.info", user=user_id) new_username = karmabot.slack.get_available_username(user_info) if old_username == new_username: return ( f"Sorry, you have not updated your username: {old_username}. \n" "Please update your real-name or display-name in your Slack " "profile and retry.") karma_user.username = new_username session.commit() session.close() return (f"Sucessfully updated your KarmaUser name " f"from '{old_username}' to '{new_username}'!")
def test_change_karma(mock_filled_db_session, test_changes, mock_slack_api_call): session = db_session.create_session() pre_change_karma = session.query(KarmaUser).get(test_changes[1]).karma_points karma = Karma(test_changes[0], test_changes[1], test_changes[2]) karma.change_karma(test_changes[3]) post_change = session.query(KarmaUser).get(test_changes[1]).karma_points assert post_change == (pre_change_karma + test_changes[3]) session.close()
def __init__(self, giver_id, receiver_id, channel_id): self.session = db_session.create_session() self.giver = self.session.query(KarmaUser).get(giver_id) self.receiver = self.session.query(KarmaUser).get(receiver_id) self.channel_id = channel_id self.last_score_maxed_out = False if not self.giver: self.giver = self._create_karma_user(giver_id) if not self.receiver: self.receiver = self._create_karma_user(receiver_id)
def get_user_name(**kwargs): """Shows the current Username""" user_id = kwargs.get("user_id").strip("<>@") session = create_session() karma_user: KarmaUser = session.query(KarmaUser).get(user_id) if not karma_user: return "Sorry, you are not yet known to karmabot. Try to give some Karma! :)" username = karma_user.username session.close() return f"Your current username for karmabot is '{username}'"
def top_karma(**kwargs): """Get the PyBites members with most karma""" output = ["PyBites members with most karma:"] session = db_session.create_session() top_users = (session.query(KarmaUser).order_by( KarmaUser.karma_points.desc()).limit(TOP_NUMBER)) try: for top_user in top_users: output.append("{:<20} -> {}".format(top_user.username, top_user.karma_points)) ret = "\n".join(output) return "```{}```".format(ret) finally: session.close()
def _add_note(text: str, user: KarmaUser) -> str: """Adds a new note to the database for the given user.""" _, note_msg = _parse_note_cmd(text) if not note_msg: return f"Sorry {user.username}, could not find a note in your message." if _note_exists(note_msg, user): return f"Sorry {user.username}, you already have an identical note." note = KarmaNote( user_id=user.user_id, timestamp=datetime.datetime.now(), note=note_msg ) session = db_session.create_session() session.add(note) session.commit() return f"Hey {user.username}, you've just stored a note."
def note(user_id: str, channel: str, text: str) -> Union[None, str]: """Allows the user to store and retrieve simple notes. - Syntax for adding a note: @karmabot note add <">my note<"> (note message can be in quotes) - Syntax for listing notes: @karmabot note list - Syntax for removing a note: @karmabote note del 1 Each note is stored for the current user only. A user can only list and delete her own notes. """ user_id = user_id.strip("<>@") # retrieve current user user = db_session.create_session().query(KarmaUser).get(user_id) cmd, _ = _parse_note_cmd(text) note_cmd_fnc = NOTE_COMMANDS.get(cmd, _command_not_found) return note_cmd_fnc(text, user)
def get_karma(**kwargs): """Get your current karma score""" user_id = kwargs.get("user_id").strip("<>@") session = db_session.create_session() kama_user = session.query(KarmaUser).get(user_id) try: if not kama_user: return "User not found" if kama_user.karma_points == 0: return "Sorry, you don't have any karma yet" return ( f"Hey {kama_user.username}, your current karma is {kama_user.karma_points}" ) finally: session.close()
def _del_note(text: str, user: KarmaUser) -> str: """Deletes the note with the given note id.""" _, note_id = _parse_note_cmd(text) if not note_id: return f"Sorry {user.username}, it seems you did not provide a valid id." session = db_session.create_session() query = session.query(KarmaNote).filter_by(id=note_id, user_id=user.user_id) row_count = query.delete() session.commit() # otherwise, the deletion is not performed if row_count: return f"Hey {user.username}, your note was successfully deleted." return ( f"Sorry {user.username}, something went wrong, no record was deleted. " f"Please ask an admin..." )
def test_lookup_username(mock_filled_db_session, test_user_id, expected): karma_user = db_session.create_session().query(KarmaUser).get(test_user_id) assert karma_user.username == expected
def _note_exists(msg: str, user: KarmaUser) -> bool: session = db_session.create_session() q = session.query(KarmaNote).filter_by(note=msg, user_id=user.user_id) return session.query(q.exists()).scalar() # returns True or False