{ "info": { "author": "Dmitri Vasilishin", "author_email": "vasilishin.d.o@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# SQLAlchemy Easy Profile\n[![Build Status](https://travis-ci.com/dmvass/sqlalchemy-easy-profile.svg?branch=master)](https://travis-ci.com/dmvass/sqlalchemy-easy-profile)\n[![image](https://img.shields.io/pypi/v/sqlalchemy-easy-profile.svg)](https://pypi.python.org/pypi/sqlalchemy-easy-profile)\n[![codecov](https://codecov.io/gh/dmvass/sqlalchemy-easy-profile/branch/master/graph/badge.svg)](https://codecov.io/gh/dmvass/sqlalchemy-easy-profile)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/dmvass/sqlalchemy-easy-profile/blob/master/LICENSE)\n\nInspired by [django-querycount](https://github.com/bradmontgomery/django-querycount),\nis a library that hooks into SQLAlchemy to collect metrics, streaming statistics into\nconsole output and help you understand where in application you have slow or redundant\nqueries.\n\n![report example](https://raw.githubusercontent.com/dmvass/sqlalchemy-easy-profile/master/images/report-example.png?raw=true)\n\n## Installation\nInstall the package with pip:\n```\npip install sqlalchemy-easy-profile\n```\n\n## Session profiler\nThe profiling session hooks into SQLAlchmey and captures query statements, duration information,\nand query parameters. You also may have multiple profiling sessions active at the same\ntime on the same or different Engines. If multiple profiling sessions are active on the\nsame engine, queries on that engine will be collected by both sessions and reported on\ndifferent reporters.\n\nYou may begin and commit a profiling session as much as you like. Calling begin on an already\nstarted session or commit on an already committed session will raise an `AssertionError`.\nYou also can use a contextmanager interface for session profiling or used it like a decorator.\nThis has the effect of only profiling queries occurred within the decorated function or inside\na manager context.\n\nHow to use `begin` and `commit`:\n```python\nfrom easy_profile import SessionProfiler\n\nprofiler = SessionProfiler()\n\nprofiler.begin()\nsession.query(User).filter(User.name == \"Arthur Dent\").first()\nprofiler.commit()\n\nprint(profiler.stats)\n```\n\nHow to use as a context manager interface:\n```python\nprofiler = SessionProfiler()\nwith profiler:\n session.query(User).filter(User.name == \"Arthur Dent\").first()\n\nprint(profiler.stats)\n```\n\nHow to use profiler as a decorator:\n```python\nprofiler = SessionProfiler()\n\nclass UsersResource:\n @profiler()\n def on_get(self, req, resp, **args, **kwargs):\n return session.query(User).all()\n```\n\nKeep in mind that profiler decorator interface accepts a special reporter and\nIf it was not defined by default will be used a base streaming reporter. Decorator\nalso accept `name` and `name_callback` optional parameters.\n\n## WSGI integration\nEasy Profiler provides a specified middleware which can prints the number of database\nqueries for each HTTP request and can be applied as a WSGI server middleware. So you\ncan easily integrate Easy Profiler into any WSGI application.\n\nHow to integrate with a Flask application:\n```python\nfrom flask import Flask\nfrom easy_profile import EasyProfileMiddleware\n\napp = Flask(__name__)\napp.wsgi_app = EasyProfileMiddleware(app.wsgi_app)\n```\n\nHow to integrate with a Falcon application: \n```python\nimport falcon\nfrom easy_profile import EasyProfileMiddleware\n\napi = application = falcon.API()\napplication = EasyProfileMiddleware(application)\n```\n\n## Testing\nTo run the tests:\n```\npython setup.py test\n```\n\nOr use `tox` for running in all tests environments.\n\n## License\nThis code is distributed under the terms of the MIT license.\n\n## Changes\nA full changelog is maintained in the [CAHNGELOG](https://github.com/dmvass/sqlalchemy-easy-profile/blob/master/CHANGELOG.md) file.\n\n## Contributing \n**sqlalchemy-easy-profile** is an open source project and contributions are\nwelcome! Check out the [Issues](https://github.com/dmvass/sqlalchemy-easy-profile/issues)\npage to see if your idea for a contribution has already been mentioned, and feel\nfree to raise an issue or submit a pull request.\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/dmvass/sqlalchemy-easy-profile", "keywords": "sqlalchemy,easy,profile,profiler,profiling", "license": "", "maintainer": "", "maintainer_email": "", "name": "sqlalchemy-easy-profile", "package_url": "https://pypi.org/project/sqlalchemy-easy-profile/", "platform": "", "project_url": "https://pypi.org/project/sqlalchemy-easy-profile/", "project_urls": { "Homepage": "https://github.com/dmvass/sqlalchemy-easy-profile" }, "release_url": "https://pypi.org/project/sqlalchemy-easy-profile/1.0.2/", "requires_dist": [ "sqlalchemy (<1.4,>=1.1)", "sqlparse (>=0.3.0)", "tox ; extra == 'dev'", "bumpversion ; extra == 'dev'" ], "requires_python": "", "summary": "An easy profiler for SQLAlchemy queries", "version": "1.0.2" }, "last_serial": 5107010, "releases": { "0.3.10": [ { "comment_text": "", "digests": { "md5": "8780a4be9694489741f294afba745c66", "sha256": "5ffc9af11b62caa2281c37cffeba5e81640eb3116c58c00db17f862c9b6a95f5" }, "downloads": -1, "filename": "sqlalchemy_easy_profile-0.3.10-py3-none-any.whl", "has_sig": false, "md5_digest": "8780a4be9694489741f294afba745c66", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8652, "upload_time": "2018-11-07T22:57:09", "url": "https://files.pythonhosted.org/packages/13/56/c0053e49c043b56417d21c4a8ce11188a7a913538d916af02eb3bb829538/sqlalchemy_easy_profile-0.3.10-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4eb2413a315aaeacd77872c51093c65f", "sha256": "a202118b609962077778d4419d2e27f72a3462401015f024427ee425ed0e5a37" }, "downloads": -1, "filename": "sqlalchemy-easy-profile-0.3.10.tar.gz", "has_sig": false, "md5_digest": "4eb2413a315aaeacd77872c51093c65f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6485, "upload_time": "2018-11-07T22:57:10", "url": "https://files.pythonhosted.org/packages/cd/be/6b6c851f326e8436f66ac22184413d7c831a45c2a82f9100d6d09c34f92b/sqlalchemy-easy-profile-0.3.10.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "776def5d5f495a1714ebf3dd0ce9d494", "sha256": "361e3e22e3199550d87b5acc98baa282609d77222baf7b3595987e3e004c6db7" }, "downloads": -1, "filename": "sqlalchemy_easy_profile-0.3.3-py3-none-any.whl", "has_sig": false, "md5_digest": "776def5d5f495a1714ebf3dd0ce9d494", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8639, "upload_time": "2018-11-07T22:04:59", "url": "https://files.pythonhosted.org/packages/51/c5/1ba6feea414d897a3b75ccc28f24a823cec6ca0328fd735e417083eb4e3d/sqlalchemy_easy_profile-0.3.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fdc34d8899d793cb86975175e7905557", "sha256": "529ddfe933f4a091f7ed3d6f7031d99f67c7090b60132d970ec5a5404eb8dfc5" }, "downloads": -1, "filename": "sqlalchemy-easy-profile-0.3.3.tar.gz", "has_sig": false, "md5_digest": "fdc34d8899d793cb86975175e7905557", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6526, "upload_time": "2018-11-07T22:05:01", "url": "https://files.pythonhosted.org/packages/71/e7/404efc9786c97cb928585e613b5af81621be4d90ddb938726ec4febc2020/sqlalchemy-easy-profile-0.3.3.tar.gz" } ], "0.3.9": [ { "comment_text": "", "digests": { "md5": "18069b8b178c8d3c2f6477b1456661cb", "sha256": "e041a9c947b1aab4d3ce4fbcb265ba3d3879f095ae31752b6ca92788535cfad0" }, "downloads": -1, "filename": "sqlalchemy_easy_profile-0.3.9-py2-none-any.whl", "has_sig": false, "md5_digest": "18069b8b178c8d3c2f6477b1456661cb", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 8639, "upload_time": "2018-11-07T22:42:01", "url": "https://files.pythonhosted.org/packages/7c/53/5290f9fe3b3f49d58644990103c0921da9c6718572dd70b3d6df0b5be63f/sqlalchemy_easy_profile-0.3.9-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "ad141a8e8fe056afb0e51376ee1c0e3a", "sha256": "ee82fe2fa9a34bac6a1965e4697e8f33424a02f3883d4c77658146eb862ecb9d" }, "downloads": -1, "filename": "sqlalchemy_easy_profile-0.3.9-py3-none-any.whl", "has_sig": false, "md5_digest": "ad141a8e8fe056afb0e51376ee1c0e3a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8637, "upload_time": "2018-11-07T22:42:46", "url": "https://files.pythonhosted.org/packages/f2/3e/68b3a87b03c0d5bdd45360585fa4e3663f5704f6a10a73e8369217b07b9c/sqlalchemy_easy_profile-0.3.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d3b1648ab4ddc9b13cbc443a94be53eb", "sha256": "90c2083e91ab56eb45afd2ea1f167d6d90b2290e621c15af24e78e305656a39e" }, "downloads": -1, "filename": "sqlalchemy-easy-profile-0.3.9.tar.gz", "has_sig": false, "md5_digest": "d3b1648ab4ddc9b13cbc443a94be53eb", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6491, "upload_time": "2018-11-07T22:42:02", "url": "https://files.pythonhosted.org/packages/a0/2c/c39511dcd7264a39284e3f645674a97c694b26299eaacff2286cfca5423f/sqlalchemy-easy-profile-0.3.9.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "d2f9a88f7e989de0a0a23c94eddffb27", "sha256": "78702737459d60c7bd4227f371447430471e7a110a8fceb5d5f9c933ecd2731a" }, "downloads": -1, "filename": "sqlalchemy_easy_profile-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d2f9a88f7e989de0a0a23c94eddffb27", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10139, "upload_time": "2018-11-08T21:16:53", "url": "https://files.pythonhosted.org/packages/e0/8d/54a3c3d55915a4a73df9d45b75da438e3d3a028ac8f7877e693e2cb12ad0/sqlalchemy_easy_profile-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c66987781ee95eafc8b6dce764d0cfa2", "sha256": "f26f855cffc872772d0e6b087a56510bd30e141f65a4145010fbdc081ffe4e80" }, "downloads": -1, "filename": "sqlalchemy-easy-profile-0.4.0.tar.gz", "has_sig": false, "md5_digest": "c66987781ee95eafc8b6dce764d0cfa2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7970, "upload_time": "2018-11-08T21:16:54", "url": "https://files.pythonhosted.org/packages/09/ee/75efcf3af9151c233cc9c3eb0a357c10232a8b36fdc2e34b0b7181e5a9c8/sqlalchemy-easy-profile-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "83b9b2620b5a1d3a0bd3dffea5c813eb", "sha256": "bc9ab8e0bcf810640dbee0dc602cf3587097365f51a426ac2100b4051df73205" }, "downloads": -1, "filename": "sqlalchemy_easy_profile-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "83b9b2620b5a1d3a0bd3dffea5c813eb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10155, "upload_time": "2018-11-08T21:26:28", "url": "https://files.pythonhosted.org/packages/85/c6/f4850f2264017d8096aeaffdffd9cbec2110b8bdf5fa9a576d6a054c9eec/sqlalchemy_easy_profile-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "858925757a9b833f2ffa648b7ad533c2", "sha256": "e6693b7b97689006da3970a4deb14b7eb8352edd3fa942aab7eab2ee17637fdf" }, "downloads": -1, "filename": "sqlalchemy-easy-profile-0.4.1.tar.gz", "has_sig": false, "md5_digest": "858925757a9b833f2ffa648b7ad533c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7987, "upload_time": "2018-11-08T21:26:29", "url": "https://files.pythonhosted.org/packages/1f/7a/390aa8f36dd2fae3da53a91f3c01d4cae385dde45926c5a556d447700df0/sqlalchemy-easy-profile-0.4.1.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "061db7509d076339db7a1efb5345909d", "sha256": "1c7a7624166cfb0a3d28ea320eae9110cdc9e9f90fe9849fdb4525ae03cf0205" }, "downloads": -1, "filename": "sqlalchemy_easy_profile-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "061db7509d076339db7a1efb5345909d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10158, "upload_time": "2018-11-12T18:18:39", "url": "https://files.pythonhosted.org/packages/a5/52/1a8374d99b6599c84c90fa9356cb807676b5e9383cdde7008a9b40244dd7/sqlalchemy_easy_profile-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "eee568e7336ba94048e3439924fd50ad", "sha256": "4c44394c153f4a1aa9de1f9d2698db1da8c4dacc513df53d413978d68a4b229b" }, "downloads": -1, "filename": "sqlalchemy-easy-profile-0.5.0.tar.gz", "has_sig": false, "md5_digest": "eee568e7336ba94048e3439924fd50ad", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7986, "upload_time": "2018-11-12T18:18:40", "url": "https://files.pythonhosted.org/packages/f0/89/a6ff693c1c9e789b59e55a104865ba27d96909687b52d879ec09f80eedda/sqlalchemy-easy-profile-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "427b5a492649533abe7af8c5d0df9da7", "sha256": "56cf9ba62c4f724605eaaf25adacb384d8e87eb3a7c5ff2a883074315e021a79" }, "downloads": -1, "filename": "sqlalchemy_easy_profile-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "427b5a492649533abe7af8c5d0df9da7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10172, "upload_time": "2018-11-12T18:25:15", "url": "https://files.pythonhosted.org/packages/e3/2f/3c0402820060e0b201c3df7b9f3594915bea1840f49c0db6866aff23f6c4/sqlalchemy_easy_profile-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8a9cbe9036d7df556441d8d35f320cc4", "sha256": "a91616c74e792e1db8f1507384bba076b92ca31386d4db5a0f1eb69ff5535966" }, "downloads": -1, "filename": "sqlalchemy-easy-profile-0.5.1.tar.gz", "has_sig": false, "md5_digest": "8a9cbe9036d7df556441d8d35f320cc4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8006, "upload_time": "2018-11-12T18:25:16", "url": "https://files.pythonhosted.org/packages/5a/b7/0138f4d749f217e663c609f1efe15865a0954e834ecd9581892317e5965c/sqlalchemy-easy-profile-0.5.1.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "a77281445ac420d79fc1a08eb08c3994", "sha256": "3a16af2618bc567416f1839c8cf7d97ce1aba0c7e44ada1e907325e9ab2fc7e4" }, "downloads": -1, "filename": "sqlalchemy_easy_profile-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "a77281445ac420d79fc1a08eb08c3994", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9912, "upload_time": "2019-03-25T19:15:26", "url": "https://files.pythonhosted.org/packages/d0/ab/4780a32056640fa90373c1d1b55be5e9869b7ed115eb149b06c92cd166b2/sqlalchemy_easy_profile-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4bfed45f88576f35f41f4be4245999f6", "sha256": "47827dcc41e04c000262d299ef4f3da0af1fb20645e50f2b8bf5ea26993a98f6" }, "downloads": -1, "filename": "sqlalchemy-easy-profile-1.0.0.tar.gz", "has_sig": false, "md5_digest": "4bfed45f88576f35f41f4be4245999f6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8688, "upload_time": "2019-03-25T19:15:27", "url": "https://files.pythonhosted.org/packages/0d/84/819a472cab564f2d59f420d4fe99729531fdcf5573c70ad78619fcff66f4/sqlalchemy-easy-profile-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "f43b694236b70418403edf651f334006", "sha256": "6e9a575034b0815371c3f5363534c35147a84bb3b154039269dfdfb00a75167e" }, "downloads": -1, "filename": "sqlalchemy_easy_profile-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "f43b694236b70418403edf651f334006", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10001, "upload_time": "2019-04-04T09:48:03", "url": "https://files.pythonhosted.org/packages/ea/f6/523226999cae828f82cb8e8346a8065928da4f9195c7c122e40550b846f7/sqlalchemy_easy_profile-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "46b9749fe3ac5a68ac6612ae6850b156", "sha256": "3d2794b54fec92d9786b213481c8afa549221fc4929a311385c5bf49108fb831" }, "downloads": -1, "filename": "sqlalchemy-easy-profile-1.0.1.tar.gz", "has_sig": false, "md5_digest": "46b9749fe3ac5a68ac6612ae6850b156", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8737, "upload_time": "2019-04-04T09:48:05", "url": "https://files.pythonhosted.org/packages/84/f5/c85b01e90ab6f1a7db8d4754f57604d9e872eb2499c9973dae44cb802163/sqlalchemy-easy-profile-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "05f1e3af3d97766d29cf619e75bc6c79", "sha256": "831905516d2223278af7a6a572b0a6deacf294a79c01303f9ec4f022966ce62f" }, "downloads": -1, "filename": "sqlalchemy_easy_profile-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "05f1e3af3d97766d29cf619e75bc6c79", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10001, "upload_time": "2019-04-06T10:45:57", "url": "https://files.pythonhosted.org/packages/d3/1e/5de08d211074ac13a5d206c78e49d6916a658a2595bb7f45e225f550c228/sqlalchemy_easy_profile-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "505d7e1cf985511f3cbd0f31444758d5", "sha256": "d056a8cc3ca832e17253683cb33e95952cbcae87c78097935453a62d24e16bed" }, "downloads": -1, "filename": "sqlalchemy-easy-profile-1.0.2.tar.gz", "has_sig": false, "md5_digest": "505d7e1cf985511f3cbd0f31444758d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8726, "upload_time": "2019-04-06T10:45:59", "url": "https://files.pythonhosted.org/packages/d2/fc/bb48d0f249707bbce2fa465d0fe23a5f14969c3f4ab6b9695b29a0e9072b/sqlalchemy-easy-profile-1.0.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "05f1e3af3d97766d29cf619e75bc6c79", "sha256": "831905516d2223278af7a6a572b0a6deacf294a79c01303f9ec4f022966ce62f" }, "downloads": -1, "filename": "sqlalchemy_easy_profile-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "05f1e3af3d97766d29cf619e75bc6c79", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10001, "upload_time": "2019-04-06T10:45:57", "url": "https://files.pythonhosted.org/packages/d3/1e/5de08d211074ac13a5d206c78e49d6916a658a2595bb7f45e225f550c228/sqlalchemy_easy_profile-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "505d7e1cf985511f3cbd0f31444758d5", "sha256": "d056a8cc3ca832e17253683cb33e95952cbcae87c78097935453a62d24e16bed" }, "downloads": -1, "filename": "sqlalchemy-easy-profile-1.0.2.tar.gz", "has_sig": false, "md5_digest": "505d7e1cf985511f3cbd0f31444758d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8726, "upload_time": "2019-04-06T10:45:59", "url": "https://files.pythonhosted.org/packages/d2/fc/bb48d0f249707bbce2fa465d0fe23a5f14969c3f4ab6b9695b29a0e9072b/sqlalchemy-easy-profile-1.0.2.tar.gz" } ] }