def _detach_assessment(new_ticket_id, old_ticket_id): """Send to old IssueTracker ticket detachment comment.""" builder = issue_tracker_params_builder.AssessmentParamsBuilder() params = builder.build_detach_comment(new_ticket_id) query = params.get_issue_tracker_params() try: issues.Client().update_issue(old_ticket_id, query) except integrations_errors.Error as error: logger.error("Unable to add detach comment to ticket issue ID=%d: %s", old_ticket_id, error)
def prepare_issue_update_json(assmt, issue_tracker_info=None): """Prepare issuetracker issue json for Assessment object update.""" if not issue_tracker_info: issue_tracker_info = assmt.issue_tracker integration_utils.set_values_for_missed_fields(assmt, issue_tracker_info) builder = issue_tracker_params_builder.AssessmentParamsBuilder() builder.handle_issue_tracker_info(assmt, issue_tracker_info) issue_tracker_params = builder.params params = issue_tracker_params.get_issue_tracker_params() return params
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)
def prepare_comment_update_json(object_, comment, author): """Prepare json for adding comment to IssueTracker issue""" builder = issue_tracker_params_builder.AssessmentParamsBuilder() params = builder.build_params_for_comment(object_, comment, author) return params.get_issue_tracker_params()