{ "info": { "author": "Jonathan Jacobs", "author_email": "jonathan@jsphere.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: System :: Logging" ], "description": "=========\neliottree\n=========\n\n|build|_ |coverage|_\n\nRender `Eliot `_ logs as an ASCII tree.\n\nThis output:\n\n.. image:: https://github.com/jonathanj/eliottree/raw/18.1.0/doc/example_eliot_log.png\n\n(or as text)\n\n.. code-block::\n\n $ eliot-tree eliot.log\n f3a32bb3-ea6b-457c-aa99-08a3d0491ab4\n \u2514\u2500\u2500 app:soap:client:request/1 \u21d2 started 2015-03-03 04:28:56 \u29d6 1.238s\n \u251c\u2500\u2500 dump: /home/user/dump_files/20150303/1425356936.28_Client_req.xml\n \u251c\u2500\u2500 soapAction: a_soap_action\n \u251c\u2500\u2500 uri: http://example.org/soap\n \u251c\u2500\u2500 app:soap:client:success/2/1 \u21d2 started 2015-03-03 04:28:57 \u29d6 0.000s\n \u2502 \u2514\u2500\u2500 app:soap:client:success/2/2 \u21d2 succeeded 2015-03-03 04:28:57\n \u2502 \u2514\u2500\u2500 dump: /home/user/dump_files/20150303/1425356937.52_Client_res.xml\n \u2514\u2500\u2500 app:soap:client:request/3 \u21d2 succeeded 2015-03-03 04:28:57\n \u2514\u2500\u2500 status: 200\n\n 89a56df5-d808-4a7c-8526-e603aae2e2f2\n \u2514\u2500\u2500 app:soap:service:request/1 \u21d2 started 2015-03-03 04:31:08 \u29d6 3.482s\n \u251c\u2500\u2500 dump: /home/user/dump_files/20150303/1425357068.03_Service_req.xml\n \u251c\u2500\u2500 soapAction: method\n \u251c\u2500\u2500 uri: /endpoints/soap/method\n \u251c\u2500\u2500 app:soap:service:success/2/1 \u21d2 started 2015-03-03 04:31:11 \u29d6 0.001s\n \u2502 \u2514\u2500\u2500 app:soap:service:success/2/2 \u21d2 succeeded 2015-03-03 04:31:11\n \u2502 \u2514\u2500\u2500 dump: /home/user/dump_files/20150303/1425357071.51_Service_res.xml\n \u2514\u2500\u2500 app:soap:service:request/3 \u21d2 succeeded 2015-03-03 04:31:11\n \u2514\u2500\u2500 status: 200\n\nwas generated from:\n\n.. code-block:: javascript\n\n {\"dump\": \"/home/user/dump_files/20150303/1425356936.28_Client_req.xml\", \"timestamp\": 1425356936.278875, \"uri\": \"http://example.org/soap\", \"action_status\": \"started\", \"task_uuid\": \"f3a32bb3-ea6b-457c-aa99-08a3d0491ab4\", \"action_type\": \"app:soap:client:request\", \"soapAction\": \"a_soap_action\", \"task_level\": [1]}\n {\"timestamp\": 1425356937.516579, \"task_uuid\": \"f3a32bb3-ea6b-457c-aa99-08a3d0491ab4\", \"action_type\": \"app:soap:client:success\", \"action_status\": \"started\", \"task_level\": [2, 1]}\n {\"task_uuid\": \"f3a32bb3-ea6b-457c-aa99-08a3d0491ab4\", \"action_type\": \"app:soap:client:success\", \"dump\": \"/home/user/dump_files/20150303/1425356937.52_Client_res.xml\", \"timestamp\": 1425356937.517077, \"action_status\": \"succeeded\", \"task_level\": [2, 2]}\n {\"status\": 200, \"task_uuid\": \"f3a32bb3-ea6b-457c-aa99-08a3d0491ab4\", \"task_level\": [3], \"action_type\": \"app:soap:client:request\", \"timestamp\": 1425356937.517161, \"action_status\": \"succeeded\"}\n {\"dump\": \"/home/user/dump_files/20150303/1425357068.03_Service_req.xml\", \"timestamp\": 1425357068.032091, \"uri\": \"/endpoints/soap/method\", \"action_status\": \"started\", \"task_uuid\": \"89a56df5-d808-4a7c-8526-e603aae2e2f2\", \"action_type\": \"app:soap:service:request\", \"soapAction\": \"method\", \"task_level\": [1]}\n {\"timestamp\": 1425357071.51233, \"task_uuid\": \"89a56df5-d808-4a7c-8526-e603aae2e2f2\", \"action_type\": \"app:soap:service:success\", \"action_status\": \"started\", \"task_level\": [2, 1]}\n {\"task_uuid\": \"89a56df5-d808-4a7c-8526-e603aae2e2f2\", \"action_type\": \"app:soap:service:success\", \"dump\": \"/home/user/dump_files/20150303/1425357071.51_Service_res.xml\", \"timestamp\": 1425357071.513453, \"action_status\": \"succeeded\", \"task_level\": [2, 2]}\n {\"status\": 200, \"task_uuid\": \"89a56df5-d808-4a7c-8526-e603aae2e2f2\", \"task_level\": [3], \"action_type\": \"app:soap:service:request\", \"timestamp\": 1425357071.513992, \"action_status\": \"succeeded\"}\n\nStreaming\n---------\n\nIt's possible to pipe data into eliot-tree, from a tailed log for example, and\nhave it rendered incrementally. There is a caveat though: Trees are only\nrendered once an end message\u2014a success or failure status\u2014for the tree's root\naction appears in the data.\n\nUsage from Python\n-----------------\n\n.. code-block:: python\n\n import json, sys\n from eliottree import tasks_from_iterable, render_tasks\n # Or `codecs.getwriter('utf-8')(sys.stdout).write` on Python 2.\n render_tasks(sys.stdout.write, tasks, colorize=True)\n\nSee :code:`help(render_tasks)` and :code:`help(tasks_from_iterable)` from a\nPython REPL for more information.\n\nUsage from the command-line\n---------------------------\n\n.. code-block::\n\n $ eliot-tree\n usage: eliot-tree [-h] [-u UUID] [-i KEY] [--raw]\n [--color {always,auto,never}] [--no-colorize] [-l LENGTH]\n [--select QUERY] [--start START] [--end END]\n [FILE [FILE ...]]\n\n Display an Eliot log as a tree of tasks.\n\n positional arguments:\n FILE Files to process. Omit to read from stdin.\n\n optional arguments:\n -h, --help show this help message and exit\n -u UUID, --task-uuid UUID\n Select a specific task by UUID\n -i KEY, --ignore-task-key KEY\n Ignore a task key, use multiple times to ignore\n multiple keys. Defaults to ignoring most Eliot\n standard keys.\n --raw Do not format some task values (such as UTC\n timestamps) as human-readable\n --color {always,auto,never}\n Color the output. Defaults based on whether the output\n is a TTY.\n -l LENGTH, --field-limit LENGTH\n Limit the length of field values to LENGTH or a\n newline, whichever comes first. Use a length of 0 to\n output the complete value.\n --select QUERY Select tasks to be displayed based on a jmespath\n query, can be specified multiple times to mimic\n logical AND. If any child task is selected the entire\n top-level task is selected. See \n --start START Select tasks whose timestamp occurs after (or on) an\n ISO8601 date.\n --end END Select tasks whose timestamp occurs before an ISO8601\n date.\n\nContribute\n----------\n\nSee for details.\n\n\n.. |build| image:: https://travis-ci.org/jonathanj/eliottree.svg?branch=master\n.. _build: https://travis-ci.org/jonathanj/eliottree\n\n.. |coverage| image:: https://coveralls.io/repos/jonathanj/eliottree/badge.svg\n.. _coverage: https://coveralls.io/r/jonathanj/eliottree\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jonathanj/eliottree", "keywords": "", "license": "MIT", "maintainer": "Jonathan Jacobs", "maintainer_email": "jonathan@jsphere.com", "name": "eliot-tree", "package_url": "https://pypi.org/project/eliot-tree/", "platform": "", "project_url": "https://pypi.org/project/eliot-tree/", "project_urls": { "Homepage": "https://github.com/jonathanj/eliottree" }, "release_url": "https://pypi.org/project/eliot-tree/18.1.1/", "requires_dist": [ "six (>=1.9.0)", "jmespath (>=0.7.1)", "iso8601 (>=0.1.10)", "tree-format (>=0.1.2)", "termcolor (>=1.1.0)", "toolz (>=0.8.2)", "eliot (>=0.12.0)", "testtools (>=1.8.0); extra == 'test'" ], "requires_python": "", "summary": "Render Eliot logs as an ASCII tree", "version": "18.1.1" }, "last_serial": 4115831, "releases": { "15.0.0": [ { "comment_text": "", "digests": { "md5": "a6466e2f6e1155535480dbb98ba06555", "sha256": "a9f4cc26a2be70db45b3217635641d320fb78b3972c27c4494e989076eba233b" }, "downloads": -1, "filename": "eliot_tree-15.0.0-py2-none-any.whl", "has_sig": false, "md5_digest": "a6466e2f6e1155535480dbb98ba06555", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 5073, "upload_time": "2015-05-22T16:16:05", "url": "https://files.pythonhosted.org/packages/59/41/d2f416042d8f203e52ba09ea82098bb9c4dc8a32331b7314e517314c62f5/eliot_tree-15.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b3aed1b9b4b1660cb6b739a991d5fd46", "sha256": "3e00a977571d91057d98181b06f4470b3681bfc8c4e90597110a147d30dba6ed" }, "downloads": -1, "filename": "eliot-tree-15.0.0.tar.gz", "has_sig": false, "md5_digest": "b3aed1b9b4b1660cb6b739a991d5fd46", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 3517, "upload_time": "2015-05-22T16:16:08", "url": "https://files.pythonhosted.org/packages/96/e2/cbb65903f2e6a2290e6ca8bc5a623b02cae1cec64192cdfc714b53e4f5f8/eliot-tree-15.0.0.tar.gz" } ], "15.1.0": [ { "comment_text": "", "digests": { "md5": "e9059f0c3781454416074af08b8a9d42", "sha256": "be78d9b44e96a70ec01f1b92bfd975f36bb5b163e7eabf681aebdba8c9971078" }, "downloads": -1, "filename": "eliot_tree-15.1.0-py2-none-any.whl", "has_sig": true, "md5_digest": "e9059f0c3781454416074af08b8a9d42", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 12344, "upload_time": "2015-06-09T14:45:37", "url": "https://files.pythonhosted.org/packages/9f/91/bd79dcd2a8e58e43cd33e4fb95b988e8610f25fed4c7a0a4253ad344ac9b/eliot_tree-15.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "12963138ed3f1ab1eb7d6c9616e45ee2", "sha256": "34b6251cad20d45719f0d6d9790daafc4ae5e929737402a7993f5f8248e6b980" }, "downloads": -1, "filename": "eliot-tree-15.1.0.tar.gz", "has_sig": false, "md5_digest": "12963138ed3f1ab1eb7d6c9616e45ee2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9795, "upload_time": "2015-06-09T14:45:32", "url": "https://files.pythonhosted.org/packages/61/c9/65a1536e444424308fd3ea84041ede2d96e144e17014be8d5d662d92b88f/eliot-tree-15.1.0.tar.gz" } ], "15.2.0": [ { "comment_text": "", "digests": { "md5": "31e51611184d35fa1d800e3ac89c5699", "sha256": "297b426dbbf8692e1cf7ddc6171de15c7dcfa138ca571781115260297c6ec1e6" }, "downloads": -1, "filename": "eliot_tree-15.2.0-py2-none-any.whl", "has_sig": true, "md5_digest": "31e51611184d35fa1d800e3ac89c5699", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 12692, "upload_time": "2015-08-08T14:29:35", "url": "https://files.pythonhosted.org/packages/e4/64/61094c3f1d762b13c157d8b62f69df98333a726a9347d333d3784a2408c1/eliot_tree-15.2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6770741f13bc1b3b161035a2de1b46c1", "sha256": "4440bc35e3128afcc4490bc2784de00309196f24fd2614dc091193460df7f9ee" }, "downloads": -1, "filename": "eliot-tree-15.2.0.tar.gz", "has_sig": true, "md5_digest": "6770741f13bc1b3b161035a2de1b46c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10111, "upload_time": "2015-08-08T14:29:30", "url": "https://files.pythonhosted.org/packages/c7/b5/ffe8a5679dcc388af52fd301838244e06782f9e3d70f47bae7ae7879a5d1/eliot-tree-15.2.0.tar.gz" } ], "15.3.0": [ { "comment_text": "", "digests": { "md5": "49b15f3e75c4a3e7af66052ac78cd91f", "sha256": "fd6fe91709fd195e59dbcbedb6e6858c809bf5c48826b1751b31b9cc62f2f557" }, "downloads": -1, "filename": "eliot_tree-15.3.0-py2-none-any.whl", "has_sig": true, "md5_digest": "49b15f3e75c4a3e7af66052ac78cd91f", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 13725, "upload_time": "2015-09-30T08:43:46", "url": "https://files.pythonhosted.org/packages/5b/0e/2d5acc27058822e31abd05561d0097013e0651ca16b9dd4f33f6fd9c910e/eliot_tree-15.3.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "14d4d660cf8df90056721c89f6462b83", "sha256": "9ea507498dc143bf06693d044bc660f4d070c44f3a633c585afca6a997745abd" }, "downloads": -1, "filename": "eliot-tree-15.3.0.tar.gz", "has_sig": true, "md5_digest": "14d4d660cf8df90056721c89f6462b83", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10819, "upload_time": "2015-09-30T08:43:39", "url": "https://files.pythonhosted.org/packages/88/63/48a8f50480255b4902b9ba3c4825d10fca9d47fd726679877ff076407839/eliot-tree-15.3.0.tar.gz" } ], "17.0.0": [ { "comment_text": "", "digests": { "md5": "0586f39e3c3ac4c4c3f598a338974c51", "sha256": "7eeb01e591a6883dcaaf7e1b91961009d97ed895009c7e75d9b0f4892721353a" }, "downloads": -1, "filename": "eliot_tree-17.0.0-py2-none-any.whl", "has_sig": true, "md5_digest": "0586f39e3c3ac4c4c3f598a338974c51", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 26005, "upload_time": "2017-02-18T22:36:24", "url": "https://files.pythonhosted.org/packages/02/d9/585af501ee09d797f59ebe94369a0d2a20d3bf239795e663c7b8b055e228/eliot_tree-17.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e3042c6a1d99f72b3e2d16074d88c08e", "sha256": "17869ed97314829026cfbca417c80d68b83687e5c858d4201a7b9b81ae35c337" }, "downloads": -1, "filename": "eliot-tree-17.0.0.tar.gz", "has_sig": true, "md5_digest": "e3042c6a1d99f72b3e2d16074d88c08e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20367, "upload_time": "2017-02-18T22:36:26", "url": "https://files.pythonhosted.org/packages/30/28/235c69b8af0de834ac49a19581148baf1f7f2451efa0831c6e53e9ad6bf9/eliot-tree-17.0.0.tar.gz" } ], "17.1.0": [ { "comment_text": "", "digests": { "md5": "45c8a24a67eecec66f9aafae3ef562df", "sha256": "eb1be68964342afe126f06e247a84dd568aeffdba9735433e0f46881650bf43d" }, "downloads": -1, "filename": "eliot_tree-17.1.0-py2-none-any.whl", "has_sig": true, "md5_digest": "45c8a24a67eecec66f9aafae3ef562df", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 25966, "upload_time": "2017-09-01T14:07:24", "url": "https://files.pythonhosted.org/packages/cf/24/a406ed552aacf960e3e82cd7ff7bbf113501cb291d9f71fd6bcd3a4e1ca6/eliot_tree-17.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fa69f041d98ad7607dbd017fd461456d", "sha256": "7046cd35cab94ca83182cd8fd8f2bedb87c8a55e42848a3581f2f95cdccdec62" }, "downloads": -1, "filename": "eliot-tree-17.1.0.tar.gz", "has_sig": true, "md5_digest": "fa69f041d98ad7607dbd017fd461456d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20505, "upload_time": "2017-09-01T14:07:26", "url": "https://files.pythonhosted.org/packages/c2/0a/f37319d9e6580841ccba5af3dd7846eadc77e426fb3c1d41c253702eee0a/eliot-tree-17.1.0.tar.gz" } ], "18.0.0": [ { "comment_text": "", "digests": { "md5": "d2b0507134282c6a2a11fb4d82753f4f", "sha256": "c3fe7ee02e05cb85ca90223538415a61664c025f6c4818ec7346e7bc5bb5ed8e" }, "downloads": -1, "filename": "eliot_tree-18.0.0-py2-none-any.whl", "has_sig": true, "md5_digest": "d2b0507134282c6a2a11fb4d82753f4f", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 78726, "upload_time": "2018-07-23T10:28:54", "url": "https://files.pythonhosted.org/packages/a4/84/020b28a5daebcc3a621bb404700065e42050026fd5f6381e09f81a8b6fc1/eliot_tree-18.0.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e59960e62093f431aa7fc816f0dc8015", "sha256": "0fd796ce1a62701c527a15a46efe8ed4e0b3956b1f831a497f2adfc85240df11" }, "downloads": -1, "filename": "eliot_tree-18.0.0-py3-none-any.whl", "has_sig": true, "md5_digest": "e59960e62093f431aa7fc816f0dc8015", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 78736, "upload_time": "2018-07-23T10:28:56", "url": "https://files.pythonhosted.org/packages/85/4a/fd5d16850c21fa737fa77be221c34e9ae1a3608b206200dfcc883c1d4d02/eliot_tree-18.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "b431054e92917f4673ed2b0fe6b7c805", "sha256": "78ba207afa12540b7b881a78e50e61b6dfaeb2e9b3d2b2185b09b74524761561" }, "downloads": -1, "filename": "eliot-tree-18.0.0.tar.gz", "has_sig": true, "md5_digest": "b431054e92917f4673ed2b0fe6b7c805", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 76916, "upload_time": "2018-07-23T10:28:58", "url": "https://files.pythonhosted.org/packages/8f/3a/915fd6cdd297400e3cace5ec5d575270dfe34e9e167a7e9936971ea8869a/eliot-tree-18.0.0.tar.gz" } ], "18.1.0": [ { "comment_text": "", "digests": { "md5": "95bb465912a35364fa6dcb23b9d04cc5", "sha256": "845a015e3471784594909add68dffda0bc4a053bd62303f70ebdc10f1ade8599" }, "downloads": -1, "filename": "eliot_tree-18.1.0-py3-none-any.whl", "has_sig": true, "md5_digest": "95bb465912a35364fa6dcb23b9d04cc5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 76142, "upload_time": "2018-07-30T09:24:36", "url": "https://files.pythonhosted.org/packages/41/44/a3e7d302bafbaef10d935a027772e3db017d9f964e8c8f58ccf6f2849dcd/eliot_tree-18.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "db0a09dfda3947bcedb88930e1c487c4", "sha256": "bf11f07f8181da4c12dfe838476b5140d215415257d991328642fdac2d840c0a" }, "downloads": -1, "filename": "eliot-tree-18.1.0.tar.gz", "has_sig": true, "md5_digest": "db0a09dfda3947bcedb88930e1c487c4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 74344, "upload_time": "2018-07-30T09:24:38", "url": "https://files.pythonhosted.org/packages/46/f4/a7efc6488f8afa245b608b7f50312afea072f2595c2f5ac16b0125ed4c9d/eliot-tree-18.1.0.tar.gz" } ], "18.1.1": [ { "comment_text": "", "digests": { "md5": "514db5de40a598b4cf6300196ffcdbe3", "sha256": "71b8c46afdb3290487da8a84cef0b0391bb4cd78aeabcf93b5db5c021e465095" }, "downloads": -1, "filename": "eliot_tree-18.1.1-py3-none-any.whl", "has_sig": true, "md5_digest": "514db5de40a598b4cf6300196ffcdbe3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 76145, "upload_time": "2018-07-30T10:08:25", "url": "https://files.pythonhosted.org/packages/4e/24/2c884ec6c2f10a7c3b32047556b0c3180fa9e095c01917e2c713273be565/eliot_tree-18.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6b58c7e737c22341da0a3d4c634fcd02", "sha256": "d492154cbc4093faf4492dbf503e87f51e27f89c7fc8697201157e0fb8d7d027" }, "downloads": -1, "filename": "eliot-tree-18.1.1.tar.gz", "has_sig": true, "md5_digest": "6b58c7e737c22341da0a3d4c634fcd02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 74350, "upload_time": "2018-07-30T10:08:27", "url": "https://files.pythonhosted.org/packages/e5/62/8b73c7970fcb5b8c69cf5c0aab1fe6125f498d10daa27db1d71629eb46f3/eliot-tree-18.1.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "514db5de40a598b4cf6300196ffcdbe3", "sha256": "71b8c46afdb3290487da8a84cef0b0391bb4cd78aeabcf93b5db5c021e465095" }, "downloads": -1, "filename": "eliot_tree-18.1.1-py3-none-any.whl", "has_sig": true, "md5_digest": "514db5de40a598b4cf6300196ffcdbe3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 76145, "upload_time": "2018-07-30T10:08:25", "url": "https://files.pythonhosted.org/packages/4e/24/2c884ec6c2f10a7c3b32047556b0c3180fa9e095c01917e2c713273be565/eliot_tree-18.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6b58c7e737c22341da0a3d4c634fcd02", "sha256": "d492154cbc4093faf4492dbf503e87f51e27f89c7fc8697201157e0fb8d7d027" }, "downloads": -1, "filename": "eliot-tree-18.1.1.tar.gz", "has_sig": true, "md5_digest": "6b58c7e737c22341da0a3d4c634fcd02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 74350, "upload_time": "2018-07-30T10:08:27", "url": "https://files.pythonhosted.org/packages/e5/62/8b73c7970fcb5b8c69cf5c0aab1fe6125f498d10daa27db1d71629eb46f3/eliot-tree-18.1.1.tar.gz" } ] }