From 82a05614637d3c5ecbdcb662326e666424007cd5 Mon Sep 17 00:00:00 2001 From: Dmitry Teselkin Date: Thu, 4 Jun 2020 15:14:07 +0300 Subject: Custom __deepcopy__ for LazyLoader When running JJB under py3 (py3.6) it started to fail with exception TypeError: cannot serialize '_io.BufferedReader' object This is happens when doing deepcopy of a LazyLoader object which contains an instance of BufferedReader object. Under py2 this works but under py3 it is not. This commit adds custom __deepcopy__ method to LazyLoader that avoids deepcopy of a self._loader. Change-Id: I00844fc06ebf84538d557c33f1179a26cb18202f Story: 2007227 --- jenkins_jobs/local_yaml.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/jenkins_jobs/local_yaml.py b/jenkins_jobs/local_yaml.py index c22fc3c6..9aeeb9af 100644 --- a/jenkins_jobs/local_yaml.py +++ b/jenkins_jobs/local_yaml.py @@ -203,6 +203,7 @@ import io import logging import os import re +import copy import jinja2 import yaml @@ -598,6 +599,11 @@ class LazyLoader(CustomLoader): def __repr__(self): return "%s %s" % (self._cls.yaml_tag, self._node.value) + def __deepcopy__(self, memodict={}): + return LazyLoader( + (copy.deepcopy(self._cls), self._loader, copy.deepcopy(self._node)) + ) + def format(self, *args, **kwargs): node = yaml.ScalarNode( tag=self._node.tag, value=self._node.value.format(*args, **kwargs) -- cgit