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
This commit is contained in:
Dmitry Teselkin 2020-06-04 15:14:07 +03:00
parent 6c55bc7821
commit 82a0561463

View File

@ -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)