Source code for concrete_settings.contrib.behaviors.deprecated_behavior
import warnings
from typing import TYPE_CHECKING, Any
from concrete_settings.behaviors.behavior import GetterSetterBehavior
from concrete_settings.contrib.validators import DeprecatedValidator
if TYPE_CHECKING:
from concrete_settings import Setting, Settings
[docs]class deprecated(GetterSetterBehavior):
def __init__(
self,
deprecation_message: str = 'Setting `{name}` in class `{owner}` is deprecated.',
*,
warn_on_validation=True,
error_on_validation=False,
warn_on_get=False,
warn_on_set=False,
):
self.deprecation_message = deprecation_message
self.error_on_validation = error_on_validation
self.warn_on_validation = warn_on_validation
self.warn_on_get = warn_on_get
self.warn_on_set = warn_on_set
def decorate(self, setting: 'Setting'):
if self.warn_on_validation or self.error_on_validation:
setting.validators = (
DeprecatedValidator(self.deprecation_message, self.error_on_validation),
) + setting.validators
super().decorate(setting)
def get_value(self, setting: 'Setting', owner: 'Settings') -> Any:
if self.warn_on_get:
if owner and not owner.is_being_validated:
msg = self.deprecation_message.format(owner=owner, name=setting.name)
warnings.warn(msg, DeprecationWarning)
return super().get_value(setting, owner)
def set_value(self, setting: 'Setting', owner: 'Settings', value):
if self.warn_on_set:
if not owner.is_being_validated:
msg = self.deprecation_message.format(owner=owner, name=setting.name)
warnings.warn(msg, DeprecationWarning)
super().set_value(setting, owner, value)