docs: def get(self, key, namespace=None):
          """Retrieve value for key."""
          full_key = generate_uppercase_key(key, namespace)
          full_key = full_key.lower()
  
          logger.debug('Searching %s for %s', self, full_key)
  
          # Build a map of lowercase -> actual key
          obj_keys = {
              item.lower(): item
              for item in dir(self.obj) if not item.startswith('__')
          }
  
          if full_key in obj_keys:
              val = getattr(self.obj, obj_keys[full_key])
  
              # If the value is None, then we're going to treat it as a non-valid
              # value.
              if val is not None:
                  # This is goofy, but this allows people to specify arg parser
                  # defaults, but do the right thing in Everett where everything
                  # is a string until it's parsed.
                  return str(val)
  
          return NO_VALUE