8000 fix(base): do not fail repr() on lazy objects · python-gitlab/python-gitlab@1efb123 · GitHub
[go: up one dir, main page]

Skip to content

Commit 1efb123

Browse files
nejchJohnVillalovos
authored andcommitted
fix(base): do not fail repr() on lazy objects
1 parent 41ceaca commit 1efb123

File tree

2 files changed

+15
-4
lines changed

2 files changed

+15
-4
lines changed

gitlab/base.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,15 +162,15 @@ def pprint(self) -> None:
162162
def __repr__(self) -> str:
163163
name = self.__class__.__name__
164164

165-
if (self._id_attr and self._repr_attr) and (self._id_attr != self._repr_attr):
165+
if (self._id_attr and self._repr_value) and (self._id_attr != self._repr_attr):
166166
return (
167167
f"<{name} {self._id_attr}:{self.get_id()} "
168-
f"{self._repr_attr}:{getattr(self, self._repr_attr)}>"
168+
f"{self._repr_attr}:{self._repr_value}>"
169169
)
170170
if self._id_attr:
171171
return f"<{name} {self._id_attr}:{self.get_id()}>"
172-
if self._repr_attr:
173-
return f"<{name} {self._repr_attr}:{getattr(self, self._repr_attr)}>"
172+
if self._repr_value:
173+
return f"<{name} {self._repr_attr}:{self._repr_value}>"
174174

175175
return f"<{name}>"
176176

@@ -229,6 +229,13 @@ def get_id(self) -> Optional[Union[int, str]]:
229229
return None
230230
return getattr(self, self._id_attr)
231231

232+
@property
233+
def _repr_value(self) -> Optional[str]:
234+
"""Safely returns the human-readable resource name if present."""
235+
if self._repr_attr is None or not hasattr(self, self._repr_attr):
236+
return None
237+
return getattr(self, self._repr_attr)
238+
232239
@property
233240
def encoded_id(self) -> Optional[Union[int, str]]:
234241
"""Ensure that the ID is url-encoded so that it can be safely used in a URL

tests/unit/test_base.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,15 +251,19 @@ def test_dunder_str(self, fake_manager):
251251
"<ReprObject id:1 name:fake>",
252252
),
253253
("name", "name", {"name": "fake"}, "<ReprObject name:fake>"),
254+
("id", "name", {"id": 1}, "<ReprObject id:1>"),
254255
(None, None, {}, "<ReprObject>"),
255256
(None, "name", {"name": "fake"}, "<ReprObject name:fake>"),
257+
(None, "name", {}, "<ReprObject>"),
256258
],
257259
ids=[
258260
"GetMixin with id",
259261
"GetMixin with id and _repr_attr",
260262
"GetMixin with _repr_attr matching _id_attr",
263+
"GetMixin with _repr_attr without _repr_attr value defined",
261264
"GetWithoutIDMixin",
262265
"GetWithoutIDMixin with _repr_attr",
266+
"GetWithoutIDMixin with _repr_attr without _repr_attr value defined",
263267
],
264268
)
265269
def test_dunder_repr(self, fake_manager, id_attr, repr_attr, attrs, expected_repr):

0 commit comments

Comments
 (0)
0