{ "info": { "author": "Brian O'Neill", "author_email": "twangist@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", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: Implementation :: CPython", "Topic :: Software Development :: Code Generators", "Topic :: Software Development :: Libraries", "Topic :: System :: Logging", "Topic :: Utilities" ], "description": "`log_calls` is a Python 3.3+ decorator that can print a lot of useful information\nabout calls to decorated functions, methods and properties. The decorator can\nwrite to ``stdout``, to another stream or file, or to a logger. `log_calls`\nprovides methods for writing your own debug messages, and for easily \"dumping\"\nvariables and expressions paired with their values. It can decorate individual\nfunctions, methods and properties; but it can also programmatically decorate\ncallable members of entire classes and class hierarchies, even of entire modules,\nwith just a single line \u2014 which can greatly expedite learning a new codebase.\n\nIn short, `log_calls` can save you from writing, rewriting, copying, pasting and\ntweaking a lot of ad hoc, debug-only, boilerplate code \u2014 and it can keep *your*\ncodebase free of that clutter.\n\nFor each call to a decorated function or method, `log_calls` can show you:\n\n* the caller (in fact, the complete call chain back to another `log_calls`-decorated\n caller so there are no gaps in chains displayed)\n* the arguments passed to the function or method, and any default values used\n* nesting of calls, using indentation\n* the number of the call (whether it's the 1\\ :superscript:`st` call,\n the 2\\ :superscript:`nd`, the 103\\ :superscript:`rd`, ...)\n* the return value\n* the time it took to execute\n* and more!\n\nThese and other features are optional and configurable settings, which can be\nspecified for each decorated callable via keyword parameters, as well as *en\nmasse* for a group of callables all sharing the same settings. You can examine\nand change these settings on the fly using attributes with the same names as\nthe keywords, or using a dict-like interface whose keys are the keywords.\n\n`log_calls` can also collect profiling data and statistics, accessible at runtime,\nsuch as:\n\n* the number of calls to a function\n* total time taken by the function\n* the function's entire call history (arguments, time elapsed, return values, callers,\n and more), available as text in CSV format and, if `Pandas `_\n is installed, as a `DataFrame `_.\n\nThe package contains two other decorators:\n\n* `record_history`, a stripped-down version of `log_calls`,\n only collects call history and statistics, and outputs no messages;\n* `used_unused_keywords` lets a function or method easily determine, per-call,\n which of its keyword parameters were actually supplied by the caller,\n and which received their default values.\n\nNOTE: This package requires the CPython implementation, as it makes assumptions\nabout stack frame internals which may not be valid in other interpreters.\n\nSee the documentation online at http://www.pythonhosted.org/log_calls/,\nor in the log_calls/docs/ directory, for usage, details, examples and *tips und tricks*.", "description_content_type": null, "docs_url": "https://pythonhosted.org/log_calls/", "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/Twangist/log_calls", "keywords": "decorator debugging profiling logging function method class call caller stack recursion exploring learning teaching", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "log_calls", "package_url": "https://pypi.org/project/log_calls/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/log_calls/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/Twangist/log_calls" }, "release_url": "https://pypi.org/project/log_calls/0.3.2/", "requires_dist": null, "requires_python": null, "summary": "Debugging and profiling decorator for functions and classes that logs caller name(s), args+values, execution time, and more. Eliminates reams of boilerplate code.", "version": "0.3.2" }, "last_serial": 2592614, "releases": { "0.1.14": [ { "comment_text": "", "digests": { "md5": "efaad2cdb7de1dbb33ff53908381dc2e", "sha256": "a36f4bafa6444f12fcbe53c2529fcf611efd934dba193f75d8e321eec8b1c4ae" }, "downloads": -1, "filename": "log_calls-0.1.14.tar.gz", "has_sig": false, "md5_digest": "efaad2cdb7de1dbb33ff53908381dc2e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 125936, "upload_time": "2014-11-06T09:42:57", "url": "https://files.pythonhosted.org/packages/69/4c/b6ef49415d2b2c74eb9397f0e806afd24580615921e19cf2b3fdf26426fe/log_calls-0.1.14.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "db9548a4f6a9a54614e97b491c7f4293", "sha256": "0834690613755c738baf7c9a4ec4f7a115f780ce8b274557a78ab7894d378f9d" }, "downloads": -1, "filename": "log_calls-0.2.0.tar.gz", "has_sig": false, "md5_digest": "db9548a4f6a9a54614e97b491c7f4293", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 126439, "upload_time": "2014-11-06T19:35:54", "url": "https://files.pythonhosted.org/packages/69/10/0d13a354b119a14d8f329778b5018285610acdbbdc59491c50000f2c991a/log_calls-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "082dac34011f398ddc2ad434e801b1e0", "sha256": "8364b5418b484ff57db46c1017ee7687d1124e3b26dd0381b8f2c410cdefe952" }, "downloads": -1, "filename": "log_calls-0.2.1.tar.gz", "has_sig": false, "md5_digest": "082dac34011f398ddc2ad434e801b1e0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 269578, "upload_time": "2014-11-08T03:24:23", "url": "https://files.pythonhosted.org/packages/eb/4b/6e6654e8223db48a979c65470a6b896fb34efe990245dda6ffbef7f163f4/log_calls-0.2.1.tar.gz" } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "6107201be30411b436a9d10abf85dd3a", "sha256": "7e483c3bbaf41b03714c171fa009fc464e085bb7d2181db2a0d0000c68641a28" }, "downloads": -1, "filename": "log_calls-0.2.2.tar.gz", "has_sig": false, "md5_digest": "6107201be30411b436a9d10abf85dd3a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 279045, "upload_time": "2014-11-10T07:32:48", "url": "https://files.pythonhosted.org/packages/48/27/4bd169d5dbe740fd01023ba219332d2a053af13abc4e15a109fe699f6494/log_calls-0.2.2.tar.gz" } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "3205704dfc729379db2418c31017619a", "sha256": "fa98a8d25e4137e4e4bf98f40434b0599c38d73e832e9ce82071983848a8e357" }, "downloads": -1, "filename": "log_calls-0.2.3.tar.gz", "has_sig": false, "md5_digest": "3205704dfc729379db2418c31017619a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 281366, "upload_time": "2014-11-13T08:15:18", "url": "https://files.pythonhosted.org/packages/61/98/c04cc0a5f4cea535308a119bc9c8da509b3a99ac6b9f1d7852edf3298851/log_calls-0.2.3.tar.gz" } ], "0.2.3.post1": [ { "comment_text": "", "digests": { "md5": "84463e38414ee3ca47cd844ae3cc6bb9", "sha256": "9cebfec519603829259c21a278d17ce21279f9ecb9aa350d8a7c17dfeb8d4f7b" }, "downloads": -1, "filename": "log_calls-0.2.3.post1.tar.gz", "has_sig": false, "md5_digest": "84463e38414ee3ca47cd844ae3cc6bb9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 282496, "upload_time": "2014-11-13T08:55:36", "url": "https://files.pythonhosted.org/packages/ca/28/5d7c53e0d88e96f722f449ace4d08d2f72e303f5e2a91405d25d4d1334aa/log_calls-0.2.3.post1.tar.gz" } ], "0.2.3.post2": [ { "comment_text": "", "digests": { "md5": "234e02445c9b28f7020e320890f46bf2", "sha256": "6f22dcc3642a994e75f88d079e236e52d45554349f7d68cccd56c6c29cc472d1" }, "downloads": -1, "filename": "log_calls-0.2.3.post2.tar.gz", "has_sig": false, "md5_digest": "234e02445c9b28f7020e320890f46bf2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 282516, "upload_time": "2014-11-13T09:09:08", "url": "https://files.pythonhosted.org/packages/ce/4a/d82bb55f8b888ffa79d18c6c423e5aac0a402c059bd4833c03661be2bf78/log_calls-0.2.3.post2.tar.gz" } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "0c9eb9b200673918344371d032d038d1", "sha256": "fbb818f98ce2e0370eb2af99b6b4f37ba189f810098802afd716c6d1b417baf6" }, "downloads": -1, "filename": "log_calls-0.2.4.tar.gz", "has_sig": false, "md5_digest": "0c9eb9b200673918344371d032d038d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 302646, "upload_time": "2014-11-22T03:11:06", "url": "https://files.pythonhosted.org/packages/eb/89/a2a0b396e662cfb4b3f23430d46a7b908382777ced592ed21bc04309eb7e/log_calls-0.2.4.tar.gz" } ], "0.2.4.post1": [ { "comment_text": "", "digests": { "md5": "cb169480537430c64743183998ed5857", "sha256": "f5e919835cf7c3fbb1df604dfe3c82bfbd8e1e6888130cfe544d83d5f140ee0c" }, "downloads": -1, "filename": "log_calls-0.2.4.post1.tar.gz", "has_sig": false, "md5_digest": "cb169480537430c64743183998ed5857", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 304719, "upload_time": "2014-11-23T02:59:02", "url": "https://files.pythonhosted.org/packages/38/23/d589aae383343cc5f982d859d29844bb42c1263123a63dcd92c1ac423514/log_calls-0.2.4.post1.tar.gz" } ], "0.2.4.post2": [ { "comment_text": "", "digests": { "md5": "403b51eff84a61b21bb761931713f167", "sha256": "07aac74b490c2a62834bef4daac41466002040f355c291986ed8e95a95c2bcbd" }, "downloads": -1, "filename": "log_calls-0.2.4.post2.tar.gz", "has_sig": false, "md5_digest": "403b51eff84a61b21bb761931713f167", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 307155, "upload_time": "2014-11-23T08:11:12", "url": "https://files.pythonhosted.org/packages/cc/c8/76a293408b2e3018a3da32c7176287dfc3d68ae650013addb5c7ceb66bc5/log_calls-0.2.4.post2.tar.gz" } ], "0.2.4.post4": [ { "comment_text": "", "digests": { "md5": "c9564314a2713a6a4ea2b09ef1685148", "sha256": "a030842ef88501a53c2d9d7455843da1688c72eba151b55a38a9bc8022b37f0d" }, "downloads": -1, "filename": "log_calls-0.2.4.post4.tar.gz", "has_sig": false, "md5_digest": "c9564314a2713a6a4ea2b09ef1685148", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 307213, "upload_time": "2014-11-23T20:30:35", "url": "https://files.pythonhosted.org/packages/b3/41/39a49a24a687fe116d547ef104102f41f921bbc423e0d4ec993a60fca1cc/log_calls-0.2.4.post4.tar.gz" } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "333630ab182f6ea778b6c47fc57a5b31", "sha256": "4519f1f620afa141bb31735e46689b6ba69fb76adbbf18e97740e2702bd5d8c5" }, "downloads": -1, "filename": "log_calls-0.2.5.tar.gz", "has_sig": false, "md5_digest": "333630ab182f6ea778b6c47fc57a5b31", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 457219, "upload_time": "2014-12-01T22:43:25", "url": "https://files.pythonhosted.org/packages/c7/39/0923e79c7b52523d0759126718451c2f7115926e1d13653d4c8909a07539/log_calls-0.2.5.tar.gz" } ], "0.2.5.post2": [ { "comment_text": "", "digests": { "md5": "0bb054869d3caa265e19c4ef13b183d4", "sha256": "45a38e864d9f85d40d975e7d7f970e4cbb035bf2e5421acbdb4201bf18d721ab" }, "downloads": -1, "filename": "log_calls-0.2.5.post2.tar.gz", "has_sig": false, "md5_digest": "0bb054869d3caa265e19c4ef13b183d4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 457354, "upload_time": "2014-12-01T23:28:42", "url": "https://files.pythonhosted.org/packages/56/5c/d0f09e710750692b6ff81d70e1ac39d94b538a37552d1dfca2ea2170b30b/log_calls-0.2.5.post2.tar.gz" } ], "0.2.5.post3": [ { "comment_text": "", "digests": { "md5": "5680687fe84f77262db123720525c749", "sha256": "1f5710306cc1d1fc8b7a9f5fdf66d3be22e3086a380ef41ed782590a75a489af" }, "downloads": -1, "filename": "log_calls-0.2.5.post3.tar.gz", "has_sig": false, "md5_digest": "5680687fe84f77262db123720525c749", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 457677, "upload_time": "2014-12-02T03:54:11", "url": "https://files.pythonhosted.org/packages/5f/d7/145398eac1755e885d1b86b2af0d5de7dec287a193e8efd555536975d9d7/log_calls-0.2.5.post3.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "456be05463cf929d2ed803d8b8ba240e", "sha256": "c6dcb5d61bd475083b45a9dc959312d2a955c4d35f27228b80b317d6116db0bb" }, "downloads": -1, "filename": "log_calls-0.3.0.tar.gz", "has_sig": false, "md5_digest": "456be05463cf929d2ed803d8b8ba240e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 224186, "upload_time": "2016-03-09T20:29:36", "url": "https://files.pythonhosted.org/packages/16/2d/bd0f192c78d61a5fd5a44e3983f6661d576ce197b63e93c6bb333e016e4a/log_calls-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "233fb613c5ac6913e4eaa9e9171fb7a5", "sha256": "5ec2d4f6bb4ab9a73432f3d59f6ef298020280f3b98a20ba2df5abbd20a7e522" }, "downloads": -1, "filename": "log_calls-0.3.1.tar.gz", "has_sig": false, "md5_digest": "233fb613c5ac6913e4eaa9e9171fb7a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 233626, "upload_time": "2016-05-23T23:00:18", "url": "https://files.pythonhosted.org/packages/ba/9e/69e185f7173bcec1f5be1e9b7f4e13d3670eb38d08e3535734102e77813c/log_calls-0.3.1.tar.gz" }, { "comment_text": "", "digests": { "md5": "92fc47616d16489bfe2c320049c9b96e", "sha256": "54277749c1f58a3d0be24be7059b420d40ab8d8e70d1f362044a925e0ce9ecf9" }, "downloads": -1, "filename": "log_calls-0.3.1.zip", "has_sig": false, "md5_digest": "92fc47616d16489bfe2c320049c9b96e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 278317, "upload_time": "2016-05-23T23:00:50", "url": "https://files.pythonhosted.org/packages/92/0b/0829faeddd673cbf3b5142c5de229c038f4212e67b453252f99c2c82d42a/log_calls-0.3.1.zip" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "b267bdbcda06e082c5e052fc69357554", "sha256": "8869134a93207e6098902ad097e53744c59e052206b352a2efd588f34768947c" }, "downloads": -1, "filename": "log_calls-0.3.2.tar.gz", "has_sig": false, "md5_digest": "b267bdbcda06e082c5e052fc69357554", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 232103, "upload_time": "2017-01-23T12:56:55", "url": "https://files.pythonhosted.org/packages/c5/e4/0163ac51514932824ae8962a2852ff46971aeed2e2a3dbd8717aaa8ace1a/log_calls-0.3.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b267bdbcda06e082c5e052fc69357554", "sha256": "8869134a93207e6098902ad097e53744c59e052206b352a2efd588f34768947c" }, "downloads": -1, "filename": "log_calls-0.3.2.tar.gz", "has_sig": false, "md5_digest": "b267bdbcda06e082c5e052fc69357554", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 232103, "upload_time": "2017-01-23T12:56:55", "url": "https://files.pythonhosted.org/packages/c5/e4/0163ac51514932824ae8962a2852ff46971aeed2e2a3dbd8717aaa8ace1a/log_calls-0.3.2.tar.gz" } ] }