code: def tags(self):
          
          if self._tags is None:
              LOG.debug('need to build tags')
              self._tags = {}
  
              if hasattr(self.Meta, 'tags_spec') and (self.Meta.tags_spec is not None):
                  LOG.debug('have a tags_spec')
                  method, path, param_name, param_value = self.Meta.tags_spec[:4]
                  kwargs = {}
                  filter_type = getattr(self.Meta, 'filter_type', None)
                  if filter_type == 'arn':
                      kwargs = {param_name: [getattr(self, param_value)]}
                  elif filter_type == 'list':
                      kwargs = {param_name: [getattr(self, param_value)]}
                  else:
                      kwargs = {param_name: getattr(self, param_value)}
                  if len(self.Meta.tags_spec) > 4:
                      kwargs.update(self.Meta.tags_spec[4])
                  LOG.debug('fetching tags')
                  self.data['Tags'] = self._client.call(
                      method, query=path, **kwargs)
                  LOG.debug(self.data['Tags'])
  
              if 'Tags' in self.data:
                  _tags = self.data['Tags']
                  if isinstance(_tags, list):
                      for kvpair in _tags:
                          if kvpair['Key'] in self._tags:
                              if not isinstance(self._tags[kvpair['Key']], list):
                                  self._tags[kvpair['Key']] = [self._tags[kvpair['Key']]]
                              self._tags[kvpair['Key']].append(kvpair['Value'])
                          else:
                              self._tags[kvpair['Key']] = kvpair['Value']
                  elif isinstance(_tags, dict):
                      self._tags = _tags
          return self._tags
docs: Convert the ugly Tags JSON into a real dictionary and
          memorize the result.