# Path: nativeconfig/exceptions.py
# class ValidationError(OptionError):
#     def __init__(self, msg, value, option_name):
#         self.value = value
#         super().__init__(msg, option_name)
# 
# class DeserializationError(OptionError):
#     def __init__(self, msg, raw_value, option_name):
#         self.raw_value = raw_value
#         super().__init__(msg, option_name)


from abc import ABCMeta
from collections.abc import Iterable
from enum import Enum
from nativeconfig.exceptions import ValidationError, DeserializationError
import copy
import json
import logging
import os
import sys
    @property
    def choices(self):
        return copy.deepcopy(self._choices)

    @property
    def default(self):
        return copy.deepcopy(self._default)

    def set_one_shot_value(self, python_value):
        """
        Set One Shot Value of the option that overrides Raw Value from storage but can be reset by set.

        Useful if you want to allow a user to temporary override the option via CLI.

        @raise ValidationError: Raise if python_value is not valid.
        """
        if python_value is not None:
            self.validate(python_value)
        self._one_shot_value = python_value
        self._is_one_shot_value_set = True

    #{ Validation

    def validate(self, python_value):
        """
        Validate Python Value. Must raise ValidationError if value is wrong.

        @raise ValidationError: Raise if value is wrong.
        """
        if python_value is None:

# Path: nativeconfig/exceptions.py
# class ValidationError(OptionError):
#     def __init__(self, msg, value, option_name):
#         self.value = value
#         super().__init__(msg, option_name)
# 
# class DeserializationError(OptionError):
#     def __init__(self, msg, raw_value, option_name):
#         self.raw_value = raw_value
#         super().__init__(msg, option_name)


# Path: nativeconfig/options/base_option.py
from abc import ABCMeta
from collections.abc import Iterable
from enum import Enum
from nativeconfig.exceptions import ValidationError, DeserializationError
import copy
import json
import logging
import os
import sys

    @property
    def choices(self):
        return copy.deepcopy(self._choices)

    @property
    def default(self):
        return copy.deepcopy(self._default)

    def set_one_shot_value(self, python_value):
        """
        Set One Shot Value of the option that overrides Raw Value from storage but can be reset by set.

        Useful if you want to allow a user to temporary override the option via CLI.

        @raise ValidationError: Raise if python_value is not valid.
        """
        if python_value is not None:
            self.validate(python_value)
        self._one_shot_value = python_value
        self._is_one_shot_value_set = True

    #{ Validation

    def validate(self, python_value):
        """
        Validate Python Value. Must raise ValidationError if value is wrong.

        @raise ValidationError: Raise if value is wrong.
        """
        if python_value is None:

            raise ValidationError("None is never valid and must not reach this method", python_value, self.name)