Mimics the old Setting object for compatibility with existing code.
Source code in src/prefect/settings/legacy.py
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 | class Setting:
"""Mimics the old Setting object for compatibility with existing code."""
def __init__(
self, name: str, default: Any, type_: Any, accessor: Optional[str] = None
):
self._name = name
self._default = default
self._type = type_
if accessor is None:
self.accessor = _env_var_to_accessor(name)
else:
self.accessor = accessor
@property
def name(self):
return self._name
@property
def is_secret(self):
if self._type in _SECRET_TYPES:
return True
for secret_type in _SECRET_TYPES:
if secret_type in get_args(self._type):
return True
return False
def default(self):
return self._default
def value(self: Self) -> Any:
if (
self.name == "PREFECT_TEST_SETTING"
or self.name == "PREFECT_TESTING_TEST_SETTING"
):
if (
"PREFECT_TEST_MODE" in os.environ
or "PREFECT_TESTING_TEST_MODE" in os.environ
):
return get_current_settings().testing.test_setting
else:
return None
return self.value_from(get_current_settings())
def value_from(self: Self, settings: "Settings") -> Any:
path = self.accessor.split(".")
current_value = settings
for key in path:
current_value = getattr(current_value, key, None)
if isinstance(current_value, _SECRET_TYPES):
return current_value.get_secret_value() # type: ignore
return current_value
def __bool__(self) -> bool:
return bool(self.value())
def __str__(self) -> str:
return str(self.value())
def __repr__(self) -> str:
return f"<{self.name}: {self._type!r}>"
def __eq__(self, __o: object) -> bool:
return __o.__eq__(self.value())
def __hash__(self) -> int:
return hash((type(self), self.name))
|