From 4c232f4d162ca90cbf21e2bae135f065f90b86c8 Mon Sep 17 00:00:00 2001 From: memsharded Date: Wed, 12 Mar 2025 14:26:17 +0100 Subject: [PATCH] custom generator class serialization fix --- conan/internal/model/conan_file.py | 3 +- .../generators/test_generators_from_br.py | 28 +++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/conan/internal/model/conan_file.py b/conan/internal/model/conan_file.py index 58fb907545c..34ef337cc59 100644 --- a/conan/internal/model/conan_file.py +++ b/conan/internal/model/conan_file.py @@ -150,7 +150,8 @@ def serialize(self): result["options_definitions"] = self.options.possible_values if self.generators is not None: - result["generators"] = list(self.generators) + result["generators"] = list(s.__name__ if isinstance(s, type) else s + for s in self.generators) if self.license is not None: result["license"] = list(self.license) if not isinstance(self.license, str) else self.license diff --git a/test/integration/generators/test_generators_from_br.py b/test/integration/generators/test_generators_from_br.py index a0db007c47f..c0fa619fdfc 100644 --- a/test/integration/generators/test_generators_from_br.py +++ b/test/integration/generators/test_generators_from_br.py @@ -1,3 +1,4 @@ +import json import textwrap from conan.test.utils.tools import TestClient @@ -89,3 +90,30 @@ def package_info(self): content = tc.load("conanbuild.sh") assert "conantest.sh" in content assert "envars_generator2.sh" in content + + +def test_json_serialization_error(): + c = TestClient() + conanfile = textwrap.dedent(""" + from conan import ConanFile + + class MyGenerator: + def __init__(self, conanfile): + self._conanfile = conanfile + + def generate(self): + pass + + class MyToolReq(ConanFile): + name = "mygenerator-tool" + version = "1.0" + + def package_info(self): + self.generator_info = [MyGenerator] + """) + + c.save({"tool/conanfile.py": conanfile}) + c.run("create tool") + c.run("install --tool-requires=mygenerator-tool/1.0 --format=json") + graph = json.loads(c.stdout) + assert graph["graph"]["nodes"]["0"]["generators"] == ["MyGenerator"]