diff options
author | Thanh Ha <zxiiro@gmail.com> | 2019-08-23 09:14:39 -0400 |
---|---|---|
committer | Sorin Sbarnea <ssbarnea@redhat.com> | 2019-09-09 19:23:24 +0100 |
commit | 4d90c187a945c04b9949d5ee7738a049dd634897 (patch) | |
tree | 106bf6e05ad1f2260823e7cd68651b535b8ac3ef /jenkins_jobs/modules/triggers.py | |
parent | ead185134d8aa5d3d0974207356de6c4fdb2e6e8 (diff) | |
download | python-jenkins-job-builder-4d90c187a945c04b9949d5ee7738a049dd634897.tar.gz python-jenkins-job-builder-4d90c187a945c04b9949d5ee7738a049dd634897.tar.xz python-jenkins-job-builder-4d90c187a945c04b9949d5ee7738a049dd634897.zip |
Auto-generated output from python-black
Please review the following patch containing the code changes in
the repo. This patch is a transition patch and is the auto-generated
output of the python-black tool.
Change-Id: I2d2de71da8a105fb62b561899ae78441ddab4032
Signed-off-by: Thanh Ha <zxiiro@gmail.com>
Diffstat (limited to 'jenkins_jobs/modules/triggers.py')
-rw-r--r-- | jenkins_jobs/modules/triggers.py | 1701 |
1 files changed, 881 insertions, 820 deletions
diff --git a/jenkins_jobs/modules/triggers.py b/jenkins_jobs/modules/triggers.py index fcd93390..5831f4ba 100644 --- a/jenkins_jobs/modules/triggers.py +++ b/jenkins_jobs/modules/triggers.py @@ -53,8 +53,7 @@ def gerrit_handle_legacy_configuration(data): def hyphenize(attr): """Convert strings like triggerOn to trigger-on. """ - return hyphenizer.sub(lambda x: "-%s" % x.group(0).lower(), - attr) + return hyphenizer.sub(lambda x: "-%s" % x.group(0).lower(), attr) def convert_dict(d, old_keys): for old_key in old_keys: @@ -62,150 +61,176 @@ def gerrit_handle_legacy_configuration(data): new_key = hyphenize(old_key) logger.warning( "'%s' is deprecated and will be removed after " - "1.0.0, please use '%s' instead", old_key, new_key) + "1.0.0, please use '%s' instead", + old_key, + new_key, + ) d[new_key] = d[old_key] del d[old_key] - convert_dict(data, [ - 'triggerOnPatchsetUploadedEvent', - 'triggerOnChangeAbandonedEvent', - 'triggerOnChangeMergedEvent', - 'triggerOnChangeRestoredEvent', - 'triggerOnCommentAddedEvent', - 'triggerOnDraftPublishedEvent', - 'triggerOnRefUpdatedEvent', - 'triggerApprovalCategory', - 'triggerApprovalValue', - 'overrideVotes', - 'gerritBuildSuccessfulVerifiedValue', - 'gerritBuildFailedVerifiedValue', - 'failureMessage', - 'skipVote', - ]) - - for project in data.get('projects', []): - convert_dict(project, [ - 'projectCompareType', - 'projectPattern', - 'branchCompareType', - 'branchPattern', - ]) + convert_dict( + data, + [ + "triggerOnPatchsetUploadedEvent", + "triggerOnChangeAbandonedEvent", + "triggerOnChangeMergedEvent", + "triggerOnChangeRestoredEvent", + "triggerOnCommentAddedEvent", + "triggerOnDraftPublishedEvent", + "triggerOnRefUpdatedEvent", + "triggerApprovalCategory", + "triggerApprovalValue", + "overrideVotes", + "gerritBuildSuccessfulVerifiedValue", + "gerritBuildFailedVerifiedValue", + "failureMessage", + "skipVote", + ], + ) + + for project in data.get("projects", []): + convert_dict( + project, + [ + "projectCompareType", + "projectPattern", + "branchCompareType", + "branchPattern", + ], + ) mapping_obj_type = type(data) old_format_events = mapping_obj_type( - (key, should_register) for key, should_register in six.iteritems(data) - if key.startswith('trigger-on-')) - trigger_on = data.setdefault('trigger-on', []) + (key, should_register) + for key, should_register in six.iteritems(data) + if key.startswith("trigger-on-") + ) + trigger_on = data.setdefault("trigger-on", []) if old_format_events: logger.warning( "The events: %s; which you used is/are deprecated. " "Please use 'trigger-on' instead.", - ', '.join(old_format_events)) + ", ".join(old_format_events), + ) if old_format_events and trigger_on: raise JenkinsJobsException( - 'Both, the new format (trigger-on) and old format (trigger-on-*) ' - 'gerrit events format found. Please use either the new or the old ' - 'format of trigger events definition.') - - trigger_on.extend(event_name[len('trigger-on-'):] - for event_name, should_register - in six.iteritems(old_format_events) if should_register) + "Both, the new format (trigger-on) and old format (trigger-on-*) " + "gerrit events format found. Please use either the new or the old " + "format of trigger events definition." + ) + + trigger_on.extend( + event_name[len("trigger-on-") :] + for event_name, should_register in six.iteritems(old_format_events) + if should_register + ) for idx, event in enumerate(trigger_on): - if event == 'comment-added-event': + if event == "comment-added-event": trigger_on[idx] = events = mapping_obj_type() try: - events['comment-added-event'] = mapping_obj_type(( - ('approval-category', data['trigger-approval-category']), - ('approval-value', data['trigger-approval-value']) - )) + events["comment-added-event"] = mapping_obj_type( + ( + ("approval-category", data["trigger-approval-category"]), + ("approval-value", data["trigger-approval-value"]), + ) + ) except KeyError: raise JenkinsJobsException( - 'The comment-added-event trigger requires which approval ' - 'category and value you want to trigger the job. ' - 'It should be specified by the approval-category ' - 'and approval-value properties.') + "The comment-added-event trigger requires which approval " + "category and value you want to trigger the job. " + "It should be specified by the approval-category " + "and approval-value properties." + ) def build_gerrit_triggers(xml_parent, data): available_simple_triggers = { - 'change-abandoned-event': 'PluginChangeAbandonedEvent', - 'change-merged-event': 'PluginChangeMergedEvent', - 'change-restored-event': 'PluginChangeRestoredEvent', - 'draft-published-event': 'PluginDraftPublishedEvent', - 'patchset-uploaded-event': 'PluginPatchsetCreatedEvent', - 'patchset-created-event': 'PluginPatchsetCreatedEvent', - 'ref-updated-event': 'PluginRefUpdatedEvent', + "change-abandoned-event": "PluginChangeAbandonedEvent", + "change-merged-event": "PluginChangeMergedEvent", + "change-restored-event": "PluginChangeRestoredEvent", + "draft-published-event": "PluginDraftPublishedEvent", + "patchset-uploaded-event": "PluginPatchsetCreatedEvent", + "patchset-created-event": "PluginPatchsetCreatedEvent", + "ref-updated-event": "PluginRefUpdatedEvent", } - tag_namespace = 'com.sonyericsson.hudson.plugins.gerrit.trigger.' \ - 'hudsontrigger.events' + tag_namespace = ( + "com.sonyericsson.hudson.plugins.gerrit.trigger." "hudsontrigger.events" + ) - trigger_on_events = XML.SubElement(xml_parent, 'triggerOnEvents') + trigger_on_events = XML.SubElement(xml_parent, "triggerOnEvents") - for event in data.get('trigger-on', []): + for event in data.get("trigger-on", []): if isinstance(event, six.string_types): tag_name = available_simple_triggers.get(event) - if event == 'patchset-uploaded-event': + if event == "patchset-uploaded-event": logger.warning( "'%s' is deprecated. Use 'patchset-created-event' " - "format instead.", event) + "format instead.", + event, + ) if not tag_name: - known = ', '.join(available_simple_triggers.keys() + - ['comment-added-event', - 'comment-added-contains-event']) - msg = ("The event '%s' under 'trigger-on' is not one of the " - "known: %s.") % (event, known) + known = ", ".join( + available_simple_triggers.keys() + + ["comment-added-event", "comment-added-contains-event"] + ) + msg = ( + "The event '%s' under 'trigger-on' is not one of the " "known: %s." + ) % (event, known) raise JenkinsJobsException(msg) - XML.SubElement(trigger_on_events, - '%s.%s' % (tag_namespace, tag_name)) + XML.SubElement(trigger_on_events, "%s.%s" % (tag_namespace, tag_name)) else: - if 'patchset-created-event' in event.keys(): - pce = event['patchset-created-event'] + if "patchset-created-event" in event.keys(): + pce = event["patchset-created-event"] pc = XML.SubElement( trigger_on_events, - '%s.%s' % (tag_namespace, 'PluginPatchsetCreatedEvent')) + "%s.%s" % (tag_namespace, "PluginPatchsetCreatedEvent"), + ) mapping = [ - ('exclude-drafts', 'excludeDrafts', False), - ('exclude-trivial-rebase', 'excludeTrivialRebase', False), - ('exclude-no-code-change', 'excludeNoCodeChange', False), + ("exclude-drafts", "excludeDrafts", False), + ("exclude-trivial-rebase", "excludeTrivialRebase", False), + ("exclude-no-code-change", "excludeNoCodeChange", False), ] - helpers.convert_mapping_to_xml( - pc, pce, mapping, fail_required=True) + helpers.convert_mapping_to_xml(pc, pce, mapping, fail_required=True) - if 'comment-added-event' in event.keys(): - comment_added_event = event['comment-added-event'] + if "comment-added-event" in event.keys(): + comment_added_event = event["comment-added-event"] cadded = XML.SubElement( trigger_on_events, - '%s.%s' % (tag_namespace, 'PluginCommentAddedEvent')) + "%s.%s" % (tag_namespace, "PluginCommentAddedEvent"), + ) mapping = [ - ('approval-category', 'verdictCategory', None), - ('approval-value', - 'commentAddedTriggerApprovalValue', None), + ("approval-category", "verdictCategory", None), + ("approval-value", "commentAddedTriggerApprovalValue", None), ] - helpers.convert_mapping_to_xml(cadded, - comment_added_event, mapping, fail_required=True) + helpers.convert_mapping_to_xml( + cadded, comment_added_event, mapping, fail_required=True + ) - if 'comment-added-contains-event' in event.keys(): - comment_added_event = event['comment-added-contains-event'] + if "comment-added-contains-event" in event.keys(): + comment_added_event = event["comment-added-contains-event"] caddedc = XML.SubElement( trigger_on_events, - '%s.%s' % (tag_namespace, - 'PluginCommentAddedContainsEvent')) - XML.SubElement(caddedc, 'commentAddedCommentContains').text = \ - comment_added_event['comment-contains-value'] + "%s.%s" % (tag_namespace, "PluginCommentAddedContainsEvent"), + ) + XML.SubElement( + caddedc, "commentAddedCommentContains" + ).text = comment_added_event["comment-contains-value"] def build_gerrit_skip_votes(xml_parent, data): - outcomes = [('successful', 'onSuccessful'), - ('failed', 'onFailed'), - ('unstable', 'onUnstable'), - ('notbuilt', 'onNotBuilt')] + outcomes = [ + ("successful", "onSuccessful"), + ("failed", "onFailed"), + ("unstable", "onUnstable"), + ("notbuilt", "onNotBuilt"), + ] - skip_vote_node = XML.SubElement(xml_parent, 'skipVote') - skip_vote = data.get('skip-vote', {}) + skip_vote_node = XML.SubElement(xml_parent, "skipVote") + skip_vote = data.get("skip-vote", {}) for result_kind, tag_name in outcomes: setting = skip_vote.get(result_kind, False) XML.SubElement(skip_vote_node, tag_name).text = str(setting).lower() @@ -455,171 +480,198 @@ def gerrit(registry, xml_parent, data): """ def get_compare_type(xml_tag, compare_type): - valid_compare_types = ['PLAIN', - 'ANT', - 'REG_EXP'] + valid_compare_types = ["PLAIN", "ANT", "REG_EXP"] if compare_type not in valid_compare_types: - raise InvalidAttributeError(xml_tag, compare_type, - valid_compare_types) + raise InvalidAttributeError(xml_tag, compare_type, valid_compare_types) return compare_type gerrit_handle_legacy_configuration(data) - projects = data.get('projects', []) - gtrig = XML.SubElement(xml_parent, - 'com.sonyericsson.hudson.plugins.gerrit.trigger.' - 'hudsontrigger.GerritTrigger') - XML.SubElement(gtrig, 'spec') - gprojects = XML.SubElement(gtrig, 'gerritProjects') + projects = data.get("projects", []) + gtrig = XML.SubElement( + xml_parent, + "com.sonyericsson.hudson.plugins.gerrit.trigger." "hudsontrigger.GerritTrigger", + ) + XML.SubElement(gtrig, "spec") + gprojects = XML.SubElement(gtrig, "gerritProjects") for project in projects: - gproj = XML.SubElement(gprojects, - 'com.sonyericsson.hudson.plugins.gerrit.' - 'trigger.hudsontrigger.data.GerritProject') - XML.SubElement(gproj, 'compareType').text = get_compare_type( - 'project-compare-type', project.get( - 'project-compare-type', 'PLAIN')) - XML.SubElement(gproj, 'pattern').text = project['project-pattern'] - - branches = XML.SubElement(gproj, 'branches') - project_branches = project.get('branches', []) - - if 'branch-compare-type' in project and 'branch-pattern' in project: - warning = 'branch-compare-type and branch-pattern at project ' \ - 'level are deprecated and support will be removed ' \ - 'in a later version of Jenkins Job Builder; ' + gproj = XML.SubElement( + gprojects, + "com.sonyericsson.hudson.plugins.gerrit." + "trigger.hudsontrigger.data.GerritProject", + ) + XML.SubElement(gproj, "compareType").text = get_compare_type( + "project-compare-type", project.get("project-compare-type", "PLAIN") + ) + XML.SubElement(gproj, "pattern").text = project["project-pattern"] + + branches = XML.SubElement(gproj, "branches") + project_branches = project.get("branches", []) + + if "branch-compare-type" in project and "branch-pattern" in project: + warning = ( + "branch-compare-type and branch-pattern at project " + "level are deprecated and support will be removed " + "in a later version of Jenkins Job Builder; " + ) if project_branches: - warning += 'discarding values and using values from ' \ - 'branches section' + warning += "discarding values and using values from " "branches section" else: - warning += 'please use branches section instead' + warning += "please use branches section instead" logger.warning(warning) if not project_branches: project_branches = [ - {'branch-compare-type': project.get( - 'branch-compare-type', 'PLAIN'), - 'branch-pattern': project['branch-pattern']}] + { + "branch-compare-type": project.get("branch-compare-type", "PLAIN"), + "branch-pattern": project["branch-pattern"], + } + ] for branch in project_branches: gbranch = XML.SubElement( - branches, 'com.sonyericsson.hudson.plugins.' - 'gerrit.trigger.hudsontrigger.data.Branch') - XML.SubElement(gbranch, 'compareType').text = get_compare_type( - 'branch-compare-type', branch.get( - 'branch-compare-type', 'PLAIN')) - XML.SubElement(gbranch, 'pattern').text = branch['branch-pattern'] - - project_file_paths = project.get('file-paths', []) + branches, + "com.sonyericsson.hudson.plugins." + "gerrit.trigger.hudsontrigger.data.Branch", + ) + XML.SubElement(gbranch, "compareType").text = get_compare_type( + "branch-compare-type", branch.get("branch-compare-type", "PLAIN") + ) + XML.SubElement(gbranch, "pattern").text = branch["branch-pattern"] + + project_file_paths = project.get("file-paths", []) if project_file_paths: - fps_tag = XML.SubElement(gproj, 'filePaths') + fps_tag = XML.SubElement(gproj, "filePaths") for file_path in project_file_paths: - fp_tag = XML.SubElement(fps_tag, - 'com.sonyericsson.hudson.plugins.' - 'gerrit.trigger.hudsontrigger.data.' - 'FilePath') - XML.SubElement(fp_tag, 'compareType').text = get_compare_type( - 'compare-type', file_path.get('compare-type', 'PLAIN')) - XML.SubElement(fp_tag, 'pattern').text = file_path['pattern'] - - project_forbidden_file_paths = project.get('forbidden-file-paths', []) + fp_tag = XML.SubElement( + fps_tag, + "com.sonyericsson.hudson.plugins." + "gerrit.trigger.hudsontrigger.data." + "FilePath", + ) + XML.SubElement(fp_tag, "compareType").text = get_compare_type( + "compare-type", file_path.get("compare-type", "PLAIN") + ) + XML.SubElement(fp_tag, "pattern").text = file_path["pattern"] + + project_forbidden_file_paths = project.get("forbidden-file-paths", []) if project_forbidden_file_paths: - ffps_tag = XML.SubElement(gproj, 'forbiddenFilePaths') + ffps_tag = XML.SubElement(gproj, "forbiddenFilePaths") for forbidden_file_path in project_forbidden_file_paths: - ffp_tag = XML.SubElement(ffps_tag, - 'com.sonyericsson.hudson.plugins.' - 'gerrit.trigger.hudsontrigger.data.' - 'FilePath') - XML.SubElement(ffp_tag, 'compareType').text = get_compare_type( - 'compare-type', forbidden_file_path.get('compare-type', - 'PLAIN')) - XML.SubElement(ffp_tag, 'pattern').text = \ - forbidden_file_path['pattern'] - - topics = project.get('topics', []) + ffp_tag = XML.SubElement( + ffps_tag, + "com.sonyericsson.hudson.plugins." + "gerrit.trigger.hudsontrigger.data." + "FilePath", + ) + XML.SubElement(ffp_tag, "compareType").text = get_compare_type( + "compare-type", forbidden_file_path.get("compare-type", "PLAIN") + ) + XML.SubElement(ffp_tag, "pattern").text = forbidden_file_path["pattern"] + + topics = project.get("topics", []) if topics: - topics_tag = XML.SubElement(gproj, 'topics') + topics_tag = XML.SubElement(gproj, "topics") for topic in topics: - topic_tag = XML.SubElement(topics_tag, - 'com.sonyericsson.hudson.plugins.' - 'gerrit.trigger.hudsontrigger.data.' - 'Topic') - XML.SubElement(topic_tag, 'compareType').text = \ - get_compare_type('compare-type', topic.get('compare-type', - 'PLAIN')) - XML.SubElement(topic_tag, 'pattern').text = topic['pattern'] - - XML.SubElement(gproj, - 'disableStrictForbiddenFileVerification').text = str( - project.get('disable-strict-forbidden-file-verification', - False)).lower() + topic_tag = XML.SubElement( + topics_tag, + "com.sonyericsson.hudson.plugins." + "gerrit.trigger.hudsontrigger.data." + "Topic", + ) + XML.SubElement(topic_tag, "compareType").text = get_compare_type( + "compare-type", topic.get("compare-type", "PLAIN") + ) + XML.SubElement(topic_tag, "pattern").text = topic["pattern"] + + XML.SubElement(gproj, "disableStrictForbiddenFileVerification").text = str( + project.get("disable-strict-forbidden-file-verification", False) + ).lower() build_gerrit_skip_votes(gtrig, data) general_mappings = [ - ('silent', 'silentMode', False), - ('silent-start', 'silentStartMode', False), - ('escape-quotes', 'escapeQuotes', True), - ('no-name-and-email', 'noNameAndEmailParameters', False), - ('readable-message', 'readableMessage', False), - ('dependency-jobs', 'dependencyJobsNames', ''), + ("silent", "silentMode", False), + ("silent-start", "silentStartMode", False), + ("escape-quotes", "escapeQuotes", True), + ("no-name-and-email", "noNameAndEmailParameters", False), + ("readable-message", "readableMessage", False), + ("dependency-jobs", "dependencyJobsNames", ""), ] - helpers.convert_mapping_to_xml( - gtrig, data, general_mappings, fail_required=True) - notification_levels = ['NONE', 'OWNER', 'OWNER_REVIEWERS', 'ALL', - 'SERVER_DEFAULT'] - notification_level = data.get('notification-level', 'SERVER_DEFAULT') + helpers.convert_mapping_to_xml(gtrig, data, general_mappings, fail_required=True) + notification_levels = ["NONE", "OWNER", "OWNER_REVIEWERS", "ALL", "SERVER_DEFAULT"] + notification_level = data.get("notification-level", "SERVER_DEFAULT") if notification_level not in notification_levels: - raise InvalidAttributeError('notification-level', notification_level, - notification_levels) - if notification_level == 'SERVER_DEFAULT': - XML.SubElement(gtrig, 'notificationLevel').text = '' + raise InvalidAttributeError( + "notification-level", notification_level, notification_levels + ) + if notification_level == "SERVER_DEFAULT": + XML.SubElement(gtrig, "notificationLevel").text = "" else: - XML.SubElement(gtrig, 'notificationLevel').text = notification_level - XML.SubElement(gtrig, 'dynamicTriggerConfiguration').text = str( - data.get('dynamic-trigger-enabled', False)) - XML.SubElement(gtrig, 'triggerConfigURL').text = str( - data.get('dynamic-trigger-url', '')) - XML.SubElement(gtrig, 'triggerInformationAction').text = str( - data.get('trigger-information-action', '')) - XML.SubElement(gtrig, 'allowTriggeringUnreviewedPatches').text = str( - data.get('trigger-for-unreviewed-patches', False)).lower() + XML.SubElement(gtrig, "notificationLevel").text = notification_level + XML.SubElement(gtrig, "dynamicTriggerConfiguration").text = str( + data.get("dynamic-trigger-enabled", False) + ) + XML.SubElement(gtrig, "triggerConfigURL").text = str( + data.get("dynamic-trigger-url", "") + ) + XML.SubElement(gtrig, "triggerInformationAction").text = str( + data.get("trigger-information-action", "") + ) + XML.SubElement(gtrig, "allowTriggeringUnreviewedPatches").text = str( + data.get("trigger-for-unreviewed-patches", False) + ).lower() build_gerrit_triggers(gtrig, data) - override = str(data.get('override-votes', False)).lower() - if override == 'true': - for yamlkey, xmlkey in [('gerrit-build-started-verified-value', - 'gerritBuildStartedVerifiedValue'), - ('gerrit-build-successful-verified-value', - 'gerritBuildSuccessfulVerifiedValue'), - ('gerrit-build-failed-verified-value', - 'gerritBuildFailedVerifiedValue'), - ('gerrit-build-unstable-verified-value', - 'gerritBuildUnstableVerifiedValue'), - ('gerrit-build-notbuilt-verified-value', - 'gerritBuildNotBuiltVerifiedValue'), - ('gerrit-build-started-codereview-value', - 'gerritBuildStartedCodeReviewValue'), - ('gerrit-build-successful-codereview-value', - 'gerritBuildSuccessfulCodeReviewValue'), - ('gerrit-build-failed-codereview-value', - 'gerritBuildFailedCodeReviewValue'), - ('gerrit-build-unstable-codereview-value', - 'gerritBuildUnstableCodeReviewValue'), - ('gerrit-build-notbuilt-codereview-value', - 'gerritBuildNotBuiltCodeReviewValue')]: + override = str(data.get("override-votes", False)).lower() + if override == "true": + for yamlkey, xmlkey in [ + ("gerrit-build-started-verified-value", "gerritBuildStartedVerifiedValue"), + ( + "gerrit-build-successful-verified-value", + "gerritBuildSuccessfulVerifiedValue", + ), + ("gerrit-build-failed-verified-value", "gerritBuildFailedVerifiedValue"), + ( + "gerrit-build-unstable-verified-value", + "gerritBuildUnstableVerifiedValue", + ), + ( + "gerrit-build-notbuilt-verified-value", + "gerritBuildNotBuiltVerifiedValue", + ), + ( + "gerrit-build-started-codereview-value", + "gerritBuildStartedCodeReviewValue", + ), + ( + "gerrit-build-successful-codereview-value", + "gerritBuildSuccessfulCodeReviewValue", + ), + ( + "gerrit-build-failed-codereview-value", + "gerritBuildFailedCodeReviewValue", + ), + ( + "gerrit-build-unstable-codereview-value", + "gerritBuildUnstableCodeReviewValue", + ), + ( + "gerrit-build-notbuilt-codereview-value", + "gerritBuildNotBuiltCodeReviewValue", + ), + ]: if data.get(yamlkey) is not None: # str(int(x)) makes input values like '+1' work - XML.SubElement(gtrig, xmlkey).text = str( - int(data.get(yamlkey))) + XML.SubElement(gtrig, xmlkey).text = str(int(data.get(yamlkey))) message_mappings = [ - ('start-message', 'buildStartMessage', ''), - ('failure-message', 'buildFailureMessage', ''), - ('successful-message', 'buildSuccessfulMessage', ''), - ('unstable-message', 'buildUnstableMessage', ''), - ('notbuilt-message', 'buildNotBuiltMessage', ''), - ('failure-message-file', 'buildUnsuccessfulFilepath', ''), - ('custom-url', 'customUrl', ''), - ('server-name', 'serverName', '__ANY__'), + ("start-message", "buildStartMessage", ""), + ("failure-message", "buildFailureMessage", ""), + ("successful-message", "buildSuccessfulMessage", ""), + ("unstable-message", "buildUnstableMessage", ""), + ("notbuilt-message", "buildNotBuiltMessage", ""), + ("failure-message-file", "buildUnsuccessfulFilepath", ""), + ("custom-url", "customUrl", ""), + ("server-name", "serverName", "__ANY__"), ] - helpers.convert_mapping_to_xml( - gtrig, data, message_mappings, fail_required=True) + helpers.convert_mapping_to_xml(gtrig, data, message_mappings, fail_required=True) def dockerhub_notification(registry, xml_parent, data): @@ -647,26 +699,32 @@ def dockerhub_notification(registry, xml_parent, data): /../../tests/triggers/fixtures/dockerhub-notification-full.yaml :language: yaml """ - dockerhub = XML.SubElement(xml_parent, 'org.jenkinsci.plugins.' - 'registry.notification.DockerHubTrigger') - dockerhub.set('plugin', 'dockerhub-notification') - - option = XML.SubElement(dockerhub, 'options', {'class': 'vector'}) - - if data.get('referenced-image'): - XML.SubElement(option, 'org.jenkinsci.plugins.' - 'registry.notification.' - 'opt.impl.TriggerForAllUsedInJob') - repos = data.get('repositories', []) + dockerhub = XML.SubElement( + xml_parent, "org.jenkinsci.plugins." "registry.notification.DockerHubTrigger" + ) + dockerhub.set("plugin", "dockerhub-notification") + + option = XML.SubElement(dockerhub, "options", {"class": "vector"}) + + if data.get("referenced-image"): + XML.SubElement( + option, + "org.jenkinsci.plugins." + "registry.notification." + "opt.impl.TriggerForAllUsedInJob", + ) + repos = data.get("repositories", []) if repos: - specified_names = XML.SubElement(option, - 'org.jenkinsci.plugins.registry.' - 'notification.opt.impl.' - 'TriggerOnSpecifiedImageNames') - - repo_tag = XML.SubElement(specified_names, 'repoNames') + specified_names = XML.SubElement( + option, + "org.jenkinsci.plugins.registry." + "notification.opt.impl." + "TriggerOnSpecifiedImageNames", + ) + + repo_tag = XML.SubElement(specified_names, "repoNames") for repo in repos: - XML.SubElement(repo_tag, 'string').text = repo + XML.SubElement(repo_tag, "string").text = repo def pollscm(registry, xml_parent, data): @@ -691,8 +749,8 @@ def pollscm(registry, xml_parent, data): """ try: - cron = data['cron'] - ipch = str(data.get('ignore-post-commit-hooks', False)).lower() + cron = data["cron"] + ipch = str(data.get("ignore-post-commit-hooks", False)).lower() except KeyError as e: # ensure specific error on the attribute not being set is raised # for new format @@ -702,28 +760,38 @@ def pollscm(registry, xml_parent, data): logger.warning( "Your pollscm usage is deprecated, please use" " the syntax described in the documentation" - " instead") + " instead" + ) cron = data - ipch = 'false' - - if not cron and cron != '': - raise InvalidAttributeError('cron', cron) - - scmtrig = XML.SubElement(xml_parent, 'hudson.triggers.SCMTrigger') - XML.SubElement(scmtrig, 'spec').text = cron - XML.SubElement(scmtrig, 'ignorePostCommitHooks').text = ipch - - -def build_content_type(xml_parent, entries, namespace, collection_suffix, - entry_suffix, prefix, collection_name, element_name): + ipch = "false" + + if not cron and cron != "": + raise InvalidAttributeError("cron", cron) + + scmtrig = XML.SubElement(xml_parent, "hudson.triggers.SCMTrigger") + XML.SubElement(scmtrig, "spec").text = cron + XML.SubElement(scmtrig, "ignorePostCommitHooks").text = ipch + + +def build_content_type( + xml_parent, + entries, + namespace, + collection_suffix, + entry_suffix, + prefix, + collection_name, + element_name, +): content_type = XML.SubElement( - xml_parent, '{0}.{1}{2}'.format(namespace, prefix, collection_suffix)) + xml_parent, "{0}.{1}{2}".format(namespace, prefix, collection_suffix) + ) if entries: collection = XML.SubElement(content_type, collection_name) for entry in entries: content_entry = XML.SubElement( - collection, '{0}.{1}{2}'.format(namespace, prefix, - entry_suffix)) + collection, "{0}.{1}{2}".format(namespace, prefix, entry_suffix) + ) XML.SubElement(content_entry, element_name).text = entry @@ -768,65 +836,70 @@ def pollurl(registry, xml_parent, data): .. literalinclude:: /../../tests/triggers/fixtures/pollurl001.yaml """ - namespace = 'org.jenkinsci.plugins.urltrigger.' + namespace = "org.jenkinsci.plugins.urltrigger." valid_content_types = { - 'simple': ['Simple', '', '', []], - 'json': ['JSON', 'jsonPaths', 'jsonPath', None], - 'text': ['TEXT', 'regExElements', 'regEx', None], - 'xml': ['XML', 'xPaths', 'xPath', None] + "simple": ["Simple", "", "", []], + "json": ["JSON", "jsonPaths", "jsonPath", None], + "text": ["TEXT", "regExElements", "regEx", None], + "xml": ["XML", "xPaths", "xPath", None], } - urltrig = XML.SubElement(xml_parent, - namespace + 'URLTrigger') - node = data.get('polling-node') - XML.SubElement(urltrig, 'spec').text = data.get('cron', '') - XML.SubElement(urltrig, 'labelRestriction').text = str(bool(node)).lower() + urltrig = XML.SubElement(xml_parent, namespace + "URLTrigger") + node = data.get("polling-node") + XML.SubElement(urltrig, "spec").text = data.get("cron", "") + XML.SubElement(urltrig, "labelRestriction").text = str(bool(node)).lower() if node: - XML.SubElement(urltrig, 'triggerLabel').text = node - entries = XML.SubElement(urltrig, 'entries') - urls = data.get('urls', []) + XML.SubElement(urltrig, "triggerLabel").text = node + entries = XML.SubElement(urltrig, "entries") + urls = data.get("urls", []) if not urls: - raise JenkinsJobsException('At least one url must be provided') + raise JenkinsJobsException("At least one url must be provided") mapping = [ - ('proxy', 'proxyActivated', False), - ('timeout', 'timeout', 300), - ('check-etag', 'checkETag', False), - ('check-date', 'checkLastModificationDate', False) + ("proxy", "proxyActivated", False), + ("timeout", "timeout", 300), + ("check-etag", "checkETag", False), + ("check-date", "checkLastModificationDate", False), ] for url in urls: - entry = XML.SubElement(entries, namespace + 'URLTriggerEntry') - XML.SubElement(entry, 'url').text = url['url'] - if 'username' in url: - XML.SubElement(entry, 'username').text = url['username'] - if 'password' in url: - XML.SubElement(entry, 'password').text = url['password'] - if 'check-status' in url: - XML.SubElement(entry, 'checkStatus').text = 'true' - mapping.append(('check-status', 'statusCode', '')) + entry = XML.SubElement(entries, namespace + "URLTriggerEntry") + XML.SubElement(entry, "url").text = url["url"] + if "username" in url: + XML.SubElement(entry, "username").text = url["username"] + if "password" in url: + XML.SubElement(entry, "password").text = url["password"] + if "check-status" in url: + XML.SubElement(entry, "checkStatus").text = "true" + mapping.append(("check-status", "statusCode", "")) else: - XML.SubElement(entry, 'checkStatus').text = 'false' - XML.SubElement(entry, 'statusCode').text = '200' - - helpers.convert_mapping_to_xml( - entry, url, mapping, fail_required=False) - check_content = url.get('check-content', []) - XML.SubElement(entry, 'inspectingContent').text = \ - str(bool(check_content)).lower() - content_types = XML.SubElement(entry, 'contentTypes') + XML.SubElement(entry, "checkStatus").text = "false" + XML.SubElement(entry, "statusCode").text = "200" + + helpers.convert_mapping_to_xml(entry, url, mapping, fail_required=False) + check_content = url.get("check-content", []) + XML.SubElement(entry, "inspectingContent").text = str( + bool(check_content) + ).lower() + content_types = XML.SubElement(entry, "contentTypes") for entry in check_content: type_name = next(iter(entry.keys())) if type_name not in valid_content_types: - raise JenkinsJobsException('check-content must be one of : %s' - % ', '.join(valid_content_types. - keys())) + raise JenkinsJobsException( + "check-content must be one of : %s" + % ", ".join(valid_content_types.keys()) + ) content_type = valid_content_types.get(type_name) if entry[type_name]: sub_entries = content_type[3] if sub_entries is None: sub_entries = entry[type_name] - build_content_type(content_types, sub_entries, - namespace + 'content', 'ContentType', - 'ContentEntry', *content_type[0:3]) + build_content_type( + content_types, + sub_entries, + namespace + "content", + "ContentType", + "ContentEntry", + *content_type[0:3] + ) def jms_messaging(registry, xml_parent, data): @@ -871,35 +944,30 @@ def jms_messaging(registry, xml_parent, data): ../../tests/triggers/fixtures/jms-messaging002.yaml :language: yaml """ - namespace = 'com.redhat.jenkins.plugins.ci.' - jmsm = XML.SubElement(xml_parent, - namespace + 'CIBuildTrigger') + namespace = "com.redhat.jenkins.plugins.ci." + jmsm = XML.SubElement(xml_parent, namespace + "CIBuildTrigger") - if 'override-topic' in data: - overrides = XML.SubElement(jmsm, 'overrides') - XML.SubElement(overrides, - 'topic').text = str(data['override-topic']) + if "override-topic" in data: + overrides = XML.SubElement(jmsm, "overrides") + XML.SubElement(overrides, "topic").text = str(data["override-topic"]) mapping = [ # option, xml name, default value - ("spec", 'spec', ''), - ("selector", 'selector', ''), - ("provider-name", 'providerName', ''), + ("spec", "spec", ""), + ("selector", "selector", ""), + ("provider-name", "providerName", ""), ] helpers.convert_mapping_to_xml(jmsm, data, mapping, fail_required=True) - checks = data.get('checks', []) + checks = data.get("checks", []) if len(checks) > 0: - msgchecks = XML.SubElement(jmsm, 'checks') + msgchecks = XML.SubElement(jmsm, "checks") for check in checks: - msgcheck = XML.SubElement(msgchecks, namespace + - 'messaging.checks.MsgCheck') - mapping = [ - ('field', 'field', ''), - ('expected-value', 'expectedValue', ''), - ] - helpers.convert_mapping_to_xml( - msgcheck, check, mapping, fail_required=True) + msgcheck = XML.SubElement( + msgchecks, namespace + "messaging.checks.MsgCheck" + ) + mapping = [("field", "field", ""), ("expected-value", "expectedValue", "")] + helpers.convert_mapping_to_xml(msgcheck, check, mapping, fail_required=True) def timed(registry, xml_parent, data): @@ -913,8 +981,8 @@ def timed(registry, xml_parent, data): triggers: - timed: "@midnight" """ - scmtrig = XML.SubElement(xml_parent, 'hudson.triggers.TimerTrigger') - XML.SubElement(scmtrig, 'spec').text = data + scmtrig = XML.SubElement(xml_parent, "hudson.triggers.TimerTrigger") + XML.SubElement(scmtrig, "spec").text = data def bitbucket(registry, xml_parent, data): @@ -927,9 +995,10 @@ def bitbucket(registry, xml_parent, data): .. literalinclude:: /../../tests/triggers/fixtures/bitbucket.yaml """ - bbtrig = XML.SubElement(xml_parent, 'com.cloudbees.jenkins.' - 'plugins.BitBucketTrigger') - XML.SubElement(bbtrig, 'spec').text = '' + bbtrig = XML.SubElement( + xml_parent, "com.cloudbees.jenkins." "plugins.BitBucketTrigger" + ) + XML.SubElement(bbtrig, "spec").text = "" def github(registry, xml_parent, data): @@ -942,9 +1011,8 @@ def github(registry, xml_parent, data): triggers: - github """ - ghtrig = XML.SubElement(xml_parent, 'com.cloudbees.jenkins.' - 'GitHubPushTrigger') - XML.SubElement(ghtrig, 'spec').text = '' + ghtrig = XML.SubElement(xml_parent, "com.cloudbees.jenkins." "GitHubPushTrigger") + XML.SubElement(ghtrig, "spec").text = "" def github_pull_request(registry, xml_parent, data): @@ -1028,183 +1096,174 @@ def github_pull_request(registry, xml_parent, data): /../../tests/triggers/fixtures/github-pull-request-minimal.yaml :language: yaml """ - ghprb = XML.SubElement(xml_parent, 'org.jenkinsci.plugins.ghprb.' - 'GhprbTrigger') + ghprb = XML.SubElement(xml_parent, "org.jenkinsci.plugins.ghprb." "GhprbTrigger") mapping = [ - ('cron', 'spec', ''), - ('allow-whitelist-orgs-as-admins', - 'allowMembersOfWhitelistedOrgsAsAdmin', False), - ('cron', 'cron', ''), - ('trigger-phrase', 'triggerPhrase', ''), - ('skip-build-phrase', 'skipBuildPhrase', ''), - ('only-trigger-phrase', 'onlyTriggerPhrase', False), - ('github-hooks', 'useGitHubHooks', False), - ('permit-all', 'permitAll', False), - ('auto-close-on-fail', - 'autoCloseFailedPullRequests', False), + ("cron", "spec", ""), + ( + "allow-whitelist-orgs-as-admins", + "allowMembersOfWhitelistedOrgsAsAdmin", + False, + ), + ("cron", "cron", ""), + ("trigger-phrase", "triggerPhrase", ""), + ("skip-build-phrase", "skipBuildPhrase", ""), + ("only-trigger-phrase", "onlyTriggerPhrase", False), + ("github-hooks", "useGitHubHooks", False), + ("permit-all", "permitAll", False), + ("auto-close-on-fail", "autoCloseFailedPullRequests", False), ] - admin_string = "\n".join(data.get('admin-list', [])) - XML.SubElement(ghprb, 'adminlist').text = admin_string - white_string = "\n".join(data.get('white-list', [])) - XML.SubElement(ghprb, 'whitelist').text = white_string - org_string = "\n".join(data.get('org-list', [])) - XML.SubElement(ghprb, 'orgslist').text = org_string - white_list_labels_string = "\n".join(data.get('white-list-labels', [])) - XML.SubElement(ghprb, 'whiteListLabels').text = white_list_labels_string - black_list_labels_string = "\n".join(data.get('black-list-labels', [])) - XML.SubElement(ghprb, 'blackListLabels').text = black_list_labels_string - excluded_regions_string = "\n".join(data.get('excluded-regions', [])) - XML.SubElement(ghprb, 'excludedRegions').text = excluded_regions_string - included_regions_string = "\n".join(data.get('included-regions', [])) - XML.SubElement(ghprb, 'includedRegions').text = included_regions_string - - build_desc_template = data.get('build-desc-template', '') + admin_string = "\n".join(data.get("admin-list", [])) + XML.SubElement(ghprb, "adminlist").text = admin_string + white_string = "\n".join(data.get("white-list", [])) + XML.SubElement(ghprb, "whitelist").text = white_string + org_string = "\n".join(data.get("org-list", [])) + XML.SubElement(ghprb, "orgslist").text = org_string + white_list_labels_string = "\n".join(data.get("white-list-labels", [])) + XML.SubElement(ghprb, "whiteListLabels").text = white_list_labels_string + black_list_labels_string = "\n".join(data.get("black-list-labels", [])) + XML.SubElement(ghprb, "blackListLabels").text = black_list_labels_string + excluded_regions_string = "\n".join(data.get("excluded-regions", [])) + XML.SubElement(ghprb, "excludedRegions").text = excluded_regions_string + included_regions_string = "\n".join(data.get("included-regions", [])) + XML.SubElement(ghprb, "includedRegions").text = included_regions_string + + build_desc_template = data.get("build-desc-template", "") if build_desc_template: - XML.SubElement(ghprb, 'buildDescTemplate').text = str( - build_desc_template) + XML.SubElement(ghprb, "buildDescTemplate").text = str(build_desc_template) - helpers.convert_mapping_to_xml( - ghprb, data, mapping, fail_required=False) - white_list_target_branches = data.get('white-list-target-branches', []) + helpers.convert_mapping_to_xml(ghprb, data, mapping, fail_required=False) + white_list_target_branches = data.get("white-list-target-branches", []) if white_list_target_branches: - ghprb_wltb = XML.SubElement(ghprb, 'whiteListTargetBranches') + ghprb_wltb = XML.SubElement(ghprb, "whiteListTargetBranches") for branch in white_list_target_branches: - be = XML.SubElement(ghprb_wltb, 'org.jenkinsci.plugins.' - 'ghprb.GhprbBranch') - XML.SubElement(be, 'branch').text = str(branch) + be = XML.SubElement( + ghprb_wltb, "org.jenkinsci.plugins." "ghprb.GhprbBranch" + ) + XML.SubElement(be, "branch").text = str(branch) - black_list_target_branches = data.get('black-list-target-branches', []) + black_list_target_branches = data.get("black-list-target-branches", []) if black_list_target_branches: - ghprb_bltb = XML.SubElement(ghprb, 'blackListTargetBranches') + ghprb_bltb = XML.SubElement(ghprb, "blackListTargetBranches") for branch in black_list_target_branches: - be = XML.SubElement(ghprb_bltb, 'org.jenkinsci.plugins.' - 'ghprb.GhprbBranch') - XML.SubElement(be, 'branch').text = str(branch) + be = XML.SubElement( + ghprb_bltb, "org.jenkinsci.plugins." "ghprb.GhprbBranch" + ) + XML.SubElement(be, "branch").text = str(branch) - auth_id = data.get('auth-id', '') + auth_id = data.get("auth-id", "") if auth_id: - XML.SubElement(ghprb, 'gitHubAuthId').text = str(auth_id) + XML.SubElement(ghprb, "gitHubAuthId").text = str(auth_id) # PR status update fields - status_context = data.get('status-context', '') - triggered_status = data.get('triggered-status', '') - started_status = data.get('started-status', '') - status_url = data.get('status-url', '') - status_add_test_results = data.get('status-add-test-results', '') - success_status = data.get('success-status', '') - failure_status = data.get('failure-status', '') - error_status = data.get('error-status', '') + status_context = data.get("status-context", "") + triggered_status = data.get("triggered-status", "") + started_status = data.get("started-status", "") + status_url = data.get("status-url", "") + status_add_test_results = data.get("status-add-test-results", "") + success_status = data.get("success-status", "") + failure_status = data.get("failure-status", "") + error_status = data.get("error-status", "") # is status handling is required? requires_status = ( - status_context or - triggered_status or - started_status or - status_url or - status_add_test_results or - success_status or - failure_status or - error_status + status_context + or triggered_status + or started_status + or status_url + or status_add_test_results + or success_status + or failure_status + or error_status ) # is status message handling required? - requires_status_message = ( - success_status or - failure_status or - error_status - ) + requires_status_message = success_status or failure_status or error_status # is comment handling required? - success_comment = data.get('success-comment', '') - failure_comment = data.get('failure-comment', '') - error_comment = data.get('error-comment', '') - requires_job_comment = ( - success_comment or - failure_comment or - error_comment - ) + success_comment = data.get("success-comment", "") + failure_comment = data.get("failure-comment", "") + error_comment = data.get("error-comment", "") + requires_job_comment = success_comment or failure_comment or error_comment # When the value of cancel-builds-on-update comes from deep_formatter, # the value is of type 'str', otherwise the value is of type 'bool' - cancel_builds_on_update = str( - data.get('cancel-builds-on-update', False)).lower() == 'true' + cancel_builds_on_update = ( + str(data.get("cancel-builds-on-update", False)).lower() == "true" + ) # We want to have only one 'extensions' subelement, even if status # handling, comment handling and other extensions are enabled. if requires_status or requires_job_comment or cancel_builds_on_update: - extensions = XML.SubElement(ghprb, 'extensions') + extensions = XML.SubElement(ghprb, "extensions") # Both comment and status elements have this same type. Using a const is # much easier to read than repeating the tokens for this class each time # it's used - comment_type = 'org.jenkinsci.plugins.ghprb.extensions.comments.' - comment_type = comment_type + 'GhprbBuildResultMessage' + comment_type = "org.jenkinsci.plugins.ghprb.extensions.comments." + comment_type = comment_type + "GhprbBuildResultMessage" if requires_status: - simple_status = XML.SubElement(extensions, - 'org.jenkinsci.plugins' - '.ghprb.extensions.status.' - 'GhprbSimpleStatus') + simple_status = XML.SubElement( + extensions, + "org.jenkinsci.plugins" ".ghprb.extensions.status." "GhprbSimpleStatus", + ) if status_context: - XML.SubElement(simple_status, 'commitStatusContext').text = str( - status_context) + XML.SubElement(simple_status, "commitStatusContext").text = str( + status_context + ) if triggered_status: - XML.SubElement(simple_status, 'triggeredStatus').text = str( - triggered_status) + XML.SubElement(simple_status, "triggeredStatus").text = str( + triggered_status + ) if started_status: - XML.SubElement(simple_status, 'startedStatus').text = str( - started_status) + XML.SubElement(simple_status, "startedStatus").text = str(started_status) if status_url: - XML.SubElement(simple_status, 'statusUrl').text = str( - status_url) + XML.SubElement(simple_status, "statusUrl").text = str(status_url) if status_add_test_results: - XML.SubElement(simple_status, 'addTestResults').text = str( - status_add_test_results).lower() + XML.SubElement(simple_status, "addTestResults").text = str( + status_add_test_results + ).lower() if requires_status_message: - completed_elem = XML.SubElement(simple_status, 'completedStatus') + completed_elem = XML.SubElement(simple_status, "completedStatus") if success_status: success_elem = XML.SubElement(completed_elem, comment_type) - XML.SubElement(success_elem, 'message').text = str( - success_status) - XML.SubElement(success_elem, 'result').text = 'SUCCESS' + XML.SubElement(success_elem, "message").text = str(success_status) + XML.SubElement(success_elem, "result").text = "SUCCESS" if failure_status: failure_elem = XML.SubElement(completed_elem, comment_type) - XML.SubElement(failure_elem, 'message').text = str( - failure_status) - XML.SubElement(failure_elem, 'result').text = 'FAILURE' + XML.SubElement(failure_elem, "message").text = str(failure_status) + XML.SubElement(failure_elem, "result").text = "FAILURE" if error_status: error_elem = XML.SubElement(completed_elem, comment_type) - XML.SubElement(error_elem, 'message').text = str(error_status) - XML.SubElement(error_elem, 'result').text = 'ERROR' + XML.SubElement(error_elem, "message").text = str(error_status) + XML.SubElement(error_elem, "result").text = "ERROR" # job comment handling if requires_job_comment: - build_status = XML.SubElement(extensions, - 'org.jenkinsci.plugins.ghprb.extensions' - '.comments.' - 'GhprbBuildStatus') - messages_elem = XML.SubElement(build_status, 'messages') + build_status = XML.SubElement( + extensions, + "org.jenkinsci.plugins.ghprb.extensions" ".comments." "GhprbBuildStatus", + ) + messages_elem = XML.SubElement(build_status, "messages") if success_comment: success_comment_elem = XML.SubElement(messages_elem, comment_type) - XML.SubElement(success_comment_elem, 'message').text = str( - success_comment) - XML.SubElement(success_comment_elem, 'result').text = 'SUCCESS' + XML.SubElement(success_comment_elem, "message").text = str(success_comment) + XML.SubElement(success_comment_elem, "result").text = "SUCCESS" if failure_comment: failure_comment_elem = XML.SubElement(messages_elem, comment_type) - XML.SubElement(failure_comment_elem, 'message').text = str( - failure_comment) - XML.SubElement(failure_comment_elem, 'result').text = 'FAILURE' + XML.SubElement(failure_comment_elem, "message").text = str(failure_comment) + XML.SubElement(failure_comment_elem, "result").text = "FAILURE" if error_comment: error_comment_elem = XML.SubElement(messages_elem, comment_type) - XML.SubElement(error_comment_elem, 'message').text = str( - error_comment) - XML.SubElement(error_comment_elem, 'result').text = 'ERROR' + XML.SubElement(error_comment_elem, "message").text = str(error_comment) + XML.SubElement(error_comment_elem, "result").text = "ERROR" if cancel_builds_on_update: - XML.SubElement(extensions, - 'org.jenkinsci.plugins.ghprb.extensions.' - 'build.GhprbCancelBuildsOnUpdate') + XML.SubElement( + extensions, + "org.jenkinsci.plugins.ghprb.extensions." "build.GhprbCancelBuildsOnUpdate", + ) def gitlab_merge_request(registry, xml_parent, data): @@ -1246,26 +1305,28 @@ def gitlab_merge_request(registry, xml_parent, data): .. literalinclude:: \ /../../tests/triggers/fixtures/gitlab-merge-request002.yaml """ - ghprb = XML.SubElement(xml_parent, 'org.jenkinsci.plugins.gitlab.' - 'GitlabBuildTrigger') + ghprb = XML.SubElement( + xml_parent, "org.jenkinsci.plugins.gitlab." "GitlabBuildTrigger" + ) - plugin_info = registry.get_plugin_info('Gitlab Merge Request Builder') + plugin_info = registry.get_plugin_info("Gitlab Merge Request Builder") # Note: Assume latest version of plugin is preferred config format plugin_ver = pkg_resources.parse_version( - plugin_info.get('version', str(sys.maxsize))) + plugin_info.get("version", str(sys.maxsize)) + ) if plugin_ver >= pkg_resources.parse_version("2.0.0"): mapping = [ - ('cron', 'spec', None), - ('project-path', 'projectPath', None), - ('target-branch-regex', 'targetBranchRegex', ''), - ('use-http-url', 'useHttpUrl', False), - ('assignee-filter', 'assigneeFilter', 'jenkins'), - ('tag-filter', 'tagFilter', 'Build'), - ('trigger-comment', 'triggerComment', ''), - ('auto-close-failed', 'autoCloseFailed', False), - ('auto-merge-passed', 'autoMergePassed', False), + ("cron", "spec", None), + ("project-path", "projectPath", None), + ("target-branch-regex", "targetBranchRegex", ""), + ("use-http-url", "useHttpUrl", False), + ("assignee-filter", "assigneeFilter", "jenkins"), + ("tag-filter", "tagFilter", "Build"), + ("trigger-comment", "triggerComment", ""), + ("auto-close-failed", "autoCloseFailed", False), + ("auto-merge-passed", "autoMergePassed", False), ] else: # The plugin version is < 2.0.0 @@ -1275,17 +1336,16 @@ def gitlab_merge_request(registry, xml_parent, data): # have them take effect. Also, cron and projectPath are prefixed with # underscores in the plugin, but spec is not. mapping = [ - ('cron', 'spec', None), - ('cron', '__cron', None), - ('project-path', '__projectPath', None), - ('use-http-url', '__useHttpUrl', False), - ('assignee-filter', '__assigneeFilter', 'jenkins'), - ('tag-filter', '__tagFilter', 'Build'), - ('trigger-comment', '__triggerComment', ''), - ('publish-build-progress-messages', - '__publishBuildProgressMessages', True), - ('auto-close-failed', '__autoCloseFailed', False), - ('auto-merge-passed', '__autoMergePassed', False), + ("cron", "spec", None), + ("cron", "__cron", None), + ("project-path", "__projectPath", None), + ("use-http-url", "__useHttpUrl", False), + ("assignee-filter", "__assigneeFilter", "jenkins"), + ("tag-filter", "__tagFilter", "Build"), + ("trigger-comment", "__triggerComment", ""), + ("publish-build-progress-messages", "__publishBuildProgressMessages", True), + ("auto-close-failed", "__autoCloseFailed", False), + ("auto-merge-passed", "__autoMergePassed", False), ] helpers.convert_mapping_to_xml(ghprb, data, mapping, True) @@ -1381,82 +1441,77 @@ def gitlab(registry, xml_parent, data): .. literalinclude:: /../../tests/triggers/fixtures/gitlab004.yaml :language: yaml """ + def _add_xml(elem, name, value): XML.SubElement(elem, name).text = value gitlab = XML.SubElement( - xml_parent, 'com.dabsquared.gitlabjenkins.GitLabPushTrigger' + xml_parent, "com.dabsquared.gitlabjenkins.GitLabPushTrigger" ) - plugin_info = registry.get_plugin_info('GitLab Plugin') + plugin_info = registry.get_plugin_info("GitLab Plugin") # Note: Assume latest version of plugin is preferred config format plugin_ver = pkg_resources.parse_version( - plugin_info.get('version', str(sys.maxsize))) + plugin_info.get("version", str(sys.maxsize)) + ) - valid_merge_request = ['never', 'source', 'both'] + valid_merge_request = ["never", "source", "both"] if plugin_ver >= pkg_resources.parse_version("1.1.26"): mapping = [ - ('trigger-open-merge-request-push', - 'triggerOpenMergeRequestOnPush', 'never', valid_merge_request), + ( + "trigger-open-merge-request-push", + "triggerOpenMergeRequestOnPush", + "never", + valid_merge_request, + ) ] - helpers.convert_mapping_to_xml( - gitlab, data, mapping, fail_required=True) + helpers.convert_mapping_to_xml(gitlab, data, mapping, fail_required=True) else: mapping = [ - ('trigger-open-merge-request-push', - 'triggerOpenMergeRequestOnPush', True), - ] - helpers.convert_mapping_to_xml( - gitlab, data, mapping, fail_required=True) - - if plugin_ver < pkg_resources.parse_version('1.2.0'): - if data.get('branch-filter-type', '') == 'All': - data['branch-filter-type'] = '' - valid_filters = ['', 'NameBasedFilter', 'RegexBasedFilter'] - mapping = [ - ('branch-filter-type', 'branchFilterName', '', valid_filters), + ("trigger-open-merge-request-push", "triggerOpenMergeRequestOnPush", True) ] - helpers.convert_mapping_to_xml( - gitlab, data, mapping, fail_required=True) + helpers.convert_mapping_to_xml(gitlab, data, mapping, fail_required=True) + + if plugin_ver < pkg_resources.parse_version("1.2.0"): + if data.get("branch-filter-type", "") == "All": + data["branch-filter-type"] = "" + valid_filters = ["", "NameBasedFilter", "RegexBasedFilter"] + mapping = [("branch-filter-type", "branchFilterName", "", valid_filters)] + helpers.convert_mapping_to_xml(gitlab, data, mapping, fail_required=True) else: - valid_filters = ['All', 'NameBasedFilter', 'RegexBasedFilter'] - mapping = [ - ('branch-filter-type', 'branchFilterType', 'All', valid_filters), - ] - helpers.convert_mapping_to_xml( - gitlab, data, mapping, fail_required=True) + valid_filters = ["All", "NameBasedFilter", "RegexBasedFilter"] + mapping = [("branch-filter-type", "branchFilterType", "All", valid_filters)] + helpers.convert_mapping_to_xml(gitlab, data, mapping, fail_required=True) - XML.SubElement(gitlab, 'spec').text = '' + XML.SubElement(gitlab, "spec").text = "" mapping = [ - ('trigger-push', 'triggerOnPush', True), - ('trigger-merge-request', 'triggerOnMergeRequest', True), - ('trigger-accepted-merge-request', 'triggerOnAcceptedMergeRequest', - False), - ('trigger-closed-merge-request', 'triggerOnClosedMergeRequest', False), - ('trigger-note', 'triggerOnNoteRequest', True), - ('note-regex', 'noteRegex', 'Jenkins please retry a build'), - ('ci-skip', 'ciSkip', True), - ('wip-skip', 'skipWorkInProgressMergeRequest', True), - ('set-build-description', 'setBuildDescription', True), - ('add-note-merge-request', 'addNoteOnMergeRequest', True), - ('add-vote-merge-request', 'addVoteOnMergeRequest', True), - ('accept-merge-request-on-success', 'acceptMergeRequestOnSuccess', - False), - ('add-ci-message', 'addCiMessage', False), - ('allow-all-branches', 'allowAllBranches', False), - ('target-branch-regex', 'targetBranchRegex', ''), - ('secret-token', 'secretToken', '') + ("trigger-push", "triggerOnPush", True), + ("trigger-merge-request", "triggerOnMergeRequest", True), + ("trigger-accepted-merge-request", "triggerOnAcceptedMergeRequest", False), + ("trigger-closed-merge-request", "triggerOnClosedMergeRequest", False), + ("trigger-note", "triggerOnNoteRequest", True), + ("note-regex", "noteRegex", "Jenkins please retry a build"), + ("ci-skip", "ciSkip", True), + ("wip-skip", "skipWorkInProgressMergeRequest", True), + ("set-build-description", "setBuildDescription", True), + ("add-note-merge-request", "addNoteOnMergeRequest", True), + ("add-vote-merge-request", "addVoteOnMergeRequest", True), + ("accept-merge-request-on-success", "acceptMergeRequestOnSuccess", False), + ("add-ci-message", "addCiMessage", False), + ("allow-all-branches", "allowAllBranches", False), + ("target-branch-regex", "targetBranchRegex", ""), + ("secret-token", "secretToken", ""), ] list_mapping = ( - ('include-branches', 'includeBranchesSpec', []), - ('exclude-branches', 'excludeBranchesSpec', []), + ("include-branches", "includeBranchesSpec", []), + ("exclude-branches", "excludeBranchesSpec", []), ) helpers.convert_mapping_to_xml(gitlab, data, mapping, fail_required=True) for yaml_name, xml_name, default_val in list_mapping: - value = ', '.join(data.get(yaml_name, default_val)) + value = ", ".join(data.get(yaml_name, default_val)) _add_xml(gitlab, xml_name, value) @@ -1487,40 +1542,40 @@ def build_result(registry, xml_parent, data): /../../tests/triggers/fixtures/build-result-minimal.yaml :language: yaml """ - brt = XML.SubElement(xml_parent, 'org.jenkinsci.plugins.' - 'buildresulttrigger.BuildResultTrigger') - brt.set('plugin', 'buildresult-trigger') - mapping = [ - ('cron', 'spec', ''), - ('combine', 'combinedJobs', False), - ] + brt = XML.SubElement( + xml_parent, "org.jenkinsci.plugins." "buildresulttrigger.BuildResultTrigger" + ) + brt.set("plugin", "buildresult-trigger") + mapping = [("cron", "spec", ""), ("combine", "combinedJobs", False)] helpers.convert_mapping_to_xml(brt, data, mapping, fail_required=True) - jobs_info = XML.SubElement(brt, 'jobsInfo') - result_dict = {'success': 'SUCCESS', - 'unstable': 'UNSTABLE', - 'failure': 'FAILURE', - 'not-built': 'NOT_BUILT', - 'aborted': 'ABORTED'} - for group in data['groups']: - brti = XML.SubElement(jobs_info, 'org.jenkinsci.plugins.' - 'buildresulttrigger.model.' - 'BuildResultTriggerInfo') - jobs_string = ",".join(group['jobs']) - mapping = [ - ('', 'jobNames', jobs_string, group), - ] - helpers.convert_mapping_to_xml( - brti, group, mapping, fail_required=True) - checked_results = XML.SubElement(brti, 'checkedResults') - for result in group.get('results', ['success']): - model_checked = XML.SubElement(checked_results, 'org.jenkinsci.' - 'plugins.buildresulttrigger.model.' - 'CheckedResult') - mapping = [ - ('', 'checked', result, result_dict), - ] + jobs_info = XML.SubElement(brt, "jobsInfo") + result_dict = { + "success": "SUCCESS", + "unstable": "UNSTABLE", + "failure": "FAILURE", + "not-built": "NOT_BUILT", + "aborted": "ABORTED", + } + for group in data["groups"]: + brti = XML.SubElement( + jobs_info, + "org.jenkinsci.plugins." + "buildresulttrigger.model." + "BuildResultTriggerInfo", + ) + jobs_string = ",".join(group["jobs"]) + mapping = [("", "jobNames", jobs_string, group)] + helpers.convert_mapping_to_xml(brti, group, mapping, fail_required=True) + checked_results = XML.SubElement(brti, "checkedResults") + for result in group.get("results", ["success"]): + model_checked = XML.SubElement( + checked_results, + "org.jenkinsci." "plugins.buildresulttrigger.model." "CheckedResult", + ) + mapping = [("", "checked", result, result_dict)] helpers.convert_mapping_to_xml( - model_checked, result_dict, mapping, fail_required=True) + model_checked, result_dict, mapping, fail_required=True + ) def reverse(registry, xml_parent, data): @@ -1550,32 +1605,33 @@ def reverse(registry, xml_parent, data): .. literalinclude:: /../../tests/triggers/fixtures/reverse-list.yaml """ reserveBuildTrigger = XML.SubElement( - xml_parent, 'jenkins.triggers.ReverseBuildTrigger') + xml_parent, "jenkins.triggers.ReverseBuildTrigger" + ) - supported_thresholds = ['SUCCESS', 'UNSTABLE', 'FAILURE'] + supported_thresholds = ["SUCCESS", "UNSTABLE", "FAILURE"] - XML.SubElement(reserveBuildTrigger, 'spec').text = '' + XML.SubElement(reserveBuildTrigger, "spec").text = "" - jobs = data.get('jobs') + jobs = data.get("jobs") if isinstance(jobs, list): jobs = ",".join(jobs) - XML.SubElement(reserveBuildTrigger, 'upstreamProjects').text = \ - jobs + XML.SubElement(reserveBuildTrigger, "upstreamProjects").text = jobs - threshold = XML.SubElement(reserveBuildTrigger, 'threshold') - result = str(data.get('result', 'success')).upper() + threshold = XML.SubElement(reserveBuildTrigger, "threshold") + result = str(data.get("result", "success")).upper() if result not in supported_thresholds: raise jenkins_jobs.errors.JenkinsJobsException( - "Choice should be one of the following options: %s." % - ", ".join(supported_thresholds)) - XML.SubElement(threshold, 'name').text = \ - hudson_model.THRESHOLDS[result]['name'] - XML.SubElement(threshold, 'ordinal').text = \ - hudson_model.THRESHOLDS[result]['ordinal'] - XML.SubElement(threshold, 'color').text = \ - hudson_model.THRESHOLDS[result]['color'] - XML.SubElement(threshold, 'completeBuild').text = \ - str(hudson_model.THRESHOLDS[result]['complete']).lower() + "Choice should be one of the following options: %s." + % ", ".join(supported_thresholds) + ) + XML.SubElement(threshold, "name").text = hudson_model.THRESHOLDS[result]["name"] + XML.SubElement(threshold, "ordinal").text = hudson_model.THRESHOLDS[result][ + "ordinal" + ] + XML.SubElement(threshold, "color").text = hudson_model.THRESHOLDS[result]["color"] + XML.SubElement(threshold, "completeBuild").text = str( + hudson_model.THRESHOLDS[result]["complete"] + ).lower() def monitor_folders(registry, xml_parent, data): @@ -1609,25 +1665,26 @@ def monitor_folders(registry, xml_parent, data): /../../tests/triggers/fixtures/monitor-folders-minimal.yaml :language: yaml """ - ft = XML.SubElement(xml_parent, ('org.jenkinsci.plugins.fstrigger.' - 'triggers.FolderContentTrigger')) - ft.set('plugin', 'fstrigger') + ft = XML.SubElement( + xml_parent, ("org.jenkinsci.plugins.fstrigger." "triggers.FolderContentTrigger") + ) + ft.set("plugin", "fstrigger") - mappings = [ - ('path', 'path', ''), - ('cron', 'spec', ''), - ] + mappings = [("path", "path", ""), ("cron", "spec", "")] helpers.convert_mapping_to_xml(ft, data, mappings, fail_required=True) - includes = data.get('includes', '') - XML.SubElement(ft, 'includes').text = ",".join(includes) - XML.SubElement(ft, 'excludes').text = data.get('excludes', '') - XML.SubElement(ft, 'excludeCheckLastModificationDate').text = str( - not data.get('check-modification-date', True)).lower() - XML.SubElement(ft, 'excludeCheckContent').text = str( - not data.get('check-content', True)).lower() - XML.SubElement(ft, 'excludeCheckFewerOrMoreFiles').text = str( - not data.get('check-fewer', True)).lower() + includes = data.get("includes", "") + XML.SubElement(ft, "includes").text = ",".join(includes) + XML.SubElement(ft, "excludes").text = data.get("excludes", "") + XML.SubElement(ft, "excludeCheckLastModificationDate").text = str( + not data.get("check-modification-date", True) + ).lower() + XML.SubElement(ft, "excludeCheckContent").text = str( + not data.get("check-content", True) + ).lower() + XML.SubElement(ft, "excludeCheckFewerOrMoreFiles").text = str( + not data.get("check-fewer", True) + ).lower() def monitor_files(registry, xml_parent, data): @@ -1707,73 +1764,83 @@ def monitor_files(registry, xml_parent, data): /../../tests/triggers/fixtures/monitor-files-full.yaml :language: yaml """ - ft_prefix = 'org.jenkinsci.plugins.fstrigger.triggers.' - valid_strategies = ['LATEST', 'IGNORE'] + ft_prefix = "org.jenkinsci.plugins.fstrigger.triggers." + valid_strategies = ["LATEST", "IGNORE"] valid_content_types = { - 'simple': ['Simple', '', '', []], - 'jar': ['JAR', '', '', []], - 'tar': ['Tar', '', '', []], - 'zip': ['ZIP', '', '', []], - 'source-manifest': ['SourceManifest'], - 'jar-manifest': ['JARManifest'], - 'properties': ['Properties'], - 'xml': ['XML', 'expressions', 'expression', None], - 'text': ['Text', 'regexElements', 'regex', None] + "simple": ["Simple", "", "", []], + "jar": ["JAR", "", "", []], + "tar": ["Tar", "", "", []], + "zip": ["ZIP", "", "", []], + "source-manifest": ["SourceManifest"], + "jar-manifest": ["JARManifest"], + "properties": ["Properties"], + "xml": ["XML", "expressions", "expression", None], + "text": ["Text", "regexElements", "regex", None], } - ft = XML.SubElement(xml_parent, ft_prefix + 'FileNameTrigger') - XML.SubElement(ft, 'spec').text = str(data.get('cron', '')) - files = data.get('files', []) + ft = XML.SubElement(xml_parent, ft_prefix + "FileNameTrigger") + XML.SubElement(ft, "spec").text = str(data.get("cron", "")) + files = data.get("files", []) if not files: - raise JenkinsJobsException('At least one file must be provided') + raise JenkinsJobsException("At least one file must be provided") - files_tag = XML.SubElement(ft, 'fileInfo') + files_tag = XML.SubElement(ft, "fileInfo") for file_info in files: - file_tag = XML.SubElement(files_tag, ft_prefix + 'FileNameTriggerInfo') - check_content = file_info.get('check-content', []) + file_tag = XML.SubElement(files_tag, ft_prefix + "FileNameTriggerInfo") + check_content = file_info.get("check-content", []) files_mapping = [ - ('path', 'filePathPattern', None), - ('strategy', 'strategy', 'LATEST', valid_strategies), - ('', 'inspectingContentFile', bool(check_content)), + ("path", "filePathPattern", None), + ("strategy", "strategy", "LATEST", valid_strategies), + ("", "inspectingContentFile", bool(check_content)), ] helpers.convert_mapping_to_xml( - file_tag, file_info, files_mapping, fail_required=True) + file_tag, file_info, files_mapping, fail_required=True + ) - base_content_tag = XML.SubElement(file_tag, 'contentFileTypes') + base_content_tag = XML.SubElement(file_tag, "contentFileTypes") for content in check_content: type_name = next(iter(content.keys())) if type_name not in valid_content_types: - raise InvalidAttributeError('check-content', type_name, - valid_content_types.keys()) + raise InvalidAttributeError( + "check-content", type_name, valid_content_types.keys() + ) content_type = valid_content_types.get(type_name) if len(content_type) == 1: - class_name = '{0}filecontent.{1}FileContent'.format( - ft_prefix, content_type[0]) + class_name = "{0}filecontent.{1}FileContent".format( + ft_prefix, content_type[0] + ) content_data = content.get(type_name) if not content_data: - raise JenkinsJobsException("Need to specify something " - "under " + type_name) + raise JenkinsJobsException( + "Need to specify something " "under " + type_name + ) for entry in content_data: content_tag = XML.SubElement(base_content_tag, class_name) - keys = entry.get('keys', []) + keys = entry.get("keys", []) if keys: - XML.SubElement(content_tag, 'keys2Inspect' - ).text = ",".join(keys) - XML.SubElement(content_tag, 'allKeys').text = str( - entry.get('all-keys', True)).lower() + XML.SubElement(content_tag, "keys2Inspect").text = ",".join( + keys + ) + XML.SubElement(content_tag, "allKeys").text = str( + entry.get("all-keys", True) + ).lower() else: if content[type_name]: sub_entries = content_type[3] if sub_entries is None: sub_entries = content[type_name] - build_content_type(base_content_tag, sub_entries, - ft_prefix + 'filecontent', - 'FileContent', 'FileContentEntry', - *content_type[0:3]) + build_content_type( + base_content_tag, + sub_entries, + ft_prefix + "filecontent", + "FileContent", + "FileContentEntry", + *content_type[0:3] + ) if bool(check_content): - XML.SubElement(file_tag, - 'doNotCheckLastModificationDate').text = str( - file_info.get('ignore-modificaton-date', True)).lower() + XML.SubElement(file_tag, "doNotCheckLastModificationDate").text = str( + file_info.get("ignore-modificaton-date", True) + ).lower() def ivy(registry, xml_parent, data): @@ -1799,27 +1866,25 @@ def ivy(registry, xml_parent, data): .. literalinclude:: /../../tests/triggers/fixtures/ivy.yaml """ - it = XML.SubElement(xml_parent, - 'org.jenkinsci.plugins.ivytrigger.IvyTrigger') + it = XML.SubElement(xml_parent, "org.jenkinsci.plugins.ivytrigger.IvyTrigger") mapping = [ - ('path', 'ivyPath', None), - ('settings-path', 'ivySettingsPath', None), - ('properties-content', 'propertiesContent', None), - ('debug', 'debug', False), - ('download-artifacts', 'downloadArtifacts', True), - ('enable-concurrent', 'enableConcurrentBuild', False), - ('cron', 'spec', ''), + ("path", "ivyPath", None), + ("settings-path", "ivySettingsPath", None), + ("properties-content", "propertiesContent", None), + ("debug", "debug", False), + ("download-artifacts", "downloadArtifacts", True), + ("enable-concurrent", "enableConcurrentBuild", False), + ("cron", "spec", ""), ] helpers.convert_mapping_to_xml(it, data, mapping, fail_required=False) - properties_file_path = data.get('properties-file', []) - XML.SubElement(it, 'propertiesFilePath').text = ";".join( - properties_file_path) + properties_file_path = data.get("properties-file", []) + XML.SubElement(it, "propertiesFilePath").text = ";".join(properties_file_path) - label = data.get('label') - XML.SubElement(it, 'labelRestriction').text = str(bool(label)).lower() + label = data.get("label") + XML.SubElement(it, "labelRestriction").text = str(bool(label)).lower() if label: - XML.SubElement(it, 'triggerLabel').text = label + XML.SubElement(it, "triggerLabel").text = label def script(registry, xml_parent, data): @@ -1847,20 +1912,17 @@ def script(registry, xml_parent, data): .. literalinclude:: /../../tests/triggers/fixtures/script-minimal.yaml :language: yaml """ - st = XML.SubElement( - xml_parent, - 'org.jenkinsci.plugins.scripttrigger.ScriptTrigger' - ) - st.set('plugin', 'scripttrigger') - label = data.get('label') + st = XML.SubElement(xml_parent, "org.jenkinsci.plugins.scripttrigger.ScriptTrigger") + st.set("plugin", "scripttrigger") + label = data.get("label") mappings = [ - ('script', 'script', ''), - ('script-file-path', 'scriptFilePath', ''), - ('cron', 'spec', ''), - ('enable-concurrent', 'enableConcurrentBuild', False), - ('exit-code', 'exitCode', 0), - ('', 'labelRestriction', bool(label)), - ('', 'triggerLabel', label), + ("script", "script", ""), + ("script-file-path", "scriptFilePath", ""), + ("cron", "spec", ""), + ("enable-concurrent", "enableConcurrentBuild", False), + ("exit-code", "exitCode", 0), + ("", "labelRestriction", bool(label)), + ("", "triggerLabel", label), ] helpers.convert_mapping_to_xml(st, data, mappings, fail_required=False) @@ -1896,21 +1958,20 @@ def groovy_script(registry, xml_parent, data): :language: yaml """ gst = XML.SubElement( - xml_parent, - 'org.jenkinsci.plugins.scripttrigger.groovy.GroovyScriptTrigger' + xml_parent, "org.jenkinsci.plugins.scripttrigger.groovy.GroovyScriptTrigger" ) - gst.set('plugin', 'scripttrigger') + gst.set("plugin", "scripttrigger") - label = data.get('label') + label = data.get("label") mappings = [ - ('system-script', 'groovySystemScript', False), - ('script', 'groovyExpression', ''), - ('script-file-path', 'groovyFilePath', ''), - ('property-file-path', 'propertiesFilePath', ''), - ('enable-concurrent', 'enableConcurrentBuild', False), - ('cron', 'spec', ''), - ('', 'labelRestriction', bool(label)), - ('', 'triggerLabel', label), + ("system-script", "groovySystemScript", False), + ("script", "groovyExpression", ""), + ("script-file-path", "groovyFilePath", ""), + ("property-file-path", "propertiesFilePath", ""), + ("enable-concurrent", "enableConcurrentBuild", False), + ("cron", "spec", ""), + ("", "labelRestriction", bool(label)), + ("", "triggerLabel", label), ] helpers.convert_mapping_to_xml(gst, data, mappings, fail_required=False) @@ -1939,27 +2000,18 @@ def rabbitmq(registry, xml_parent, data): :language: yaml """ - rabbitmq_prefix = 'org.jenkinsci.plugins.rabbitmqbuildtrigger.' - rabbitmq = XML.SubElement( - xml_parent, - rabbitmq_prefix + 'RemoteBuildTrigger') - filters = data.get('filters', []) - filter_mapping = [ - ('field', 'field', None), - ('value', 'value', None), - ] + rabbitmq_prefix = "org.jenkinsci.plugins.rabbitmqbuildtrigger." + rabbitmq = XML.SubElement(xml_parent, rabbitmq_prefix + "RemoteBuildTrigger") + filters = data.get("filters", []) + filter_mapping = [("field", "field", None), ("value", "value", None)] if filters: - filters_tag = XML.SubElement(rabbitmq, 'filters') + filters_tag = XML.SubElement(rabbitmq, "filters") for filter_data in filters: - filter_tag = XML.SubElement( - filters_tag, - rabbitmq_prefix + 'Filter') + filter_tag = XML.SubElement(filters_tag, rabbitmq_prefix + "Filter") helpers.convert_mapping_to_xml( - filter_tag, filter_data, filter_mapping, fail_required=True) - mapping = [ - ('', 'spec', ''), - ('token', 'remoteBuildToken', None), - ] + filter_tag, filter_data, filter_mapping, fail_required=True + ) + mapping = [("", "spec", ""), ("token", "remoteBuildToken", None)] helpers.convert_mapping_to_xml(rabbitmq, data, mapping, fail_required=True) @@ -1981,14 +2033,10 @@ def parameterized_timer(parser, xml_parent, data): param_timer = XML.SubElement( xml_parent, - 'org.jenkinsci.plugins.parameterizedscheduler.' - 'ParameterizedTimerTrigger') - mapping = [ - ('', 'spec', ''), - ('cron', 'parameterizedSpecification', None), - ] - helpers.convert_mapping_to_xml( - param_timer, data, mapping, fail_required=True) + "org.jenkinsci.plugins.parameterizedscheduler." "ParameterizedTimerTrigger", + ) + mapping = [("", "spec", ""), ("cron", "parameterizedSpecification", None)] + helpers.convert_mapping_to_xml(param_timer, data, mapping, fail_required=True) def jira_changelog(registry, xml_parent, data): @@ -2045,52 +2093,62 @@ def jira_changelog(registry, xml_parent, data): /../../tests/triggers/fixtures/jira-changelog-full.yaml :language: yaml """ - jcht = XML.SubElement(xml_parent, 'com.ceilfors.jenkins.plugins.' - 'jiratrigger.JiraChangelogTrigger') - jcht.set('plugin', 'jira-trigger') + jcht = XML.SubElement( + xml_parent, "com.ceilfors.jenkins.plugins." "jiratrigger.JiraChangelogTrigger" + ) + jcht.set("plugin", "jira-trigger") - mapping = [ - ('jql-filter', 'jqlFilter', ''), - ] + mapping = [("jql-filter", "jqlFilter", "")] helpers.convert_mapping_to_xml(jcht, data, mapping, fail_required=True) - changelog = XML.SubElement(jcht, 'changelogMatchers') + changelog = XML.SubElement(jcht, "changelogMatchers") mappings = [ - ('field', 'field', ''), - ('new-value', 'newValue', ''), - ('old-value', 'oldValue', ''), - ('compare-new-value', 'comparingNewValue', False), - ('compare-old-value', 'comparingOldValue', False), + ("field", "field", ""), + ("new-value", "newValue", ""), + ("old-value", "oldValue", ""), + ("compare-new-value", "comparingNewValue", False), + ("compare-old-value", "comparingOldValue", False), ] - for matcher in data.get('changelog-matchers', []): + for matcher in data.get("changelog-matchers", []): + + fieldtype = matcher.get("field-type") + if fieldtype == "CUSTOM": + parent_tag = XML.SubElement( + changelog, + "com.ceilfors.jenkins." + "plugins.jiratrigger.changelog." + "CustomFieldChangelogMatcher", + ) + XML.SubElement(parent_tag, "fieldType").text = "CUSTOM" + + elif fieldtype == "JIRA": + parent_tag = XML.SubElement( + changelog, + "com.ceilfors.jenkins." + "plugins.jiratrigger.changelog." + "JiraFieldChangelogMatcher", + ) + XML.SubElement(parent_tag, "fieldType").text = "JIRA" - fieldtype = matcher.get('field-type') - if fieldtype == 'CUSTOM': - parent_tag = XML.SubElement(changelog, 'com.ceilfors.jenkins.' - 'plugins.jiratrigger.changelog.' - 'CustomFieldChangelogMatcher') - XML.SubElement(parent_tag, 'fieldType').text = 'CUSTOM' - - elif fieldtype == 'JIRA': - parent_tag = XML.SubElement(changelog, 'com.ceilfors.jenkins.' - 'plugins.jiratrigger.changelog.' - 'JiraFieldChangelogMatcher') - XML.SubElement(parent_tag, 'fieldType').text = 'JIRA' - - helpers.convert_mapping_to_xml(parent_tag, matcher, - mappings, fail_required=True) + helpers.convert_mapping_to_xml( + parent_tag, matcher, mappings, fail_required=True + ) - param = XML.SubElement(jcht, 'parameterMappings') + param = XML.SubElement(jcht, "parameterMappings") parameter_mappings = [ - ('jenkins-parameter', 'jenkinsParameter', ''), - ('issue-attribute-path', 'issueAttributePath', ''), + ("jenkins-parameter", "jenkinsParameter", ""), + ("issue-attribute-path", "issueAttributePath", ""), ] - for parameter in data.get('parameter-mapping', []): - parent = XML.SubElement(param, 'com.ceilfors.jenkins.plugins.' - 'jiratrigger.parameter.' - 'IssueAttributePathParameterMapping') + for parameter in data.get("parameter-mapping", []): + parent = XML.SubElement( + param, + "com.ceilfors.jenkins.plugins." + "jiratrigger.parameter." + "IssueAttributePathParameterMapping", + ) helpers.convert_mapping_to_xml( - parent, parameter, parameter_mappings, fail_required=True) + parent, parameter, parameter_mappings, fail_required=True + ) def jira_comment_trigger(registry, xml_parent, data): @@ -2122,26 +2180,31 @@ def jira_comment_trigger(registry, xml_parent, data): /../../tests/triggers/fixtures/jira-comment-trigger-full.yaml :language: yaml """ - jct = XML.SubElement(xml_parent, 'com.ceilfors.jenkins.plugins.' - 'jiratrigger.JiraCommentTrigger') - jct.set('plugin', 'jira-trigger') + jct = XML.SubElement( + xml_parent, "com.ceilfors.jenkins.plugins." "jiratrigger.JiraCommentTrigger" + ) + jct.set("plugin", "jira-trigger") mapping = [ - ('jql-filter', 'jqlFilter', ''), - ('comment-pattern', 'commentPattern', '(?i)build this please'), + ("jql-filter", "jqlFilter", ""), + ("comment-pattern", "commentPattern", "(?i)build this please"), ] helpers.convert_mapping_to_xml(jct, data, mapping, fail_required=True) - param = XML.SubElement(jct, 'parameterMappings') - for parameter in data.get('parameter-mapping', []): - parent = XML.SubElement(param, 'com.ceilfors.jenkins.plugins.' - 'jiratrigger.parameter.' - 'IssueAttributePathParameterMapping') + param = XML.SubElement(jct, "parameterMappings") + for parameter in data.get("parameter-mapping", []): + parent = XML.SubElement( + param, + "com.ceilfors.jenkins.plugins." + "jiratrigger.parameter." + "IssueAttributePathParameterMapping", + ) parameter_mappings = [ - ('jenkins-parameter', 'jenkinsParameter', ''), - ('issue-attribute-path', 'issueAttributePath', ''), + ("jenkins-parameter", "jenkinsParameter", ""), + ("issue-attribute-path", "issueAttributePath", ""), ] helpers.convert_mapping_to_xml( - parent, parameter, parameter_mappings, fail_required=True) + parent, parameter, parameter_mappings, fail_required=True + ) def stash_pull_request(registry, xml_parent, data): @@ -2188,32 +2251,34 @@ def stash_pull_request(registry, xml_parent, data): """ pr_trigger = XML.SubElement( - xml_parent, - 'stashpullrequestbuilder.stashpullrequestbuilder.StashBuildTrigger') - pr_trigger.set('plugin', 'stash-pullrequest-builder') + xml_parent, "stashpullrequestbuilder.stashpullrequestbuilder.StashBuildTrigger" + ) + pr_trigger.set("plugin", "stash-pullrequest-builder") mappings = [ - ('cron', 'spec', None), # Spec needs to be set to the same as cron - ('cron', 'cron', None), - ('stash-host', 'stashHost', None), - ('credentials-id', 'credentialsId', None), - ('project', 'projectCode', None), - ('repository', 'repositoryName', None), - ('ci-skip-phrases', 'ciSkipPhrases', 'NO TEST'), - ('ci-build-phrases', 'ciBuildPhrases', 'test this please'), - ('target-branches', 'targetBranchesToBuild', ''), - ('ignore-ssl', 'ignoreSsl', False), - ('check-destination-commit', 'checkDestinationCommit', False), - ('check-mergable', 'checkMergeable', False), - ('merge-on-success', 'mergeOnSuccess', False), - ('check-not-conflicted', 'checkNotConflicted', True), - ('only-build-on-comment', 'onlyBuildOnComment', False), - ('delete-previous-build-finish-comments', - 'deletePreviousBuildFinishComments', False), - ('cancel-outdated-jobs', 'cancelOutdatedJobsEnabled', False), + ("cron", "spec", None), # Spec needs to be set to the same as cron + ("cron", "cron", None), + ("stash-host", "stashHost", None), + ("credentials-id", "credentialsId", None), + ("project", "projectCode", None), + ("repository", "repositoryName", None), + ("ci-skip-phrases", "ciSkipPhrases", "NO TEST"), + ("ci-build-phrases", "ciBuildPhrases", "test this please"), + ("target-branches", "targetBranchesToBuild", ""), + ("ignore-ssl", "ignoreSsl", False), + ("check-destination-commit", "checkDestinationCommit", False), + ("check-mergable", "checkMergeable", False), + ("merge-on-success", "mergeOnSuccess", False), + ("check-not-conflicted", "checkNotConflicted", True), + ("only-build-on-comment", "onlyBuildOnComment", False), + ( + "delete-previous-build-finish-comments", + "deletePreviousBuildFinishComments", + False, + ), + ("cancel-outdated-jobs", "cancelOutdatedJobsEnabled", False), ] - helpers.convert_mapping_to_xml( - pr_trigger, data, mappings, fail_required=True) + helpers.convert_mapping_to_xml(pr_trigger, data, mappings, fail_required=True) def generic_webhook_trigger(registry, xml_parent, data): @@ -2264,29 +2329,28 @@ def generic_webhook_trigger(registry, xml_parent, data): /../../tests/triggers/fixtures/generic-webhook-trigger-full.yaml """ - namespace = 'org.jenkinsci.plugins.gwt.' - gwtrig = XML.SubElement(xml_parent, - namespace + 'GenericTrigger') - gwtrig.set('plugin', 'generic-webhook-trigger') - XML.SubElement(gwtrig, 'spec') + namespace = "org.jenkinsci.plugins.gwt." + gwtrig = XML.SubElement(xml_parent, namespace + "GenericTrigger") + gwtrig.set("plugin", "generic-webhook-trigger") + XML.SubElement(gwtrig, "spec") # Generic Varibles (Post content parameters in UI) try: - if data.get('post-content-params'): - gen_vars = XML.SubElement(gwtrig, 'genericVariables') + if data.get("post-content-params"): + gen_vars = XML.SubElement(gwtrig, "genericVariables") mappings = [ - ('type', 'expressionType', '', ['JSONPath', 'XPath']), - ('key', 'key', ''), - ('value', 'value', ''), - ('regex-filter', 'regexpFilter', ''), - ('default-value', 'defaultValue', ''), + ("type", "expressionType", "", ["JSONPath", "XPath"]), + ("key", "key", ""), + ("value", "value", ""), + ("regex-filter", "regexpFilter", ""), + ("default-value", "defaultValue", ""), ] - for gen_var_list in data.get('post-content-params'): - gen_var_tag = XML.SubElement( - gen_vars, namespace + 'GenericVariable') + for gen_var_list in data.get("post-content-params"): + gen_var_tag = XML.SubElement(gen_vars, namespace + "GenericVariable") helpers.convert_mapping_to_xml( - gen_var_tag, gen_var_list, mappings, fail_required=True) + gen_var_tag, gen_var_list, mappings, fail_required=True + ) except AttributeError: pass @@ -2294,50 +2358,47 @@ def generic_webhook_trigger(registry, xml_parent, data): # done. It probably doesn't need to be, but since this is the first # swing.. mapping = [ - ('regex-filter-text', 'regexpFilterText', ''), - ('regex-filter-expression', 'regexpFilterExpression', '') + ("regex-filter-text", "regexpFilterText", ""), + ("regex-filter-expression", "regexpFilterExpression", ""), ] helpers.convert_mapping_to_xml(gwtrig, data, mapping, fail_required=False) # Generic Request Variables (Request parameters in UI) try: - if data.get('request-params'): - gen_req_vars = XML.SubElement(gwtrig, 'genericRequestVariables') - mappings = [ - ('key', 'key', ''), - ('regex-filter', 'regexpFilter', '') - ] + if data.get("request-params"): + gen_req_vars = XML.SubElement(gwtrig, "genericRequestVariables") + mappings = [("key", "key", ""), ("regex-filter", "regexpFilter", "")] - for gen_req_list in data.get('request-params'): + for gen_req_list in data.get("request-params"): gen_req_tag = XML.SubElement( - gen_req_vars, namespace + 'GenericRequestVariable') + gen_req_vars, namespace + "GenericRequestVariable" + ) helpers.convert_mapping_to_xml( - gen_req_tag, gen_req_list, mappings, fail_required=False) + gen_req_tag, gen_req_list, mappings, fail_required=False + ) except AttributeError: pass try: - if data.get('header-params'): - gen_header_vars = XML.SubElement(gwtrig, 'genericHeaderVariables') - mappings = [ - ('key', 'key', ''), - ('regex-filter', 'regexpFilter', '') - ] - for gen_header_list in data.get('header-params'): + if data.get("header-params"): + gen_header_vars = XML.SubElement(gwtrig, "genericHeaderVariables") + mappings = [("key", "key", ""), ("regex-filter", "regexpFilter", "")] + for gen_header_list in data.get("header-params"): gen_header_tag = XML.SubElement( - gen_header_vars, namespace + 'GenericHeaderVariable') + gen_header_vars, namespace + "GenericHeaderVariable" + ) helpers.convert_mapping_to_xml( - gen_header_tag, gen_header_list, mappings, - fail_required=False) + gen_header_tag, gen_header_list, mappings, fail_required=False + ) except AttributeError: pass mapping = [ - ('print-post-content', 'printPostContent', False), - ('print-contrib-var', 'printContributedVariables', False), - ('cause', 'causeString', ''), - ('token', 'token', ''), - ('silent-response', 'silentResponse', False), + ("print-post-content", "printPostContent", False), + ("print-contrib-var", "printContributedVariables", False), + ("cause", "causeString", ""), + ("token", "token", ""), + ("silent-response", "silentResponse", False), ] # This should cover all the top level helpers.convert_mapping_to_xml(gwtrig, data, mapping, fail_required=False) @@ -2346,14 +2407,14 @@ def generic_webhook_trigger(registry, xml_parent, data): class Triggers(jenkins_jobs.modules.base.Base): sequence = 50 - component_type = 'trigger' - component_list_type = 'triggers' + component_type = "trigger" + component_list_type = "triggers" def gen_xml(self, xml_parent, data): - triggers = data.get('triggers', []) + triggers = data.get("triggers", []) if not triggers: return - trig_e = XML.SubElement(xml_parent, 'triggers', {'class': 'vector'}) + trig_e = XML.SubElement(xml_parent, "triggers", {"class": "vector"}) for trigger in triggers: - self.registry.dispatch('trigger', trig_e, trigger) + self.registry.dispatch("trigger", trig_e, trigger) |