def routine(user: User, board: Board): """ Create new Thread linked to specified board, from POST JSON data. :param user: Requesting User object :param board: Board object :return: New thread inside specified board """ try: # Check thread JSON arguments self.check_args() self.validate_args() # Process anon, image and construct new entity anon = str_to_bool(self.args['anon']) image = self.media_processing() thread = Thread(anon, self.args['title'], self.args['text'], image, board.id, user.id) # Add new Thread table to database uchan.add_to_db(thread) # Add new ThreadUser link thread = user.get_last_thread() uchan.add_to_db(ThreadUser(thread.id, user.id)) return responses.successful(201, JSONRepresentation.thread(thread, user)) except ValueError as msg: return responses.client_error(400, '{}'.format(msg)) except KeyError as key: return responses.client_error(400, 'Invalid parameter: {}'.format(key))
def routine(user: User, thread: Thread): """ Creates new Post table object and returns it as JSON representation. Image posting is totally optional (but if chosen, it needs both 'image' and 'image_name' fields. :param user: User object :param thread: Thread object :return: New Post Object as JSON object """ try: self.check_args() self.validate_args() anon = str_to_bool(self.args['anon']) image = self.media_processing() if self.args['image'] is not None and \ self.args['image_name'] is not None else None post = Post((user.id == thread.author), anon, self.args['text'], thread.id, user.id, thread.board, self.args['reply'], image) # Add new Post table to database uchan.add_to_db(post) # Add new ThreadUser link if thread.get_authid(user.id) is None: uchan.add_to_db(ThreadUser(thread.id, user.id)) # Increments thread counter thread.incr_replies((image is not None)) uchan.commit() return responses.successful(201, JSONRepresentation.post(thread.get_last_post(), thread, user)) except ValueError as msg: return responses.client_error(400, '{}'.format(msg))