Exemple #1
0
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)