class YouTrackTracker: SET_FIELDS_CMD = '{field} {value}' ADD_TAG_CMD = 'tag {tag}' def __init__(self, url, token, user_field): self.ytClient = YTClient(url=url, token=token) self.user_field = user_field self.request_type = 'Task' self.bug_type = 'Bug' self.request_tag = 'Feature Request' def create_issue(self, project_id, user, summary, description, issue_type): user_command = self.SET_FIELDS_CMD.format(field=self.user_field, value='"{user}"') user_command = user_command.format(user=user) if not isinstance(project_id, Project): project = Project(id=project_id) else: project = project_id if issue_type == 'Request': type_command = self.SET_FIELDS_CMD.format(field='Type', value=self.request_type) if self.request_tag and self.request_tag.strip() != '': type_command = '{} {}'.format( type_command, self.ADD_TAG_CMD.format(tag=self.request_tag)) else: type_command = self.SET_FIELDS_CMD.format(field='Type', value=self.bug_type) cmd = '{} {}'.format(user_command, type_command) issue_id = self.ytClient.create_issue( project, summary, description, return_fields=['id', 'idReadable']) self.ytClient.run_command(Command(issues=[issue_id], query=cmd)) return issue_id
def create_ticket(group, disease, touchstone, scenario, report: ReportConfig, version, error, yt: YTClient, config: Config): try: report_success = version is not None summary = "Check & share diag report with {} ({}) {}" if \ report_success else \ "Run, check & share diag report with {} ({}) {}" result = get_version_url(report, version, config) if \ report_success else \ "Auto-run failed with error: {}".format(error) description = "Report run triggered by upload to scenario: {}. {}"\ .format(scenario, result) create_tags(yt, group, disease, touchstone, report) query = "tag: {} AND tag: {} AND tag: {} AND tag: {} " \ "AND state: Incoming" existing_issues = yt.get_issues( query.format(disease, touchstone, group, report.name), ["id", "summary", "description", "tags(name)"]) summary = summary.format(group, disease, touchstone) if len(existing_issues) > 0: existing_issue = existing_issues[0] yt.update_issue(existing_issue, summary, description) else: issue = yt.create_issue(Project(vimc_project_id), summary, description) comm = "for {} implementer {} tag {} tag {} tag {} tag {}".format( report.assignee, report.assignee, group, disease, touchstone, report.name) yt.run_command( Command([issue], comm)) except Exception as ex: logging.exception(ex)