{ "info": { "author": "Andrea Spadaccini", "author_email": "andrea.spadaccini@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Topic :: Scientific/Engineering :: Visualization", "Topic :: Software Development :: Documentation" ], "description": "# cmd-call-graph\n\n[![Build Status](https://dev.azure.com/cmd-call-graph/cmd-call-graph/_apis/build/status/Microsoft.cmd-call-graph?branchName=master)](https://dev.azure.com/cmd-call-graph/cmd-call-graph/_build/latest?definitionId=1?branchName=master)\n[![PyPI](https://img.shields.io/pypi/v/cmd-call-graph.svg)](https://pypi.org/project/cmd-call-graph/)\n\nA simple tool to generate a call graph for calls within Windows CMD (batch) files.\n\nThe tool is available on PyPI: https://pypi.org/project/cmd-call-graph/\n\nBy default, it takes the input file as stdin and outputs the resulting file\nto stdout, outputting logs and errors to stderr.\n\n## Output Examples\n\nGiven the following CMD script:\n\n```\n@echo off\ncall :foo\ngoto :eof\n:bar\n echo \"in bar\"\n call :baz\n call :baz\n:baz\n echo \"in baz\"\n call powershell.exe Write-Host \"Hello World from PowerShell\"\n\n:foo\n echo \"In foo\"\n goto :bar\n```\n\nThis script would generate the following graph:\n\n![call graph](https://github.com/Microsoft/cmd-call-graph/raw/master/examples/example1-nodestats.png)\n\nIf the `--hide-node-stats` option is enabled, then the following graph would be generated:\n\n![call graph showall](https://github.com/Microsoft/cmd-call-graph/raw/master/examples/example1.png)\n\n## Invocation Examples\n\nInvocation example for Ubuntu Linux and WSL (Windows Subsystem for Linux), assumes\nPython and `pip` are installed:\n\n```bash\n$ pip install cmd-call-graph\n$ cmd-call-graph < your-file.cmd > your-file-call-graph.dot 2>log\n```\n\nThe resulting `dot` file can be rendered with any `dot` renderer. Example with\ngraphviz (`VIEWER` could be `explorer.exe` under Windows):\n\n```bash\n$ sudo apt install graphviz\n$ dot -Tpng your-file-call-graph.dot > your-file-call-graph.png\n$ $VIEWER your-file-call-graph.png\n```\n\nExample with PowerShell:\n\n```powershell\nPS C:\\> choco install graphviz python3 pip\nPS C:\\> cmd-call-graph.exe -i your-file.cmd -o your-file-call-graph.dot\nPS C:\\> dot.exe -Tpng your-file-call-graph.dot -O\nPS C:\\> explorer.exe your-file-call-graph.dot.png\n```\n\n## Types of entities represented\n\nThe script analyzes CMD scripts, and represents each block of text under a given label as a *node* in\nthe call graph.\n\n### Node properties\n\nEach node always contains the line number where it starts, except if the node is never defined in the code,\nwhich can happen in case of programming errors, dynamic node names (e.g., `%command%`) and the `eof` pseudo-node.\n\nIf a node causes the program to exit, it is marked as `terminating`.\n\nIf `--show-node-stats` is set, extra stats about each node are displayed, if present:\n\n* number of lines of code (`LOC`);\n* number of external calls.\n\n### Special nodes\n\nThere are 2 special nodes:\n\n* `_begin_` is a pseudo-node inserted at the start of each call graph, which represents the start of the\n script, which is by definition without a label;\n* `eof`, which may or may not be a pseudo-node. In CMD, `eof` is a special node that is used as target\n of `goto` to indicate that the current \"subroutine\" should terminate, or the whole program should\n terminate if the call stack is empty.\n\nThe `eof` node is automatically removed if it's a pseudo-node and it's not reached via `call` or `nested`\nconnections.\n\nThe `_begin_` pseudo-node is removed if there is another node starting at line 1.\n\n### Types of connections\n\n * `goto`: if an edge of type `goto` goes from `A` to `B`, it means that in the code within the label `A`\n there is an instruction in the form `goto :B`.\n * `call`: if an edge of type `call` goes from `A` to `B`, it means that in the code within the label `A`\n there is an instruction in the form `call :B`.\n * `nested`: if an edge of type `nested` goes from `A` to `B`, it means that in the code within the label `A`\n ends directly where `B` starts, and there is no `goto` or `exit` statement at the end of `A` which would\n prevent the execution from not going into `B` as `A` ends.\n\nExample of a `nested` connection:\n\n```\nA:\n echo \"foo\"\n echo \"bar\"\nB:\n echo \"baz\"\n```\n\nThe above code would lead to a `nested` connection between `A` and `B`.\n\n## Command-line options\n\nThe input file needs to be passed as an argument.\n\n* `--simplify-calls`: create one edge for each type of connection instead of creating one for each\n individual `call`/`goto` (which is the default). Leads to a simpler but less accurate graph;\n* `--hide-node-stats`: removes from each node additional information about itself (i.e., number\n of lines of code, number of external calls);\n* `--nodes-to-hide`: hides the list of nodes passed as a space-separated list after this parameter.\n* `-v` or `--verbose`: enable debug output, which will be sent to the log file;\n* `-l` or `--log-file`: name of the log file. If not specified, the standard error file is used;\n* `-o` or `--output`: name of the output file. If not specified, the standard output file is used.\n\n## Legend for Output Graphs\n\nThe graphs are self-explanatory: all information is codified with descriptive labels, and there is no\ninformation conveyed only with color or other types of non-text graphical hint.\n\nColors are used to make the graph easier to follow, but no information is conveyed only with color.\n\nHere is what each color means in the graph:\n\n * Orange: `goto` connection;\n * Blue: `call` connection;\n * Teal: `nested` connection;\n * Light gray: background for terminating nodes\n\n## Why?\nSometimes legacy code bases may contain old CMD files. This tool allows to\ngenerate a visual representation of the internal calls within the script.\n\n## Contributing\n\nThis project welcomes contributions and suggestions. Most contributions require you to agree to a\nContributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us\nthe rights to use your contribution. For details, visit https://cla.microsoft.com.\n\nWhen you submit a pull request, a CLA-bot will automatically determine whether you need to provide\na CLA and decorate the PR appropriately (e.g., label, comment). Simply follow the instructions\nprovided by the bot. You will only need to do this once across all repos using our CLA.\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).\nFor more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or\ncontact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.\n\n## Unit tests\nRun unit tests from the project root either with the built-in `unittest` module:\n\n python -m unittest discover\n\nOr by using `pytests`, which can produce reports both for unit test success and for code coverage, by\nusing the following invocation:\n\n pip install pytest\n pip install pytest-cov\n pytest tests --doctest-modules --junitxml=junit/test-results.xml --cov=callgraph --cov-report=xml --cov-report=html\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/Microsoft/cmd-call-graph", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "cmd-call-graph", "package_url": "https://pypi.org/project/cmd-call-graph/", "platform": "", "project_url": "https://pypi.org/project/cmd-call-graph/", "project_urls": { "Homepage": "https://github.com/Microsoft/cmd-call-graph" }, "release_url": "https://pypi.org/project/cmd-call-graph/1.2.1/", "requires_dist": null, "requires_python": "", "summary": "A simple tool to generate a call graph for calls within Windows CMD (batch) files.", "version": "1.2.1", "yanked": false, "yanked_reason": null }, "last_serial": 6098439, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "d3cd07fbb97c12b9f54bd101460348e1", "sha256": "c72a516fe25786397d5312ed6352feae9c2b417b2202a767aea999e4ab5d22ff" }, "downloads": -1, "filename": "cmd_call_graph-0.1-py2.7.egg", "has_sig": false, "md5_digest": "d3cd07fbb97c12b9f54bd101460348e1", "packagetype": "bdist_egg", "python_version": "2.7", "requires_python": null, "size": 7722, "upload_time": "2018-11-18T17:50:56", "upload_time_iso_8601": "2018-11-18T17:50:56.593888Z", "url": "https://files.pythonhosted.org/packages/5f/96/457837815ac5e45e11c33e2092c4c4a885d40bc5dd424f129daf036ac83d/cmd_call_graph-0.1-py2.7.egg", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "0c780b7ba0edb0c5b849e846466b3fdf", "sha256": "8b50a01bce4b9820d151056583dd1b84017f3f6f27d2838ad8a23114e8778572" }, "downloads": -1, "filename": "cmd_call_graph-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "0c780b7ba0edb0c5b849e846466b3fdf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5943, "upload_time": "2018-11-18T17:50:53", "upload_time_iso_8601": "2018-11-18T17:50:53.398442Z", "url": "https://files.pythonhosted.org/packages/7e/c8/3e697f4fa5e38978c149e8f52ba728fc0dea1327da0391505598b72d76fe/cmd_call_graph-0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "62822ac31579ec832a2e84d31d1fee50", "sha256": "8406200103008ec84fdbeef8ea4c4aeda2271c66571783acf1faa67f021fbfc7" }, "downloads": -1, "filename": "cmd-call-graph-0.1.tar.gz", "has_sig": false, "md5_digest": "62822ac31579ec832a2e84d31d1fee50", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4478, "upload_time": "2018-11-18T17:50:55", "upload_time_iso_8601": "2018-11-18T17:50:55.227582Z", "url": "https://files.pythonhosted.org/packages/3b/2e/6591969e1f9cd19adcd5b1ff85b42fc6e908bb277ab6a193fec931e88b01/cmd-call-graph-0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "863c82a0fc5d839ff4a0a0422ce5df08", "sha256": "0f9f98ac0f6b7cf0b3eddc3d82949d573b214016c1081afd6cae30a2a3f867b7" }, "downloads": -1, "filename": "cmd_call_graph-0.1.1-py2-none-any.whl", "has_sig": false, "md5_digest": "863c82a0fc5d839ff4a0a0422ce5df08", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": ">=2.7, >=3.2", "size": 7202, "upload_time": "2018-11-18T18:10:36", "upload_time_iso_8601": "2018-11-18T18:10:36.658515Z", "url": "https://files.pythonhosted.org/packages/b1/5d/615666f22f9b184913a2fd639b0da60845699bb85f04405958d2a8c9e5c5/cmd_call_graph-0.1.1-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "52f95658ffff912f1dd0532bcbf84a10", "sha256": "7c7432ab53329c22b6a7aa4a3bfe46d4c3bef3b4c1f2523eabb50a6f1737d742" }, "downloads": -1, "filename": "cmd_call_graph-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "52f95658ffff912f1dd0532bcbf84a10", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7, >=3.2", "size": 5991, "upload_time": "2018-11-18T18:11:18", "upload_time_iso_8601": "2018-11-18T18:11:18.257936Z", "url": "https://files.pythonhosted.org/packages/39/bf/ffd9633e66d5985eecc5d6116c0a220e42e3ae6eb42953d03b63253d6a0a/cmd_call_graph-0.1.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "17868aa8062fe7799c1a0b38c57e8d9e", "sha256": "2c477b106a9be99933f81a551f00602774426918613c034fe19ecc219a3e2c49" }, "downloads": -1, "filename": "cmd-call-graph-0.1.1.tar.gz", "has_sig": false, "md5_digest": "17868aa8062fe7799c1a0b38c57e8d9e", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, >=3.2", "size": 4512, "upload_time": "2018-11-18T18:10:38", "upload_time_iso_8601": "2018-11-18T18:10:38.158473Z", "url": "https://files.pythonhosted.org/packages/23/46/7ea98a668e57ac555641b5d3d603b7232dd233983a7809e2605d8e4ae84a/cmd-call-graph-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "71ec9d429ef9184a85ba790bd18793d5", "sha256": "f1787186bde250d0fa0efd456addb50a82ba362c49de41123230f15e1d581be2" }, "downloads": -1, "filename": "cmd_call_graph-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "71ec9d429ef9184a85ba790bd18793d5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=2.7, >=3.2", "size": 5992, "upload_time": "2018-11-18T18:12:01", "upload_time_iso_8601": "2018-11-18T18:12:01.763036Z", "url": "https://files.pythonhosted.org/packages/ac/ec/0fa16db9a53c259a1777aefb9f6880e93981c06b9137d0eae9d2e1d91a75/cmd_call_graph-0.1.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "d0c5e19a210a122dbe66464cda274e17", "sha256": "ced17a2b67d1d5c78a464a1373dc8d12529aad6cc26d050f3b6ac71e4fc287ec" }, "downloads": -1, "filename": "cmd-call-graph-0.1.2.tar.gz", "has_sig": false, "md5_digest": "d0c5e19a210a122dbe66464cda274e17", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, >=3.2", "size": 4507, "upload_time": "2018-11-18T18:12:03", "upload_time_iso_8601": "2018-11-18T18:12:03.604429Z", "url": "https://files.pythonhosted.org/packages/47/5e/4adf8f6d70ca5b3731a73a4856cdaa5d577d901c2761997b33984e322dd4/cmd-call-graph-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2": [ { "comment_text": "", "digests": { "md5": "37ba5ea34dbf5c7089c5cd93c27089cb", "sha256": "aa4ccfd182862bd64675e8ad1a4703a08f5f369e538fdeed350054c1bfc49d01" }, "downloads": -1, "filename": "cmd_call_graph-0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "37ba5ea34dbf5c7089c5cd93c27089cb", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7437, "upload_time": "2018-12-06T17:05:05", "upload_time_iso_8601": "2018-12-06T17:05:05.351524Z", "url": "https://files.pythonhosted.org/packages/34/0c/c305110f039062a96a7c3a1abdb0a6262c28455b660ccf068a36014f7218/cmd_call_graph-0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a326815e11e6ef8f4dbd80f09e0f2fa0", "sha256": "3997a479152d60b4ebe91eeebd6fc9d34721b843d29835bcffa3bafe99e567ab" }, "downloads": -1, "filename": "cmd-call-graph-0.2.tar.gz", "has_sig": false, "md5_digest": "a326815e11e6ef8f4dbd80f09e0f2fa0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6016, "upload_time": "2018-12-06T17:05:07", "upload_time_iso_8601": "2018-12-06T17:05:07.406448Z", "url": "https://files.pythonhosted.org/packages/70/57/968c3cd17a0b47ccd9d7fef1650789b6684d0140bb9c433afb80686899aa/cmd-call-graph-0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3": [ { "comment_text": "", "digests": { "md5": "1d0cd73f32b1bcc80298fbcfa78345ae", "sha256": "4f24ad6e909215b355433f107390b4ce2b4ac17eca5f3fdee4e0fd04cb3883c4" }, "downloads": -1, "filename": "cmd_call_graph-0.3-py2-none-any.whl", "has_sig": false, "md5_digest": "1d0cd73f32b1bcc80298fbcfa78345ae", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 8875, "upload_time": "2018-12-08T10:20:54", "upload_time_iso_8601": "2018-12-08T10:20:54.375165Z", "url": "https://files.pythonhosted.org/packages/60/ba/d57eb4a9fa24d45e7ab3d7788792b445c91501352cffcc2c9a6c74b9f741/cmd_call_graph-0.3-py2-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2b54a2e8bf9e00f4ed424f26cd490af2", "sha256": "ec44f71c293a8dc26db077c3157cdac7fe08e4e112faa9a36859938f03921e43" }, "downloads": -1, "filename": "cmd_call_graph-0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "2b54a2e8bf9e00f4ed424f26cd490af2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7575, "upload_time": "2018-12-08T10:20:55", "upload_time_iso_8601": "2018-12-08T10:20:55.799879Z", "url": "https://files.pythonhosted.org/packages/3e/c5/ee93f57d8d6e1da8cc0a2ee45214af85e3ab2fca8330d9825bdec1f08255/cmd_call_graph-0.3-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "eb468e806c2204d87d94df530bf0a88a", "sha256": "6d75d28cc803c14b45f424b91f830e2e5752e13728b5b4e41f46c1dabde66d2b" }, "downloads": -1, "filename": "cmd-call-graph-0.3.tar.gz", "has_sig": false, "md5_digest": "eb468e806c2204d87d94df530bf0a88a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6141, "upload_time": "2018-12-08T10:20:59", "upload_time_iso_8601": "2018-12-08T10:20:59.526442Z", "url": "https://files.pythonhosted.org/packages/41/ce/48a134ade2dcc7402ddaae56b5cc0c3161abd6dcff72eb9bd98f2a5dd9fe/cmd-call-graph-0.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4": [ { "comment_text": "", "digests": { "md5": "bc8e32d01d5057ad03024b83a58eca6e", "sha256": "ff64c6a214f5537e76a60c83941c93fd2d60d7fc90dc1bf6430b6a5d6249f0b6" }, "downloads": -1, "filename": "cmd_call_graph-0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "bc8e32d01d5057ad03024b83a58eca6e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9080, "upload_time": "2018-12-12T11:36:33", "upload_time_iso_8601": "2018-12-12T11:36:33.525738Z", "url": "https://files.pythonhosted.org/packages/80/fb/a151f6ff2f455d5113611275759abc62c6f510e88bda91f90e63da409450/cmd_call_graph-0.4-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "2b6caf82f654fa7e171a0d52938e30ac", "sha256": "68c75f2fdf42317031a1d3462427b66fbdf9dc92204546989cb1e31b1a400bec" }, "downloads": -1, "filename": "cmd-call-graph-0.4.tar.gz", "has_sig": false, "md5_digest": "2b6caf82f654fa7e171a0d52938e30ac", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6189, "upload_time": "2018-12-12T11:36:35", "upload_time_iso_8601": "2018-12-12T11:36:35.099328Z", "url": "https://files.pythonhosted.org/packages/93/b0/8918c9ee2aa86d30d9190370f0b6ee6394f81e3dedd822b4bb1534667168/cmd-call-graph-0.4.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "6d4f10338f8c4e2f9494929e3edfa21e", "sha256": "7fb6427af6dbd0ed65204868b62a9a0e882d753fba3783ba573fc927dcb05e2a" }, "downloads": -1, "filename": "cmd_call_graph-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "6d4f10338f8c4e2f9494929e3edfa21e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8385, "upload_time": "2018-12-17T14:11:55", "upload_time_iso_8601": "2018-12-17T14:11:55.401251Z", "url": "https://files.pythonhosted.org/packages/b5/c9/d2c07b4bf56c1995855c16042c514430cbd28af43b8047632aed663a2d2a/cmd_call_graph-1.0.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "87db6ac384adf6f9ae97ed853af90d2d", "sha256": "b244824b2dafa87e1abe2f8fadb63a112b8e7082b89c05fbd3e4b154ca5a9898" }, "downloads": -1, "filename": "cmd-call-graph-1.0.0.tar.gz", "has_sig": false, "md5_digest": "87db6ac384adf6f9ae97ed853af90d2d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7029, "upload_time": "2018-12-17T14:11:56", "upload_time_iso_8601": "2018-12-17T14:11:56.917852Z", "url": "https://files.pythonhosted.org/packages/c3/9a/e092772150f41c1685fb588f5862596659c34bcc13161b7cc1269f53308d/cmd-call-graph-1.0.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "da9d51d3fb536724bcfdbc1729e125a7", "sha256": "8fd4cbe4a8ef8174126485bf95eaa6bd33f1badddb5f08ef15e9a77801b57973" }, "downloads": -1, "filename": "cmd_call_graph-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "da9d51d3fb536724bcfdbc1729e125a7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11443, "upload_time": "2019-01-09T11:23:33", "upload_time_iso_8601": "2019-01-09T11:23:33.167969Z", "url": "https://files.pythonhosted.org/packages/f3/5d/bf25e7fa3dd3abae3ca542ebd10ad9c81a2ee37deb7d5b1856a5c8002fe6/cmd_call_graph-1.0.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "bdc65f8a7c5cf133e6bffaf0570da336", "sha256": "812e9f9fa65f3742b72636f3091a753d565a06718a246357c33f8ce5371bfc53" }, "downloads": -1, "filename": "cmd-call-graph-1.0.1.tar.gz", "has_sig": false, "md5_digest": "bdc65f8a7c5cf133e6bffaf0570da336", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9747, "upload_time": "2019-01-09T11:23:34", "upload_time_iso_8601": "2019-01-09T11:23:34.211631Z", "url": "https://files.pythonhosted.org/packages/5f/0c/a37322146880e697d761c29d2f2c1706b37a7b48d9ad12b39701433475f6/cmd-call-graph-1.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "5e72457a7309773fc794fd3f432fe7b6", "sha256": "177421e2495390336f81dda6371acdad6eb24b09ae485b81ad3a7d06077d5146" }, "downloads": -1, "filename": "cmd_call_graph-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "5e72457a7309773fc794fd3f432fe7b6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11534, "upload_time": "2019-01-09T11:52:30", "upload_time_iso_8601": "2019-01-09T11:52:30.181898Z", "url": "https://files.pythonhosted.org/packages/c8/56/ebfda27308c59586dc1908f9187b433093597f30a18646cbab3d6a3126af/cmd_call_graph-1.0.2-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "700c6d4cc5a60e84a240160cbbdb5bcc", "sha256": "23b656ff581959b00bf9b1f03188d57db49bafc3d565dc801e94de50aa98657e" }, "downloads": -1, "filename": "cmd-call-graph-1.0.2.tar.gz", "has_sig": false, "md5_digest": "700c6d4cc5a60e84a240160cbbdb5bcc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9831, "upload_time": "2019-01-09T11:52:31", "upload_time_iso_8601": "2019-01-09T11:52:31.436912Z", "url": "https://files.pythonhosted.org/packages/88/a6/32a5593c9afa18c218502c0941f2017099679459738450fac3027c4f77b0/cmd-call-graph-1.0.2.tar.gz", "yanked": false, "yanked_reason": null } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "bf675fe393d34ad508b45b7e8360cac3", "sha256": "898f5e30b862c97a260dd8ae5033bcd7811804d4efc559e2233c5c67244e7c1e" }, "downloads": -1, "filename": "cmd_call_graph-1.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "bf675fe393d34ad508b45b7e8360cac3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12125, "upload_time": "2019-10-22T10:30:13", "upload_time_iso_8601": "2019-10-22T10:30:13.594784Z", "url": "https://files.pythonhosted.org/packages/48/4b/bde1afc3be091ea96ee8285cfbe7f5717e585775af3b68b22cabe08791b8/cmd_call_graph-1.1.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "9a4c1dca497bde325c508c715a8020cd", "sha256": "879dbbbe22ad1c0a168e2a03b157d5b38abd0773df45fa2743558ca78844b618" }, "downloads": -1, "filename": "cmd-call-graph-1.1.0.tar.gz", "has_sig": false, "md5_digest": "9a4c1dca497bde325c508c715a8020cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13359, "upload_time": "2019-10-22T10:30:15", "upload_time_iso_8601": "2019-10-22T10:30:15.533280Z", "url": "https://files.pythonhosted.org/packages/f5/88/ba04a1a7453ea5b1b33fa9575238185e4ed5dfbfba6ffb6ce1484c4fccf3/cmd-call-graph-1.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "47a163496357e6acd2dac36ab982ecfc", "sha256": "68aa030c1758ad1219e3af2fe14277d54379803634505cd6c8ea5b6ba011e543" }, "downloads": -1, "filename": "cmd_call_graph-1.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "47a163496357e6acd2dac36ab982ecfc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12163, "upload_time": "2019-11-08T09:59:15", "upload_time_iso_8601": "2019-11-08T09:59:15.128005Z", "url": "https://files.pythonhosted.org/packages/52/dd/b7ad5a100e3d049b48231edd392f9b65eae95139af93ad93997f185b8412/cmd_call_graph-1.2.0-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f85449ccc0f4c14e0cd2b80e1f827f2f", "sha256": "610184f8bce352d46e3d133f0b5005ff0fb307a756c104fab807604b67310006" }, "downloads": -1, "filename": "cmd-call-graph-1.2.0.tar.gz", "has_sig": false, "md5_digest": "f85449ccc0f4c14e0cd2b80e1f827f2f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10422, "upload_time": "2019-11-08T09:59:18", "upload_time_iso_8601": "2019-11-08T09:59:18.314777Z", "url": "https://files.pythonhosted.org/packages/28/76/3f12c41e5f13e84cd19d60e17362b566460fcb69f86b0458d9a1fc609995/cmd-call-graph-1.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "cd0cc5224b77763f044eb0045b66cac2", "sha256": "b5b15825c4213f6635760bc5339b5c2b9af6764a6e810bd5092845d8c7b8be0b" }, "downloads": -1, "filename": "cmd_call_graph-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "cd0cc5224b77763f044eb0045b66cac2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12146, "upload_time": "2019-11-08T10:35:50", "upload_time_iso_8601": "2019-11-08T10:35:50.820977Z", "url": "https://files.pythonhosted.org/packages/db/06/759859a8c3970c6ebc0d26a05ae706c9a811c3f56e919d24783ee7d35869/cmd_call_graph-1.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ab76d2256a04de7372da17473428ae07", "sha256": "f384527e9d46f97ee496d1f34ac9a93b5a2debf8162ce628fd063bab14d375dd" }, "downloads": -1, "filename": "cmd-call-graph-1.2.1.tar.gz", "has_sig": false, "md5_digest": "ab76d2256a04de7372da17473428ae07", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10375, "upload_time": "2019-11-08T10:35:51", "upload_time_iso_8601": "2019-11-08T10:35:51.988348Z", "url": "https://files.pythonhosted.org/packages/e7/aa/3a60f7365dd5de3e7c03e78b3af25a9eadf6cbbf1992b81b33f16366a0d2/cmd-call-graph-1.2.1.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cd0cc5224b77763f044eb0045b66cac2", "sha256": "b5b15825c4213f6635760bc5339b5c2b9af6764a6e810bd5092845d8c7b8be0b" }, "downloads": -1, "filename": "cmd_call_graph-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "cd0cc5224b77763f044eb0045b66cac2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 12146, "upload_time": "2019-11-08T10:35:50", "upload_time_iso_8601": "2019-11-08T10:35:50.820977Z", "url": "https://files.pythonhosted.org/packages/db/06/759859a8c3970c6ebc0d26a05ae706c9a811c3f56e919d24783ee7d35869/cmd_call_graph-1.2.1-py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ab76d2256a04de7372da17473428ae07", "sha256": "f384527e9d46f97ee496d1f34ac9a93b5a2debf8162ce628fd063bab14d375dd" }, "downloads": -1, "filename": "cmd-call-graph-1.2.1.tar.gz", "has_sig": false, "md5_digest": "ab76d2256a04de7372da17473428ae07", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10375, "upload_time": "2019-11-08T10:35:51", "upload_time_iso_8601": "2019-11-08T10:35:51.988348Z", "url": "https://files.pythonhosted.org/packages/e7/aa/3a60f7365dd5de3e7c03e78b3af25a9eadf6cbbf1992b81b33f16366a0d2/cmd-call-graph-1.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }