|
Metadata-Version: 2.1 |
|
Name: anytree |
|
Version: 2.12.1 |
|
Summary: Powerful and Lightweight Python Tree Data Structure with various plugins |
|
License: Apache-2.0 |
|
Keywords: tree,tree data,treelib,tree walk,tree structure |
|
Author: c0fec0de |
|
Author-email: c0fec0de@gmail.com |
|
Requires-Python: >=3.7.2,<4 |
|
Classifier: Development Status :: 5 - Production/Stable |
|
Classifier: License :: OSI Approved :: Apache Software License |
|
Classifier: Programming Language :: Python :: 3 |
|
Classifier: Programming Language :: Python :: 3.8 |
|
Classifier: Programming Language :: Python :: 3.9 |
|
Classifier: Programming Language :: Python :: 3.10 |
|
Classifier: Programming Language :: Python :: 3.11 |
|
Classifier: Programming Language :: Python :: 3.12 |
|
Classifier: Programming Language :: Python :: 3.7 |
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules |
|
Requires-Dist: six |
|
Description-Content-Type: text/x-rst |
|
|
|
.. image:: https://badge.fury.io/py/anytree.svg |
|
:target: https://badge.fury.io/py/anytree |
|
|
|
.. image:: https://img.shields.io/pypi/dm/anytree.svg?label=pypi%20downloads |
|
:target: https://pypi.python.org/pypi/anytree |
|
|
|
.. image:: https://readthedocs.org/projects/anytree/badge/?version=latest |
|
:target: https://anytree.readthedocs.io/en/latest/?badge=latest |
|
|
|
.. image:: https://coveralls.io/repos/github/c0fec0de/anytree/badge.svg |
|
:target: https://coveralls.io/github/c0fec0de/anytree |
|
|
|
.. image:: https://readthedocs.org/projects/anytree/badge/?version=stable |
|
:target: https://anytree.readthedocs.io/en/stable |
|
|
|
.. image:: https://api.codeclimate.com/v1/badges/e6d325d6fd23a93aab20/maintainability |
|
:target: https://codeclimate.com/github/c0fec0de/anytree/maintainability |
|
:alt: Maintainability |
|
|
|
.. image:: https://img.shields.io/pypi/pyversions/anytree.svg |
|
:target: https://pypi.python.org/pypi/anytree |
|
|
|
.. image:: https://img.shields.io/badge/code%20style-pep8-brightgreen.svg |
|
:target: https://www.python.org/dev/peps/pep-0008/ |
|
|
|
.. image:: https://img.shields.io/badge/code%20style-pep257-brightgreen.svg |
|
:target: https://www.python.org/dev/peps/pep-0257/ |
|
|
|
.. image:: https://img.shields.io/badge/linter-pylint-%231674b1?style=flat |
|
:target: https://www.pylint.org/ |
|
|
|
.. image:: https://img.shields.io/badge/code%20style-black-000000.svg |
|
:target: https://github.com/psf/black |
|
|
|
.. image:: https://img.shields.io/github/contributors/c0fec0de/anytree.svg |
|
:target: https://github.com/c0fec0de/anytree/graphs/contributors/ |
|
|
|
.. image:: https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square |
|
:target: http://makeapullrequest.com |
|
|
|
.. image:: https://img.shields.io/github/issues-pr/c0fec0de/anytree.svg |
|
:target: https://github.com/c0fec0de/anytree/pulls |
|
|
|
.. image:: https://img.shields.io/github/issues-pr-closed/c0fec0de/anytree.svg |
|
:target: https://github.com/c0fec0de/anytree/pulls?q=is%3Apr+is%3Aclosed |
|
|
|
|
|
Links |
|
===== |
|
|
|
* Documentation_ |
|
* PyPI_ |
|
* GitHub_ |
|
* Changelog_ |
|
* Issues_ |
|
* Contributors_ |
|
* If you enjoy anytree_ |
|
|
|
.. image:: https://github.com/c0fec0de/anytree/raw/devel/docs/static/buymeacoffee.png |
|
:target: https://www.buymeacoffee.com/1oYX0sw |
|
|
|
.. _anytree: https://anytree.readthedocs.io/en/stable/ |
|
.. _Documentation: https://anytree.readthedocs.io/en/stable/ |
|
.. _PyPI: https://pypi.org/project/anytree |
|
.. _GitHub: https://github.com/c0fec0de/anytree |
|
.. _Changelog: https://github.com/c0fec0de/anytree/releases |
|
.. _Issues: https://github.com/c0fec0de/anytree/issues |
|
.. _Contributors: https://github.com/c0fec0de/anytree/graphs/contributors |
|
|
|
.. _Node: https://anytree.readthedocs.io/en/stable/api/anytree.node.html |
|
.. _RenderTree: https://anytree.readthedocs.io/en/stable/api/anytree.render.html |
|
.. _UniqueDotExporter: https://anytree.readthedocs.io/en/stable/exporter/dotexporter.html |
|
.. _NodeMixin: https://anytree.readthedocs.io/en/stable/api/anytree.node.html |
|
.. _Importers: https://anytree.readthedocs.io/en/stable/importer.html |
|
.. _Exporters: https://anytree.readthedocs.io/en/stable/exporter.html |
|
|
|
Getting started |
|
--------------- |
|
|
|
.. _getting_started: |
|
|
|
Usage is simple. |
|
|
|
**Construction** |
|
|
|
>>> from anytree import Node, RenderTree |
|
>>> udo = Node("Udo") |
|
>>> marc = Node("Marc", parent=udo) |
|
>>> lian = Node("Lian", parent=marc) |
|
>>> dan = Node("Dan", parent=udo) |
|
>>> jet = Node("Jet", parent=dan) |
|
>>> jan = Node("Jan", parent=dan) |
|
>>> joe = Node("Joe", parent=dan) |
|
|
|
**Node** |
|
|
|
>>> print(udo) |
|
Node('/Udo') |
|
>>> print(joe) |
|
Node('/Udo/Dan/Joe') |
|
|
|
**Tree** |
|
|
|
>>> for pre, fill, node in RenderTree(udo): |
|
... print("%s%s" % (pre, node.name)) |
|
Udo |
|
βββ Marc |
|
β βββ Lian |
|
βββ Dan |
|
βββ Jet |
|
βββ Jan |
|
βββ Joe |
|
|
|
For details see Node_ and RenderTree_. |
|
|
|
**Visualization** |
|
|
|
>>> from anytree.exporter import UniqueDotExporter |
|
>>> |
|
>>> UniqueDotExporter(udo).to_picture("udo.png") |
|
|
|
.. image:: https://anytree.readthedocs.io/en/latest/_images/udo.png |
|
|
|
The UniqueDotExporter_ can be started at any node and has various formatting hookups: |
|
|
|
>>> UniqueDotExporter(dan, |
|
... nodeattrfunc=lambda node: "fixedsize=true, width=1, height=1, shape=diamond", |
|
... edgeattrfunc=lambda parent, child: "style=bold" |
|
... ).to_picture("dan.png") |
|
|
|
.. image:: https://anytree.readthedocs.io/en/latest/_images/dan.png |
|
|
|
There are various other Importers_ and Exporters_. |
|
|
|
**Manipulation** |
|
|
|
A second tree: |
|
|
|
>>> mary = Node("Mary") |
|
>>> urs = Node("Urs", parent=mary) |
|
>>> chris = Node("Chris", parent=mary) |
|
>>> marta = Node("Marta", parent=mary) |
|
>>> print(RenderTree(mary)) |
|
Node('/Mary') |
|
βββ Node('/Mary/Urs') |
|
βββ Node('/Mary/Chris') |
|
βββ Node('/Mary/Marta') |
|
|
|
Append: |
|
|
|
>>> udo.parent = mary |
|
>>> print(RenderTree(mary)) |
|
Node('/Mary') |
|
βββ Node('/Mary/Urs') |
|
βββ Node('/Mary/Chris') |
|
βββ Node('/Mary/Marta') |
|
βββ Node('/Mary/Udo') |
|
βββ Node('/Mary/Udo/Marc') |
|
β βββ Node('/Mary/Udo/Marc/Lian') |
|
βββ Node('/Mary/Udo/Dan') |
|
βββ Node('/Mary/Udo/Dan/Jet') |
|
βββ Node('/Mary/Udo/Dan/Jan') |
|
βββ Node('/Mary/Udo/Dan/Joe') |
|
|
|
Subtree rendering: |
|
|
|
>>> print(RenderTree(marc)) |
|
Node('/Mary/Udo/Marc') |
|
βββ Node('/Mary/Udo/Marc/Lian') |
|
|
|
Cut: |
|
|
|
>>> dan.parent = None |
|
>>> print(RenderTree(dan)) |
|
Node('/Dan') |
|
βββ Node('/Dan/Jet') |
|
βββ Node('/Dan/Jan') |
|
βββ Node('/Dan/Joe') |
|
|
|
**Extending any python class to become a tree node** |
|
|
|
The entire tree magic is encapsulated by NodeMixin_ |
|
add it as base class and the class becomes a tree node: |
|
|
|
>>> from anytree import NodeMixin, RenderTree |
|
>>> class MyBaseClass(object): |
|
... foo = 4 |
|
>>> class MyClass(MyBaseClass, NodeMixin): |
|
... def __init__(self, name, length, width, parent=None, children=None): |
|
... super(MyClass, self).__init__() |
|
... self.name = name |
|
... self.length = length |
|
... self.width = width |
|
... self.parent = parent |
|
... if children: |
|
... self.children = children |
|
|
|
Just set the `parent` attribute to reflect the tree relation: |
|
|
|
>>> my0 = MyClass('my0', 0, 0) |
|
>>> my1 = MyClass('my1', 1, 0, parent=my0) |
|
>>> my2 = MyClass('my2', 0, 2, parent=my0) |
|
|
|
>>> for pre, fill, node in RenderTree(my0): |
|
... treestr = u"%s%s" % (pre, node.name) |
|
... print(treestr.ljust(8), node.length, node.width) |
|
my0 0 0 |
|
βββ my1 1 0 |
|
βββ my2 0 2 |
|
|
|
The `children` can be used likewise: |
|
|
|
>>> my0 = MyClass('my0', 0, 0, children=[ |
|
... MyClass('my1', 1, 0), |
|
... MyClass('my2', 0, 2), |
|
... ]) |
|
|
|
>>> for pre, fill, node in RenderTree(my0): |
|
... treestr = u"%s%s" % (pre, node.name) |
|
... print(treestr.ljust(8), node.length, node.width) |
|
my0 0 0 |
|
βββ my1 1 0 |
|
βββ my2 0 2 |
|
|
|
Documentation |
|
------------- |
|
|
|
Please see the Documentation_ for all details. |
|
|
|
Installation |
|
------------ |
|
|
|
To install the `anytree` module run:: |
|
|
|
pip install anytree |
|
|
|
If you do not have write-permissions to the python installation, try:: |
|
|
|
pip install anytree --user |
|
|
|
|