# Source code for opentelemetry.context.context

    # Copyright The OpenTelemetry Authors
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.

    from __future__ import annotations

    import typing
    from abc import ABC, abstractmethod
    from contextvars import Token

    class Context(typing.Dict[str, object]):
        def __setitem__(self, key: str, value: object) -> None:
            raise ValueError

    class _RuntimeContext(ABC):
        """The RuntimeContext interface provides a wrapper for the different
        mechanisms that are used to propagate context in Python.
        Implementations can be made available via entry_points and
        selected through environment variables.
        """

        @abstractmethod
        def attach(self, context: Context) -> Token[Context]:
            """Sets the current `Context` object. Returns a
            token that can be used to reset to the previous `Context`.

            Args:
                context: The Context to set.
            """

        @abstractmethod
        def get_current(self) -> Context:
            """Returns the current `Context` object."""

        @abstractmethod
        def detach(self, token: Token[Context]) -> None:
            """Resets Context to a previous value

            Args:
                token: A reference to a previous Context.
            """

    __all__ = ["Context"]