def issue_comment_create(context, data_dict): '''Add a new issue comment. You must provide your API key in the Authorization header. :param comment: the comment text :type comment: string :param issue_id: the id of the issue the comment belongs to :type dataset_id: integer :returns: the newly created issue comment :rtype: dictionary ''' user = context['user'] user_obj = model.User.get(user) issue = issuemodel.Issue.get(data_dict['issue_id']) if issue is None: raise p.toolkit.ValidationError({ 'issue_id': ['No issue exists with id %s' % data_dict['issue_id']] }) auth_dict = {'dataset_id': issue.dataset_id} p.toolkit.check_access('issue_comment_create', context, auth_dict) data_dict['user_id'] = user_obj.id issue = issuemodel.IssueComment(**data_dict) model.Session.add(issue) model.Session.commit() log.debug('Created issue comment %s' % (issue.id)) return issue.as_dict()
def issue_comment_create(context, data_dict): '''Add a new issue comment. You must provide your API key in the Authorization header. :param comment: the comment text :type comment: string :param issue_number: the number of the issue the comment belongs to :type issue_number: integer :param dataset_id: the dataset name or id of the issue the comment belongs to :type dataset_id: unicode :returns: the newly created issue comment :rtype: dictionary ''' p.toolkit.check_access('issue_comment_create', context, data_dict) user = context['user'] user_obj = model.User.get(user) issue = issuemodel.Issue.get_by_name_or_id_and_number( dataset_name_or_id=data_dict['dataset_id'], issue_number=data_dict['issue_number'], session=context['session']) comment_dict = data_dict.copy() del comment_dict['dataset_id'] del comment_dict['issue_number'] comment_dict.update({ 'user_id': user_obj.id, 'issue_id': issue.id, }) issue_comment = issuemodel.IssueComment(**comment_dict) model.Session.add(issue_comment) model.Session.commit() notifications = p.toolkit.asbool( config.get('ckanext.issues.send_email_notifications')) if notifications: dataset = model.Package.get(data_dict['dataset_id']) recipients = _get_recipients(context, dataset) subject = get_issue_subject(issue.as_dict()) for recipient in recipients: body = _get_comment_email_body(issue_comment, subject, user_obj, recipient) user_obj = model.User.get(recipient['user_id']) try: mailer.mail_user(user_obj, subject, body) except (mailer.MailerException, TypeError) as e: # TypeError occurs when we're running command from ckanapi log.debug(e) log.debug('Created issue comment %s' % (issue.id)) return issue_comment.as_dict()