django-fast-treenode 2.1.5__tar.gz → 3.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/MANIFEST.in +3 -4
  2. django_fast_treenode-3.0.0/PKG-INFO +203 -0
  3. django_fast_treenode-3.0.0/README.md +140 -0
  4. django_fast_treenode-3.0.0/django_fast_treenode.egg-info/PKG-INFO +203 -0
  5. django_fast_treenode-3.0.0/django_fast_treenode.egg-info/SOURCES.txt +115 -0
  6. django_fast_treenode-3.0.0/django_fast_treenode.egg-info/requires.txt +4 -0
  7. django_fast_treenode-3.0.0/docs/about.md +253 -0
  8. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/docs/admin.md +5 -6
  9. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/docs/api.md +45 -46
  10. django_fast_treenode-3.0.0/docs/apifirst.md +157 -0
  11. django_fast_treenode-3.0.0/docs/cache.md +124 -0
  12. django_fast_treenode-3.0.0/docs/customization.md +294 -0
  13. django_fast_treenode-3.0.0/docs/dnd.md +55 -0
  14. django_fast_treenode-3.0.0/docs/import_export.md +37 -0
  15. django_fast_treenode-3.0.0/docs/index.md +163 -0
  16. django_fast_treenode-3.0.0/docs/insert-after.jpg +0 -0
  17. django_fast_treenode-3.0.0/docs/insert-as-child.jpg +0 -0
  18. django_fast_treenode-3.0.0/docs/installation.md +96 -0
  19. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/docs/migration.md +143 -14
  20. django_fast_treenode-3.0.0/docs/models.md +176 -0
  21. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/docs/requirements.txt +1 -1
  22. django_fast_treenode-3.0.0/docs/roadmap.md +74 -0
  23. django_fast_treenode-3.0.0/docs/using.md +55 -0
  24. django_fast_treenode-3.0.0/pyproject.toml +45 -0
  25. django_fast_treenode-3.0.0/setup.cfg +4 -0
  26. django_fast_treenode-3.0.0/setup.py +43 -0
  27. django_fast_treenode-3.0.0/tests/test_suite.py +91 -0
  28. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/treenode/admin/__init__.py +0 -5
  29. django_fast_treenode-3.0.0/treenode/admin/admin.py +224 -0
  30. django_fast_treenode-3.0.0/treenode/admin/changelist.py +47 -0
  31. django_fast_treenode-3.0.0/treenode/admin/exporter.py +170 -0
  32. django_fast_treenode-3.0.0/treenode/admin/importer.py +171 -0
  33. django_fast_treenode-3.0.0/treenode/admin/mixin.py +291 -0
  34. django_fast_treenode-3.0.0/treenode/apps.py +56 -0
  35. django_fast_treenode-3.0.0/treenode/cache.py +241 -0
  36. django_fast_treenode-3.0.0/treenode/forms.py +107 -0
  37. django_fast_treenode-3.0.0/treenode/managers/__init__.py +5 -0
  38. django_fast_treenode-3.0.0/treenode/managers/managers.py +216 -0
  39. django_fast_treenode-3.0.0/treenode/managers/queries.py +233 -0
  40. django_fast_treenode-3.0.0/treenode/managers/tasks.py +167 -0
  41. django_fast_treenode-3.0.0/treenode/models/__init__.py +11 -0
  42. django_fast_treenode-3.0.0/treenode/models/decorators.py +54 -0
  43. django_fast_treenode-3.0.0/treenode/models/factory.py +57 -0
  44. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/treenode/models/mixins/__init__.py +2 -1
  45. django_fast_treenode-3.0.0/treenode/models/mixins/ancestors.py +72 -0
  46. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/treenode/models/mixins/children.py +33 -26
  47. django_fast_treenode-3.0.0/treenode/models/mixins/descendants.py +71 -0
  48. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/treenode/models/mixins/family.py +25 -15
  49. django_fast_treenode-3.0.0/treenode/models/mixins/logical.py +70 -0
  50. django_fast_treenode-3.0.0/treenode/models/mixins/node.py +252 -0
  51. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/treenode/models/mixins/properties.py +22 -16
  52. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/treenode/models/mixins/roots.py +59 -15
  53. django_fast_treenode-3.0.0/treenode/models/mixins/siblings.py +102 -0
  54. django_fast_treenode-3.0.0/treenode/models/mixins/tree.py +403 -0
  55. django_fast_treenode-3.0.0/treenode/models/mixins/update.py +154 -0
  56. django_fast_treenode-3.0.0/treenode/models/models.py +365 -0
  57. django_fast_treenode-3.0.0/treenode/settings.py +28 -0
  58. {django_fast_treenode-2.1.5/treenode/static/treenode → django_fast_treenode-3.0.0/treenode/static}/css/tree_widget.css +1 -1
  59. {django_fast_treenode-2.1.5/treenode/static/treenode → django_fast_treenode-3.0.0/treenode/static}/css/treenode_admin.css +43 -2
  60. django_fast_treenode-3.0.0/treenode/static/css/treenode_tabs.css +51 -0
  61. django_fast_treenode-3.0.0/treenode/static/js/lz-string.min.js +1 -0
  62. {django_fast_treenode-2.1.5/treenode/static/treenode → django_fast_treenode-3.0.0/treenode/static}/js/tree_widget.js +9 -23
  63. django_fast_treenode-3.0.0/treenode/static/js/treenode_admin.js +531 -0
  64. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/AUTHORS.txt +384 -0
  65. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/LICENSE.txt +43 -0
  66. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/external/jquery/jquery.js +10716 -0
  67. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/images/ui-icons_444444_256x240.png +0 -0
  68. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/images/ui-icons_555555_256x240.png +0 -0
  69. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/images/ui-icons_777620_256x240.png +0 -0
  70. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/images/ui-icons_777777_256x240.png +0 -0
  71. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/images/ui-icons_cc0000_256x240.png +0 -0
  72. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/images/ui-icons_ffffff_256x240.png +0 -0
  73. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/index.html +297 -0
  74. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/jquery-ui.css +438 -0
  75. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/jquery-ui.js +5223 -0
  76. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/jquery-ui.min.css +7 -0
  77. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/jquery-ui.min.js +6 -0
  78. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/jquery-ui.structure.css +16 -0
  79. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/jquery-ui.structure.min.css +5 -0
  80. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/jquery-ui.theme.css +439 -0
  81. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/jquery-ui.theme.min.css +5 -0
  82. django_fast_treenode-3.0.0/treenode/static/vendors/jquery-ui/package.json +82 -0
  83. django_fast_treenode-3.0.0/treenode/templates/admin/treenode_changelist.html +25 -0
  84. django_fast_treenode-3.0.0/treenode/templates/admin/treenode_import_export.html +85 -0
  85. django_fast_treenode-3.0.0/treenode/templates/admin/treenode_rows.html +57 -0
  86. django_fast_treenode-3.0.0/treenode/tests.py +3 -0
  87. django_fast_treenode-3.0.0/treenode/urls.py +17 -0
  88. django_fast_treenode-3.0.0/treenode/utils/__init__.py +0 -0
  89. django_fast_treenode-3.0.0/treenode/utils/db/__init__.py +7 -0
  90. django_fast_treenode-3.0.0/treenode/utils/db/compiler.py +114 -0
  91. django_fast_treenode-3.0.0/treenode/utils/db/db_vendor.py +50 -0
  92. django_fast_treenode-3.0.0/treenode/utils/db/service.py +84 -0
  93. django_fast_treenode-3.0.0/treenode/utils/db/sqlcompat.py +60 -0
  94. django_fast_treenode-3.0.0/treenode/utils/db/sqlquery.py +70 -0
  95. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/treenode/version.py +2 -2
  96. django_fast_treenode-3.0.0/treenode/views/__init__.py +5 -0
  97. django_fast_treenode-3.0.0/treenode/views/autoapi.py +91 -0
  98. django_fast_treenode-3.0.0/treenode/views/autocomplete.py +52 -0
  99. django_fast_treenode-3.0.0/treenode/views/children.py +41 -0
  100. django_fast_treenode-3.0.0/treenode/views/common.py +23 -0
  101. django_fast_treenode-3.0.0/treenode/views/crud.py +209 -0
  102. django_fast_treenode-3.0.0/treenode/views/search.py +48 -0
  103. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/treenode/widgets.py +27 -44
  104. django_fast_treenode-2.1.5/PKG-INFO +0 -165
  105. django_fast_treenode-2.1.5/README.md +0 -102
  106. django_fast_treenode-2.1.5/django_fast_treenode.egg-info/PKG-INFO +0 -165
  107. django_fast_treenode-2.1.5/django_fast_treenode.egg-info/SOURCES.txt +0 -83
  108. django_fast_treenode-2.1.5/django_fast_treenode.egg-info/requires.txt +0 -8
  109. django_fast_treenode-2.1.5/docs/about.md +0 -43
  110. django_fast_treenode-2.1.5/docs/cache.md +0 -194
  111. django_fast_treenode-2.1.5/docs/import_export.md +0 -35
  112. django_fast_treenode-2.1.5/docs/index.md +0 -95
  113. django_fast_treenode-2.1.5/docs/installation.md +0 -74
  114. django_fast_treenode-2.1.5/docs/models.md +0 -128
  115. django_fast_treenode-2.1.5/docs/roadmap.md +0 -63
  116. django_fast_treenode-2.1.5/pyproject.toml +0 -51
  117. django_fast_treenode-2.1.5/setup.cfg +0 -48
  118. django_fast_treenode-2.1.5/setup.py +0 -3
  119. django_fast_treenode-2.1.5/tests/test_suite.py +0 -496
  120. django_fast_treenode-2.1.5/treenode/admin/admin.py +0 -295
  121. django_fast_treenode-2.1.5/treenode/admin/changelist.py +0 -65
  122. django_fast_treenode-2.1.5/treenode/admin/mixins.py +0 -302
  123. django_fast_treenode-2.1.5/treenode/apps.py +0 -34
  124. django_fast_treenode-2.1.5/treenode/cache.py +0 -352
  125. django_fast_treenode-2.1.5/treenode/forms.py +0 -127
  126. django_fast_treenode-2.1.5/treenode/managers/__init__.py +0 -21
  127. django_fast_treenode-2.1.5/treenode/managers/adjacency.py +0 -205
  128. django_fast_treenode-2.1.5/treenode/managers/closure.py +0 -278
  129. django_fast_treenode-2.1.5/treenode/models/__init__.py +0 -8
  130. django_fast_treenode-2.1.5/treenode/models/adjacency.py +0 -342
  131. django_fast_treenode-2.1.5/treenode/models/classproperty.py +0 -27
  132. django_fast_treenode-2.1.5/treenode/models/closure.py +0 -122
  133. django_fast_treenode-2.1.5/treenode/models/factory.py +0 -81
  134. django_fast_treenode-2.1.5/treenode/models/mixins/ancestors.py +0 -48
  135. django_fast_treenode-2.1.5/treenode/models/mixins/descendants.py +0 -60
  136. django_fast_treenode-2.1.5/treenode/models/mixins/logical.py +0 -68
  137. django_fast_treenode-2.1.5/treenode/models/mixins/node.py +0 -194
  138. django_fast_treenode-2.1.5/treenode/models/mixins/siblings.py +0 -99
  139. django_fast_treenode-2.1.5/treenode/models/mixins/tree.py +0 -344
  140. django_fast_treenode-2.1.5/treenode/static/treenode/js/treenode_admin.js +0 -131
  141. django_fast_treenode-2.1.5/treenode/templates/admin/.gitkeep +0 -1
  142. django_fast_treenode-2.1.5/treenode/templates/admin/export_success.html +0 -26
  143. django_fast_treenode-2.1.5/treenode/templates/admin/tree_node_changelist.html +0 -19
  144. django_fast_treenode-2.1.5/treenode/templates/admin/tree_node_export.html +0 -27
  145. django_fast_treenode-2.1.5/treenode/templates/admin/tree_node_import.html +0 -45
  146. django_fast_treenode-2.1.5/treenode/templates/admin/tree_node_import_report.html +0 -32
  147. django_fast_treenode-2.1.5/treenode/templates/widgets/tree_widget.css +0 -23
  148. django_fast_treenode-2.1.5/treenode/urls.py +0 -38
  149. django_fast_treenode-2.1.5/treenode/utils/__init__.py +0 -15
  150. django_fast_treenode-2.1.5/treenode/utils/aid.py +0 -46
  151. django_fast_treenode-2.1.5/treenode/utils/base16.py +0 -38
  152. django_fast_treenode-2.1.5/treenode/utils/base36.py +0 -37
  153. django_fast_treenode-2.1.5/treenode/utils/db.py +0 -116
  154. django_fast_treenode-2.1.5/treenode/utils/exporter.py +0 -196
  155. django_fast_treenode-2.1.5/treenode/utils/importer.py +0 -328
  156. django_fast_treenode-2.1.5/treenode/utils/radix.py +0 -61
  157. django_fast_treenode-2.1.5/treenode/views.py +0 -184
  158. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/LICENSE +0 -0
  159. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/django_fast_treenode.egg-info/dependency_links.txt +0 -0
  160. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/django_fast_treenode.egg-info/top_level.txt +0 -0
  161. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/docs/.gitignore +0 -0
  162. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/docs/.nojekyll +0 -0
  163. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/treenode/__init__.py +0 -0
  164. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/treenode/signals.py +0 -0
  165. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/treenode/static/.gitkeep +0 -0
  166. {django_fast_treenode-2.1.5/treenode/static/treenode → django_fast_treenode-3.0.0/treenode/static/css}/.gitkeep +0 -0
  167. {django_fast_treenode-2.1.5/treenode/static/treenode/css → django_fast_treenode-3.0.0/treenode/static/js}/.gitkeep +0 -0
  168. {django_fast_treenode-2.1.5/treenode/static/treenode/js → django_fast_treenode-3.0.0/treenode/templates}/.gitkeep +0 -0
  169. {django_fast_treenode-2.1.5/treenode/templates → django_fast_treenode-3.0.0/treenode/templates/admin}/.gitkeep +0 -0
  170. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/treenode/templates/admin/treenode_ajax_rows.html +0 -0
  171. {django_fast_treenode-2.1.5 → django_fast_treenode-3.0.0}/treenode/templates/widgets/tree_widget.html +0 -0
