{ "info": { "author": "Fabio Caccamo", "author_email": "fabio.caccamo@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django", "Framework :: Django :: 1.10", "Framework :: Django :: 1.11", "Framework :: Django :: 1.8", "Framework :: Django :: 1.9", "Framework :: Django :: 2.0", "Framework :: Django :: 2.1", "Framework :: Django :: 2.2", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Build Tools" ], "description": "[![Build Status](https://travis-ci.org/fabiocaccamo/django-treenode.svg?branch=master)](https://travis-ci.org/fabiocaccamo/django-treenode)\n[![coverage](https://codecov.io/gh/fabiocaccamo/django-treenode/branch/master/graph/badge.svg)](https://codecov.io/gh/fabiocaccamo/django-treenode)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/0c79c196e5c9411babbaf5e8e5f7469c)](https://www.codacy.com/app/fabiocaccamo/django-treenode)\n[![Requirements Status](https://requires.io/github/fabiocaccamo/django-treenode/requirements.svg?branch=master)](https://requires.io/github/fabiocaccamo/django-treenode/requirements/?branch=master)\n[![PyPI version](https://badge.fury.io/py/django-treenode.svg)](https://badge.fury.io/py/django-treenode)\n[![PyPI downloads](https://img.shields.io/pypi/dm/django-treenode.svg)](https://img.shields.io/pypi/dm/django-treenode.svg)\n[![Py versions](https://img.shields.io/pypi/pyversions/django-treenode.svg)](https://img.shields.io/pypi/pyversions/django-treenode.svg)\n[![License](https://img.shields.io/pypi/l/django-treenode.svg)](https://img.shields.io/pypi/l/django-treenode.svg)\n\n# django-treenode\nProbably the best abstract model / admin for your **tree** based stuff.\n\n## Features\n- **Fast** - get `ancestors`, `children`, `descendants`, `parent`, `root`, `siblings`, `tree` with **no queries**\n- **Synced** - in-memory model instances are automatically updated\n- **Compatibility** - you can easily add `treenode` to existing projects\n- **No dependencies**\n- **Easy configuration** - just extend the abstract model / model-admin\n- **Admin integration** - great tree visualization: **accordion**, **breadcrumbs** or **indentation**\n\n| indentation (default) | breadcrumbs | accordion |\n| --- | --- | --- |\n| ![treenode-admin-display-mode-indentation][treenode-admin-display-mode-indentation] | ![treenode-admin-display-mode-breadcrumbs][treenode-admin-display-mode-breadcrumbs] | ![treenode-admin-display-mode-accordion][treenode-admin-display-mode-accordion] |\n\n## Requirements\n- Python 2.7, 3.4, 3.5, 3.6, 3.7\n- Django 1.8, 1.9, 1.10, 1.11, 2.0, 2.1, 2.2\n\n## Installation\n- Run `pip install django-treenode`\n- Add `treenode` to `settings.INSTALLED_APPS`\n- Make your model inherit from `treenode.models.TreeNodeModel` *(described below)*\n- Make your model-admin inherit from `treenode.admin.TreeNodeModelAdmin` *(described below)*\n- Run `python manage.py makemigrations` and `python manage.py migrate`\n\n## Configuration\n### `models.py`\nMake your model class inherit from `treenode.models.TreeNodeModel`:\n\n```python\nfrom django.db import models\n\nfrom treenode.models import TreeNodeModel\n\n\nclass Category(TreeNodeModel):\n\n # the field used to display the model instance\n # default value 'pk'\n treenode_display_field = 'name'\n\n name = models.CharField(max_length=50)\n\n class Meta(TreeNodeModel.Meta):\n verbose_name = 'Category'\n verbose_name_plural = 'Categories'\n```\n\nThe `TreeNodeModel` abstract class adds many fields (prefixed with `tn_` to prevent direct access) and public methods to your models.\n\n---\n\n### `admin.py`\nMake your model-admin class inherit from `treenode.admin.TreeNodeModelAdmin`.\n\n```python\nfrom django.contrib import admin\n\nfrom treenode.admin import TreeNodeModelAdmin\nfrom treenode.forms import TreeNodeForm\n\nfrom .models import Category\n\n\nclass CategoryAdmin(TreeNodeModelAdmin):\n\n # set the changelist display mode: 'accordion', 'breadcrumbs' or 'indentation' (default)\n # when changelist results are filtered by a querystring,\n # 'breadcrumbs' mode will be used (to preserve data display integrity)\n treenode_display_mode = TreeNodeModelAdmin.TREENODE_DISPLAY_MODE_ACCORDION\n # treenode_display_mode = TreeNodeModelAdmin.TREENODE_DISPLAY_MODE_BREADCRUMBS\n # treenode_display_mode = TreeNodeModelAdmin.TREENODE_DISPLAY_MODE_INDENTATION\n\n # use TreeNodeForm to automatically exclude invalid parent choices\n form = TreeNodeForm\n\nadmin.site.register(Category, CategoryAdmin)\n```\n\n## Usage\n\n### Methods/Properties\n\n**Delete a node** and all its descendants:\n```python\nobj.delete()\n```\n\n**Delete the whole tree** for the current node class:\n```python\ncls.delete_tree()\n```\n\nGet a **list with all ancestors** (ordered from root to parent):\n```python\nobj.get_ancestors()\n# or\nobj.ancestors\n```\n\nGet the **ancestors count**:\n```python\nobj.get_ancestors_count()\n# or\nobj.ancestors_count\n```\n\nGet the **ancestors queryset**:\n```python\nobj.get_ancestors_queryset()\n```\n\nGet the **breadcrumbs** to current node (included):\n```python\nobj.get_breadcrumbs(attr=None)\n# or\nobj.breadcrumbs\n```\n\nGet a **list containing all children**:\n```python\nobj.get_children()\n# or\nobj.children\n```\n\nGet the **children count**:\n```python\nobj.get_children_count()\n# or\nobj.children_count\n```\n\nGet the **children queryset**:\n```python\nobj.get_children_queryset()\n```\n\nGet the **node depth** (how many levels of descendants):\n```python\nobj.get_depth()\n# or\nobj.depth\n```\n\nGet a **list containing all descendants**:\n```python\nobj.get_descendants()\n# or\nobj.descendants\n```\n\nGet the **descendants count**:\n```python\nobj.get_descendants_count()\n# or\nobj.descendants_count\n```\n\nGet the **descendants queryset**:\n```python\nobj.get_descendants_queryset()\n```\n\nGet a **n-dimensional** `dict` representing the **model tree**:\n```python\nobj.get_descendants_tree()\n# or\nobj.descendants_tree\n```\n\nGet a **multiline** `string` representing the **model tree**:\n```python\nobj.get_descendants_tree_display()\n# or\nobj.descendants_tree_display\n```\n\nGet the **first child node**:\n```python\nobj.get_first_child()\n# or\nobj.first_child\n```\n\nGet the **node index** (index in node.parent.children list):\n```python\nobj.get_index()\n# or\nobj.index\n```\n\nGet the **last child node**:\n```python\nobj.get_last_child()\n# or\nobj.last_child\n```\n\nGet the **node level** (starting from 1):\n```python\nobj.get_level()\n# or\nobj.level\n```\n\nGet the **order value** used for ordering:\n```python\nobj.get_order()\n# or\nobj.order\n```\n\nGet the **parent node**:\n```python\nobj.get_parent()\n# or\nobj.parent\n```\n\nSet the **parent node**:\n```python\nobj.set_parent(parent_obj)\n```\n\nGet the **node priority**:\n```python\nobj.get_priority()\n# or\nobj.priority\n```\n\nSet the **node priority**:\n```python\nobj.set_priority(100)\n```\n\nGet the **root node** for the current node:\n```python\nobj.get_root()\n# or\nobj.root\n```\n\nGet a **list with all root nodes**:\n```python\ncls.get_roots()\n# or\ncls.roots\n```\n\nGet **root nodes queryset**:\n```python\ncls.get_roots_queryset()\n```\n\nGet a **list with all the siblings**:\n```python\nobj.get_siblings()\n# or\nobj.siblings\n```\n\nGet the **siblings count**:\n```python\nobj.get_siblings_count()\n# or\nobj.siblings_count\n```\n\nGet the **siblings queryset**:\n```python\nobj.get_siblings_queryset()\n```\n\nGet a **n-dimensional** `dict` representing the **model tree**:\n```python\ncls.get_tree()\n# or\ncls.tree\n```\n\nGet a **multiline** `string` representing the **model tree**:\n```python\ncls.get_tree_display()\n# or\ncls.tree_display\n```\n\nReturn `True` if the current node **is ancestor** of target_obj:\n```python\nobj.is_ancestor_of(target_obj)\n```\n\nReturn `True` if the current node **is child** of target_obj:\n```python\nobj.is_child_of(target_obj)\n```\n\nReturn `True` if the current node **is descendant** of target_obj:\n```python\nobj.is_descendant_of(target_obj)\n```\n\nReturn `True` if the current node is the **first child**:\n```python\nobj.is_first_child()\n```\n\nReturn `True` if the current node is the **last child**:\n```python\nobj.is_last_child()\n```\n\nReturn `True` if the current node is **leaf** (it has not children):\n```python\nobj.is_leaf()\n```\n\nReturn `True` if the current node **is parent** of target_obj:\n```python\nobj.is_parent_of(target_obj)\n```\n\nReturn `True` if the current node **is root**:\n```python\nobj.is_root()\n```\n\nReturn `True` if the current node **is root** of target_obj:\n```python\nobj.is_root_of(target_obj)\n```\n\nReturn `True` if the current node **is sibling** of target_obj:\n```python\nobj.is_sibling_of(target_obj)\n```\n\n**Update tree** manually, useful after **bulk updates**:\n```python\ncls.update_tree()\n```\n\n## License\nReleased under [MIT License](LICENSE.txt).\n\n[treenode-admin-display-mode-accordion]: https://user-images.githubusercontent.com/1035294/54942407-5040ec00-4f2f-11e9-873b-d0b3b521f534.png\n[treenode-admin-display-mode-breadcrumbs]: https://user-images.githubusercontent.com/1035294/54942410-50d98280-4f2f-11e9-8a8b-a1ac6208398a.png\n[treenode-admin-display-mode-indentation]: https://user-images.githubusercontent.com/1035294/54942411-50d98280-4f2f-11e9-9daf-d8339dd7a159.png\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/fabiocaccamo/django-treenode/archive/0.13.4.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/fabiocaccamo/django-treenode", "keywords": "python,django,trees,tree,nodes,node,categories,category,ancestors,parents,children,descendants,siblings,abstract,model", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "django-treenode", "package_url": "https://pypi.org/project/django-treenode/", "platform": "", "project_url": "https://pypi.org/project/django-treenode/", "project_urls": { "Download": "https://github.com/fabiocaccamo/django-treenode/archive/0.13.4.tar.gz", "Homepage": "https://github.com/fabiocaccamo/django-treenode" }, "release_url": "https://pypi.org/project/django-treenode/0.13.4/", "requires_dist": null, "requires_python": "", "summary": "django-treenode is probably the best abstract model / admin for your tree based stuff.", "version": "0.13.4" }, "last_serial": 5577840, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "e4241ce8a8792c0b6581dc4d2f932227", "sha256": "09330584582b4284eaad3316ea8a46b35b461558a463a9a972a610069b684275" }, "downloads": -1, "filename": "django-treenode-0.1.0.tar.gz", "has_sig": false, "md5_digest": "e4241ce8a8792c0b6581dc4d2f932227", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7129, "upload_time": "2018-04-13T10:32:00", "url": "https://files.pythonhosted.org/packages/86/0a/973dc91a9952cfaad0d091e2957c8f44238aa3d0ba7cb93bc03a234849b3/django-treenode-0.1.0.tar.gz" } ], "0.10.0": [ { "comment_text": "", "digests": { "md5": "9568e198d9241d98a9c78f1e89c27868", "sha256": "2f05e9d4b3cc62993859e126885b1a2a81755334fa950b540727132c310cb31c" }, "downloads": -1, "filename": "django-treenode-0.10.0.tar.gz", "has_sig": false, "md5_digest": "9568e198d9241d98a9c78f1e89c27868", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15078, "upload_time": "2018-06-18T09:18:05", "url": "https://files.pythonhosted.org/packages/89/4f/6b419d79158c618eb83c891998f2dc39477ada58036986529f8301e3e7d6/django-treenode-0.10.0.tar.gz" } ], "0.10.1": [ { "comment_text": "", "digests": { "md5": "5eb7fc3179c76c363986180a6f5fbeda", "sha256": "35ff29a8256b4732dad65ccde56dc460d9fa314ea65b8c4e983d8ce108270802" }, "downloads": -1, "filename": "django-treenode-0.10.1.tar.gz", "has_sig": false, "md5_digest": "5eb7fc3179c76c363986180a6f5fbeda", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15077, "upload_time": "2018-06-27T21:53:01", "url": "https://files.pythonhosted.org/packages/9f/32/8dabe8d7748c4c64cff0cb7657c7dbe00bb7ea8497967bdec89f099a3b48/django-treenode-0.10.1.tar.gz" } ], "0.11.0": [ { "comment_text": "", "digests": { "md5": "3270d9a273f41ce67b90a1253a928a9c", "sha256": "365214cd14cdf71df55ceb72208d22ea4c63b0a1ce4cb0d0d6cf2e3687314bb8" }, "downloads": -1, "filename": "django-treenode-0.11.0.tar.gz", "has_sig": false, "md5_digest": "3270d9a273f41ce67b90a1253a928a9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14799, "upload_time": "2018-06-29T09:17:28", "url": "https://files.pythonhosted.org/packages/fd/e0/3501e9b143b57d50b1fddaa325698f5e39344127e6b85b5a50040dadaabb/django-treenode-0.11.0.tar.gz" } ], "0.11.1": [ { "comment_text": "", "digests": { "md5": "833d9ae123545431fec2f808a802825b", "sha256": "ff3f355bfd4f8f2a38eb6a5f7e8bd455c3c9d8f99834bc1e1373be38a22bca73" }, "downloads": -1, "filename": "django-treenode-0.11.1.tar.gz", "has_sig": false, "md5_digest": "833d9ae123545431fec2f808a802825b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14791, "upload_time": "2018-06-30T08:48:18", "url": "https://files.pythonhosted.org/packages/e6/23/9b26a6bb226dcc1e7427613dc530f23748898fdba7e2be7d78a6d66974c3/django-treenode-0.11.1.tar.gz" } ], "0.11.2": [ { "comment_text": "", "digests": { "md5": "8c0b444b390e0949df63095125f1e1c2", "sha256": "52ceb4633d4b60c653ab3d746a5b5e9c5dc96cbb30664491b0791495aea53d15" }, "downloads": -1, "filename": "django-treenode-0.11.2.tar.gz", "has_sig": false, "md5_digest": "8c0b444b390e0949df63095125f1e1c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14854, "upload_time": "2018-07-12T15:56:41", "url": "https://files.pythonhosted.org/packages/45/93/979f7fd8da9d8f8f0d65aa8e0d5573d1fc436c239a480874f42ac98444cb/django-treenode-0.11.2.tar.gz" } ], "0.11.3": [ { "comment_text": "", "digests": { "md5": "33f1ab5c83421afbcb4bf52c17f15e75", "sha256": "721403a0c463031ee144998406a88febc2066f7126e36aa0e86b65f2f6f900b9" }, "downloads": -1, "filename": "django-treenode-0.11.3.tar.gz", "has_sig": false, "md5_digest": "33f1ab5c83421afbcb4bf52c17f15e75", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14852, "upload_time": "2018-09-06T09:32:23", "url": "https://files.pythonhosted.org/packages/22/b8/94df5c4d2ba8fc9191015285c0a20e7f6dec990740418f2ec38eccc70f6b/django-treenode-0.11.3.tar.gz" } ], "0.12.0": [ { "comment_text": "", "digests": { "md5": "85feaded69da54b2d582237d52f5e0d5", "sha256": "41488e35dc5bb6d3fdf894ece872f9cf90ef4fef10ba9abacf8586c53d19b0ee" }, "downloads": -1, "filename": "django-treenode-0.12.0.tar.gz", "has_sig": false, "md5_digest": "85feaded69da54b2d582237d52f5e0d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14899, "upload_time": "2018-12-14T00:32:03", "url": "https://files.pythonhosted.org/packages/47/5f/370cc61d4053e4f83ac221c61e82ce27bb1094cffd0da97894b84af14781/django-treenode-0.12.0.tar.gz" } ], "0.12.1": [ { "comment_text": "", "digests": { "md5": "8c3a7f13d637ced2a1368d42bcb84cb6", "sha256": "34eafe6fd1bd102d3064ce8a7e6796dec92b2361a889c969df428264da54024c" }, "downloads": -1, "filename": "django-treenode-0.12.1.tar.gz", "has_sig": false, "md5_digest": "8c3a7f13d637ced2a1368d42bcb84cb6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14806, "upload_time": "2018-12-15T10:03:17", "url": "https://files.pythonhosted.org/packages/fd/f0/8a2d405b19f86e3743bfc01f40c55c5f96a4baaf762367464d4b418e312e/django-treenode-0.12.1.tar.gz" } ], "0.12.2": [ { "comment_text": "", "digests": { "md5": "ec159aa73877b5666417e1f435ba04f0", "sha256": "73b92ef67408be6d2f95676f80055388b182beaba285905df7c346d1daf90cf1" }, "downloads": -1, "filename": "django-treenode-0.12.2.tar.gz", "has_sig": false, "md5_digest": "ec159aa73877b5666417e1f435ba04f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14805, "upload_time": "2019-02-06T12:52:36", "url": "https://files.pythonhosted.org/packages/39/c5/5afad6b607560a6c117f10aab530f0fb5149df372b99fc16d5d423480bf5/django-treenode-0.12.2.tar.gz" } ], "0.12.3": [ { "comment_text": "", "digests": { "md5": "6b86f5982fccfd6b5fa22b979e5b5781", "sha256": "ff186bceef864001e9f036976c6b177de3422deae4dfefe00c4ef57a89579b30" }, "downloads": -1, "filename": "django-treenode-0.12.3.tar.gz", "has_sig": false, "md5_digest": "6b86f5982fccfd6b5fa22b979e5b5781", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14897, "upload_time": "2019-03-19T15:11:26", "url": "https://files.pythonhosted.org/packages/9a/78/1fcb49a57e06e20b2b39cc07882dd255a6884d5395b61e32ac74422aa3b9/django-treenode-0.12.3.tar.gz" } ], "0.13.0": [ { "comment_text": "", "digests": { "md5": "a5f86140bd0ad00dc0141ab5bb467f4c", "sha256": "095472db11cbe54a9f419d51b57e433d313e7e2c3e9b58486b40d5de1d913397" }, "downloads": -1, "filename": "django-treenode-0.13.0.tar.gz", "has_sig": false, "md5_digest": "a5f86140bd0ad00dc0141ab5bb467f4c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15212, "upload_time": "2019-03-25T15:29:26", "url": "https://files.pythonhosted.org/packages/e8/5b/a31a1d31dccf4019e26ac84029163bac09857d9d8d9ad91f86a0a5874d24/django-treenode-0.13.0.tar.gz" } ], "0.13.1": [ { "comment_text": "", "digests": { "md5": "94b1bdadc70d3e22654c7e8452263906", "sha256": "ba059f04ffe573e4955dd35440774d6817870c671336e13b5633af785d27ca75" }, "downloads": -1, "filename": "django-treenode-0.13.1.tar.gz", "has_sig": false, "md5_digest": "94b1bdadc70d3e22654c7e8452263906", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15407, "upload_time": "2019-04-12T13:04:17", "url": "https://files.pythonhosted.org/packages/81/f1/009a4b2c5965e553ddda7a722f1ece1c14a3fca4844c1c9f71a8cb455405/django-treenode-0.13.1.tar.gz" } ], "0.13.2": [ { "comment_text": "", "digests": { "md5": "836b3cc496d421f46d5c528ab64f1eda", "sha256": "47b05ce6453850dd1e431ec120c83f5c25dddad41cd719b9026b19b7ab3c7004" }, "downloads": -1, "filename": "django_treenode-0.13.2-py2-none-any.whl", "has_sig": false, "md5_digest": "836b3cc496d421f46d5c528ab64f1eda", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 15963, "upload_time": "2019-06-28T12:36:26", "url": "https://files.pythonhosted.org/packages/39/39/74c29ae634cce1b47ef42114f640289a9aa55c1f4ad004b5ac210b344b96/django_treenode-0.13.2-py2-none-any.whl" } ], "0.13.3": [ { "comment_text": "", "digests": { "md5": "2bf38b783e6b860f999b89c39b0ca200", "sha256": "1a2d867fb0be5654190aa3a6cbad6c287f6b09a8bf52718f1b6dff72bc993db2" }, "downloads": -1, "filename": "django_treenode-0.13.3-py2-none-any.whl", "has_sig": false, "md5_digest": "2bf38b783e6b860f999b89c39b0ca200", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 15977, "upload_time": "2019-07-01T10:21:50", "url": "https://files.pythonhosted.org/packages/fc/bd/bff44631d693563e22c5d4423704663ade1a961d1ab202fee1e8fffeea82/django_treenode-0.13.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "746638227193176b4ca5f006fed66750", "sha256": "d8b72ec2f366f15c6a6aa2951b4e7d3d33fa90616216ee000113bc13ea13ca08" }, "downloads": -1, "filename": "django-treenode-0.13.3.tar.gz", "has_sig": false, "md5_digest": "746638227193176b4ca5f006fed66750", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15366, "upload_time": "2019-07-01T10:21:52", "url": "https://files.pythonhosted.org/packages/b1/6d/c0a01bde7f055e3ca072566a81a177a1c91aeebac5b7deb7823a458d7450/django-treenode-0.13.3.tar.gz" } ], "0.13.4": [ { "comment_text": "", "digests": { "md5": "a4246a12c643d3fc5d09c87c3d19efac", "sha256": "07a4bfd87152d5767119a2a2751108a562ad1ce4acbdf53b193e4a58d50b4a8f" }, "downloads": -1, "filename": "django_treenode-0.13.4-py2-none-any.whl", "has_sig": false, "md5_digest": "a4246a12c643d3fc5d09c87c3d19efac", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 15976, "upload_time": "2019-07-24T14:20:45", "url": "https://files.pythonhosted.org/packages/ef/7e/af72687ef6e3a20efbabee05ee353a1f99a06f26fbb6d6a1b20909a7e608/django_treenode-0.13.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8334f7529dfab270e41ac28ea6d3fefc", "sha256": "54fa8155de9f870941b16333dbb3ae232871de7c5dfb664f0b8b79636bfa1119" }, "downloads": -1, "filename": "django-treenode-0.13.4.tar.gz", "has_sig": false, "md5_digest": "8334f7529dfab270e41ac28ea6d3fefc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14287, "upload_time": "2019-07-24T14:20:47", "url": "https://files.pythonhosted.org/packages/5c/2c/bd21e10d1e6d235a064e1a50e38d4d011261f4a02ba6244401c4bd0f01bd/django-treenode-0.13.4.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "2cffef6856308ee597e8689c3b8b0bcf", "sha256": "c6d9e4c0dfb908e347df7ea9444f84119d71e7629a97fe556d64bb3c090c3f7a" }, "downloads": -1, "filename": "django-treenode-0.2.0.tar.gz", "has_sig": false, "md5_digest": "2cffef6856308ee597e8689c3b8b0bcf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8843, "upload_time": "2018-04-17T09:15:47", "url": "https://files.pythonhosted.org/packages/bd/44/c160d4f5bb942308b2be41df35f38f9dcc2d0cc36f3a77d8ea3c531e8ef2/django-treenode-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "b98d46b4c955bd7eabc74d0f1fd660f5", "sha256": "2f74ae95a9c53960dab31201c80bb5b7e6f71c4f1aa7dc8d153642c7d7ee930e" }, "downloads": -1, "filename": "django-treenode-0.2.1.tar.gz", "has_sig": false, "md5_digest": "b98d46b4c955bd7eabc74d0f1fd660f5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8845, "upload_time": "2018-04-17T09:50:40", "url": "https://files.pythonhosted.org/packages/89/c5/0cb9e37ca8ffc6dcfcabf34a1cf67034d80dee4c50b82160264fbd325c2b/django-treenode-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "4f5acd82107ece4260b33490e64eb8df", "sha256": "2e213cf4a581aedc98a2146ef5cb01d36a72df49d89857fcea2ddb0ccf5d7ac7" }, "downloads": -1, "filename": "django-treenode-0.2.2.tar.gz", "has_sig": false, "md5_digest": "4f5acd82107ece4260b33490e64eb8df", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8939, "upload_time": "2018-04-18T08:17:27", "url": "https://files.pythonhosted.org/packages/39/b6/796a446106e41e264acc85d806f6153d1d55105af865c382b682e1a9c55f/django-treenode-0.2.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "7372699ffc451219a5ff294464e0206a", "sha256": "847a23e1db50002100f0783e4b7fb39651631b412665f2ae645ee17ad667c5b7" }, "downloads": -1, "filename": "django-treenode-0.3.0.tar.gz", "has_sig": false, "md5_digest": "7372699ffc451219a5ff294464e0206a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9094, "upload_time": "2018-04-20T15:19:26", "url": "https://files.pythonhosted.org/packages/e0/fe/0edc90ed84a4fb488f566d23492b9c3939bf803ade4261974a6f3f5b316b/django-treenode-0.3.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "203bf0ea6a68bfa1a72b0417e1f7fbaa", "sha256": "56daa7c8624010aab895023c3dee9be2ef42cc035770ea5b982dd80f0d526e0a" }, "downloads": -1, "filename": "django-treenode-0.5.0.tar.gz", "has_sig": false, "md5_digest": "203bf0ea6a68bfa1a72b0417e1f7fbaa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11331, "upload_time": "2018-05-03T08:29:11", "url": "https://files.pythonhosted.org/packages/84/41/712408888f7dae01911ef89cbe990a11d0d7745d247da0b3812b9a1b4512/django-treenode-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "7cbf83eb77cd336ec2720a90c7fb129b", "sha256": "c1f1e0eaf2c9f2f9765b4214fb5faf664385c3b44480e19a682fb7405c6554e0" }, "downloads": -1, "filename": "django-treenode-0.6.0.tar.gz", "has_sig": false, "md5_digest": "7cbf83eb77cd336ec2720a90c7fb129b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14111, "upload_time": "2018-05-08T16:40:04", "url": "https://files.pythonhosted.org/packages/48/9d/e37302aa3c9c26eaebb42355115631fe702dfe2cb1249a603f2ef924b6a4/django-treenode-0.6.0.tar.gz" } ], "0.6.4": [ { "comment_text": "", "digests": { "md5": "6e75c827cfb864ffe9409926920bc1fa", "sha256": "7debc3cda9de547d02a893b5fc2a318318cdbadb28b2df280279a5ed9f656ec8" }, "downloads": -1, "filename": "django-treenode-0.6.4.tar.gz", "has_sig": false, "md5_digest": "6e75c827cfb864ffe9409926920bc1fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14123, "upload_time": "2018-05-09T09:55:56", "url": "https://files.pythonhosted.org/packages/4c/e5/a7a943b8e44d6f64e09908341932485b1bd61644cb8d113120d576494099/django-treenode-0.6.4.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "a93b02dd43775b5ab1c30e0d4d5ca8fa", "sha256": "ee0e3ded774fa9e5e293aa77a893e92cc0e020d8764d40aeb96e78fa201bbe4d" }, "downloads": -1, "filename": "django-treenode-0.7.0.tar.gz", "has_sig": false, "md5_digest": "a93b02dd43775b5ab1c30e0d4d5ca8fa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14569, "upload_time": "2018-05-11T14:04:11", "url": "https://files.pythonhosted.org/packages/8f/b1/fccf4227bd17acf7df8b0be370613b7b84a389ee9cd3917c0307e79175ef/django-treenode-0.7.0.tar.gz" } ], "0.7.1": [ { "comment_text": "", "digests": { "md5": "1ed46b6ee4354a0b2d9fdfbd8990beb7", "sha256": "f8bb7d26759a7d0be9e4d58d6ec82b7144a1b14997494730437039adffd75c34" }, "downloads": -1, "filename": "django-treenode-0.7.1.tar.gz", "has_sig": false, "md5_digest": "1ed46b6ee4354a0b2d9fdfbd8990beb7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14563, "upload_time": "2018-05-11T14:10:19", "url": "https://files.pythonhosted.org/packages/d9/bf/8f8b889b3d55c27f874220f6cd784d18c638e570923cc5b012a599ff64ae/django-treenode-0.7.1.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "8301ed9cacd500658afbe7c151850d0c", "sha256": "9b38f2621b1f5d6f0d75272ab0fc3463fc9f8b8d53af778a4dca6f85e0edf8a5" }, "downloads": -1, "filename": "django-treenode-0.8.0.tar.gz", "has_sig": false, "md5_digest": "8301ed9cacd500658afbe7c151850d0c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14513, "upload_time": "2018-05-17T21:01:45", "url": "https://files.pythonhosted.org/packages/b3/33/ef048b6b9e5c5e041073d2f14a6e81e2206f74576fdf89b93df1f01d52db/django-treenode-0.8.0.tar.gz" } ], "0.8.1": [ { "comment_text": "", "digests": { "md5": "83d78bc9fa56c3c313d9eaa38f862279", "sha256": "cab8c2bb1ca2509a4e33b107b121b5ce269cd71224d7d28dbe81f69ac428ecb5" }, "downloads": -1, "filename": "django-treenode-0.8.1.tar.gz", "has_sig": false, "md5_digest": "83d78bc9fa56c3c313d9eaa38f862279", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14517, "upload_time": "2018-05-17T21:25:39", "url": "https://files.pythonhosted.org/packages/da/2d/7fc082a9a14f32355b36d6b0609f4c781815fefa584e60b7d2cd662d4e62/django-treenode-0.8.1.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "5288efd36d37efab4b8e152005a9b24b", "sha256": "0ab515fd078088c7bfc69a220b94060ae4487795e673c3f5ab0b6cb7f1b333cd" }, "downloads": -1, "filename": "django-treenode-0.9.0.tar.gz", "has_sig": false, "md5_digest": "5288efd36d37efab4b8e152005a9b24b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14972, "upload_time": "2018-06-11T14:04:12", "url": "https://files.pythonhosted.org/packages/a4/d4/32df447652b017d9313b3551393e8ea962ca74845ec9929365105a5bfd4f/django-treenode-0.9.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "a4246a12c643d3fc5d09c87c3d19efac", "sha256": "07a4bfd87152d5767119a2a2751108a562ad1ce4acbdf53b193e4a58d50b4a8f" }, "downloads": -1, "filename": "django_treenode-0.13.4-py2-none-any.whl", "has_sig": false, "md5_digest": "a4246a12c643d3fc5d09c87c3d19efac", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 15976, "upload_time": "2019-07-24T14:20:45", "url": "https://files.pythonhosted.org/packages/ef/7e/af72687ef6e3a20efbabee05ee353a1f99a06f26fbb6d6a1b20909a7e608/django_treenode-0.13.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8334f7529dfab270e41ac28ea6d3fefc", "sha256": "54fa8155de9f870941b16333dbb3ae232871de7c5dfb664f0b8b79636bfa1119" }, "downloads": -1, "filename": "django-treenode-0.13.4.tar.gz", "has_sig": false, "md5_digest": "8334f7529dfab270e41ac28ea6d3fefc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14287, "upload_time": "2019-07-24T14:20:47", "url": "https://files.pythonhosted.org/packages/5c/2c/bd21e10d1e6d235a064e1a50e38d4d011261f4a02ba6244401c4bd0f01bd/django-treenode-0.13.4.tar.gz" } ] }