def getCommands(self, signed_msg): """Returns a list of all the commands found in the email.""" content = get_main_body(signed_msg) if content is None: return [] return [ BugEmailCommands.get(name=name, string_args=args) for name, args in parse_commands( content, BugEmailCommands.parsingParameters())]
def getCommands(self, signed_msg): """Returns a list of all the commands found in the email.""" content = get_main_body(signed_msg) if content is None: return [] return [ BugEmailCommands.get(name=name, string_args=args) for name, args in parse_commands( content, BugEmailCommands.parsingParameters()) ]
def processComment(self, mail, email_addr, file_alias): """Process an email and create a CodeReviewComment. The only mail command understood is 'vote', which takes 'approve', 'disapprove', or 'abstain' as values. Specifically, it takes any CodeReviewVote item value, case-insensitively. :return: True. """ user = getUtility(ILaunchBag).user try: merge_proposal = self.getBranchMergeProposal(email_addr) except NonExistantBranchMergeProposalAddress: send_process_error_notification( str(user.preferredemail.email), 'Submit Request Failure', 'There is no merge proposal at %s' % email_addr, mail) return True except BadBranchMergeProposalAddress: return False context = CodeReviewEmailCommandExecutionContext(merge_proposal, user) try: email_body_text = get_main_body(mail) commands = CodeEmailCommands.getCommands(email_body_text) processed_count = self.processCommands(context, commands) # Make sure that the email is in fact signed. if processed_count > 0: ensure_not_weakly_authenticated(mail, 'code review') message = getUtility(IMessageSet).fromEmail( mail.parsed_string, owner=getUtility(ILaunchBag).user, filealias=file_alias, parsed_message=mail) merge_proposal.createCommentFromMessage( message, context.vote, context.vote_tags, mail) except IncomingEmailError as error: send_process_error_notification( str(user.preferredemail.email), 'Submit Request Failure', error.message, mail, error.failing_command) transaction.abort() return True
def processComment(self, mail, email_addr, file_alias): """Process an email and create a CodeReviewComment. The only mail command understood is 'vote', which takes 'approve', 'disapprove', or 'abstain' as values. Specifically, it takes any CodeReviewVote item value, case-insensitively. :return: True. """ user = getUtility(ILaunchBag).user try: merge_proposal = self.getBranchMergeProposal(email_addr) except NonExistantBranchMergeProposalAddress: send_process_error_notification( str(user.preferredemail.email), 'Submit Request Failure', 'There is no merge proposal at %s' % email_addr, mail) return True except BadBranchMergeProposalAddress: return False context = CodeReviewEmailCommandExecutionContext(merge_proposal, user) try: email_body_text = get_main_body(mail) commands = CodeEmailCommands.getCommands(email_body_text) processed_count = self.processCommands(context, commands) # Make sure that the email is in fact signed. if processed_count > 0: ensure_not_weakly_authenticated(mail, 'code review') message = getUtility(IMessageSet).fromEmail( mail.parsed_string, owner=getUtility(ILaunchBag).user, filealias=file_alias, parsed_message=mail) merge_proposal.createCommentFromMessage(message, context.vote, context.vote_tags, mail) except IncomingEmailError as error: send_process_error_notification(str(user.preferredemail.email), 'Submit Request Failure', error.message, mail, error.failing_command) transaction.abort() return True