class YouTrackUtils: def __init__(self): self.test_touchstone = "touchstone-task-runner-test" yt_token = os.environ["YOUTRACK_TOKEN"] self.yt = YTClient('https://mrc-ide.myjetbrains.com/youtrack/', token=yt_token) def cleanup(self): issues = self.yt.get_issues("tag: {}".format(self.test_touchstone)) if len(issues) > 0: self.yt.run_command(Command(issues, "delete")) def get_issues(self, query=None, fields=None): if query is None: query = "summary: {}".format(self.test_touchstone) if fields is None: fields = ["id"] return self.yt.get_issues(query, fields)
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)