Get attribute access type fix (#3803)
* add failing test * catch unhandled NotImplementedError
This commit is contained in:
parent
8f396fc348
commit
dd6feff13f
@ -240,9 +240,14 @@ def get_attribute_access_type(cls: GenericType, name: str) -> GenericType | None
|
|||||||
"""
|
"""
|
||||||
from reflex.model import Model
|
from reflex.model import Model
|
||||||
|
|
||||||
attr = getattr(cls, name, None)
|
try:
|
||||||
|
attr = getattr(cls, name, None)
|
||||||
|
except NotImplementedError:
|
||||||
|
attr = None
|
||||||
|
|
||||||
if hint := get_property_hint(attr):
|
if hint := get_property_hint(attr):
|
||||||
return hint
|
return hint
|
||||||
|
|
||||||
if (
|
if (
|
||||||
hasattr(cls, "__fields__")
|
hasattr(cls, "__fields__")
|
||||||
and name in cls.__fields__
|
and name in cls.__fields__
|
||||||
|
@ -94,6 +94,15 @@ class SQLAClass(SQLABase):
|
|||||||
"""
|
"""
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
@hybrid_property
|
||||||
|
def first_label(self) -> Optional[SQLALabel]:
|
||||||
|
"""First label property.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
First label
|
||||||
|
"""
|
||||||
|
return self.labels[0] if self.labels else None
|
||||||
|
|
||||||
|
|
||||||
class ModelClass(rx.Model):
|
class ModelClass(rx.Model):
|
||||||
"""Test reflex model."""
|
"""Test reflex model."""
|
||||||
@ -125,6 +134,15 @@ class ModelClass(rx.Model):
|
|||||||
"""
|
"""
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def first_label(self) -> Optional[SQLALabel]:
|
||||||
|
"""First label property.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
First label
|
||||||
|
"""
|
||||||
|
return self.labels[0] if self.labels else None
|
||||||
|
|
||||||
|
|
||||||
class BaseClass(rx.Base):
|
class BaseClass(rx.Base):
|
||||||
"""Test rx.Base class."""
|
"""Test rx.Base class."""
|
||||||
@ -156,6 +174,15 @@ class BaseClass(rx.Base):
|
|||||||
"""
|
"""
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def first_label(self) -> Optional[SQLALabel]:
|
||||||
|
"""First label property.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
First label
|
||||||
|
"""
|
||||||
|
return self.labels[0] if self.labels else None
|
||||||
|
|
||||||
|
|
||||||
class BareClass:
|
class BareClass:
|
||||||
"""Bare python class."""
|
"""Bare python class."""
|
||||||
@ -187,6 +214,15 @@ class BareClass:
|
|||||||
"""
|
"""
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def first_label(self) -> Optional[SQLALabel]:
|
||||||
|
"""First label property.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
First label
|
||||||
|
"""
|
||||||
|
return self.labels[0] if self.labels else None
|
||||||
|
|
||||||
|
|
||||||
@attrs.define
|
@attrs.define
|
||||||
class AttrClass:
|
class AttrClass:
|
||||||
@ -219,6 +255,15 @@ class AttrClass:
|
|||||||
"""
|
"""
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def first_label(self) -> Optional[SQLALabel]:
|
||||||
|
"""First label property.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
First label
|
||||||
|
"""
|
||||||
|
return self.labels[0] if self.labels else None
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture(
|
@pytest.fixture(
|
||||||
params=[
|
params=[
|
||||||
@ -254,6 +299,7 @@ def cls(request: pytest.FixtureRequest) -> type:
|
|||||||
pytest.param("dict_str_str", Dict[str, str], id="Dict[str, str]"),
|
pytest.param("dict_str_str", Dict[str, str], id="Dict[str, str]"),
|
||||||
pytest.param("str_property", str, id="str_property"),
|
pytest.param("str_property", str, id="str_property"),
|
||||||
pytest.param("str_or_int_property", Union[str, int], id="str_or_int_property"),
|
pytest.param("str_or_int_property", Union[str, int], id="str_or_int_property"),
|
||||||
|
pytest.param("first_label", Optional[SQLALabel], id="first_label"),
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_get_attribute_access_type(cls: type, attr: str, expected: GenericType) -> None:
|
def test_get_attribute_access_type(cls: type, attr: str, expected: GenericType) -> None:
|
||||||
|
Loading…
Reference in New Issue
Block a user