1 # Copyright (C) The Arvados Authors. All rights reserved.
3 # SPDX-License-Identifier: Apache-2.0
9 _logger = logging.getLogger('arvados.vocabulary')
11 def load_vocabulary(api_client=api('v1')):
12 """Load the Arvados vocabulary from the API.
14 return Vocabulary(api_client.vocabulary())
16 class Vocabulary(object):
17 def __init__(self, voc_definition={}):
18 self._definition = voc_definition
19 self.strict_keys = self._definition.get('strict_tags', False)
22 for key_id, val in voc_definition.get('tags', {}).items():
23 strict = val.get('strict', False)
24 key_labels = [l['label'] for l in val.get('labels', [])]
26 for v_id, v_val in val.get('values', {}).items():
27 labels = [l['label'] for l in v_val.get('labels', [])]
28 values[v_id] = VocabularyValue(v_id, labels)
29 vk = VocabularyKey(key_id, key_labels, values, strict)
30 self.key_aliases[key_id] = vk
31 for alias in vk.aliases:
32 self.key_aliases[alias.lower()] = vk
34 def __getitem__(self, key):
35 return self.key_aliases[key.lower()]
37 class VocabularyData(object):
38 def __init__(self, identifier, aliases=[]):
39 self.identifier = identifier
40 self.aliases = aliases
42 class VocabularyValue(VocabularyData):
43 def __init__(self, identifier, aliases=[]):
44 super(VocabularyValue, self).__init__(identifier, aliases)
46 class VocabularyKey(VocabularyData):
47 def __init__(self, identifier, aliases=[], values={}, strict=False):
48 super(VocabularyKey, self).__init__(identifier, aliases)
50 self.value_aliases = {}
51 for v_id, v_val in values.items():
52 self.value_aliases[v_id] = v_val
53 for v_alias in v_val.aliases:
54 self.value_aliases[v_alias.lower()] = v_val
56 def __getitem__(self, key):
57 return self.value_aliases[key.lower()]