code: def _get_value(context, key):
      
      if isinstance(context, dict):
          # Then we consider the argument a "hash" for the purposes of the spec.
          #
          # We do a membership test to avoid using exceptions for flow control
          # (e.g. catching KeyError).
          if key in context:
              return context[key]
      elif type(context).__module__ != _BUILTIN_MODULE:
          # Then we consider the argument an "object" for the purposes of
          # the spec.
          #
          # The elif test above lets us avoid treating instances of built-in
          # types like integers and strings as objects (cf. issue #81).
          # Instances of user-defined classes on the other hand, for example,
          # are considered objects by the test above.
          try:
              attr = getattr(context, key)
          except AttributeError:
              # TODO: distinguish the case of the attribute not existing from
              #   an AttributeError being raised by the call to the attribute.
              #   See the following issue for implementation ideas:
              #     http://bugs.python.org/issue7559
              pass
          else:
              # TODO: consider using EAFP here instead.
              #   http://docs.python.org/glossary.html#term-eafp
              if callable(attr):
                  return attr()
              return attr
  
      return _NOT_FOUND
docs: Retrieve a key's value from a context item.
  
      Returns _NOT_FOUND if the key does not exist.
  
      The ContextStack.get() docstring documents this function's intended behavior.