{ "info": { "author": "Jay Chia", "author_email": "jaychia04@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6" ], "description": "# shoedog (WIP)\nA flexible, efficient plug-and-play query engine built on top of SQLAlchemy, inspired by GraphQL\nThis library is a work in progress!\n\n# Setting up\n```\nfrom shoedog import shoedoggify\nfrom flask import Flask\nfrom flask_sqlalchemy import SQLAlchemy\n\napp = Flask(__name__)\napp.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'\ndb = SQLAlchemy(app)\n\nshoedoggify(app, db)\n```\n\nThe above code will set up a `/shoedog` endpoint on your application that takes a `POST` request. The payload on the `POST` request is a shoedog payload, with the following syntax:\n\n```\nquery Company {\n name\n year_founded [(* > 1994 and * < 2017) or * == 2019]\n investors {\n name [any in ['gv', a16z']]\n amount_invested [all > 2000000]\n }\n contact_details (SingaporeContact) {\n address\n singapore_contact_number\n }\n}\n```\n\nThe above query will return a json response containing all instances of Company where:\n1. The year founded is between 1994 and 2017, or is exactly 2019\n2. The investors have all invested over 2,000,000 dollars\n3. The investors include at least one investor with a name that is either 'gv' or 'a16z'\n\nFurthermore, the json response has a predictable structure, returning only the fields that were requested.\n\n```\n{'companies': [{\n 'name': 'XYZ Company',\n 'year_founded': 1995,\n 'investors': [{\n 'name': 'gv',\n 'amount_invested': 2000001 \n }],\n 'contact_details': {\n 'address': '123 Foobar Road',\n 'singapore_contact_number': '+65 9635 9999'\n }\n}, ...]}\n```\n\nNotice that\n1. The `contact_details` was returned as a dictionary, since it is a different model.\n2. The `contact_details` field was cast as a `SingaporeContact`, which allows us to query for the `singapore_contact_number` field which is only on that particular subclass. This query would have failed without the cast!\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jaychia/shoedog", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "shoedog", "package_url": "https://pypi.org/project/shoedog/", "platform": "", "project_url": "https://pypi.org/project/shoedog/", "project_urls": { "Homepage": "https://github.com/jaychia/shoedog" }, "release_url": "https://pypi.org/project/shoedog/0.0.1/", "requires_dist": null, "requires_python": "", "summary": "A search tool built on SQLAlchemy", "version": "0.0.1" }, "last_serial": 5008218, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "aadacb7034263bdf6d398e505a1080f1", "sha256": "92188418d14072db366ceaf4e850ec6ffd660b3365b6b5233738a3774a6b1899" }, "downloads": -1, "filename": "shoedog-0.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "aadacb7034263bdf6d398e505a1080f1", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 20348, "upload_time": "2019-03-30T23:42:40", "url": "https://files.pythonhosted.org/packages/88/2a/4721e818ef1fa9b68293048f913acc40ba6c0fbe2feb5bd8bbcc78328197/shoedog-0.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f24f1f19664035e9716c6c264d12479f", "sha256": "19fc02b1900aee6c2b8980fc996897eb0b2c006c8d74012957b8bad204fb511d" }, "downloads": -1, "filename": "shoedog-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f24f1f19664035e9716c6c264d12479f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20320, "upload_time": "2019-03-30T23:44:20", "url": "https://files.pythonhosted.org/packages/64/1e/fa94879ecc0c4085821ffea7dc20dae285dff93af140d9c47d8ecc967352/shoedog-0.0.1-py3-none-any.whl" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "aadacb7034263bdf6d398e505a1080f1", "sha256": "92188418d14072db366ceaf4e850ec6ffd660b3365b6b5233738a3774a6b1899" }, "downloads": -1, "filename": "shoedog-0.0.1-py2-none-any.whl", "has_sig": false, "md5_digest": "aadacb7034263bdf6d398e505a1080f1", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 20348, "upload_time": "2019-03-30T23:42:40", "url": "https://files.pythonhosted.org/packages/88/2a/4721e818ef1fa9b68293048f913acc40ba6c0fbe2feb5bd8bbcc78328197/shoedog-0.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f24f1f19664035e9716c6c264d12479f", "sha256": "19fc02b1900aee6c2b8980fc996897eb0b2c006c8d74012957b8bad204fb511d" }, "downloads": -1, "filename": "shoedog-0.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f24f1f19664035e9716c6c264d12479f", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 20320, "upload_time": "2019-03-30T23:44:20", "url": "https://files.pythonhosted.org/packages/64/1e/fa94879ecc0c4085821ffea7dc20dae285dff93af140d9c47d8ecc967352/shoedog-0.0.1-py3-none-any.whl" } ] }