diff --git a/docs/api-usage.rst b/docs/api-usage.rst index 66e58873a..8befc5633 100644 --- a/docs/api-usage.rst +++ b/docs/api-usage.rst @@ -179,6 +179,20 @@ resources. For example: project = gl.projects.get(1) project.star() +You can print a Gitlab Object. For example: + +.. code-block:: python + + project = gl.projects.get(1) + print(project) + + # Or in a prettier format. + project.pprint() + + # Or explicitly via `pformat()`. This is equivalent to the above. + print(project.pformat()) + + Base types ========== diff --git a/gitlab/base.py b/gitlab/base.py index 50f09c596..6a6e99212 100644 --- a/gitlab/base.py +++ b/gitlab/base.py @@ -16,6 +16,7 @@ # along with this program. If not, see . import importlib +import pprint import textwrap from types import ModuleType from typing import Any, Dict, Iterable, NamedTuple, Optional, Tuple, Type @@ -147,6 +148,14 @@ def __str__(self) -> str: data.update(self._updated_attrs) return f"{type(self)} => {data}" + def pformat(self) -> str: + data = self._attrs.copy() + data.update(self._updated_attrs) + return f"{type(self)} => \n{pprint.pformat(data)}" + + def pprint(self) -> None: + print(self.pformat()) + def __repr__(self) -> str: if self._id_attr: return f"<{self.__class__.__name__} {self._id_attr}:{self.get_id()}>" diff --git a/tests/unit/test_base.py b/tests/unit/test_base.py index 3ca020636..fa9f6aa7d 100644 --- a/tests/unit/test_base.py +++ b/tests/unit/test_base.py @@ -201,3 +201,33 @@ def test_inequality_no_id(self, fake_manager): obj1 = FakeObject(fake_manager, {"attr1": "foo"}) obj2 = FakeObject(fake_manager, {"attr1": "bar"}) assert obj1 != obj2 + + def test_dunder_str(self, fake_manager): + fake_object = FakeObject(fake_manager, {"attr1": "foo"}) + assert str(fake_object) == ( + " => {'attr1': 'foo'}" + ) + + def test_pformat(self, fake_manager): + fake_object = FakeObject( + fake_manager, {"attr1": "foo" * 10, "ham": "eggs" * 15} + ) + assert fake_object.pformat() == ( + " => " + "\n{'attr1': 'foofoofoofoofoofoofoofoofoofoo',\n" + " 'ham': 'eggseggseggseggseggseggseggseggseggseggseggseggseggseggseggs'}" + ) + + def test_pprint(self, capfd, fake_manager): + fake_object = FakeObject( + fake_manager, {"attr1": "foo" * 10, "ham": "eggs" * 15} + ) + result = fake_object.pprint() + assert result is None + stdout, stderr = capfd.readouterr() + assert stdout == ( + " => " + "\n{'attr1': 'foofoofoofoofoofoofoofoofoofoo',\n" + " 'ham': 'eggseggseggseggseggseggseggseggseggseggseggseggseggseggseggs'}\n" + ) + assert stderr == "" 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