diff --git a/tests/fixtures/config/multi-tenant-semaphore/git/tenant-one-config/zuul.yaml b/tests/fixtures/config/multi-tenant-semaphore/git/tenant-one-config/zuul.yaml index ca936b9214..9f3c5f663e 100644 --- a/tests/fixtures/config/multi-tenant-semaphore/git/tenant-one-config/zuul.yaml +++ b/tests/fixtures/config/multi-tenant-semaphore/git/tenant-one-config/zuul.yaml @@ -1,6 +1,9 @@ - job: name: project1-test1 semaphore: test-semaphore + vars: + semaphore: + test: 42 run: playbooks/project1-test1.yaml - project: diff --git a/zuul/lib/jsonutil.py b/zuul/lib/jsonutil.py index d9f4eeb7a4..02f6f6da93 100644 --- a/zuul/lib/jsonutil.py +++ b/zuul/lib/jsonutil.py @@ -17,7 +17,11 @@ import types class ZuulJSONEncoder(json.JSONEncoder): def default(self, o): if isinstance(o, types.MappingProxyType): - return dict(o) + d = dict(o) + # Always remove SafeLoader left-over + d.pop('_source_context', None) + d.pop('_start_mark', None) + return d return json.JSONEncoder.default(self, o) diff --git a/zuul/rpclistener.py b/zuul/rpclistener.py index c97a9cf9d4..5c0294771e 100644 --- a/zuul/rpclistener.py +++ b/zuul/rpclistener.py @@ -17,7 +17,6 @@ import json import logging import threading import traceback -import types import gear @@ -25,13 +24,7 @@ from zuul import model from zuul.connection import BaseConnection from zuul.lib import encryption from zuul.lib.config import get_default - - -class MappingProxyEncoder(json.JSONEncoder): - def default(self, obj): - if isinstance(obj, types.MappingProxyType): - return dict(obj) - return json.JSONEncoder.default(self, obj) +from zuul.lib.jsonutil import ZuulJSONEncoder class RPCListener(object): @@ -361,7 +354,7 @@ class RPCListener(object): output = [] for job in jobs: output.append(job.toDict(tenant)) - gear_job.sendWorkComplete(json.dumps(output, cls=MappingProxyEncoder)) + gear_job.sendWorkComplete(json.dumps(output, cls=ZuulJSONEncoder)) def handle_job_list(self, job): args = json.loads(job.arguments) @@ -431,7 +424,7 @@ class RPCListener(object): config['pipelines'].append(pipeline) result['configs'].append(config) - gear_job.sendWorkComplete(json.dumps(result, cls=MappingProxyEncoder)) + gear_job.sendWorkComplete(json.dumps(result, cls=ZuulJSONEncoder)) def handle_project_list(self, job): args = json.loads(job.arguments)