8000 Fix list options (value and default was the same instance) · FirebirdSQL/python3-base@366c777 · GitHub
[go: up one dir, main page]

Skip to content

Commit 366c777

Browse files
committed
Fix list options (value and default was the same instance)
1 parent 710ba6b commit 366c777

File tree

1 file changed

+22
-15
lines changed

1 file changed

+22
-15
lines changed

firebird/base/config.py

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1565,6 +1565,14 @@ def __init__(self, name: str, item_type: Union[Type, Sequence[Type]], descriptio
15651565
self.separator: Optional[str] = separator
15661566
self._convertor: Convertor = get_convertor(item_type) if isinstance(item_type, type) else None
15671567
super().__init__(name, list, description, required, default)
1568+
def _check_value(self, value: List) -> None:
1569+
super()._check_value(value)
1570+
if value is not None:
1571+
i = 0
1572+
for item in value:
1573+
if item.__class__ not in self.item_types:
1574+
raise ValueError(f"List item[{i}] has wrong type")
1575+
i += 1
15681576
def _get_as_typed_str(self, value: Any) -> str:
15691577
result = convert_to_str(value)
15701578
if len(self.item_types) > 1:
@@ -1641,13 +1649,7 @@ def set_value(self, value: List) -> None:
16411649
ValueError: When the argument is not a valid option value.
16421650
"""
16431651
self._check_value(value)
1644-
if value is not None:
1645-
i = 0
1646-
for item in value:
1647-
if item.__class__ not in self.item_types:
1648-
raise ValueError(f"List item[{i}] has wrong type")
1649-
i += 1
1650-
self._value = value
1652+
self._value = None if value is None else [i for i in value]
16511653
def load_proto(self, proto: ConfigProto) -> None:
16521654
"""Deserialize value from `.ConfigProto` message.
16531655
@@ -2149,13 +2151,21 @@ def __init__(self, name: st 10000 r, description: str, item_type: Type[Config], *,
21492151
#: break as separator, otherwise it uses comma as separator.
21502152
self.separator: Optional[str] = separator
21512153
super().__init__(name, list, description, required, [])
2154+
def _check_value(self, value: List) -> None:
2155+
super()._check_value(value)
2156+
if value is not None:
2157+
i = 0
2158+
for item in value:
2159+
if item.__class__ is not self.item_type:
2160+
raise ValueError(f"List item[{i}] has wrong type")
2161+
i += 1
21522162
def clear(self, *, to_default: bool=True) -> None:
21532163
"""Clears the option value.
21542164
21552165
Arguments:
21562166
to_default: If True, sets the option value to default value, else to None.
21572167
"""
2158-
self._value = []
2168+
self._value.clear()
21592169
def get_formatted(self) -> str:
21602170
"""Returns value formatted for use in config file.
21612171
"""
@@ -2207,13 +2217,10 @@ def set_value(self, value: List) -> None:
22072217
ValueError: When the argument is not a valid option value.
22082218
"""
22092219
self._check_value(value)
2210-
if value is not None:
2211-
i = 0
2212-
for item in value:
2213-
if item.__class__ is not self.item_type:
2214-
raise ValueError(f"List item[{i}] has wrong type")
2215-
i += 1
2216-
self._value = value
2220+
if value is None:
2221+
self.clear()
2222+
else:
2223+
self._value = [i for i in value]
22172224
def load_proto(self, proto: ConfigProto) -> None:
22182225
"""Deserialize value from `.ConfigProto` message.
22192226

0 commit comments

Comments
 (0)
0