@@ -1,6 +1,5 @@
1
- include LICENSE
2
1
  include README.md
3
- recursive-include treenode/static *
2
+ include LICENSE
4
3
  recursive-include treenode/templates *
5
- recursive-include docs *
6
-
4
+ recursive-include treenode/static *
5
+ recursive-include docs *
@@ -0,0 +1,203 @@
1
+ Metadata-Version: 2.4
2
+ Name: django-fast-treenode
3
+ Version: 3.0.0
4
+ Summary: Treenode Framework for supporting tree (hierarchical) data structure in Django projects
5
+ Home-page: https://django-fast-treenode.readthedocs.io/
6
+ Author: Timur Kady
7
+ Author-email: Timur Kady <timurkady@yandex.com>
8
+ License: MIT License
9
+
10
+ Copyright (c) 2020-2025 Timur Kady
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+
30
+ Project-URL: Homepage, https://github.com/TimurKady/django-fast-treenode
31
+ Project-URL: Documentation, https://django-fast-treenode.readthedocs.io/
32
+ Project-URL: Source, https://github.com/TimurKady/django-fast-treenode
33
+ Project-URL: Issues, https://github.com/TimurKady/django-fast-treenode/issues
34
+ Classifier: Development Status :: 5 - Production/Stable
35
+ Classifier: Intended Audience :: Developers
36
+ Classifier: Programming Language :: Python :: 3
37
+ Classifier: Programming Language :: Python :: 3.9
38
+ Classifier: Programming Language :: Python :: 3.10
39
+ Classifier: Programming Language :: Python :: 3.11
40
+ Classifier: Programming Language :: Python :: 3.12
41
+ Classifier: Programming Language :: Python :: 3.13
42
+ Classifier: Programming Language :: Python :: 3.14
43
+ Classifier: Framework :: Django
44
+ Classifier: Framework :: Django :: 4.0
45
+ Classifier: Framework :: Django :: 4.1
46
+ Classifier: Framework :: Django :: 4.2
47
+ Classifier: Framework :: Django :: 5.0
48
+ Classifier: Framework :: Django :: 5.1
49
+ Classifier: Framework :: Django :: 5.2
50
+ Classifier: License :: OSI Approved :: MIT License
51
+ Classifier: Operating System :: OS Independent
52
+ Requires-Python: >=3.9
53
+ Description-Content-Type: text/markdown
54
+ License-File: LICENSE
55
+ Requires-Dist: Django>=4.0
56
+ Requires-Dist: msgpack>=1.0.0
57
+ Requires-Dist: openpyxl>=3.0.0
58
+ Requires-Dist: pyyaml>=5.1
59
+ Dynamic: author
60
+ Dynamic: home-page
61
+ Dynamic: license-file
62
+ Dynamic: requires-python
63
+
64
+ # TreeNode Framework
65
+ **A hybrid open-source framework for working with trees in Django**
66
+
67
+ [![Tests](https://github.com/TimurKady/django-fast-treenode/actions/workflows/test.yaml/badge.svg?branch=main)](https://github.com/TimurKady/django-fast-treenode/actions/workflows/test.yaml)
68
+ [![Docs](https://readthedocs.org/projects/django-fast-treenode/badge/?version=latest)](https://django-fast-treenode.readthedocs.io/)
69
+ [![PyPI](https://img.shields.io/pypi/v/django-fast-treenode.svg)](https://pypi.org/project/django-fast-treenode/)
70
+ [![Published on Django Packages](https://img.shields.io/badge/Published%20on-Django%20Packages-0c3c26)](https://djangopackages.org/packages/p/django-fast-treenode/)
71
+ [![Sponsor](https://img.shields.io/github/sponsors/TimurKady)](https://github.com/sponsors/TimurKady)
72
+
73
+ ## About The TreeNode Framework
74
+ ### Overview
75
+
76
+ **Treenode Framework** is an advanced tree management system for Django applications.It is designed to handle large-scale, deeply nested, and highly dynamic tree structures while maintaining excellent performance, data integrity, and ease of use.
77
+
78
+ Unlike traditional solutions, **Treenode Framework** is built for serious real-world applications where trees may consist of:
79
+
80
+ - Number nodes to 50-100 thousands nodes,
81
+ - Nesting depths to 1,000 levels,
82
+ - Complex mutation patterns (bulk moves, merges, splits),
83
+ - Real-time data access via API.
84
+
85
+ Its core philosophy: **maximum scalability, minimum complexity**.
86
+
87
+ ### Key Features
88
+ #### Common operations
89
+ The `django-fast-treenode` package supports all the basic operations needed to work with tree structures:
90
+
91
+ - Extracting **ancestors** (queryset, list, pks, count);
92
+ - Extracting **children** (queryset, list, pks, count);
93
+ - Extracting **descendants** (queryset, list, pks, count);
94
+ - Extracting a **family**: ancestors, the node itself and its descendants (queryset, list, pks, count);
95
+ - Enumerating all the nodes (queryset, dicts);
96
+ - **Adding** a new node at a **certain position** on the tree;
97
+ - Automatic **sorting of node order** by the value of the specified field;
98
+ - **Deleting** an node;
99
+ - **Pruning**: Removing a whole section of a tree;
100
+ - **Grafting**: Adding a whole section to a tree;
101
+ - Finding the **root** for any node;
102
+ - Finding the **lowest common ancestor** of two nodes;
103
+ - Finding the **shortest path** between two nodes.
104
+
105
+ Due to its high performance and ability to support deep nesting and large tree sizes, the `django-fast-treeode` package can be used for any tasks that involve the use of tree-like data, with virtually no restrictions.
106
+
107
+ ### Where Massive Trees Really Matter?
108
+
109
+ **Treenode Framework** is designed to handle not only toy examples, but also real trees with strict requirements for the number of nodes and their nesting.
110
+
111
+ Typical applications include:
112
+
113
+ - **Digital Twin Systems** for industrial asset management (plants, machinery, vehicles), where full structural decomposition is critical for maintenance planning and cost optimization.
114
+ - **Decision Support Systems** in medicine, law, and insurance, where large and dynamic decision trees drive critical reasoning processes.
115
+ - **AI Planning Engines** based on hierarchical task networks, allowing intelligent agents to decompose and execute complex strategies.
116
+ - **Biological and Genetic Research**, where large phylogenetic trees model evolutionary relationships or genetic hierarchies.
117
+
118
+ In all these domains, scalable and fast tree management is not a luxury — it's a necessity.
119
+
120
+ ### Why TreeNode Framework?
121
+ At the moment, django-fast-treeenode is, if not the best, then one of the best packages for working with tree data under Djangjo.
122
+
123
+ - **High performance**: [tests show](docs/about.md#benchmark-tests) that on trees of 5k-10k nodes with a nesting depth of 500-600 levels, **Treenode Framework** (`django-fast-treenode`) shows **performance 4-7 times better** than the main popular packages.
124
+ - **Flexible API**: today contains the widest set of methods for working with a tree in comparison with other packages.
125
+ - **Convenient administration**: the admin panel interface was developed taking into account the experience of using other packages. It provides convenience and intuitiveness with ease of programming.
126
+ - **Scalability**: **Treenode Framework** suitable for solving simple problems such as menus, directories, parsing arithmetic expressions, as well as complex problems such as program optimization, image layout, multi-step decision making problems, or machine learning..
127
+ - **Lightweight**: All functionality is implemented within the package without heavyweight dependencies such as `djangorestframework` or `django-import-export`.
128
+
129
+ All this makes **Treenode Framework** a prime candidate for your needs.
130
+
131
+ ## Quick Start
132
+ To get started quickly, you need to follow these steps:
133
+
134
+ - Simply install the package via `pip`:
135
+ ```sh
136
+ pip install django-fast-treenode
137
+ ```
138
+ - Once installed, add `'treenode'` to your `INSTALLED_APPS` in **settings.py**:
139
+ ```python {title="settings.py"}
140
+ INSTALLED_APPS = [
141
+ ...
142
+ 'treenode',
143
+ ...
144
+ ]
145
+ ```
146
+
147
+ - Open **models.py** and create your own tree class:
148
+ ```
149
+ from treenode.models import TreeNodeModel
150
+
151
+ class MyTree(TreeNodeModel):
152
+ name = models.CharField(max_length=255)
153
+ display_field = "name"
154
+ ```
155
+
156
+ - Open **admin.py** and create a model for the admin panel
157
+ ```
158
+ from django.contrib import admin
159
+ from treenode.admin import TreeNodeModelAdmin
160
+ from .models import TestNode
161
+
162
+ @admin.register(TestNode)
163
+ class EntityAdmin(TreeNodeModelAdmin):
164
+ list_display = ("name",)
165
+ search_fields = ("name",)
166
+ ```
167
+
168
+ - Then, apply migrations:
169
+ ```sh
170
+ python manage.py makemigrations
171
+ python manage.py migrate
172
+ ```
173
+
174
+ - Run server
175
+ ```sh
176
+ python manage.py runserver
177
+ ```
178
+
179
+ Everything is ready, enjoy 🎉!
180
+
181
+ ## Documentation
182
+ Full documentation is available at **[ReadTheDocs](https://django-fast-treenode.readthedocs.io/)**.
183
+
184
+ Quick access links:
185
+ * [Installation, configuration and fine tuning](https://django-fast-treenode.readthedocs.io/installation/)
186
+ * [Model Inheritance and Extensions](https://django-fast-treenode.readthedocs.io/models/)
187
+ * [Working with Admin Classes](https://django-fast-treenode.readthedocs.io/admin/)
188
+ * [API Reference](https://django-fast-treenode.readthedocs.io/api/)
189
+ * [Import & Export](https://django-fast-treenode.readthedocs.io/import_export/)
190
+ * [Caching and working with cache](https://django-fast-treenode.readthedocs.io/cache/)
191
+ * [Migration and upgrade guide](https://django-fast-treenode.readthedocs.io/migration/)
192
+
193
+ Your wishes, objections, comments are welcome.
194
+
195
+ ## License
196
+ Released under [MIT License](https://github.com/TimurKady/django-fast-treenode/blob/main/LICENSE).
197
+
198
+ ## Credits
199
+ Thanks to everyone who contributed to the development and testing of this package, as well as the Django community for their inspiration and support.
200
+
201
+ Special thanks to [Fabio Caccamo](https://github.com/fabiocaccamo) for the idea behind creating a fast Django application for handling hierarchies.
202
+
203
+ Also special thanks to everyone who supports the project with their [sponsorship donations](https://github.com/sponsors/TimurKady).
@@ -0,0 +1,140 @@
1
+ # TreeNode Framework
2
+ **A hybrid open-source framework for working with trees in Django**
3
+
4
+ [![Tests](https://github.com/TimurKady/django-fast-treenode/actions/workflows/test.yaml/badge.svg?branch=main)](https://github.com/TimurKady/django-fast-treenode/actions/workflows/test.yaml)
5
+ [![Docs](https://readthedocs.org/projects/django-fast-treenode/badge/?version=latest)](https://django-fast-treenode.readthedocs.io/)
6
+ [![PyPI](https://img.shields.io/pypi/v/django-fast-treenode.svg)](https://pypi.org/project/django-fast-treenode/)
7
+ [![Published on Django Packages](https://img.shields.io/badge/Published%20on-Django%20Packages-0c3c26)](https://djangopackages.org/packages/p/django-fast-treenode/)
8
+ [![Sponsor](https://img.shields.io/github/sponsors/TimurKady)](https://github.com/sponsors/TimurKady)
9
+
10
+ ## About The TreeNode Framework
11
+ ### Overview
12
+
13
+ **Treenode Framework** is an advanced tree management system for Django applications.It is designed to handle large-scale, deeply nested, and highly dynamic tree structures while maintaining excellent performance, data integrity, and ease of use.
14
+
15
+ Unlike traditional solutions, **Treenode Framework** is built for serious real-world applications where trees may consist of:
16
+
17
+ - Number nodes to 50-100 thousands nodes,
18
+ - Nesting depths to 1,000 levels,
19
+ - Complex mutation patterns (bulk moves, merges, splits),
20
+ - Real-time data access via API.
21
+
22
+ Its core philosophy: **maximum scalability, minimum complexity**.
23
+
24
+ ### Key Features
25
+ #### Common operations
26
+ The `django-fast-treenode` package supports all the basic operations needed to work with tree structures:
27
+
28
+ - Extracting **ancestors** (queryset, list, pks, count);
29
+ - Extracting **children** (queryset, list, pks, count);
30
+ - Extracting **descendants** (queryset, list, pks, count);
31
+ - Extracting a **family**: ancestors, the node itself and its descendants (queryset, list, pks, count);
32
+ - Enumerating all the nodes (queryset, dicts);
33
+ - **Adding** a new node at a **certain position** on the tree;
34
+ - Automatic **sorting of node order** by the value of the specified field;
35
+ - **Deleting** an node;
36
+ - **Pruning**: Removing a whole section of a tree;
37
+ - **Grafting**: Adding a whole section to a tree;
38
+ - Finding the **root** for any node;
39
+ - Finding the **lowest common ancestor** of two nodes;
40
+ - Finding the **shortest path** between two nodes.
41
+
42
+ Due to its high performance and ability to support deep nesting and large tree sizes, the `django-fast-treeode` package can be used for any tasks that involve the use of tree-like data, with virtually no restrictions.
43
+
44
+ ### Where Massive Trees Really Matter?
45
+
46
+ **Treenode Framework** is designed to handle not only toy examples, but also real trees with strict requirements for the number of nodes and their nesting.
47
+
48
+ Typical applications include:
49
+
50
+ - **Digital Twin Systems** for industrial asset management (plants, machinery, vehicles), where full structural decomposition is critical for maintenance planning and cost optimization.
51
+ - **Decision Support Systems** in medicine, law, and insurance, where large and dynamic decision trees drive critical reasoning processes.
52
+ - **AI Planning Engines** based on hierarchical task networks, allowing intelligent agents to decompose and execute complex strategies.
53
+ - **Biological and Genetic Research**, where large phylogenetic trees model evolutionary relationships or genetic hierarchies.
54
+
55
+ In all these domains, scalable and fast tree management is not a luxury — it's a necessity.
56
+
57
+ ### Why TreeNode Framework?
58
+ At the moment, django-fast-treeenode is, if not the best, then one of the best packages for working with tree data under Djangjo.
59
+
60
+ - **High performance**: [tests show](docs/about.md#benchmark-tests) that on trees of 5k-10k nodes with a nesting depth of 500-600 levels, **Treenode Framework** (`django-fast-treenode`) shows **performance 4-7 times better** than the main popular packages.
61
+ - **Flexible API**: today contains the widest set of methods for working with a tree in comparison with other packages.
62
+ - **Convenient administration**: the admin panel interface was developed taking into account the experience of using other packages. It provides convenience and intuitiveness with ease of programming.
63
+ - **Scalability**: **Treenode Framework** suitable for solving simple problems such as menus, directories, parsing arithmetic expressions, as well as complex problems such as program optimization, image layout, multi-step decision making problems, or machine learning..
64
+ - **Lightweight**: All functionality is implemented within the package without heavyweight dependencies such as `djangorestframework` or `django-import-export`.
65
+
66
+ All this makes **Treenode Framework** a prime candidate for your needs.
67
+
68
+ ## Quick Start
69
+ To get started quickly, you need to follow these steps:
70
+
71
+ - Simply install the package via `pip`:
72
+ ```sh
73
+ pip install django-fast-treenode
74
+ ```
75
+ - Once installed, add `'treenode'` to your `INSTALLED_APPS` in **settings.py**:
76
+ ```python {title="settings.py"}
77
+ INSTALLED_APPS = [
78
+ ...
79
+ 'treenode',
80
+ ...
81
+ ]
82
+ ```
83
+
84
+ - Open **models.py** and create your own tree class:
85
+ ```
86
+ from treenode.models import TreeNodeModel
87
+
88
+ class MyTree(TreeNodeModel):
89
+ name = models.CharField(max_length=255)
90
+ display_field = "name"
91
+ ```
92
+
93
+ - Open **admin.py** and create a model for the admin panel
94
+ ```
95
+ from django.contrib import admin
96
+ from treenode.admin import TreeNodeModelAdmin
97
+ from .models import TestNode
98
+
99
+ @admin.register(TestNode)
100
+ class EntityAdmin(TreeNodeModelAdmin):
101
+ list_display = ("name",)
102
+ search_fields = ("name",)
103
+ ```
104
+
105
+ - Then, apply migrations:
106
+ ```sh
107
+ python manage.py makemigrations
108
+ python manage.py migrate
109
+ ```
110
+
111
+ - Run server
112
+ ```sh
113
+ python manage.py runserver
114
+ ```
115
+
116
+ Everything is ready, enjoy 🎉!
117
+
118
+ ## Documentation
119
+ Full documentation is available at **[ReadTheDocs](https://django-fast-treenode.readthedocs.io/)**.
120
+
121
+ Quick access links:
122
+ * [Installation, configuration and fine tuning](https://django-fast-treenode.readthedocs.io/installation/)
123
+ * [Model Inheritance and Extensions](https://django-fast-treenode.readthedocs.io/models/)
124
+ * [Working with Admin Classes](https://django-fast-treenode.readthedocs.io/admin/)
125
+ * [API Reference](https://django-fast-treenode.readthedocs.io/api/)
126
+ * [Import & Export](https://django-fast-treenode.readthedocs.io/import_export/)
127
+ * [Caching and working with cache](https://django-fast-treenode.readthedocs.io/cache/)
128
+ * [Migration and upgrade guide](https://django-fast-treenode.readthedocs.io/migration/)
129
+
130
+ Your wishes, objections, comments are welcome.
131
+
132
+ ## License
133
+ Released under [MIT License](https://github.com/TimurKady/django-fast-treenode/blob/main/LICENSE).
134
+
135
+ ## Credits
136
+ Thanks to everyone who contributed to the development and testing of this package, as well as the Django community for their inspiration and support.
137
+
138
+ Special thanks to [Fabio Caccamo](https://github.com/fabiocaccamo) for the idea behind creating a fast Django application for handling hierarchies.
139
+
140
+ Also special thanks to everyone who supports the project with their [sponsorship donations](https://github.com/sponsors/TimurKady).
@@ -0,0 +1,203 @@
1
+ Metadata-Version: 2.4
2
+ Name: django-fast-treenode
3
+ Version: 3.0.0
4
+ Summary: Treenode Framework for supporting tree (hierarchical) data structure in Django projects
5
+ Home-page: https://django-fast-treenode.readthedocs.io/
6
+ Author: Timur Kady
7
+ Author-email: Timur Kady <timurkady@yandex.com>
8
+ License: MIT License
9
+
10
+ Copyright (c) 2020-2025 Timur Kady
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy
13
+ of this software and associated documentation files (the "Software"), to deal
14
+ in the Software without restriction, including without limitation the rights
15
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
16
+ copies of the Software, and to permit persons to whom the Software is
17
+ furnished to do so, subject to the following conditions:
18
+
19
+ The above copyright notice and this permission notice shall be included in all
20
+ copies or substantial portions of the Software.
21
+
22
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
23
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
24
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
25
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
26
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
27
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
28
+ SOFTWARE.
29
+
30
+ Project-URL: Homepage, https://github.com/TimurKady/django-fast-treenode
31
+ Project-URL: Documentation, https://django-fast-treenode.readthedocs.io/
32
+ Project-URL: Source, https://github.com/TimurKady/django-fast-treenode
33
+ Project-URL: Issues, https://github.com/TimurKady/django-fast-treenode/issues
34
+ Classifier: Development Status :: 5 - Production/Stable
35
+ Classifier: Intended Audience :: Developers
36
+ Classifier: Programming Language :: Python :: 3
37
+ Classifier: Programming Language :: Python :: 3.9
38
+ Classifier: Programming Language :: Python :: 3.10
39
+ Classifier: Programming Language :: Python :: 3.11
40
+ Classifier: Programming Language :: Python :: 3.12
41
+ Classifier: Programming Language :: Python :: 3.13
42
+ Classifier: Programming Language :: Python :: 3.14
43
+ Classifier: Framework :: Django
44
+ Classifier: Framework :: Django :: 4.0
45
+ Classifier: Framework :: Django :: 4.1
46
+ Classifier: Framework :: Django :: 4.2
47
+ Classifier: Framework :: Django :: 5.0
48
+ Classifier: Framework :: Django :: 5.1
49
+ Classifier: Framework :: Django :: 5.2
50
+ Classifier: License :: OSI Approved :: MIT License
51
+ Classifier: Operating System :: OS Independent
52
+ Requires-Python: >=3.9
53
+ Description-Content-Type: text/markdown
54
+ License-File: LICENSE
55
+ Requires-Dist: Django>=4.0
56
+ Requires-Dist: msgpack>=1.0.0
57
+ Requires-Dist: openpyxl>=3.0.0
58
+ Requires-Dist: pyyaml>=5.1
59
+ Dynamic: author
60
+ Dynamic: home-page
61
+ Dynamic: license-file
62
+ Dynamic: requires-python
63
+
64
+ # TreeNode Framework
65
+ **A hybrid open-source framework for working with trees in Django**
66
+
67
+ [![Tests](https://github.com/TimurKady/django-fast-treenode/actions/workflows/test.yaml/badge.svg?branch=main)](https://github.com/TimurKady/django-fast-treenode/actions/workflows/test.yaml)
68
+ [![Docs](https://readthedocs.org/projects/django-fast-treenode/badge/?version=latest)](https://django-fast-treenode.readthedocs.io/)
69
+ [![PyPI](https://img.shields.io/pypi/v/django-fast-treenode.svg)](https://pypi.org/project/django-fast-treenode/)
70
+ [![Published on Django Packages](https://img.shields.io/badge/Published%20on-Django%20Packages-0c3c26)](https://djangopackages.org/packages/p/django-fast-treenode/)
71
+ [![Sponsor](https://img.shields.io/github/sponsors/TimurKady)](https://github.com/sponsors/TimurKady)
72
+
73
+ ## About The TreeNode Framework
74
+ ### Overview
75
+
76
+ **Treenode Framework** is an advanced tree management system for Django applications.It is designed to handle large-scale, deeply nested, and highly dynamic tree structures while maintaining excellent performance, data integrity, and ease of use.
77
+
78
+ Unlike traditional solutions, **Treenode Framework** is built for serious real-world applications where trees may consist of:
79
+
80
+ - Number nodes to 50-100 thousands nodes,
81
+ - Nesting depths to 1,000 levels,
82
+ - Complex mutation patterns (bulk moves, merges, splits),
83
+ - Real-time data access via API.
84
+
85
+ Its core philosophy: **maximum scalability, minimum complexity**.
86
+
87
+ ### Key Features
88
+ #### Common operations
89
+ The `django-fast-treenode` package supports all the basic operations needed to work with tree structures:
90
+
91
+ - Extracting **ancestors** (queryset, list, pks, count);
92
+ - Extracting **children** (queryset, list, pks, count);
93
+ - Extracting **descendants** (queryset, list, pks, count);
94
+ - Extracting a **family**: ancestors, the node itself and its descendants (queryset, list, pks, count);
95
+ - Enumerating all the nodes (queryset, dicts);
96
+ - **Adding** a new node at a **certain position** on the tree;
97
+ - Automatic **sorting of node order** by the value of the specified field;
98
+ - **Deleting** an node;
99
+ - **Pruning**: Removing a whole section of a tree;
100
+ - **Grafting**: Adding a whole section to a tree;
101
+ - Finding the **root** for any node;
102
+ - Finding the **lowest common ancestor** of two nodes;
103
+ - Finding the **shortest path** between two nodes.
104
+
105
+ Due to its high performance and ability to support deep nesting and large tree sizes, the `django-fast-treeode` package can be used for any tasks that involve the use of tree-like data, with virtually no restrictions.
106
+
107
+ ### Where Massive Trees Really Matter?
108
+
109
+ **Treenode Framework** is designed to handle not only toy examples, but also real trees with strict requirements for the number of nodes and their nesting.
110
+
111
+ Typical applications include:
112
+
113
+ - **Digital Twin Systems** for industrial asset management (plants, machinery, vehicles), where full structural decomposition is critical for maintenance planning and cost optimization.
114
+ - **Decision Support Systems** in medicine, law, and insurance, where large and dynamic decision trees drive critical reasoning processes.
115
+ - **AI Planning Engines** based on hierarchical task networks, allowing intelligent agents to decompose and execute complex strategies.
116
+ - **Biological and Genetic Research**, where large phylogenetic trees model evolutionary relationships or genetic hierarchies.
117
+
118
+ In all these domains, scalable and fast tree management is not a luxury — it's a necessity.
119
+
120
+ ### Why TreeNode Framework?
121
+ At the moment, django-fast-treeenode is, if not the best, then one of the best packages for working with tree data under Djangjo.
122
+
123
+ - **High performance**: [tests show](docs/about.md#benchmark-tests) that on trees of 5k-10k nodes with a nesting depth of 500-600 levels, **Treenode Framework** (`django-fast-treenode`) shows **performance 4-7 times better** than the main popular packages.
124
+ - **Flexible API**: today contains the widest set of methods for working with a tree in comparison with other packages.
125
+ - **Convenient administration**: the admin panel interface was developed taking into account the experience of using other packages. It provides convenience and intuitiveness with ease of programming.
126
+ - **Scalability**: **Treenode Framework** suitable for solving simple problems such as menus, directories, parsing arithmetic expressions, as well as complex problems such as program optimization, image layout, multi-step decision making problems, or machine learning..
127
+ - **Lightweight**: All functionality is implemented within the package without heavyweight dependencies such as `djangorestframework` or `django-import-export`.
128
+
129
+ All this makes **Treenode Framework** a prime candidate for your needs.
130
+
131
+ ## Quick Start
132
+ To get started quickly, you need to follow these steps:
133
+
134
+ - Simply install the package via `pip`:
135
+ ```sh
136
+ pip install django-fast-treenode
137
+ ```
138
+ - Once installed, add `'treenode'` to your `INSTALLED_APPS` in **settings.py**:
139
+ ```python {title="settings.py"}
140
+ INSTALLED_APPS = [
141
+ ...
142
+ 'treenode',
143
+ ...
144
+ ]
145
+ ```
146
+
147
+ - Open **models.py** and create your own tree class:
148
+ ```
149
+ from treenode.models import TreeNodeModel
150
+
151
+ class MyTree(TreeNodeModel):
152
+ name = models.CharField(max_length=255)
153
+ display_field = "name"
154
+ ```
155
+
156
+ - Open **admin.py** and create a model for the admin panel
157
+ ```
158
+ from django.contrib import admin
159
+ from treenode.admin import TreeNodeModelAdmin
160
+ from .models import TestNode
161
+
162
+ @admin.register(TestNode)
163
+ class EntityAdmin(TreeNodeModelAdmin):
164
+ list_display = ("name",)
165
+ search_fields = ("name",)
166
+ ```
167
+
168
+ - Then, apply migrations:
169
+ ```sh
170
+ python manage.py makemigrations
171
+ python manage.py migrate
172
+ ```
173
+
174
+ - Run server
175
+ ```sh
176
+ python manage.py runserver
177
+ ```
178
+
179
+ Everything is ready, enjoy 🎉!
180
+
181
+ ## Documentation
182
+ Full documentation is available at **[ReadTheDocs](https://django-fast-treenode.readthedocs.io/)**.
183
+
184
+ Quick access links:
185
+ * [Installation, configuration and fine tuning](https://django-fast-treenode.readthedocs.io/installation/)
186
+ * [Model Inheritance and Extensions](https://django-fast-treenode.readthedocs.io/models/)
187
+ * [Working with Admin Classes](https://django-fast-treenode.readthedocs.io/admin/)
188
+ * [API Reference](https://django-fast-treenode.readthedocs.io/api/)
189
+ * [Import & Export](https://django-fast-treenode.readthedocs.io/import_export/)
190
+ * [Caching and working with cache](https://django-fast-treenode.readthedocs.io/cache/)
191
+ * [Migration and upgrade guide](https://django-fast-treenode.readthedocs.io/migration/)
192
+
193
+ Your wishes, objections, comments are welcome.
194
+
195
+ ## License
196
+ Released under [MIT License](https://github.com/TimurKady/django-fast-treenode/blob/main/LICENSE).
197
+
198
+ ## Credits
199
+ Thanks to everyone who contributed to the development and testing of this package, as well as the Django community for their inspiration and support.
200
+
201
+ Special thanks to [Fabio Caccamo](https://github.com/fabiocaccamo) for the idea behind creating a fast Django application for handling hierarchies.
202
+
203
+ Also special thanks to everyone who supports the project with their [sponsorship donations](https://github.com/sponsors/TimurKady).
@@ -0,0 +1,115 @@
1
+ LICENSE
2
+ MANIFEST.in
3
+ README.md
4
+ pyproject.toml
5
+ setup.py
6
+ django_fast_treenode.egg-info/PKG-INFO
7
+ django_fast_treenode.egg-info/SOURCES.txt
8
+ django_fast_treenode.egg-info/dependency_links.txt
9
+ django_fast_treenode.egg-info/requires.txt
10
+ django_fast_treenode.egg-info/top_level.txt
11
+ docs/.gitignore
12
+ docs/.nojekyll
13
+ docs/about.md
14
+ docs/admin.md
15
+ docs/api.md
16
+ docs/apifirst.md
17
+ docs/cache.md
18
+ docs/customization.md
19
+ docs/dnd.md
20
+ docs/import_export.md
21
+ docs/index.md
22
+ docs/insert-after.jpg
23
+ docs/insert-as-child.jpg
24
+ docs/installation.md
25
+ docs/migration.md
26
+ docs/models.md
27
+ docs/requirements.txt
28
+ docs/roadmap.md
29
+ docs/using.md
30
+ tests/test_suite.py
31
+ treenode/__init__.py
32
+ treenode/apps.py
33
+ treenode/cache.py
34
+ treenode/forms.py
35
+ treenode/settings.py
36
+ treenode/signals.py
37
+ treenode/tests.py
38
+ treenode/urls.py
39
+ treenode/version.py
40
+ treenode/widgets.py
41
+ treenode/admin/__init__.py
42
+ treenode/admin/admin.py
43
+ treenode/admin/changelist.py
44
+ treenode/admin/exporter.py
45
+ treenode/admin/importer.py
46
+ treenode/admin/mixin.py
47
+ treenode/managers/__init__.py
48
+ treenode/managers/managers.py
49
+ treenode/managers/queries.py
50
+ treenode/managers/tasks.py
51
+ treenode/models/__init__.py
52
+ treenode/models/decorators.py
53
+ treenode/models/factory.py
54
+ treenode/models/models.py
55
+ treenode/models/mixins/__init__.py
56
+ treenode/models/mixins/ancestors.py
57
+ treenode/models/mixins/children.py
58
+ treenode/models/mixins/descendants.py
59
+ treenode/models/mixins/family.py
60
+ treenode/models/mixins/logical.py
61
+ treenode/models/mixins/node.py
62
+ treenode/models/mixins/properties.py
63
+ treenode/models/mixins/roots.py
64
+ treenode/models/mixins/siblings.py
65
+ treenode/models/mixins/tree.py
66
+ treenode/models/mixins/update.py
67
+ treenode/static/.gitkeep
68
+ treenode/static/css/.gitkeep
69
+ treenode/static/css/tree_widget.css
70
+ treenode/static/css/treenode_admin.css
71
+ treenode/static/css/treenode_tabs.css
72
+ treenode/static/js/.gitkeep
73
+ treenode/static/js/lz-string.min.js
74
+ treenode/static/js/tree_widget.js
75
+ treenode/static/js/treenode_admin.js
76
+ treenode/static/vendors/jquery-ui/AUTHORS.txt
77
+ treenode/static/vendors/jquery-ui/LICENSE.txt
78
+ treenode/static/vendors/jquery-ui/index.html
79
+ treenode/static/vendors/jquery-ui/jquery-ui.css
80
+ treenode/static/vendors/jquery-ui/jquery-ui.js
81
+ treenode/static/vendors/jquery-ui/jquery-ui.min.css
82
+ treenode/static/vendors/jquery-ui/jquery-ui.min.js
83
+ treenode/static/vendors/jquery-ui/jquery-ui.structure.css
84
+ treenode/static/vendors/jquery-ui/jquery-ui.structure.min.css
85
+ treenode/static/vendors/jquery-ui/jquery-ui.theme.css
86
+ treenode/static/vendors/jquery-ui/jquery-ui.theme.min.css
87
+ treenode/static/vendors/jquery-ui/package.json
88
+ treenode/static/vendors/jquery-ui/external/jquery/jquery.js
89
+ treenode/static/vendors/jquery-ui/images/ui-icons_444444_256x240.png
90
+ treenode/static/vendors/jquery-ui/images/ui-icons_555555_256x240.png
91
+ treenode/static/vendors/jquery-ui/images/ui-icons_777620_256x240.png
92
+ treenode/static/vendors/jquery-ui/images/ui-icons_777777_256x240.png
93
+ treenode/static/vendors/jquery-ui/images/ui-icons_cc0000_256x240.png
94
+ treenode/static/vendors/jquery-ui/images/ui-icons_ffffff_256x240.png
95
+ treenode/templates/.gitkeep
96
+ treenode/templates/admin/.gitkeep
97
+ treenode/templates/admin/treenode_ajax_rows.html
98
+ treenode/templates/admin/treenode_changelist.html
99
+ treenode/templates/admin/treenode_import_export.html
100
+ treenode/templates/admin/treenode_rows.html
101
+ treenode/templates/widgets/tree_widget.html
102
+ treenode/utils/__init__.py
103
+ treenode/utils/db/__init__.py
104
+ treenode/utils/db/compiler.py
105
+ treenode/utils/db/db_vendor.py
106
+ treenode/utils/db/service.py
107
+ treenode/utils/db/sqlcompat.py
108
+ treenode/utils/db/sqlquery.py
109
+ treenode/views/__init__.py
110
+ treenode/views/autoapi.py
111
+ treenode/views/autocomplete.py
112
+ treenode/views/children.py
113
+ treenode/views/common.py
114
+ treenode/views/crud.py
115
+ treenode/views/search.py
@@ -0,0 +1,4 @@
1
+ Django>=4.0
2
+ msgpack>=1.0.0
3
+ openpyxl>=3.0.0
4
+ pyyaml>=5.1