def _populate_issue_json(obj_info, issue_json): """Populate issue json with parameters from request.""" if obj_info.hotlist_ids: issue_json["hotlist_ids"] = obj_info.hotlist_ids if obj_info.component_id: issue_json["component_id"] = obj_info.component_id integration_utils.normalize_issue_tracker_info(issue_json)
def _update_issuetracker_issue(assessment, issue_tracker_info, initial_assessment, initial_info, request): """Collects information and sends a request to update external issue.""" # pylint: disable=too-many-locals issue_id = issue_tracker_info.get('issue_id') if not issue_id: return comments = [] # Handle switching of 'enabled' property. enabled = issue_tracker_info.get('enabled', False) if initial_info.get('enabled', False) != enabled: # Add comment about toggling feature and process further. comments.append(_ENABLED_TMPL if enabled else _DISABLED_TMPL) elif not enabled: # If feature remains in the same status which is 'disabled'. return integration_utils.normalize_issue_tracker_info(issue_tracker_info) issue_params = _handle_basic_props(issue_tracker_info, initial_info) # Handle status update. status_value, status_comment = _build_status_comment( assessment, initial_assessment) if status_value: issue_params['status'] = status_value comments.append(status_comment) # Attach user comments if any. comment_text, comment_author = _get_added_comment_text(request) if comment_text is not None: comments.append( _COMMENT_TMPL % (comment_author, comment_text, _get_assessment_url(assessment))) if comments: issue_params['comment'] = '\n\n'.join(comments) # Handle hotlist ID update. hotlist_id = issue_tracker_info.get('hotlist_id') if hotlist_id is not None and hotlist_id != initial_info.get('hotlist_id'): issue_params['hotlist_ids'] = [hotlist_id] if hotlist_id else [] # handle assignee and cc_list update assignee_email, cc_list = _collect_issue_emails(assessment) if assignee_email is not None: issue_tracker_info['assignee'] = assignee_email issue_params['assignee'] = assignee_email issue_params['verifier'] = assignee_email issue_params['ccs'] = cc_list if issue_params: # Resend all properties upon any change. issue_params = _fill_current_value(issue_params, assessment, initial_info) issues.Client().update_issue(issue_id, issue_params)
def test_normalize_info(self, info, expected, expected_error): """Test _normalize_issue_tracker_info function.""" # pylint: disable=protected-access if expected_error: with self.assertRaises(expected_error): integration_utils.normalize_issue_tracker_info(info) else: integration_utils.normalize_issue_tracker_info(info) self.assertEqual(info, expected)
def _update_issuetracker_issue(assessment, issue_tracker_info, initial_assessment, initial_info, request): """Collects information and sends a request to update external issue.""" # pylint: disable=too-many-locals issue_id = issue_tracker_info.get('issue_id') if not issue_id: return comments = [] # Handle switching of 'enabled' property. enabled = issue_tracker_info.get('enabled', False) if initial_info.get('enabled', False) != enabled: # Add comment about toggling feature and process further. comments.append(_ENABLED_TMPL if enabled else _DISABLED_TMPL) elif not enabled: # If feature remains in the same status which is 'disabled'. return integration_utils.normalize_issue_tracker_info(issue_tracker_info) issue_params = _handle_basic_props(issue_tracker_info, initial_info) # Handle status update. status_value, status_comment = _build_status_comment( assessment, initial_assessment) if status_value: issue_params['status'] = status_value comments.append(status_comment) # Attach user comments if any. comment_text, comment_author = _get_added_comment_text(request) if comment_text is not None: comments.append( _COMMENT_TMPL % ( comment_author, comment_text, _get_assessment_url(assessment))) if comments: issue_params['comment'] = '\n\n'.join(comments) # Handle hotlist ID update. hotlist_id = issue_tracker_info.get('hotlist_id') if hotlist_id is not None and hotlist_id != initial_info.get('hotlist_id'): issue_params['hotlist_ids'] = [hotlist_id] if hotlist_id else [] # handle assignee and cc_list update assignee_email, cc_list = _collect_issue_emails(assessment) if assignee_email is not None: issue_tracker_info['assignee'] = assignee_email issue_params['assignee'] = assignee_email issue_params['verifier'] = assignee_email issue_params['ccs'] = cc_list if issue_params: # Resend all properties upon any change. issue_params = _fill_current_value(issue_params, assessment, initial_info) issues.Client().update_issue(issue_id, issue_params)
def prepare_issue_json(assessment, issue_tracker_info=None): """Create json that will be sent to IssueTracker. Args: assessment: Instance of Assessment. issue_tracker_info: Dict with IssueTracker info. Returns: Dict with IssueTracker issue info. """ if not issue_tracker_info: issue_tracker_info = assessment.audit.issuetracker_issue.to_dict() issue_tracker_info['title'] = assessment.title issue_tracker_info['status'] = ASSESSMENT_STATUSES_MAPPING.get( assessment.status) integration_utils.normalize_issue_tracker_info(issue_tracker_info) assignee_email, cc_list = _collect_assessment_emails(assessment) if assignee_email is not None: issue_tracker_info['assignee'] = assignee_email issue_tracker_info['cc_list'] = cc_list hotlist_id = issue_tracker_info.get('hotlist_id') issue_params = { 'component_id': issue_tracker_info['component_id'], 'hotlist_ids': [hotlist_id] if hotlist_id else [], 'title': issue_tracker_info['title'], 'type': issue_tracker_info['issue_type'], 'priority': issue_tracker_info['issue_priority'], 'severity': issue_tracker_info['issue_severity'], 'reporter': get_reporter_email(assessment), 'assignee': '', 'verifier': '', 'status': issue_tracker_info['status'], 'ccs': [], 'comment': create_asmnt_comment(assessment), } assignee = issue_tracker_info.get('assignee') if assignee: if not issue_tracker_info['status']: issue_params['status'] = 'ASSIGNED' issue_params['assignee'] = assignee issue_params['verifier'] = assignee cc_list = issue_tracker_info.get('cc_list', []) audit_ccs = get_audit_ccs(assessment) grouped_ccs = group_cc_emails(audit_ccs, cc_list) if grouped_ccs: issue_params['ccs'] = grouped_ccs return issue_params
def _create_issuetracker_issue(assessment, issue_tracker_info): """Collects information and sends a request to create external issue.""" integration_utils.normalize_issue_tracker_info(issue_tracker_info) person, acl, acr = (all_models.Person, all_models.AccessControlList, all_models.AccessControlRole) reporter_email = db.session.query(person.email, ).join( acl, person.id == acl.person_id, ).join( acr, sa.and_( acl.ac_role_id == acr.id, acr.name == "Audit Captains", ), ).filter( acl.object_id == assessment.audit_id, acl.object_type == all_models.Audit.__name__, ).order_by(person.email, ).first() if reporter_email: reporter_email = reporter_email.email comment = [_INITIAL_COMMENT_TMPL % _get_assessment_url(assessment)] test_plan = assessment.test_plan if test_plan: comment.extend([ 'Following is the assessment Requirements/Assessment Procedure ' 'from GGRC:', html2text.HTML2Text().handle(test_plan).strip('\n'), ]) hotlist_id = issue_tracker_info.get('hotlist_id') issue_params = { 'component_id': issue_tracker_info['component_id'], 'hotlist_ids': [hotlist_id] if hotlist_id else [], 'title': issue_tracker_info['title'], 'type': issue_tracker_info['issue_type'], 'priority': issue_tracker_info['issue_priority'], 'severity': issue_tracker_info['issue_severity'], 'reporter': reporter_email, 'assignee': '', 'verifier': '', 'status': issue_tracker_info['status'], 'ccs': [], 'comment': '\n'.join(comment), } assignee = issue_tracker_info.get('assignee') if assignee: if not issue_tracker_info['status']: issue_params['status'] = 'ASSIGNED' issue_params['assignee'] = assignee issue_params['verifier'] = assignee cc_list = issue_tracker_info.get('cc_list') if cc_list is not None: issue_params['ccs'] = cc_list res = issues.Client().create_issue(issue_params) return res['issueId']
def _create_issuetracker_issue(assessment, issue_tracker_info): """Collects information and sends a request to create external issue.""" integration_utils.normalize_issue_tracker_info(issue_tracker_info) person, acl, acr = (all_models.Person, all_models.AccessControlList, all_models.AccessControlRole) reporter_email = db.session.query( person.email, ).join( acl, person.id == acl.person_id, ).join( acr, sa.and_( acl.ac_role_id == acr.id, acr.name == "Audit Captains", ), ).filter( acl.object_id == assessment.audit_id, acl.object_type == all_models.Audit.__name__, ).order_by( person.email, ).first() if reporter_email: reporter_email = reporter_email.email comment = [_INITIAL_COMMENT_TMPL % _get_assessment_url(assessment)] test_plan = assessment.test_plan if test_plan: comment.extend([ 'Following is the assessment Requirements/Assessment Procedure ' 'from GGRC:', html2text.HTML2Text().handle(test_plan).strip('\n'), ]) hotlist_id = issue_tracker_info.get('hotlist_id') issue_params = { 'component_id': issue_tracker_info['component_id'], 'hotlist_ids': [hotlist_id] if hotlist_id else [], 'title': issue_tracker_info['title'], 'type': issue_tracker_info['issue_type'], 'priority': issue_tracker_info['issue_priority'], 'severity': issue_tracker_info['issue_severity'], 'reporter': reporter_email, 'assignee': '', 'verifier': '', 'status': issue_tracker_info['status'], 'ccs': [], 'comment': '\n'.join(comment), } assignee = issue_tracker_info.get('assignee') if assignee: if not issue_tracker_info['status']: issue_params['status'] = 'ASSIGNED' issue_params['assignee'] = assignee issue_params['verifier'] = assignee cc_list = issue_tracker_info.get('cc_list') if cc_list is not None: issue_params['ccs'] = cc_list res = issues.Client().create_issue(issue_params) return res['issueId']
def _update_issuetracker_issue( assessment, issue_tracker_info, # noqa initial_assessment, initial_info, request): """Collects information and sends a request to update external issue.""" # pylint: disable=too-many-locals issue_id = issue_tracker_info.get('issue_id') if not issue_id: return comments = [] # Handle switching of 'enabled' property. enabled = issue_tracker_info.get('enabled', False) if initial_info.get('enabled', False) != enabled: # Add comment about toggling feature and process further. comments.append(_ENABLED_TMPL if enabled else _DISABLED_TMPL) elif not enabled: # If feature remains in the same status which is 'disabled'. return integration_utils.normalize_issue_tracker_info(issue_tracker_info) issue_params = _handle_basic_props(issue_tracker_info, initial_info) # Handle status update. status_value, status_comment = _build_status_comment( assessment, initial_assessment) if status_value: issue_params['status'] = status_value comments.append(status_comment) # Attach user comments if any. comment_text, comment_author = _get_added_comment_text(request) if comment_text is not None: builder = issue_tracker_params_builder.AssessmentParamsBuilder() comments.append( builder.COMMENT_TMPL.format(author=comment_author, comment=comment_text, model=_ASSESSMENT_MODEL_NAME, link=_get_assessment_url(assessment))) if comments: issue_params['comment'] = '\n\n'.join(comments) # Handle hotlist ID update. hotlist_id = issue_tracker_info.get('hotlist_id') if hotlist_id is not None and hotlist_id != initial_info.get('hotlist_id'): issue_params['hotlist_ids'] = [hotlist_id] if hotlist_id else [] # handle assignee and cc_list update assignee_email, cc_list = _collect_assessment_emails(assessment) del cc_list if assignee_email is not None: issue_tracker_info['assignee'] = assignee_email issue_params['assignee'] = assignee_email issue_params['verifier'] = assignee_email custom_fields = [] # handle due_date update due_date = issue_tracker_info.get('due_date') if due_date: custom_fields.append({ "name": constants.CUSTOM_FIELDS_DUE_DATE, "value": due_date.strftime("%Y-%m-%d"), "type": "DATE", "display_string": constants.CUSTOM_FIELDS_DUE_DATE }) if custom_fields: issue_params['custom_fields'] = custom_fields if issue_params: # Resend all properties upon any change. issue_params = _fill_current_value(issue_params, assessment, initial_info) issues.Client().update_issue(issue_id, issue_params)