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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy