Skip to content

Commit b9527dd

Browse files
committed
Sync framework updates
1 parent 9aa1dd7 commit b9527dd

2 files changed

Lines changed: 20 additions & 5 deletions

File tree

lib/config/core.py

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,16 @@ class ConfigBaseModel(BaseModel):
2727
__field_scopes__: ClassVar[dict] = {} # {field_name: scope_bitmask}
2828

2929
def __init__(self, **data):
30-
token = _current_scope.set(0)
3130
try:
31+
_current_scope.get()
32+
except LookupError:
33+
token = _current_scope.set(0)
34+
try:
35+
super().__init__(**data)
36+
finally:
37+
_current_scope.reset(token)
38+
else:
3239
super().__init__(**data)
33-
finally:
34-
_current_scope.reset(token)
3540

3641
@classmethod
3742
def __pydantic_init_subclass__(cls, **kwargs):
@@ -64,7 +69,8 @@ def validate_fields_by_scope(self) -> "ConfigBaseModel":
6469
current_scope = _current_scope.get()
6570
for name in type(self).model_fields:
6671
if name in self.__field_scopes__ and not (current_scope & self.__field_scopes__[name]):
67-
delattr(self, name)
72+
if name in self.__dict__:
73+
delattr(self, name)
6874
return self
6975

7076
def _resolve_recursive(self, current: "ConfigBaseModel", context: ConfigOperationContext):

lib/config/formatter.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import re
12
from typing import Any, List, Optional, Tuple
23

34
from pydantic import BaseModel
@@ -6,6 +7,12 @@
67
"ModelFormatter",
78
]
89

10+
_ANSI_RE = re.compile(r'\033\[[0-9;]*m')
11+
12+
13+
def _strip_ansi(s: str) -> str:
14+
return _ANSI_RE.sub('', s)
15+
916

1017
class ModelFormatter:
1118
def __init__(self, line_width: int = 80, indent: int = 4, connector: str = ": ", separator: str = ", "):
@@ -33,7 +40,7 @@ def current_remaining_width(self):
3340
return self.current_max_width() - self.current_width
3441

3542
def get_width(self, key: Optional[str], value: Any) -> int:
36-
cache_key = id(value)
43+
cache_key = (key, id(value))
3744
if cache_key in self.width_cache:
3845
return self.width_cache[cache_key]
3946

@@ -98,6 +105,7 @@ def add_entry(self, key: Optional[str], value: Any):
98105

99106
def _process(_elements: List[Tuple[Optional[str], Any]], _prefix: str, _suffix: str):
100107
self.current_line.append(_prefix)
108+
self.current_width += len(_strip_ansi(_prefix))
101109
if width > self.current_max_width():
102110
self.new_line()
103111
self.current_level += 1
@@ -106,6 +114,7 @@ def _process(_elements: List[Tuple[Optional[str], Any]], _prefix: str, _suffix:
106114
self.new_line()
107115
self.current_level -= 1
108116
self.current_line.append(_suffix)
117+
self.current_width += len(_strip_ansi(_suffix))
109118

110119
if isinstance(value, tuple):
111120
_process([(None, item) for item in value], prefix + "(", ")")

0 commit comments

Comments
 (0)