for v_id, v_val in val.get('values', {}).items():
labels = [l['label'] for l in v_val.get('labels', [])]
values[v_id] = VocabularyValue(v_id, labels)
- self.key_aliases[key_id] = VocabularyKey(key_id, key_labels, values, strict)
+ vk = VocabularyKey(key_id, key_labels, values, strict)
+ self.key_aliases[key_id] = vk
+ for alias in vk.aliases:
+ self.key_aliases[alias.lower()] = vk
+
+ def __getitem__(self, key):
+ return self.key_aliases[key.lower()]
class VocabularyData(object):
def __init__(self, identifier, aliases=[]):
self.identifier = identifier
- self.aliases = set([x.lower() for x in aliases])
+ self.aliases = aliases
class VocabularyValue(VocabularyData):
def __init__(self, identifier, aliases=[]):
class VocabularyKey(VocabularyData):
def __init__(self, identifier, aliases=[], values={}, strict=False):
super(VocabularyKey, self).__init__(identifier, aliases)
- self.values = values
- self.strict = strict
\ No newline at end of file
+ self.strict = strict
+ self.value_aliases = {}
+ for v_id, v_val in values.items():
+ self.value_aliases[v_id] = v_val
+ for v_alias in v_val.aliases:
+ self.value_aliases[v_alias.lower()] = v_val
+
+ def __getitem__(self, key):
+ return self.value_aliases[key.lower()]
\ No newline at end of file
def perform_vocabulary_tests(self, voc):
self.assertEqual(voc.strict_keys, False)
- self.assertEqual(voc.key_aliases.keys(), set(['IDTAGANIMALS', 'IDTAGIMPORTANCE']))
+ self.assertEqual(
+ voc.key_aliases.keys(),
+ set(['IDTAGANIMALS', 'creature', 'animal',
+ 'IDTAGIMPORTANCE', 'importance', 'priority'])
+ )
- self.assertEqual(voc.key_aliases['IDTAGANIMALS'].strict, False)
- self.assertEqual(set(voc.key_aliases['IDTAGANIMALS'].aliases), set(['animal', 'creature']))
- self.assertEqual(voc.key_aliases['IDTAGANIMALS'].values.keys(), set(['IDVALANIMAL1', 'IDVALANIMAL2']))
- self.assertEqual(voc.key_aliases['IDTAGANIMALS'].values['IDVALANIMAL1'].aliases, set(['human', 'homo sapiens']))
+ vk = voc.key_aliases['creature']
+ self.assertEqual(vk.strict, False)
+ self.assertEqual(vk.identifier, 'IDTAGANIMALS')
+ self.assertEqual(vk.aliases, ['Animal', 'Creature'])
+
+ vv = vk.value_aliases['human']
+ self.assertEqual(vv.identifier, 'IDVALANIMAL1')
+ self.assertEqual(vv.aliases, ['Human', 'Homo sapiens'])
+
+ self.assertEqual(voc['creature']['human'].identifier, vv.identifier)
+ self.assertEqual(voc['Creature']['Human'].identifier, vv.identifier)
+ self.assertEqual(voc['CREATURE']['HUMAN'].identifier, vv.identifier)
def test_empty_vocabulary(self):
voc = vocabulary.Vocabulary()
self.assertEqual(voc.strict_keys, False)
self.assertEqual(voc.key_aliases, {})
- def test_load_vocabulary(self):
+ def test_vocabulary_explicit_instantiation(self):
voc = vocabulary.Vocabulary(self.EXAMPLE_VOC)
self.perform_vocabulary_tests(voc)