17db96d56Sopenharmony_ci:mod:`pprint` --- Data pretty printer 27db96d56Sopenharmony_ci===================================== 37db96d56Sopenharmony_ci 47db96d56Sopenharmony_ci.. module:: pprint 57db96d56Sopenharmony_ci :synopsis: Data pretty printer. 67db96d56Sopenharmony_ci 77db96d56Sopenharmony_ci.. moduleauthor:: Fred L. Drake, Jr. <fdrake@acm.org> 87db96d56Sopenharmony_ci.. sectionauthor:: Fred L. Drake, Jr. <fdrake@acm.org> 97db96d56Sopenharmony_ci 107db96d56Sopenharmony_ci**Source code:** :source:`Lib/pprint.py` 117db96d56Sopenharmony_ci 127db96d56Sopenharmony_ci-------------- 137db96d56Sopenharmony_ci 147db96d56Sopenharmony_ciThe :mod:`pprint` module provides a capability to "pretty-print" arbitrary 157db96d56Sopenharmony_ciPython data structures in a form which can be used as input to the interpreter. 167db96d56Sopenharmony_ciIf the formatted structures include objects which are not fundamental Python 177db96d56Sopenharmony_citypes, the representation may not be loadable. This may be the case if objects 187db96d56Sopenharmony_cisuch as files, sockets or classes are included, as well as many other 197db96d56Sopenharmony_ciobjects which are not representable as Python literals. 207db96d56Sopenharmony_ci 217db96d56Sopenharmony_ciThe formatted representation keeps objects on a single line if it can, and 227db96d56Sopenharmony_cibreaks them onto multiple lines if they don't fit within the allowed width. 237db96d56Sopenharmony_ciConstruct :class:`PrettyPrinter` objects explicitly if you need to adjust the 247db96d56Sopenharmony_ciwidth constraint. 257db96d56Sopenharmony_ci 267db96d56Sopenharmony_ciDictionaries are sorted by key before the display is computed. 277db96d56Sopenharmony_ci 287db96d56Sopenharmony_ci.. versionchanged:: 3.9 297db96d56Sopenharmony_ci Added support for pretty-printing :class:`types.SimpleNamespace`. 307db96d56Sopenharmony_ci 317db96d56Sopenharmony_ci.. versionchanged:: 3.10 327db96d56Sopenharmony_ci Added support for pretty-printing :class:`dataclasses.dataclass`. 337db96d56Sopenharmony_ci 347db96d56Sopenharmony_ciThe :mod:`pprint` module defines one class: 357db96d56Sopenharmony_ci 367db96d56Sopenharmony_ci.. First the implementation class: 377db96d56Sopenharmony_ci 387db96d56Sopenharmony_ci 397db96d56Sopenharmony_ci.. index:: single: ...; placeholder 407db96d56Sopenharmony_ci 417db96d56Sopenharmony_ci.. class:: PrettyPrinter(indent=1, width=80, depth=None, stream=None, *, \ 427db96d56Sopenharmony_ci compact=False, sort_dicts=True, underscore_numbers=False) 437db96d56Sopenharmony_ci 447db96d56Sopenharmony_ci Construct a :class:`PrettyPrinter` instance. This constructor understands 457db96d56Sopenharmony_ci several keyword parameters. 467db96d56Sopenharmony_ci 477db96d56Sopenharmony_ci *stream* (default ``sys.stdout``) is a :term:`file-like object` to 487db96d56Sopenharmony_ci which the output will be written by calling its :meth:`write` method. 497db96d56Sopenharmony_ci If both *stream* and ``sys.stdout`` are ``None``, then 507db96d56Sopenharmony_ci :meth:`~PrettyPrinter.pprint` silently returns. 517db96d56Sopenharmony_ci 527db96d56Sopenharmony_ci Other values configure the manner in which nesting of complex data 537db96d56Sopenharmony_ci structures is displayed. 547db96d56Sopenharmony_ci 557db96d56Sopenharmony_ci *indent* (default 1) specifies the amount of indentation added for 567db96d56Sopenharmony_ci each nesting level. 577db96d56Sopenharmony_ci 587db96d56Sopenharmony_ci *depth* controls the number of nesting levels which may be printed; if 597db96d56Sopenharmony_ci the data structure being printed is too deep, the next contained level 607db96d56Sopenharmony_ci is replaced by ``...``. By default, there is no constraint on the 617db96d56Sopenharmony_ci depth of the objects being formatted. 627db96d56Sopenharmony_ci 637db96d56Sopenharmony_ci *width* (default 80) specifies the desired maximum number of characters per 647db96d56Sopenharmony_ci line in the output. If a structure cannot be formatted within the width 657db96d56Sopenharmony_ci constraint, a best effort will be made. 667db96d56Sopenharmony_ci 677db96d56Sopenharmony_ci *compact* impacts the way that long sequences (lists, tuples, sets, etc) 687db96d56Sopenharmony_ci are formatted. If *compact* is false (the default) then each item of a 697db96d56Sopenharmony_ci sequence will be formatted on a separate line. If *compact* is true, as 707db96d56Sopenharmony_ci many items as will fit within the *width* will be formatted on each output 717db96d56Sopenharmony_ci line. 727db96d56Sopenharmony_ci 737db96d56Sopenharmony_ci If *sort_dicts* is true (the default), dictionaries will be formatted with 747db96d56Sopenharmony_ci their keys sorted, otherwise they will display in insertion order. 757db96d56Sopenharmony_ci 767db96d56Sopenharmony_ci If *underscore_numbers* is true, integers will be formatted with the 777db96d56Sopenharmony_ci ``_`` character for a thousands separator, otherwise underscores are not 787db96d56Sopenharmony_ci displayed (the default). 797db96d56Sopenharmony_ci 807db96d56Sopenharmony_ci .. versionchanged:: 3.4 817db96d56Sopenharmony_ci Added the *compact* parameter. 827db96d56Sopenharmony_ci 837db96d56Sopenharmony_ci .. versionchanged:: 3.8 847db96d56Sopenharmony_ci Added the *sort_dicts* parameter. 857db96d56Sopenharmony_ci 867db96d56Sopenharmony_ci .. versionchanged:: 3.10 877db96d56Sopenharmony_ci Added the *underscore_numbers* parameter. 887db96d56Sopenharmony_ci 897db96d56Sopenharmony_ci .. versionchanged:: 3.11 907db96d56Sopenharmony_ci No longer attempts to write to ``sys.stdout`` if it is ``None``. 917db96d56Sopenharmony_ci 927db96d56Sopenharmony_ci >>> import pprint 937db96d56Sopenharmony_ci >>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni'] 947db96d56Sopenharmony_ci >>> stuff.insert(0, stuff[:]) 957db96d56Sopenharmony_ci >>> pp = pprint.PrettyPrinter(indent=4) 967db96d56Sopenharmony_ci >>> pp.pprint(stuff) 977db96d56Sopenharmony_ci [ ['spam', 'eggs', 'lumberjack', 'knights', 'ni'], 987db96d56Sopenharmony_ci 'spam', 997db96d56Sopenharmony_ci 'eggs', 1007db96d56Sopenharmony_ci 'lumberjack', 1017db96d56Sopenharmony_ci 'knights', 1027db96d56Sopenharmony_ci 'ni'] 1037db96d56Sopenharmony_ci >>> pp = pprint.PrettyPrinter(width=41, compact=True) 1047db96d56Sopenharmony_ci >>> pp.pprint(stuff) 1057db96d56Sopenharmony_ci [['spam', 'eggs', 'lumberjack', 1067db96d56Sopenharmony_ci 'knights', 'ni'], 1077db96d56Sopenharmony_ci 'spam', 'eggs', 'lumberjack', 'knights', 1087db96d56Sopenharmony_ci 'ni'] 1097db96d56Sopenharmony_ci >>> tup = ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead', 1107db96d56Sopenharmony_ci ... ('parrot', ('fresh fruit',)))))))) 1117db96d56Sopenharmony_ci >>> pp = pprint.PrettyPrinter(depth=6) 1127db96d56Sopenharmony_ci >>> pp.pprint(tup) 1137db96d56Sopenharmony_ci ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead', (...))))))) 1147db96d56Sopenharmony_ci 1157db96d56Sopenharmony_ci.. function:: pformat(object, indent=1, width=80, depth=None, *, \ 1167db96d56Sopenharmony_ci compact=False, sort_dicts=True, underscore_numbers=False) 1177db96d56Sopenharmony_ci 1187db96d56Sopenharmony_ci Return the formatted representation of *object* as a string. *indent*, 1197db96d56Sopenharmony_ci *width*, *depth*, *compact*, *sort_dicts* and *underscore_numbers* are 1207db96d56Sopenharmony_ci passed to the :class:`PrettyPrinter` constructor as formatting parameters 1217db96d56Sopenharmony_ci and their meanings are as described in its documentation above. 1227db96d56Sopenharmony_ci 1237db96d56Sopenharmony_ci 1247db96d56Sopenharmony_ci.. function:: pp(object, *args, sort_dicts=False, **kwargs) 1257db96d56Sopenharmony_ci 1267db96d56Sopenharmony_ci Prints the formatted representation of *object* followed by a newline. 1277db96d56Sopenharmony_ci If *sort_dicts* is false (the default), dictionaries will be displayed with 1287db96d56Sopenharmony_ci their keys in insertion order, otherwise the dict keys will be sorted. 1297db96d56Sopenharmony_ci *args* and *kwargs* will be passed to :func:`pprint` as formatting 1307db96d56Sopenharmony_ci parameters. 1317db96d56Sopenharmony_ci 1327db96d56Sopenharmony_ci .. versionadded:: 3.8 1337db96d56Sopenharmony_ci 1347db96d56Sopenharmony_ci 1357db96d56Sopenharmony_ci.. function:: pprint(object, stream=None, indent=1, width=80, depth=None, *, \ 1367db96d56Sopenharmony_ci compact=False, sort_dicts=True, underscore_numbers=False) 1377db96d56Sopenharmony_ci 1387db96d56Sopenharmony_ci Prints the formatted representation of *object* on *stream*, followed by a 1397db96d56Sopenharmony_ci newline. If *stream* is ``None``, ``sys.stdout`` is used. This may be used 1407db96d56Sopenharmony_ci in the interactive interpreter instead of the :func:`print` function for 1417db96d56Sopenharmony_ci inspecting values (you can even reassign ``print = pprint.pprint`` for use 1427db96d56Sopenharmony_ci within a scope). 1437db96d56Sopenharmony_ci 1447db96d56Sopenharmony_ci The configuration parameters *stream*, *indent*, *width*, *depth*, 1457db96d56Sopenharmony_ci *compact*, *sort_dicts* and *underscore_numbers* are passed to the 1467db96d56Sopenharmony_ci :class:`PrettyPrinter` constructor and their meanings are as 1477db96d56Sopenharmony_ci described in its documentation above. 1487db96d56Sopenharmony_ci 1497db96d56Sopenharmony_ci >>> import pprint 1507db96d56Sopenharmony_ci >>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni'] 1517db96d56Sopenharmony_ci >>> stuff.insert(0, stuff) 1527db96d56Sopenharmony_ci >>> pprint.pprint(stuff) 1537db96d56Sopenharmony_ci [<Recursion on list with id=...>, 1547db96d56Sopenharmony_ci 'spam', 1557db96d56Sopenharmony_ci 'eggs', 1567db96d56Sopenharmony_ci 'lumberjack', 1577db96d56Sopenharmony_ci 'knights', 1587db96d56Sopenharmony_ci 'ni'] 1597db96d56Sopenharmony_ci 1607db96d56Sopenharmony_ci.. function:: isreadable(object) 1617db96d56Sopenharmony_ci 1627db96d56Sopenharmony_ci .. index:: pair: built-in function; eval 1637db96d56Sopenharmony_ci 1647db96d56Sopenharmony_ci Determine if the formatted representation of *object* is "readable", or can be 1657db96d56Sopenharmony_ci used to reconstruct the value using :func:`eval`. This always returns ``False`` 1667db96d56Sopenharmony_ci for recursive objects. 1677db96d56Sopenharmony_ci 1687db96d56Sopenharmony_ci >>> pprint.isreadable(stuff) 1697db96d56Sopenharmony_ci False 1707db96d56Sopenharmony_ci 1717db96d56Sopenharmony_ci 1727db96d56Sopenharmony_ci.. function:: isrecursive(object) 1737db96d56Sopenharmony_ci 1747db96d56Sopenharmony_ci Determine if *object* requires a recursive representation. 1757db96d56Sopenharmony_ci 1767db96d56Sopenharmony_ci 1777db96d56Sopenharmony_ciOne more support function is also defined: 1787db96d56Sopenharmony_ci 1797db96d56Sopenharmony_ci.. function:: saferepr(object) 1807db96d56Sopenharmony_ci 1817db96d56Sopenharmony_ci Return a string representation of *object*, protected against recursive data 1827db96d56Sopenharmony_ci structures. If the representation of *object* exposes a recursive entry, the 1837db96d56Sopenharmony_ci recursive reference will be represented as ``<Recursion on typename with 1847db96d56Sopenharmony_ci id=number>``. The representation is not otherwise formatted. 1857db96d56Sopenharmony_ci 1867db96d56Sopenharmony_ci >>> pprint.saferepr(stuff) 1877db96d56Sopenharmony_ci "[<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni']" 1887db96d56Sopenharmony_ci 1897db96d56Sopenharmony_ci 1907db96d56Sopenharmony_ci.. _prettyprinter-objects: 1917db96d56Sopenharmony_ci 1927db96d56Sopenharmony_ciPrettyPrinter Objects 1937db96d56Sopenharmony_ci--------------------- 1947db96d56Sopenharmony_ci 1957db96d56Sopenharmony_ci:class:`PrettyPrinter` instances have the following methods: 1967db96d56Sopenharmony_ci 1977db96d56Sopenharmony_ci 1987db96d56Sopenharmony_ci.. method:: PrettyPrinter.pformat(object) 1997db96d56Sopenharmony_ci 2007db96d56Sopenharmony_ci Return the formatted representation of *object*. This takes into account the 2017db96d56Sopenharmony_ci options passed to the :class:`PrettyPrinter` constructor. 2027db96d56Sopenharmony_ci 2037db96d56Sopenharmony_ci 2047db96d56Sopenharmony_ci.. method:: PrettyPrinter.pprint(object) 2057db96d56Sopenharmony_ci 2067db96d56Sopenharmony_ci Print the formatted representation of *object* on the configured stream, 2077db96d56Sopenharmony_ci followed by a newline. 2087db96d56Sopenharmony_ci 2097db96d56Sopenharmony_ciThe following methods provide the implementations for the corresponding 2107db96d56Sopenharmony_cifunctions of the same names. Using these methods on an instance is slightly 2117db96d56Sopenharmony_cimore efficient since new :class:`PrettyPrinter` objects don't need to be 2127db96d56Sopenharmony_cicreated. 2137db96d56Sopenharmony_ci 2147db96d56Sopenharmony_ci 2157db96d56Sopenharmony_ci.. method:: PrettyPrinter.isreadable(object) 2167db96d56Sopenharmony_ci 2177db96d56Sopenharmony_ci .. index:: pair: built-in function; eval 2187db96d56Sopenharmony_ci 2197db96d56Sopenharmony_ci Determine if the formatted representation of the object is "readable," or can be 2207db96d56Sopenharmony_ci used to reconstruct the value using :func:`eval`. Note that this returns 2217db96d56Sopenharmony_ci ``False`` for recursive objects. If the *depth* parameter of the 2227db96d56Sopenharmony_ci :class:`PrettyPrinter` is set and the object is deeper than allowed, this 2237db96d56Sopenharmony_ci returns ``False``. 2247db96d56Sopenharmony_ci 2257db96d56Sopenharmony_ci 2267db96d56Sopenharmony_ci.. method:: PrettyPrinter.isrecursive(object) 2277db96d56Sopenharmony_ci 2287db96d56Sopenharmony_ci Determine if the object requires a recursive representation. 2297db96d56Sopenharmony_ci 2307db96d56Sopenharmony_ciThis method is provided as a hook to allow subclasses to modify the way objects 2317db96d56Sopenharmony_ciare converted to strings. The default implementation uses the internals of the 2327db96d56Sopenharmony_ci:func:`saferepr` implementation. 2337db96d56Sopenharmony_ci 2347db96d56Sopenharmony_ci 2357db96d56Sopenharmony_ci.. method:: PrettyPrinter.format(object, context, maxlevels, level) 2367db96d56Sopenharmony_ci 2377db96d56Sopenharmony_ci Returns three values: the formatted version of *object* as a string, a flag 2387db96d56Sopenharmony_ci indicating whether the result is readable, and a flag indicating whether 2397db96d56Sopenharmony_ci recursion was detected. The first argument is the object to be presented. The 2407db96d56Sopenharmony_ci second is a dictionary which contains the :func:`id` of objects that are part of 2417db96d56Sopenharmony_ci the current presentation context (direct and indirect containers for *object* 2427db96d56Sopenharmony_ci that are affecting the presentation) as the keys; if an object needs to be 2437db96d56Sopenharmony_ci presented which is already represented in *context*, the third return value 2447db96d56Sopenharmony_ci should be ``True``. Recursive calls to the :meth:`.format` method should add 2457db96d56Sopenharmony_ci additional entries for containers to this dictionary. The third argument, 2467db96d56Sopenharmony_ci *maxlevels*, gives the requested limit to recursion; this will be ``0`` if there 2477db96d56Sopenharmony_ci is no requested limit. This argument should be passed unmodified to recursive 2487db96d56Sopenharmony_ci calls. The fourth argument, *level*, gives the current level; recursive calls 2497db96d56Sopenharmony_ci should be passed a value less than that of the current call. 2507db96d56Sopenharmony_ci 2517db96d56Sopenharmony_ci 2527db96d56Sopenharmony_ci.. _pprint-example: 2537db96d56Sopenharmony_ci 2547db96d56Sopenharmony_ciExample 2557db96d56Sopenharmony_ci------- 2567db96d56Sopenharmony_ci 2577db96d56Sopenharmony_ciTo demonstrate several uses of the :func:`pprint` function and its parameters, 2587db96d56Sopenharmony_cilet's fetch information about a project from `PyPI <https://pypi.org>`_:: 2597db96d56Sopenharmony_ci 2607db96d56Sopenharmony_ci >>> import json 2617db96d56Sopenharmony_ci >>> import pprint 2627db96d56Sopenharmony_ci >>> from urllib.request import urlopen 2637db96d56Sopenharmony_ci >>> with urlopen('https://pypi.org/pypi/sampleproject/json') as resp: 2647db96d56Sopenharmony_ci ... project_info = json.load(resp)['info'] 2657db96d56Sopenharmony_ci 2667db96d56Sopenharmony_ciIn its basic form, :func:`pprint` shows the whole object:: 2677db96d56Sopenharmony_ci 2687db96d56Sopenharmony_ci >>> pprint.pprint(project_info) 2697db96d56Sopenharmony_ci {'author': 'The Python Packaging Authority', 2707db96d56Sopenharmony_ci 'author_email': 'pypa-dev@googlegroups.com', 2717db96d56Sopenharmony_ci 'bugtrack_url': None, 2727db96d56Sopenharmony_ci 'classifiers': ['Development Status :: 3 - Alpha', 2737db96d56Sopenharmony_ci 'Intended Audience :: Developers', 2747db96d56Sopenharmony_ci 'License :: OSI Approved :: MIT License', 2757db96d56Sopenharmony_ci 'Programming Language :: Python :: 2', 2767db96d56Sopenharmony_ci 'Programming Language :: Python :: 2.6', 2777db96d56Sopenharmony_ci 'Programming Language :: Python :: 2.7', 2787db96d56Sopenharmony_ci 'Programming Language :: Python :: 3', 2797db96d56Sopenharmony_ci 'Programming Language :: Python :: 3.2', 2807db96d56Sopenharmony_ci 'Programming Language :: Python :: 3.3', 2817db96d56Sopenharmony_ci 'Programming Language :: Python :: 3.4', 2827db96d56Sopenharmony_ci 'Topic :: Software Development :: Build Tools'], 2837db96d56Sopenharmony_ci 'description': 'A sample Python project\n' 2847db96d56Sopenharmony_ci '=======================\n' 2857db96d56Sopenharmony_ci '\n' 2867db96d56Sopenharmony_ci 'This is the description file for the project.\n' 2877db96d56Sopenharmony_ci '\n' 2887db96d56Sopenharmony_ci 'The file should use UTF-8 encoding and be written using ' 2897db96d56Sopenharmony_ci 'ReStructured Text. It\n' 2907db96d56Sopenharmony_ci 'will be used to generate the project webpage on PyPI, and ' 2917db96d56Sopenharmony_ci 'should be written for\n' 2927db96d56Sopenharmony_ci 'that purpose.\n' 2937db96d56Sopenharmony_ci '\n' 2947db96d56Sopenharmony_ci 'Typical contents for this file would include an overview of ' 2957db96d56Sopenharmony_ci 'the project, basic\n' 2967db96d56Sopenharmony_ci 'usage examples, etc. Generally, including the project ' 2977db96d56Sopenharmony_ci 'changelog in here is not\n' 2987db96d56Sopenharmony_ci 'a good idea, although a simple "What\'s New" section for the ' 2997db96d56Sopenharmony_ci 'most recent version\n' 3007db96d56Sopenharmony_ci 'may be appropriate.', 3017db96d56Sopenharmony_ci 'description_content_type': None, 3027db96d56Sopenharmony_ci 'docs_url': None, 3037db96d56Sopenharmony_ci 'download_url': 'UNKNOWN', 3047db96d56Sopenharmony_ci 'downloads': {'last_day': -1, 'last_month': -1, 'last_week': -1}, 3057db96d56Sopenharmony_ci 'home_page': 'https://github.com/pypa/sampleproject', 3067db96d56Sopenharmony_ci 'keywords': 'sample setuptools development', 3077db96d56Sopenharmony_ci 'license': 'MIT', 3087db96d56Sopenharmony_ci 'maintainer': None, 3097db96d56Sopenharmony_ci 'maintainer_email': None, 3107db96d56Sopenharmony_ci 'name': 'sampleproject', 3117db96d56Sopenharmony_ci 'package_url': 'https://pypi.org/project/sampleproject/', 3127db96d56Sopenharmony_ci 'platform': 'UNKNOWN', 3137db96d56Sopenharmony_ci 'project_url': 'https://pypi.org/project/sampleproject/', 3147db96d56Sopenharmony_ci 'project_urls': {'Download': 'UNKNOWN', 3157db96d56Sopenharmony_ci 'Homepage': 'https://github.com/pypa/sampleproject'}, 3167db96d56Sopenharmony_ci 'release_url': 'https://pypi.org/project/sampleproject/1.2.0/', 3177db96d56Sopenharmony_ci 'requires_dist': None, 3187db96d56Sopenharmony_ci 'requires_python': None, 3197db96d56Sopenharmony_ci 'summary': 'A sample Python project', 3207db96d56Sopenharmony_ci 'version': '1.2.0'} 3217db96d56Sopenharmony_ci 3227db96d56Sopenharmony_ciThe result can be limited to a certain *depth* (ellipsis is used for deeper 3237db96d56Sopenharmony_cicontents):: 3247db96d56Sopenharmony_ci 3257db96d56Sopenharmony_ci >>> pprint.pprint(project_info, depth=1) 3267db96d56Sopenharmony_ci {'author': 'The Python Packaging Authority', 3277db96d56Sopenharmony_ci 'author_email': 'pypa-dev@googlegroups.com', 3287db96d56Sopenharmony_ci 'bugtrack_url': None, 3297db96d56Sopenharmony_ci 'classifiers': [...], 3307db96d56Sopenharmony_ci 'description': 'A sample Python project\n' 3317db96d56Sopenharmony_ci '=======================\n' 3327db96d56Sopenharmony_ci '\n' 3337db96d56Sopenharmony_ci 'This is the description file for the project.\n' 3347db96d56Sopenharmony_ci '\n' 3357db96d56Sopenharmony_ci 'The file should use UTF-8 encoding and be written using ' 3367db96d56Sopenharmony_ci 'ReStructured Text. It\n' 3377db96d56Sopenharmony_ci 'will be used to generate the project webpage on PyPI, and ' 3387db96d56Sopenharmony_ci 'should be written for\n' 3397db96d56Sopenharmony_ci 'that purpose.\n' 3407db96d56Sopenharmony_ci '\n' 3417db96d56Sopenharmony_ci 'Typical contents for this file would include an overview of ' 3427db96d56Sopenharmony_ci 'the project, basic\n' 3437db96d56Sopenharmony_ci 'usage examples, etc. Generally, including the project ' 3447db96d56Sopenharmony_ci 'changelog in here is not\n' 3457db96d56Sopenharmony_ci 'a good idea, although a simple "What\'s New" section for the ' 3467db96d56Sopenharmony_ci 'most recent version\n' 3477db96d56Sopenharmony_ci 'may be appropriate.', 3487db96d56Sopenharmony_ci 'description_content_type': None, 3497db96d56Sopenharmony_ci 'docs_url': None, 3507db96d56Sopenharmony_ci 'download_url': 'UNKNOWN', 3517db96d56Sopenharmony_ci 'downloads': {...}, 3527db96d56Sopenharmony_ci 'home_page': 'https://github.com/pypa/sampleproject', 3537db96d56Sopenharmony_ci 'keywords': 'sample setuptools development', 3547db96d56Sopenharmony_ci 'license': 'MIT', 3557db96d56Sopenharmony_ci 'maintainer': None, 3567db96d56Sopenharmony_ci 'maintainer_email': None, 3577db96d56Sopenharmony_ci 'name': 'sampleproject', 3587db96d56Sopenharmony_ci 'package_url': 'https://pypi.org/project/sampleproject/', 3597db96d56Sopenharmony_ci 'platform': 'UNKNOWN', 3607db96d56Sopenharmony_ci 'project_url': 'https://pypi.org/project/sampleproject/', 3617db96d56Sopenharmony_ci 'project_urls': {...}, 3627db96d56Sopenharmony_ci 'release_url': 'https://pypi.org/project/sampleproject/1.2.0/', 3637db96d56Sopenharmony_ci 'requires_dist': None, 3647db96d56Sopenharmony_ci 'requires_python': None, 3657db96d56Sopenharmony_ci 'summary': 'A sample Python project', 3667db96d56Sopenharmony_ci 'version': '1.2.0'} 3677db96d56Sopenharmony_ci 3687db96d56Sopenharmony_ciAdditionally, maximum character *width* can be suggested. If a long object 3697db96d56Sopenharmony_cicannot be split, the specified width will be exceeded:: 3707db96d56Sopenharmony_ci 3717db96d56Sopenharmony_ci >>> pprint.pprint(project_info, depth=1, width=60) 3727db96d56Sopenharmony_ci {'author': 'The Python Packaging Authority', 3737db96d56Sopenharmony_ci 'author_email': 'pypa-dev@googlegroups.com', 3747db96d56Sopenharmony_ci 'bugtrack_url': None, 3757db96d56Sopenharmony_ci 'classifiers': [...], 3767db96d56Sopenharmony_ci 'description': 'A sample Python project\n' 3777db96d56Sopenharmony_ci '=======================\n' 3787db96d56Sopenharmony_ci '\n' 3797db96d56Sopenharmony_ci 'This is the description file for the ' 3807db96d56Sopenharmony_ci 'project.\n' 3817db96d56Sopenharmony_ci '\n' 3827db96d56Sopenharmony_ci 'The file should use UTF-8 encoding and be ' 3837db96d56Sopenharmony_ci 'written using ReStructured Text. It\n' 3847db96d56Sopenharmony_ci 'will be used to generate the project ' 3857db96d56Sopenharmony_ci 'webpage on PyPI, and should be written ' 3867db96d56Sopenharmony_ci 'for\n' 3877db96d56Sopenharmony_ci 'that purpose.\n' 3887db96d56Sopenharmony_ci '\n' 3897db96d56Sopenharmony_ci 'Typical contents for this file would ' 3907db96d56Sopenharmony_ci 'include an overview of the project, ' 3917db96d56Sopenharmony_ci 'basic\n' 3927db96d56Sopenharmony_ci 'usage examples, etc. Generally, including ' 3937db96d56Sopenharmony_ci 'the project changelog in here is not\n' 3947db96d56Sopenharmony_ci 'a good idea, although a simple "What\'s ' 3957db96d56Sopenharmony_ci 'New" section for the most recent version\n' 3967db96d56Sopenharmony_ci 'may be appropriate.', 3977db96d56Sopenharmony_ci 'description_content_type': None, 3987db96d56Sopenharmony_ci 'docs_url': None, 3997db96d56Sopenharmony_ci 'download_url': 'UNKNOWN', 4007db96d56Sopenharmony_ci 'downloads': {...}, 4017db96d56Sopenharmony_ci 'home_page': 'https://github.com/pypa/sampleproject', 4027db96d56Sopenharmony_ci 'keywords': 'sample setuptools development', 4037db96d56Sopenharmony_ci 'license': 'MIT', 4047db96d56Sopenharmony_ci 'maintainer': None, 4057db96d56Sopenharmony_ci 'maintainer_email': None, 4067db96d56Sopenharmony_ci 'name': 'sampleproject', 4077db96d56Sopenharmony_ci 'package_url': 'https://pypi.org/project/sampleproject/', 4087db96d56Sopenharmony_ci 'platform': 'UNKNOWN', 4097db96d56Sopenharmony_ci 'project_url': 'https://pypi.org/project/sampleproject/', 4107db96d56Sopenharmony_ci 'project_urls': {...}, 4117db96d56Sopenharmony_ci 'release_url': 'https://pypi.org/project/sampleproject/1.2.0/', 4127db96d56Sopenharmony_ci 'requires_dist': None, 4137db96d56Sopenharmony_ci 'requires_python': None, 4147db96d56Sopenharmony_ci 'summary': 'A sample Python project', 4157db96d56Sopenharmony_ci 'version': '1.2.0'} 416