From 872b2fc3b695ff458819b9ef7690e3447acbc7f7 Mon Sep 17 00:00:00 2001 From: Chris Date: Sun, 25 Oct 2020 17:37:15 +0200 Subject: [PATCH] Fix #300 Set aliases for duplicate import class names --- tests/codegen/test_resolver.py | 6 ++++-- xsdata/codegen/resolver.py | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/tests/codegen/test_resolver.py b/tests/codegen/test_resolver.py index 6f46a28c3..3db04cee0 100644 --- a/tests/codegen/test_resolver.py +++ b/tests/codegen/test_resolver.py @@ -122,12 +122,13 @@ def test_resolve_imports( import_names = [ "foo", # cool "bar", # cool + "{another}foo", # another foo "{thug}life", # life class exists add alias "{common}type", # type class doesn't exist add just the name ] self.resolver.class_map = {class_life.qname: class_life} mock_import_classes.return_value = import_names - mock_find_package.side_effect = ["first", "second", "third", "forth"] + mock_find_package.side_effect = ["first", "second", "third", "forth", "fifth"] self.resolver.resolve_imports() mock_add_import.assert_has_calls( @@ -135,7 +136,8 @@ def test_resolve_imports( mock.call(qname=import_names[0], package="first", exists=False), mock.call(qname=import_names[1], package="second", exists=False), mock.call(qname=import_names[2], package="third", exists=True), - mock.call(qname=import_names[3], package="forth", exists=False), + mock.call(qname=import_names[3], package="forth", exists=True), + mock.call(qname=import_names[4], package="fifth", exists=False), ] ) diff --git a/xsdata/codegen/resolver.py b/xsdata/codegen/resolver.py index 46436b4aa..c4597e4df 100644 --- a/xsdata/codegen/resolver.py +++ b/xsdata/codegen/resolver.py @@ -65,10 +65,12 @@ def apply_aliases(self, obj: Class): def resolve_imports(self): """Walk the import qualified names, check for naming collisions and add the necessary code generator import instance.""" - local_names = [split_qname(qname)[1] for qname in self.class_map.keys()] + local_names = {split_qname(qname)[1] for qname in self.class_map.keys()} for qname in self.import_classes(): package = self.find_package(qname) - exists = split_qname(qname)[1] in local_names + local_name = split_qname(qname)[1] + exists = local_name in local_names + local_names.add(local_name) self.add_import(qname=qname, package=package, exists=exists) def add_import(self, qname: str, package: str, exists: bool = False):