{ "info": { "author": "Svintsov Dmitry", "author_email": "sacrud@uralbash.ru", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Environment :: Web Environment", "Framework :: Flask", "Framework :: Pyramid", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Database", "Topic :: Internet" ], "description": "|Build Status| |Coverage Status|\n\nLibrary for implementing Modified Preorder Tree Traversal with your\nSQLAlchemy Models and working with trees of Model instances, like\ndjango-mptt. Docs http://sqlalchemy-mptt.readthedocs.io/\n\n.. image:: https://cdn.rawgit.com/uralbash/sqlalchemy_mptt/master/docs/img/2_sqlalchemy_mptt_traversal.svg\n :alt: Nested sets traversal\n :width: 800px\n\nThe nested set model is a particular technique for representing nested\nsets (also known as trees or hierarchies) in relational databases.\n\nInstalling\n----------\n\nInstall from github:\n\n.. code-block:: bash\n\n pip install git+http://github.com/uralbash/sqlalchemy_mptt.git\n\nPyPi:\n\n.. code-block:: bash\n\n pip install sqlalchemy_mptt\n\nSource:\n\n.. code-block:: bash\n\n pip install -e .\n\nUsage\n-----\n\nAdd mixin to model\n\n.. code-block:: python\n\n from sqlalchemy import Column, Integer, Boolean\n from sqlalchemy.ext.declarative import declarative_base\n\n from sqlalchemy_mptt.mixins import BaseNestedSets\n\n Base = declarative_base()\n\n\n class Tree(Base, BaseNestedSets):\n __tablename__ = \"tree\"\n\n id = Column(Integer, primary_key=True)\n visible = Column(Boolean)\n\n def __repr__(self):\n return \"\" % self.id\n\nNow you can add, move and delete obj!\n\nInsert node\n-----------\n\n.. code-block:: python\n\n node = Tree(parent_id=6)\n session.add(node)\n\n::\n\n level Nested sets example\n 1 1(1)22\n _______________|___________________\n | | |\n 2 2(2)5 6(4)11 12(7)21\n | ^ ^\n 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20\n | |\n 4 14(9)15 18(11)19\n\n level Insert node with parent_id == 6\n 1 1(1)24\n _______________|_________________\n | | |\n 2 2(2)5 6(4)13 14(7)23\n | ____|____ ___|____\n | | | | |\n 3 3(3)4 7(5)8 9(6)12 15(8)18 19(10)22\n | | |\n 4 10(23)11 16(9)17 20(11)21\n\nDelete node\n-----------\n\n.. code:: python\n\n node = session.query(Tree).filter(Tree.id == 4).one()\n session.delete(node)\n\n::\n\n level Nested sets example\n 1 1(1)22\n _______________|___________________\n | | |\n 2 2(2)5 6(4)11 12(7)21\n | ^ ^\n 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20\n | |\n 4 14(9)15 18(11)19\n\n level Delete node == 4\n 1 1(1)16\n _______________|_____\n | |\n 2 2(2)5 6(7)15\n | ^\n 3 3(3)4 7(8)10 11(10)14\n | |\n 4 8(9)9 12(11)13\n\nUpdate node\n-----------\n\n.. code:: python\n\n node = session.query(Tree).filter(Tree.id == 8).one()\n node.parent_id = 5\n session.add(node)\n\n::\n\n level Nested sets example\n 1 1(1)22\n _______________|___________________\n | | |\n 2 2(2)5 6(4)11 12(7)21\n | ^ ^\n 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20\n | |\n 4 14(9)15 18(11)19\n\n level Move 8 - > 5\n 1 1(1)22\n _______________|__________________\n | | |\n 2 2(2)5 6(4)15 16(7)21\n | ^ |\n 3 3(3)4 7(5)12 13(6)14 17(10)20\n | |\n 4 8(8)11 18(11)19\n |\n 5 9(9)10\n\nMove node (support multitree)\n-----------------------------\n\n.. figure:: https://cdn.rawgit.com/uralbash/sqlalchemy_mptt/master/docs/img/3_sqlalchemy_mptt_multitree.svg\n :alt: Nested sets multitree\n :width: 600px\n\n Nested sets multitree\n\nMove inside\n\n.. code:: python\n\n node = session.query(Tree).filter(Tree.id == 4).one()\n node.move_inside(\"15\")\n\n::\n\n 4 -> 15\n level Nested sets tree1\n 1 1(1)16\n _______________|_____________________\n | |\n 2 2(2)5 6(7)15\n | ^\n 3 3(3)4 7(8)10 11(10)14\n | |\n 4 8(9)9 12(11)13\n\n level Nested sets tree2\n 1 1(12)28\n ________________|_______________________\n | | |\n 2 2(13)5 6(15)17 18(18)27\n | ^ ^\n 3 3(14)4 7(4)12 13(16)14 15(17)16 19(19)22 23(21)26\n ^ | |\n 4 8(5)9 10(6)11 20(20)21 24(22)25\n\nMove after\n\n.. code:: python\n\n node = session.query(Tree).filter(Tree.id == 8).one()\n node.move_after(\"5\")\n\n::\n\n level Nested sets example\n 1 1(1)22\n _______________|___________________\n | | |\n 2 2(2)5 6(4)11 12(7)21\n | ^ ^\n 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20\n | |\n 4 14(9)15 18(11)19\n\n level Move 8 after 5\n 1 1(1)22\n _______________|__________________\n | | |\n 2 2(2)5 6(4)15 16(7)21\n | ^ |\n 3 3(3)4 7(5)8 9(8)12 13(6)14 17(10)20\n | |\n 4 10(9)11 18(11)19\n\nMove to top level\n\n.. code:: python\n\n node = session.query(Tree).filter(Tree.id == 15).one()\n node.move_after(\"1\")\n\n::\n\n level tree_id = 1\n 1 1(1)22\n _______________|___________________\n | | |\n 2 2(2)5 6(4)11 12(7)21\n | ^ ^\n 3 3(3)4 7(5)8 9(6)10 13(8)16 17(10)20\n | |\n 4 14(9)15 18(11)19\n\n level tree_id = 2\n 1 1(15)6\n ^\n 2 2(16)3 4(17)5\n\n level tree_id = 3\n 1 1(12)16\n _______________|\n | |\n 2 2(13)5 6(18)15\n | ^\n 3 3(14)4 7(19)10 11(21)14\n | |\n 4 8(20)9 12(22)13\n\nSupport and Development\n=======================\n\nTo report bugs, use the `issue tracker\n`_.\n\nWe welcome any contribution: suggestions, ideas, commits with new\nfutures, bug fixes, refactoring, docs, tests, translations, etc...\n\nIf you have question, contact me sacrud@uralbash.ru or #sacrud IRC\nchannel |IRC Freenode|\n\nLicense\n=======\n\nThe project is licensed under the MIT license.\n\n.. |Build Status| image:: https://travis-ci.org/uralbash/sqlalchemy_mptt.svg?branch=master\n :target: https://travis-ci.org/uralbash/sqlalchemy_mptt\n.. |Coverage Status| image:: https://coveralls.io/repos/uralbash/sqlalchemy_mptt/badge.png\n :target: https://coveralls.io/r/uralbash/sqlalchemy_mptt\n.. |IRC Freenode| image:: https://img.shields.io/badge/irc-freenode-blue.svg\n :target: https://webchat.freenode.net/?channels=sacrud\n\n0.2.4 (2018-12-14)\n==================\n\nsee PR #61\n\n- Allow to specify ordering of path_to_root\n\n0.2.3 (2018-06-03)\n==================\n\nsee issue #57\n\n- Fix rebuild tree\n- Added support node's identifier start from 0\n\n0.2.2 (2017-10-05)\n==================\n\nsee issue #56\n\n- Added custom default root level. Support Django style level=0\n\n0.2.1 (2016-01-23)\n==================\n\nsee PR #51\n\n- fix of index columns names\n\n0.2.0 (2015-11-13)\n==================\n\nsee PR #50\n\n- Changed ``parent_id`` to dynamically match the type of the primary_key\n- exposed drilldown_tree's logic and path_to_root's logic as both instance and\n class level method\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/mush42/sqlalchemy_mptt/", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "oy-libs-sqlalchemy-mptt", "package_url": "https://pypi.org/project/oy-libs-sqlalchemy-mptt/", "platform": "", "project_url": "https://pypi.org/project/oy-libs-sqlalchemy-mptt/", "project_urls": { "Homepage": "http://github.com/mush42/sqlalchemy_mptt/" }, "release_url": "https://pypi.org/project/oy-libs-sqlalchemy-mptt/0.2.4/", "requires_dist": [ "SQLAlchemy (>=1.0.0)" ], "requires_python": "", "summary": "SQLAlchemy MPTT mixins (Nested Sets)", "version": "0.2.4" }, "last_serial": 4810413, "releases": { "0.2.4": [ { "comment_text": "", "digests": { "md5": "0499e6b2d090ba40957bab771baf17f5", "sha256": "1b71aa827ee376d073f5bafab99f039b36eb0df7c301a750b5225c4a07cb21d6" }, "downloads": -1, "filename": "oy_libs_sqlalchemy_mptt-0.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "0499e6b2d090ba40957bab771baf17f5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12678, "upload_time": "2019-02-12T11:49:19", "url": "https://files.pythonhosted.org/packages/7d/7b/b0bee5eb1cea9e8a8cddf065b76cd6003187c002ad22599c21fd4755b763/oy_libs_sqlalchemy_mptt-0.2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "97f451cfab4cb8bb4609dedab2f8eebd", "sha256": "2c924a695c87782a986b248a58e0dd27ff7f42b745d532ecfb9c4173f022c4c1" }, "downloads": -1, "filename": "oy-libs-sqlalchemy_mptt-0.2.4.tar.gz", "has_sig": false, "md5_digest": "97f451cfab4cb8bb4609dedab2f8eebd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11869, "upload_time": "2019-02-12T12:02:47", "url": "https://files.pythonhosted.org/packages/78/c3/2e5c18bb76c1977d7b7ae23d27039b04e12ab6accba3c8c2914ce6183cc6/oy-libs-sqlalchemy_mptt-0.2.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0499e6b2d090ba40957bab771baf17f5", "sha256": "1b71aa827ee376d073f5bafab99f039b36eb0df7c301a750b5225c4a07cb21d6" }, "downloads": -1, "filename": "oy_libs_sqlalchemy_mptt-0.2.4-py3-none-any.whl", "has_sig": false, "md5_digest": "0499e6b2d090ba40957bab771baf17f5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12678, "upload_time": "2019-02-12T11:49:19", "url": "https://files.pythonhosted.org/packages/7d/7b/b0bee5eb1cea9e8a8cddf065b76cd6003187c002ad22599c21fd4755b763/oy_libs_sqlalchemy_mptt-0.2.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "97f451cfab4cb8bb4609dedab2f8eebd", "sha256": "2c924a695c87782a986b248a58e0dd27ff7f42b745d532ecfb9c4173f022c4c1" }, "downloads": -1, "filename": "oy-libs-sqlalchemy_mptt-0.2.4.tar.gz", "has_sig": false, "md5_digest": "97f451cfab4cb8bb4609dedab2f8eebd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11869, "upload_time": "2019-02-12T12:02:47", "url": "https://files.pythonhosted.org/packages/78/c3/2e5c18bb76c1977d7b7ae23d27039b04e12ab6accba3c8c2914ce6183cc6/oy-libs-sqlalchemy_mptt-0.2.4.tar.gz" } ] }