Skip to content

Commit

Permalink
Fix #300 Set aliases for duplicate import class names
Browse files Browse the repository at this point in the history
  • Loading branch information
tefra committed Oct 26, 2020
1 parent 23af846 commit f76a8ca
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 4 deletions.
6 changes: 4 additions & 2 deletions tests/codegen/test_resolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -122,20 +122,22 @@ 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(
[
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),
]
)

Expand Down
6 changes: 4 additions & 2 deletions xsdata/codegen/resolver.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand Down

0 comments on commit f76a8ca

Please sign in to comment.