mirror of https://github.com/Textualize/rich.git
Fixed issue with custom classes (fixes #2875)
This commit is contained in:
parent
8c7449f987
commit
d9eff2aa44
|
@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
|
|||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [13.4.3] - 2023-06-22
|
||||
|
||||
### Fixed
|
||||
|
||||
- Fixed issue with custom classes overwriting `__eq__` https://github.com/Textualize/rich/issues/2875
|
||||
|
||||
## [13.4.2] - 2023-06-12
|
||||
|
||||
### Changed
|
||||
|
|
|
@ -13,6 +13,7 @@ The following people have contributed to the development of Rich:
|
|||
- [Ed Davis](https://github.com/davised)
|
||||
- [Pete Davison](https://github.com/pd93)
|
||||
- [James Estevez](https://github.com/jstvz)
|
||||
- [Aryaz Eghbali](https://github.com/AryazE)
|
||||
- [Oleksis Fraga](https://github.com/oleksis)
|
||||
- [Andy Gimblett](https://github.com/gimbo)
|
||||
- [Michał Górny](https://github.com/mgorny)
|
||||
|
|
|
@ -76,7 +76,7 @@ def auto(
|
|||
param.POSITIONAL_OR_KEYWORD,
|
||||
param.KEYWORD_ONLY,
|
||||
):
|
||||
if param.default == param.empty:
|
||||
if param.default is param.empty:
|
||||
yield getattr(self, param.name)
|
||||
else:
|
||||
yield param.name, getattr(self, param.name), param.default
|
||||
|
|
|
@ -6,6 +6,8 @@ import pytest
|
|||
import rich.repr
|
||||
from rich.console import Console
|
||||
|
||||
from inspect import Parameter
|
||||
|
||||
skip_py37 = pytest.mark.skipif(
|
||||
sys.version_info.minor == 7 and sys.version_info.major == 3,
|
||||
reason="rendered differently on py3.7",
|
||||
|
@ -61,6 +63,38 @@ class Bar(Foo):
|
|||
__rich_repr__.angular = True
|
||||
|
||||
|
||||
class StupidClass:
|
||||
def __init__(self, a):
|
||||
self.a = a
|
||||
|
||||
def __eq__(self, other) -> bool:
|
||||
if other is Parameter.empty:
|
||||
return True
|
||||
try:
|
||||
return self.a == other.a
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
def __ne__(self, other: object) -> bool:
|
||||
return not self.__eq__(other)
|
||||
|
||||
|
||||
class NotStupid:
|
||||
pass
|
||||
|
||||
|
||||
@rich.repr.auto
|
||||
class Bird:
|
||||
def __init__(
|
||||
self, name, eats, fly=True, another=StupidClass(2), extinct=NotStupid()
|
||||
):
|
||||
self.name = name
|
||||
self.eats = eats
|
||||
self.fly = fly
|
||||
self.another = another
|
||||
self.extinct = extinct
|
||||
|
||||
|
||||
def test_rich_repr() -> None:
|
||||
assert (repr(Foo("hello"))) == "Foo('hello', 'hello', egg=1)"
|
||||
assert (repr(Foo("hello", bar=3))) == "Foo('hello', 'hello', bar=3, egg=1)"
|
||||
|
@ -90,6 +124,12 @@ def test_rich_angular() -> None:
|
|||
|
||||
def test_rich_repr_auto() -> None:
|
||||
assert repr(Egg("hello", egg=2)) == "Egg('hello', egg=2)"
|
||||
stupid_class = StupidClass(9)
|
||||
not_stupid = NotStupid()
|
||||
assert (
|
||||
repr(Bird("penguin", ["fish"], another=stupid_class, extinct=not_stupid))
|
||||
== f"Bird('penguin', ['fish'], another={repr(stupid_class)}, extinct={repr(not_stupid)})"
|
||||
)
|
||||
|
||||
|
||||
def test_rich_repr_auto_angular() -> None:
|
||||
|
|
Loading…
Reference in New Issue