code: def add_to_stack(self, instance, stack):
          
  
          cm = self.init_cm(instance)
          obj = stack.enter_context(cm)
          self._data[instance] = cm, obj
          return obj
docs: Get the context manager for the service `instance` and push it to the
          context manager `stack`.
  
          :param instance: The service to get the context manager for.
          :type instance: :class:`Service`
          :param stack: The context manager stack to push the CM onto.
          :type stack: :class:`contextlib.ExitStack`
          :return: The object returned by the context manager on enter.
  
          If a context manager has already been created for `instance`, it is
          re-used.
  
          On subsequent calls to :meth:`__get__` for the given `instance`, the
          return value of this method will be returned, that is, the value
          obtained from entering the context.