{"id":21858245,"url":"https://github.com/simpleart/prettyformatter","last_synced_at":"2026-05-09T10:56:37.233Z","repository":{"id":50439129,"uuid":"513451587","full_name":"SimpleArt/prettyformatter","owner":"SimpleArt","description":"Advanced pretty formatting for dataclasses and more using f-string style features.","archived":false,"fork":false,"pushed_at":"2023-05-14T00:28:11.000Z","size":706,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-26T14:23:29.611Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SimpleArt.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-07-13T09:03:40.000Z","updated_at":"2023-01-31T20:03:46.000Z","dependencies_parsed_at":"2023-02-14T04:32:09.229Z","dependency_job_id":null,"html_url":"https://github.com/SimpleArt/prettyformatter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SimpleArt%2Fprettyformatter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SimpleArt%2Fprettyformatter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SimpleArt%2Fprettyformatter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SimpleArt%2Fprettyformatter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SimpleArt","download_url":"https://codeload.github.com/SimpleArt/prettyformatter/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244857836,"owners_count":20522096,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-28T02:44:26.849Z","updated_at":"2026-05-09T10:56:37.146Z","avatar_url":"https://github.com/SimpleArt.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# prettyformatter\n\nPretty formatter enables pretty formatting using aligned and hanging\nindents for JSON, dataclasses, named tuples, and any custom formatted\nobject such as Numpy arrays.\n\nFor the full documentation, see\n[here](https://simpleart.github.io/prettyformatter/).\n\n## Installation\n\nWindows:\n\n```\npy -m pip install prettyformatter\n```\n\nUnix/MacOS:\n\n```\npython3 -m pip install prettyformatter\n```\n\n## Imports\n\n```python\nfrom prettyformatter import PrettyClass, PrettyDataclass\nfrom prettyformatter import pprint, pformat, register\n```\n\n## JSON Data\n\n`prettyformatter` works with JSON data.\n\n```python\nbatters = [\n    {\"id\": \"1001\", \"type\": \"Regular\"},\n    {\"id\": \"1002\", \"type\": \"Chocolate\"},\n    {\"id\": \"1003\", \"type\": \"Blueberry\"},\n    {\"id\": \"1004\", \"type\": \"Devil's Food\"},\n]\n\ntoppings = [\n    {\"id\": \"5001\", \"type\": None},\n    {\"id\": \"5002\", \"type\": \"Glazed\"},\n    {\"id\": \"5005\", \"type\": \"Sugar\"},\n    {\"id\": \"5007\", \"type\": \"Powdered Sugar\"},\n    {\"id\": \"5006\", \"type\": \"Chocolate with Sprinkles\"},\n    {\"id\": \"5003\", \"type\": \"Chocolate\"},\n    {\"id\": \"5004\", \"type\": \"Maple\"},\n]\n\ndata = {\"id\": \"0001\", \"type\": \"donut\", \"name\": \"Cake\", \"ppu\": 0.55, \"batters\": batters, \"topping\": toppings}\n```\n\n## `pprint`:\n\n`prettyformatter` attempts to compromise between alignment,\nreadability, and horizontal/vertical compactness.\n\nSupport for JSON data is also as easy as `pprint(json=True)`.\n\n```python\nfrom prettyformatter import pprint\n\npprint(data, json=True)\n\"\"\"\n{\n    \"id\"    : \"0001\",\n    \"type\"  : \"donut\",\n    \"name\"  : \"Cake\",\n    \"ppu\"   : 0.55,\n    \"batters\":\n        [\n            {\"id\": \"1001\", \"type\": \"Regular\"},\n            {\"id\": \"1002\", \"type\": \"Chocolate\"},\n            {\"id\": \"1003\", \"type\": \"Blueberry\"},\n            {\"id\": \"1004\", \"type\": \"Devil's Food\"}\n        ],\n    \"topping\":\n        [\n            {\"id\": \"5001\", \"type\": None},\n            {\"id\": \"5002\", \"type\": \"Glazed\"},\n            {\"id\": \"5005\", \"type\": \"Sugar\"},\n            {\"id\": \"5007\", \"type\": \"Powdered Sugar\"},\n            {\"id\": \"5006\", \"type\": \"Chocolate with Sprinkles\"},\n            {\"id\": \"5003\", \"type\": \"Chocolate\"},\n            {\"id\": \"5004\", \"type\": \"Maple\"}\n        ]\n}\n\"\"\"\n```\n\n`pprint` supports the same parameters as `print`, meaning saving to\nfiles is as easy as `file=file`.\n\n```python\nfrom prettyformatter import pprint\n\nwith open(\"cake.json\", mode=\"w\") as file:\n    pprint(data, json=True, file=file)\n```\n\n## `PrettyDataclass`\n\n`prettyformatter` supports dataclasses easily.\n\n```python\n@dataclass\nclass Person(PrettyDataclass):\n    name: str\n    birthday: str\n    phone_number: str\n    address: str\n\n\nprint(Person(\"Jane Doe\", \"2001-01-01\", \"012-345-6789\", \"123 Sample St.\"))\n\"\"\"\nPerson(\n    name=\n        \"Jane Doe\",\n    birthday=\n        \"2001-01-01\",\n    phone_number=\n        \"012-345-6789\",\n    address=\n        \"123 Sample St.\",\n)\n\"\"\"\n```\n\n## `register`\n\nCustom formatters for existing classes can be registered.\n\n```python\nimport numpy as np\n\n@register(np.ndarray)\ndef pformat_ndarray(obj, specifier, depth, indent, shorten, json):\n    if json:\n        return pformat(obj.tolist(), specifier, depth, indent, shorten, json)\n    with np.printoptions(formatter=dict(all=lambda x: format(x, specifier))):\n        return repr(obj).replace(\"\\n\", \"\\n\" + \" \" * depth)\n\npprint(dict.fromkeys(\"ABC\", np.arange(9).reshape(3, 3)))\n\"\"\"\n{\n    \"A\":\n        array([[0, 1, 2],\n               [3, 4, 5],\n               [6, 7, 8]]),\n    \"B\":\n        array([[0, 1, 2],\n               [3, 4, 5],\n               [6, 7, 8]]),\n    \"C\":\n        array([[0, 1, 2],\n               [3, 4, 5],\n               [6, 7, 8]]),\n}\n\"\"\"\n\npprint(dict.fromkeys(\"ABC\", np.arange(9).reshape(3, 3)), json=True)\n\"\"\"\n{\n    \"A\" : [[0, 1, 2], [3, 4, 5], [6, 7, 8]],\n    \"B\" : [[0, 1, 2], [3, 4, 5], [6, 7, 8]],\n    \"C\" : [[0, 1, 2], [3, 4, 5], [6, 7, 8]]\n}\n\"\"\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimpleart%2Fprettyformatter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsimpleart%2Fprettyformatter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsimpleart%2Fprettyformatter/lists"}