{ "info": { "author": "Josue Kouka", "author_email": "josuebrunel@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 3", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "My Simple Dictionary Querer\n===========================\n\n.. image:: https://travis-ci.org/josuebrunel/mysdq.svg?branch=master\n :target: https://travis-ci.org/josuebrunel/mysdq\n.. image:: https://coveralls.io/repos/github/josuebrunel/MySDQ/badge.svg?branch=master\n :target: https://coveralls.io/github/josuebrunel/MySDQ?branch=master\n.. image:: http://pepy.tech/badge/mysdq\n :target: http://pepy.tech/count/mysdq\n\n\n**MySDQ** is a simple and easy *dictionary querer* with an api close to the one of *Django QuerySet* \n\nIt is meant to quickly play around with some JSON/Dict data.\n\nIt supports all operator from the *operator module* (Yes even the ones that won't work).\n\nThink *Django QuerySet* when using it.\n\n\nInstallation\n------------\n\n.. code:: python\n\n pip install mysdq\n\nQuickstart\n----------\n\nData used in here can be found in `here `_\n\n.. code:: python\n\n In [1]: import json\n In [2]: data = json.load(open('tests/users.json'))\n In [3]: from mysdq import DictQuerer\n In [4]: qs = DictQuerer(data)\n In [5]: qs.count() == 7\n Out[5]: True\n In [8]: qs.get(nickname='yloking')\n Out[8]:\n {'address': {'city': 'Paris',\n 'name': 'rue du chatea',\n 'num': 169,\n 'zipcode': '75014'},\n 'age': 25,\n 'firstname': 'yosuke',\n 'lastname': 'loking',\n 'nickname': 'yloking',\n 'profiles': [{'name': 'twitter',\n 'url': 'https://twitter.com/yloking/',\n 'username': 'yloking'},\n {'name': 'github',\n 'url': 'https://github.com/yloking/',\n 'username': 'yloking'},\n {'name': 'reddit',\n 'url': 'https://reddit.com/yloking/',\n 'username': 'yloking'}]}\n # Querying non matching entry returns None\n In [9]: qs.get(lastname='young', age__le=20)\n # Querying an entry and requesting only 2 attributes\n In [11]: qs.filter(lastname='young', age__gt=20).values('nickname', 'age')\n Out[11]: [{'age': 35, 'nickname': 'kyoung'}]\n # Querying a sub key\n In [12]: qs.filter(address__zipcode='44000').values('nickname', 'age', 'address')\n Out[12]:\n [{'address': {'city': 'Nantes',\n 'name': 'cheval blanc',\n 'num': 12,\n 'zipcode': '44000'},\n 'age': 35,\n 'nickname': 'kyoung'}]\n # Querying a item in a list\n In [13]: qs.filter(profiles__0__url__contains='kwame')\n Out[13]:\n [{'age': 24,\n 'nickname': 'kkwame',\n 'profiles': [{'name': 'twitter',\n 'url': 'https://twitter.com/kkwame/',\n 'username': 'kkwame'},\n {'name': 'github',\n 'url': 'https://github.com/kkwame/',\n 'username': 'kkwame'},\n {'name': 'reddit',\n 'url': 'https://reddit.com/kkwame/',\n 'username': 'kkwame'}]}]\n # Ordering by attribute\n In [14]: qs.order_by('age').values('nickname', 'age')\n Out[14]:\n [{'age': 15, 'nickname': 'tblack'},\n {'age': 24, 'nickname': 'kkwame'},\n {'age': 25, 'nickname': 'yloking'},\n {'age': 25, 'nickname': 'jrodriguez'},\n {'age': 28, 'nickname': 'jkouka'},\n {'age': 32, 'nickname': 'dmccrey'},\n {'age': 35, 'nickname': 'kyoung'}]\n # Grouping by attribute\n In [16]: res = qs.group_by('age')\n In [17]: assert len(res[25]) == 2\n In [18]: len(res[25])\n Out[18]: 2\n # Apply a function to an attribute\n In [19]: qs.apply(lambda x: x*2, 'age').values('nickname', 'age')\n Out[19]:\n [{'age': 30, 'nickname': 'tblack'},\n {'age': 48, 'nickname': 'kkwame'},\n {'age': 50, 'nickname': 'yloking'},\n {'age': 50, 'nickname': 'jrodriguez'},\n {'age': 56, 'nickname': 'jkouka'},\n {'age': 64, 'nickname': 'dmccrey'},\n {'age': 70, 'nickname': 'kyoung'}]\n\n\nThat's pretty much it. For more filter attribute, just check the code :wink:.", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/josuebrunel/mysdq/archive/0.4.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/josuebrunel/mysdq/", "keywords": "dictquery,queryset,dict,query", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "mysdq", "package_url": "https://pypi.org/project/mysdq/", "platform": "Any", "project_url": "https://pypi.org/project/mysdq/", "project_urls": { "Download": "https://github.com/josuebrunel/mysdq/archive/0.4.tar.gz", "Homepage": "https://github.com/josuebrunel/mysdq/" }, "release_url": "https://pypi.org/project/mysdq/0.4/", "requires_dist": null, "requires_python": "", "summary": "Simple Django queryset like dict querer", "version": "0.4" }, "last_serial": 5460408, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "10e68aa7d83378c8813b98579628f2be", "sha256": "09f319546efc881afb8e75f07ce6ec729003dc14191069010c132a84bad3225b" }, "downloads": -1, "filename": "mysdq-0.1.tar.gz", "has_sig": false, "md5_digest": "10e68aa7d83378c8813b98579628f2be", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4494, "upload_time": "2019-06-20T21:00:39", "url": "https://files.pythonhosted.org/packages/84/8a/e9456dc83822203f5ea1a2d59fbdb79b89eb192bc2779b30f122309b7765/mysdq-0.1.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "0a134ffd33ffca1f46ea98a71ba70508", "sha256": "50415cc0063a8e47d5ac9c5b909142ae4dc9c387f15353228165b00e758b61ce" }, "downloads": -1, "filename": "mysdq-0.2.tar.gz", "has_sig": false, "md5_digest": "0a134ffd33ffca1f46ea98a71ba70508", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4541, "upload_time": "2019-06-21T04:35:05", "url": "https://files.pythonhosted.org/packages/d9/5c/ffb268a3c2cf7c070a8827c6621c42a5c39db275f4609bb27fa07e843f8a/mysdq-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "fc5d7c1c2caed9ca4a1b5827436cfaac", "sha256": "79d1d8f12d8817883726d15f3f08a2f2d936d93ced0bcfb7642540fe04008b89" }, "downloads": -1, "filename": "mysdq-0.3.tar.gz", "has_sig": false, "md5_digest": "fc5d7c1c2caed9ca4a1b5827436cfaac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4614, "upload_time": "2019-06-21T09:44:10", "url": "https://files.pythonhosted.org/packages/a7/01/6a0929db42dd51ad546c6bea0b89cef7e5f4bc804fec8561bb336fd861ea/mysdq-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "2332d91ffc3f61b67c26a87d67a7e156", "sha256": "7877ae9ad500c2ee11142cb38ec427bb119221c3c2f68aefe930117193bf867b" }, "downloads": -1, "filename": "mysdq-0.4.tar.gz", "has_sig": false, "md5_digest": "2332d91ffc3f61b67c26a87d67a7e156", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4633, "upload_time": "2019-06-28T07:08:13", "url": "https://files.pythonhosted.org/packages/a0/02/40b9f53b7193d6a83e0dae69ff0478b0ffd1f55f399fe602e69d810079f1/mysdq-0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "2332d91ffc3f61b67c26a87d67a7e156", "sha256": "7877ae9ad500c2ee11142cb38ec427bb119221c3c2f68aefe930117193bf867b" }, "downloads": -1, "filename": "mysdq-0.4.tar.gz", "has_sig": false, "md5_digest": "2332d91ffc3f61b67c26a87d67a7e156", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4633, "upload_time": "2019-06-28T07:08:13", "url": "https://files.pythonhosted.org/packages/a0/02/40b9f53b7193d6a83e0dae69ff0478b0ffd1f55f399fe602e69d810079f1/mysdq-0.4.tar.gz" } ] }