[AAP-86051] Wrap bulk job launch create in serializer persistence context

Use DAB serializer_mediated_persistence_context on BulkJobLaunchSerializer
so validate() rejection logs are not duplicated by bulk workflow node audit.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Vidya Nambiar
2026-09-25 13:18:30 -04:00
co-authored by Cursor
parent 2cd2fa72e6
commit 019db6f5f6
2 changed files with 18 additions and 1 deletions
+5 -1
View File
@@ -43,7 +43,7 @@ from rest_framework.utils.serializer_helpers import ReturnList
from polymorphic.models import PolymorphicModel
# django-ansible-base
from ansible_base.lib.serializers.mixins import CleanTextMixin
from ansible_base.lib.serializers.mixins import CleanTextMixin, serializer_mediated_persistence_context
from ansible_base.lib.utils.bulk_validation_audit import audit_bulk_model_instances
from ansible_base.lib.utils.models import get_type_for_model
from ansible_base.lib.utils.settings import get_setting
@@ -5278,6 +5278,10 @@ class BulkJobLaunchSerializer(PromptFieldCleanTextMixin, serializers.Serializer)
)
def create(self, validated_data):
with serializer_mediated_persistence_context():
return self._create_bulk_job_launch(validated_data)
def _create_bulk_job_launch(self, validated_data):
request = self.context.get('request', None)
launch_user = request.user if request else None
job_node_data = validated_data.pop('jobs')
@@ -49,6 +49,19 @@ def test_audit_bulk_model_instances_logs_host_description_on_bulk_create(caplog)
assert 'main.Host' in caplog.text
@pytest.mark.django_db
def test_audit_workflow_job_nodes_skips_when_serializer_already_logged(caplog):
from ansible_base.lib.utils.validation_signals import register_serializer_validation_rejection
wfj = WorkflowJob.objects.create(name='wf-audit-limit-dedupe')
node = WorkflowJobNode(workflow_job=wfj, identifier='wf-node-1')
node.limit = '<script>x</script>'
register_serializer_validation_rejection('main.WorkflowJobNode', 'limit')
with caplog.at_level(logging.WARNING, logger=LOGGER):
audit_workflow_job_nodes_for_bulk_create([node])
assert 'ORM bypass' not in caplog.text
@pytest.mark.django_db
def test_audit_workflow_job_nodes_logs_limit_pseudo_field(caplog):
wfj = WorkflowJob.objects.create(name='wf-audit-limit')