Skip to content

Commit 872b2fc

Browse files
committed
Fix #300 Set aliases for duplicate import class names
1 parent bad72ee commit 872b2fc

File tree

2 files changed

+8
-4
lines changed

2 files changed

+8
-4
lines changed

tests/codegen/test_resolver.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -122,20 +122,22 @@ def test_resolve_imports(
122122
import_names = [
123123
"foo", # cool
124124
"bar", # cool
125+
"{another}foo", # another foo
125126
"{thug}life", # life class exists add alias
126127
"{common}type", # type class doesn't exist add just the name
127128
]
128129
self.resolver.class_map = {class_life.qname: class_life}
129130
mock_import_classes.return_value = import_names
130-
mock_find_package.side_effect = ["first", "second", "third", "forth"]
131+
mock_find_package.side_effect = ["first", "second", "third", "forth", "fifth"]
131132

132133
self.resolver.resolve_imports()
133134
mock_add_import.assert_has_calls(
134135
[
135136
mock.call(qname=import_names[0], package="first", exists=False),
136137
mock.call(qname=import_names[1], package="second", exists=False),
137138
mock.call(qname=import_names[2], package="third", exists=True),
138-
mock.call(qname=import_names[3], package="forth", exists=False),
139+
mock.call(qname=import_names[3], package="forth", exists=True),
140+
mock.call(qname=import_names[4], package="fifth", exists=False),
139141
]
140142
)
141143

xsdata/codegen/resolver.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,12 @@ def apply_aliases(self, obj: Class):
6565
def resolve_imports(self):
6666
"""Walk the import qualified names, check for naming collisions and add
6767
the necessary code generator import instance."""
68-
local_names = [split_qname(qname)[1] for qname in self.class_map.keys()]
68+
local_names = {split_qname(qname)[1] for qname in self.class_map.keys()}
6969
for qname in self.import_classes():
7070
package = self.find_package(qname)
71-
exists = split_qname(qname)[1] in local_names
71+
local_name = split_qname(qname)[1]
72+
exists = local_name in local_names
73+
local_names.add(local_name)
7274
self.add_import(qname=qname, package=package, exists=exists)
7375

7476
def add_import(self, qname: str, package: str, exists: bool = False):

0 commit comments

Comments
 (0)