fix: fix importer get_keys() logic to honor class attribute
so subclass can just say e.g. `key = "id"`
This commit is contained in:
parent
dec145ada5
commit
42474371db
2 changed files with 15 additions and 8 deletions
|
|
@ -379,8 +379,10 @@ class Importer: # pylint: disable=too-many-instance-attributes,too-many-public-
|
||||||
# nb. prefer 'keys' but use 'key' as fallback
|
# nb. prefer 'keys' but use 'key' as fallback
|
||||||
if "keys" in self.__dict__:
|
if "keys" in self.__dict__:
|
||||||
keys = self.__dict__["keys"]
|
keys = self.__dict__["keys"]
|
||||||
elif "key" in self.__dict__:
|
elif hasattr(self, "keys"):
|
||||||
keys = self.__dict__["key"]
|
keys = self.keys
|
||||||
|
elif hasattr(self, "key"):
|
||||||
|
keys = self.key
|
||||||
else:
|
else:
|
||||||
keys = self.default_keys
|
keys = self.default_keys
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -90,19 +90,24 @@ class TestImporter(DataTestCase):
|
||||||
imp = self.make_importer(model_class=model.User)
|
imp = self.make_importer(model_class=model.User)
|
||||||
self.assertEqual(imp.get_keys(), ["uuid"])
|
self.assertEqual(imp.get_keys(), ["uuid"])
|
||||||
|
|
||||||
# class may define 'keys'
|
# object dict may define 'keys'
|
||||||
imp = self.make_importer(model_class=model.User)
|
imp = self.make_importer(model_class=model.User)
|
||||||
with patch.object(imp, "keys", new=["foo", "bar"], create=True):
|
with patch.dict(imp.__dict__, keys=["foo", "bar"]):
|
||||||
self.assertEqual(imp.get_keys(), ["foo", "bar"])
|
self.assertEqual(imp.get_keys(), ["foo", "bar"])
|
||||||
|
|
||||||
|
# class may define 'keys'
|
||||||
|
with patch.object(mod.Importer, "keys", new=["foo", "baz"], create=True):
|
||||||
|
imp = self.make_importer(model_class=model.User)
|
||||||
|
self.assertEqual(imp.get_keys(), ["foo", "baz"])
|
||||||
|
|
||||||
# class may define 'key'
|
# class may define 'key'
|
||||||
imp = self.make_importer(model_class=model.User)
|
with patch.object(mod.Importer, "key", new="whatever", create=True):
|
||||||
with patch.object(imp, "key", new="whatever", create=True):
|
imp = self.make_importer(model_class=model.User)
|
||||||
self.assertEqual(imp.get_keys(), ["whatever"])
|
self.assertEqual(imp.get_keys(), ["whatever"])
|
||||||
|
|
||||||
# class may define 'default_keys'
|
# class may define 'default_keys'
|
||||||
imp = self.make_importer(model_class=model.User)
|
with patch.object(mod.Importer, "default_keys", new=["baz", "foo"]):
|
||||||
with patch.object(imp, "default_keys", new=["baz", "foo"]):
|
imp = self.make_importer(model_class=model.User)
|
||||||
self.assertEqual(imp.get_keys(), ["baz", "foo"])
|
self.assertEqual(imp.get_keys(), ["baz", "foo"])
|
||||||
|
|
||||||
def test_process_data(self):
|
def test_process_data(self):
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue