def PUT_friends(self, friend, notes_json): """Create or update a "friend" relationship. This operation is idempotent. It can be used to add a new friend, or update an existing friend (e.g., add/change the note on that friend) """ err = None if 'name' in notes_json and notes_json['name'] != friend: # The 'name' in the JSON is optional, but if present, must # match the username from the URL err = errors.RedditError('BAD_USERNAME', fields='name') if 'note' in notes_json and not c.user.gold: err = errors.RedditError('GOLD_REQUIRED', fields='note') if err: self.on_validation_error(err) # See if the target is already an existing friend. # If not, create the friend relationship. friend_rel = Account.get_friend(c.user, friend) rel_exists = bool(friend_rel) if not friend_rel: friend_rel = c.user.add_friend(friend) response.status = 201 if 'note' in notes_json: note = notes_json['note'] or '' if not rel_exists: # If this is a newly created friend relationship, # the cache needs to be updated before a note can # be applied c.user.friend_rels_cache(_update=True) c.user.add_friend_note(friend, note) rel_view = FriendTableItem(friend_rel) return self.api_wrapper(FriendTableItemJsonTemplate().data(rel_view))
def GET_friends(self, friend_rel): """Get information about a specific 'friend', such as notes.""" rel_view = FriendTableItem(friend_rel) return self.api_wrapper(FriendTableItemJsonTemplate().data(rel_view))