{ "info": { "author": "Jyrki Muukkonen", "author_email": "jvtm@kruu.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "orderby\n=======\n\nPython key functions for multi-field ordering in SQL ORDER BY fashion\n\n.. image:: https://img.shields.io/pypi/v/orderby.svg\n :target: https://pypi.python.org/pypi/orderby\n\nMeant to be used with built-in ``sorted()`` *key function*.\n\nSupports also ``list.sort()`` doing *in-place sorting*.\n\nImplementation uses ``operator.itemgetter()`` + some internal helper classes to allow descending sorting order.\n\nSo far this is tested and used on *lists of dictionaries*. Adding support for named tuples and others would\nbe possible (using ``operator.attrgetter()``).\n\n\nUsage\n-----\n\n- SQL-like: ``orderby('foo ASC, bar DESC')``\n- chained: ``asc('foo').desc('bar')`` usage\n- multiple fields at once: ``asc('foo', 'bar')``\n\n\nExamples\n--------\n\n``orderby()`` string syntax:\n\n.. code-block:: python\n\n >>> from orderby import orderby\n >>> import json\n >>> files = [\n ... {'size': 1234, 'path': 'foo/bar.txt'},\n ... {'size': 0, 'path': '/dev/null'},\n ... {'size': 1234, 'path': 'foo/abc.bin'},\n ... ]\n >>> print(json.dumps(sorted(files, key=orderby('size DESC, path')), indent=2))\n [\n {\n \"size\": 1234,\n \"path\": \"foo/abc.bin\"\n },\n {\n \"size\": 1234,\n \"path\": \"foo/bar.txt\"\n },\n {\n \"size\": 0,\n \"path\": \"/dev/null\"\n }\n ]\n\n\nChained `asc()` and `desc()` usage:\n\n.. code-block:: python\n\n >>> from orderby import asc, desc\n >>> print(json.dumps(sorted(files, key=desc('size').asc('path')), indent=2))\n [\n {\n \"size\": 1234,\n \"path\": \"foo/abc.bin\"\n },\n {\n \"size\": 1234,\n \"path\": \"foo/bar.txt\"\n },\n {\n \"size\": 0,\n \"path\": \"/dev/null\"\n }\n ]\n\n\nIn-place sorting of a list:\n\n.. code-block:: python\n\n >>> files.sort(key=desc('path'))\n >>> print(json.dumps(files, indent=2))\n [\n {\n \"size\": 1234,\n \"path\": \"foo/bar.txt\"\n },\n {\n \"size\": 1234,\n \"path\": \"foo/abc.bin\"\n },\n {\n \"size\": 0,\n \"path\": \"/dev/null\"\n }\n ]\n >>> files.sort(key=desc('size').asc('path'))\n >>> print(json.dumps(files, indent=2))\n [\n {\n \"size\": 1234,\n \"path\": \"foo/abc.bin\"\n },\n {\n \"size\": 1234,\n \"path\": \"foo/bar.txt\"\n },\n {\n \"size\": 0,\n \"path\": \"/dev/null\"\n }\n ]\n\nInternals\n---------\n\nTo be explained here later...", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jvtm/python-orderby", "keywords": "sort order orderby development", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "orderby", "package_url": "https://pypi.org/project/orderby/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/orderby/", "project_urls": { "Homepage": "https://github.com/jvtm/python-orderby" }, "release_url": "https://pypi.org/project/orderby/0.0.2/", "requires_dist": null, "requires_python": "", "summary": "Python key functions for multi-field ordering", "version": "0.0.2" }, "last_serial": 2453659, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "e9bb79f34d780216238ef561ca79b04f", "sha256": "605b87e83f017cc3aa4834ba3b59b22f174fa9874a3df56ca30eb397b318c6e4" }, "downloads": -1, "filename": "orderby-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "e9bb79f34d780216238ef561ca79b04f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 4000, "upload_time": "2016-11-10T16:23:57", "url": "https://files.pythonhosted.org/packages/14/1f/249ee1d88b51ffc020a177e642854e66962465e0c17f7704809ee1fad0ac/orderby-0.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aeaab16e63620981b360393a829d8b56", "sha256": "1570fff45ddb1fed2f488c5b6e6e6e8fb39c75dba0d8d8c78a46d90fee1c9153" }, "downloads": -1, "filename": "orderby-0.0.1.tar.gz", "has_sig": false, "md5_digest": "aeaab16e63620981b360393a829d8b56", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 2746, "upload_time": "2016-11-10T16:24:00", "url": "https://files.pythonhosted.org/packages/22/9d/3ea2f37b9458270176b849140d272e3f368f2a7c479745ecf6b228aee236/orderby-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "84e0f32260d6ff52ccbdc4b8e37ced01", "sha256": "a6e712acc0539edbfe3b610963a171988a98aead226d262ccb4b924f642e8d53" }, "downloads": -1, "filename": "orderby-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "84e0f32260d6ff52ccbdc4b8e37ced01", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6987, "upload_time": "2016-11-10T18:47:49", "url": "https://files.pythonhosted.org/packages/7d/ef/987515469ece2f6c85a06d73f3d725b065fe533073218d1d17875dcfb5e2/orderby-0.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e43657cca7eca1756934153afe2aa2bc", "sha256": "26f5892356f79855c1369f47a17328b8dcbf7452e2459c1651c91929b8edbd6c" }, "downloads": -1, "filename": "orderby-0.0.2.tar.gz", "has_sig": false, "md5_digest": "e43657cca7eca1756934153afe2aa2bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4553, "upload_time": "2016-11-10T18:47:51", "url": "https://files.pythonhosted.org/packages/9c/cb/2228287acb2c54d235359929a8b9885cc8aa94e7ecaaa2227a83e7eb04fa/orderby-0.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "84e0f32260d6ff52ccbdc4b8e37ced01", "sha256": "a6e712acc0539edbfe3b610963a171988a98aead226d262ccb4b924f642e8d53" }, "downloads": -1, "filename": "orderby-0.0.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "84e0f32260d6ff52ccbdc4b8e37ced01", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 6987, "upload_time": "2016-11-10T18:47:49", "url": "https://files.pythonhosted.org/packages/7d/ef/987515469ece2f6c85a06d73f3d725b065fe533073218d1d17875dcfb5e2/orderby-0.0.2-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e43657cca7eca1756934153afe2aa2bc", "sha256": "26f5892356f79855c1369f47a17328b8dcbf7452e2459c1651c91929b8edbd6c" }, "downloads": -1, "filename": "orderby-0.0.2.tar.gz", "has_sig": false, "md5_digest": "e43657cca7eca1756934153afe2aa2bc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4553, "upload_time": "2016-11-10T18:47:51", "url": "https://files.pythonhosted.org/packages/9c/cb/2228287acb2c54d235359929a8b9885cc8aa94e7ecaaa2227a83e7eb04fa/orderby-0.0.2.tar.gz" } ] }