{ "info": { "author": "Jonas Grimfelt", "author_email": "grimen@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: POSIX", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: Libraries" ], "description": "\n# `palmtree` [![PyPI version](https://badge.fury.io/py/palmtree.svg)](https://badge.fury.io/py/palmtree) [![Build Status](https://travis-ci.com/grimen/python-palmtree.svg?token=sspjPRWbecBSpceU8Jyn&branch=master)](https://travis-ci.com/grimen/python-palmtree) [![Coverage Status](https://codecov.io/gh/grimen/python-palmtree/branch/master/graph/badge.svg)](https://codecov.io/gh/grimen/python-palmtree)\n\n*A pretty filesystem tree inspection utility - for Python 3.*\n\n![Screenshot](https://dvfr2lc5dhzsq.cloudfront.net/items/2C2w333H38250F1U3Z1i/Screen%20Shot%202019-03-08%20at%2016.15.29.png?X-CloudApp-Visitor-Id=675422)\n\n\n## Introduction\n\nTODO\n\n\n## Install\n\nInstall using **pip**:\n\n```sh\n$ pip install palmtree\n```\n\n\n## Use\n\nVery basic **[example](https://github.com/grimen/python-mybase/tree/master/examples/basic.py)**:\n\n```python\nimport palmtree # NOTE: Python 3 is required\n\nimport os\nimport stat\nimport time\nimport datetime\nimport json\nimport colorful as color\nimport inspecta as util\n\n\n# ==========================================================\n# EXAMPLE: log plain colorized output\n# ----------------------------------------------------\n\nprint('[log/plain]: plain colorized output')\n\npalmtree.log('./palmtree/tests/__fixtures__/foo')\n\n\n# ==========================================================\n# EXAMPLE: log detailed custom colorized output\n# -------------------------------------------------------\n\nprint('[log/detailed]: detailed custom colorized output')\n\ndef meta (item):\n try:\n item_stats = os.stat(item.resolved_path)\n\n item_byte_size = item_stats[stat.ST_SIZE]\n item_created_at_ms = item_stats[stat.ST_CTIME]\n item_created_at = time.strftime('%a %b %d %Y %H:%M:%S GMT%z (%Z)', time.localtime(item_created_at_ms))\n item_data = None\n\n if item.is_file:\n item_data = open(item.resolved_path, 'r').read()\n\n return ''.join([\n str(color.darkGray('- ')),\n ' '.join([\n str(color.white_on_darkMagenta(' {0} bytes '.format(item_byte_size))),\n str(item_data and json.dumps({'data': item_data}) or ''),\n str(color.darkCyan('{0}'.format(item_created_at))),\n ])\n ])\n\n except Exception as error:\n return color.yellow('(!) could not read/resolve')\n\npalmtree.log('./palmtree/tests/__fixtures__/foo', meta = meta)\n\n\n# ==========================================================\n# EXAMPLE: inspect plain output\n# ----------------------------------------------------\n\nprint('[inspect/plain]: inspect plain colorized output')\n\ninspection = palmtree.inspect('./palmtree/tests/__fixtures__/foo')\n\nprint('[inspect/plain]: {0}'.format(inspection))\n\n\n# ==========================================================\n# EXAMPLE: inspect detailed custom output\n# -------------------------------------------------------\n\nprint('[inspect/detailed]: inspect detailed custom colorized output')\n\ninspection = palmtree.inspect('./palmtree/tests/__fixtures__/foo', meta = meta)\n\nprint('[inspect/detailed]:', inspection)\n\n\n# ==========================================================\n# EXAMPLE: get plain object\n# ----------------------------------------------------\n\nprint('[get/plain]: get plain object')\n\ntree = palmtree.get('./palmtree/tests/__fixtures__/foo')\n\nprint('[get/plain]:', json.dumps(tree, indent = 4))\n\n\n# ==========================================================\n# EXAMPLE: get detailed object\n# -------------------------------------------------------\n\nprint('[get/plain]: get detailed object')\n\ntree = palmtree.get('./palmtree/tests/__fixtures__/foo', meta = meta)\n\nprint('[get/plain]:', json.dumps(tree, indent = 4))\n\n```\n\n**Output:**\n\n```sh\n[log/plain]: plain colorized output\n\n./palmtree/tests/__fixtures__/foo\n\u251c\u2500\u2500 bar\n \u251c\u2500\u2500 bar_1.txt\n \u251c\u2500\u2500 bar_2.txt\n \u2514\u2500\u2500 baz\n \u251c\u2500\u2500 baz_1.txt\n \u2514\u2500\u2500 baz_2.txt\n\u251c\u2500\u2500 baz \u27f6 ../bar/baz\n\u251c\u2500\u2500 baz_1.txt \u27f6 ../bar/baz/baz_1.txt\n\u251c\u2500\u2500 foo_1.txt\n\u251c\u2500\u2500 foo_2.txt\n\u251c\u2500\u2500 xxx \u27f6 ?\n\u2514\u2500\u2500 xxx.txt \u27f6 ?\n\n[log/detailed]: detailed custom colorized output\n\n./palmtree/tests/__fixtures__/foo\n\u251c\u2500\u2500 bar - 160 bytes Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n \u251c\u2500\u2500 bar_1.txt - 6 bytes {\"data\": \"bar_1\\n\"} Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n \u251c\u2500\u2500 bar_2.txt - 6 bytes {\"data\": \"bar_2\\n\"} Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n \u2514\u2500\u2500 baz - 128 bytes Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n \u251c\u2500\u2500 baz_1.txt - 6 bytes {\"data\": \"baz_1\\n\"} Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n \u2514\u2500\u2500 baz_2.txt - 6 bytes {\"data\": \"baz_2\\n\"} Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n\u251c\u2500\u2500 baz \u27f6 ../bar/baz - 128 bytes Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n\u251c\u2500\u2500 baz_1.txt \u27f6 ../bar/baz/baz_1.txt - 6 bytes {\"data\": \"baz_1\\n\"} Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n\u251c\u2500\u2500 foo_1.txt - 6 bytes {\"data\": \"foo_1\\n\"} Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n\u251c\u2500\u2500 foo_2.txt - 6 bytes {\"data\": \"foo_2\\n\"} Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n\u251c\u2500\u2500 xxx \u27f6 ? (!) could not read/resolve\n\u2514\u2500\u2500 xxx.txt \u27f6 ? (!) could not read/resolve\n\n[inspect/plain]: inspect plain colorized output\n[inspect/plain]:\n./palmtree/tests/__fixtures__/foo\n\u251c\u2500\u2500 bar\n \u251c\u2500\u2500 bar_1.txt\n \u251c\u2500\u2500 bar_2.txt\n \u2514\u2500\u2500 baz\n \u251c\u2500\u2500 baz_1.txt\n \u2514\u2500\u2500 baz_2.txt\n\u251c\u2500\u2500 baz \u27f6 ../bar/baz\n\u251c\u2500\u2500 baz_1.txt \u27f6 ../bar/baz/baz_1.txt\n\u251c\u2500\u2500 foo_1.txt\n\u251c\u2500\u2500 foo_2.txt\n\u251c\u2500\u2500 xxx \u27f6 ?\n\u2514\u2500\u2500 xxx.txt \u27f6 ?\n\n\n[inspect/detailed]: inspect detailed custom colorized output\n[inspect/detailed]:\n./palmtree/tests/__fixtures__/foo\n\u251c\u2500\u2500 bar - 160 bytes Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n \u251c\u2500\u2500 bar_1.txt - 6 bytes {\"data\": \"bar_1\\n\"} Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n \u251c\u2500\u2500 bar_2.txt - 6 bytes {\"data\": \"bar_2\\n\"} Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n \u2514\u2500\u2500 baz - 128 bytes Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n \u251c\u2500\u2500 baz_1.txt - 6 bytes {\"data\": \"baz_1\\n\"} Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n \u2514\u2500\u2500 baz_2.txt - 6 bytes {\"data\": \"baz_2\\n\"} Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n\u251c\u2500\u2500 baz \u27f6 ../bar/baz - 128 bytes Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n\u251c\u2500\u2500 baz_1.txt \u27f6 ../bar/baz/baz_1.txt - 6 bytes {\"data\": \"baz_1\\n\"} Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n\u251c\u2500\u2500 foo_1.txt - 6 bytes {\"data\": \"foo_1\\n\"} Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n\u251c\u2500\u2500 foo_2.txt - 6 bytes {\"data\": \"foo_2\\n\"} Thu Mar 07 2019 05:02:33 GMT-0500 (EST)\n\u251c\u2500\u2500 xxx \u27f6 ? (!) could not read/resolve\n\u2514\u2500\u2500 xxx.txt \u27f6 ? (!) could not read/resolve\n\n\n[get/plain]: get plain object\n[get/plain]: [\n {\n \"level\": 0,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar\",\n \"relative_path\": \".\",\n \"name\": \"bar\",\n \"extension\": null,\n \"key\": \"bar\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"bar\",\n \"resolved_extension\": null,\n \"resolved_key\": \"bar\",\n \"is_resolved_directory\": true,\n \"is_resolved_file\": false,\n \"is_resolved_link\": false,\n \"is_directory\": true,\n \"is_file\": false,\n \"is_link\": false,\n \"is_resolved\": true,\n \"children\": [\n {\n \"level\": 1,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/bar_1.txt\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/bar_1.txt\",\n \"relative_path\": \".\",\n \"name\": \"bar_1.txt\",\n \"extension\": \".txt\",\n \"key\": \"bar_1\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/bar_1.txt\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/bar_1.txt\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"bar_1.txt\",\n \"resolved_extension\": \".txt\",\n \"resolved_key\": \"bar_1\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": true,\n \"is_resolved_link\": false,\n \"is_directory\": false,\n \"is_file\": true,\n \"is_link\": false,\n \"is_resolved\": true,\n \"children\": null,\n \"meta\": \"\"\n },\n {\n \"level\": 1,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/bar_2.txt\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/bar_2.txt\",\n \"relative_path\": \".\",\n \"name\": \"bar_2.txt\",\n \"extension\": \".txt\",\n \"key\": \"bar_2\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/bar_2.txt\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/bar_2.txt\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"bar_2.txt\",\n \"resolved_extension\": \".txt\",\n \"resolved_key\": \"bar_2\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": true,\n \"is_resolved_link\": false,\n \"is_directory\": false,\n \"is_file\": true,\n \"is_link\": false,\n \"is_resolved\": true,\n \"children\": null,\n \"meta\": \"\"\n },\n {\n \"level\": 1,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz\",\n \"relative_path\": \".\",\n \"name\": \"baz\",\n \"extension\": null,\n \"key\": \"baz\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"baz\",\n \"resolved_extension\": null,\n \"resolved_key\": \"baz\",\n \"is_resolved_directory\": true,\n \"is_resolved_file\": false,\n \"is_resolved_link\": false,\n \"is_directory\": true,\n \"is_file\": false,\n \"is_link\": false,\n \"is_resolved\": true,\n \"children\": [\n {\n \"level\": 2,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_1.txt\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_1.txt\",\n \"relative_path\": \".\",\n \"name\": \"baz_1.txt\",\n \"extension\": \".txt\",\n \"key\": \"baz_1\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_1.txt\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_1.txt\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"baz_1.txt\",\n \"resolved_extension\": \".txt\",\n \"resolved_key\": \"baz_1\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": true,\n \"is_resolved_link\": false,\n \"is_directory\": false,\n \"is_file\": true,\n \"is_link\": false,\n \"is_resolved\": true,\n \"children\": null,\n \"meta\": \"\"\n },\n {\n \"level\": 2,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_2.txt\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_2.txt\",\n \"relative_path\": \".\",\n \"name\": \"baz_2.txt\",\n \"extension\": \".txt\",\n \"key\": \"baz_2\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_2.txt\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_2.txt\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"baz_2.txt\",\n \"resolved_extension\": \".txt\",\n \"resolved_key\": \"baz_2\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": true,\n \"is_resolved_link\": false,\n \"is_directory\": false,\n \"is_file\": true,\n \"is_link\": false,\n \"is_resolved\": true,\n \"children\": null,\n \"meta\": \"\"\n }\n ],\n \"meta\": \"\"\n }\n ],\n \"meta\": \"\"\n },\n {\n \"level\": 0,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/baz\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/baz\",\n \"relative_path\": \".\",\n \"name\": \"baz\",\n \"extension\": null,\n \"key\": \"baz\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz\",\n \"resolved_relative_path\": \"../bar/baz\",\n \"resolved_name\": \"baz\",\n \"resolved_extension\": null,\n \"resolved_key\": \"baz\",\n \"is_resolved_directory\": true,\n \"is_resolved_file\": false,\n \"is_resolved_link\": false,\n \"is_directory\": true,\n \"is_file\": false,\n \"is_link\": true,\n \"is_resolved\": true,\n \"children\": null,\n \"meta\": \"\"\n },\n {\n \"level\": 0,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/baz_1.txt\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/baz_1.txt\",\n \"relative_path\": \".\",\n \"name\": \"baz_1.txt\",\n \"extension\": \".txt\",\n \"key\": \"baz_1\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_1.txt\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_1.txt\",\n \"resolved_relative_path\": \"../bar/baz/baz_1.txt\",\n \"resolved_name\": \"baz_1.txt\",\n \"resolved_extension\": \".txt\",\n \"resolved_key\": \"baz_1\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": true,\n \"is_resolved_link\": false,\n \"is_directory\": false,\n \"is_file\": true,\n \"is_link\": true,\n \"is_resolved\": true,\n \"children\": null,\n \"meta\": \"\"\n },\n {\n \"level\": 0,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/foo_1.txt\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/foo_1.txt\",\n \"relative_path\": \".\",\n \"name\": \"foo_1.txt\",\n \"extension\": \".txt\",\n \"key\": \"foo_1\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/foo_1.txt\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/foo_1.txt\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"foo_1.txt\",\n \"resolved_extension\": \".txt\",\n \"resolved_key\": \"foo_1\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": true,\n \"is_resolved_link\": false,\n \"is_directory\": false,\n \"is_file\": true,\n \"is_link\": false,\n \"is_resolved\": true,\n \"children\": null,\n \"meta\": \"\"\n },\n {\n \"level\": 0,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/foo_2.txt\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/foo_2.txt\",\n \"relative_path\": \".\",\n \"name\": \"foo_2.txt\",\n \"extension\": \".txt\",\n \"key\": \"foo_2\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/foo_2.txt\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/foo_2.txt\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"foo_2.txt\",\n \"resolved_extension\": \".txt\",\n \"resolved_key\": \"foo_2\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": true,\n \"is_resolved_link\": false,\n \"is_directory\": false,\n \"is_file\": true,\n \"is_link\": false,\n \"is_resolved\": true,\n \"children\": null,\n \"meta\": \"\"\n },\n {\n \"level\": 0,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/xxx\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/xxx\",\n \"relative_path\": \".\",\n \"name\": \"xxx\",\n \"extension\": null,\n \"key\": \"xxx\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/xxx\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/xxx\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"xxx\",\n \"resolved_extension\": null,\n \"resolved_key\": \"xxx\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": false,\n \"is_resolved_link\": true,\n \"is_directory\": false,\n \"is_file\": false,\n \"is_link\": true,\n \"is_resolved\": false,\n \"children\": null,\n \"meta\": \"\"\n },\n {\n \"level\": 0,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/xxx.txt\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/xxx.txt\",\n \"relative_path\": \".\",\n \"name\": \"xxx.txt\",\n \"extension\": \".txt\",\n \"key\": \"xxx\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/xxx.txt\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/xxx.txt\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"xxx.txt\",\n \"resolved_extension\": \".txt\",\n \"resolved_key\": \"xxx\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": false,\n \"is_resolved_link\": true,\n \"is_directory\": false,\n \"is_file\": false,\n \"is_link\": true,\n \"is_resolved\": false,\n \"children\": null,\n \"meta\": \"\"\n }\n]\n[get/plain]: get detailed object\n[get/plain]: [\n {\n \"level\": 0,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar\",\n \"relative_path\": \".\",\n \"name\": \"bar\",\n \"extension\": null,\n \"key\": \"bar\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"bar\",\n \"resolved_extension\": null,\n \"resolved_key\": \"bar\",\n \"is_resolved_directory\": true,\n \"is_resolved_file\": false,\n \"is_resolved_link\": false,\n \"is_directory\": true,\n \"is_file\": false,\n \"is_link\": false,\n \"is_resolved\": true,\n \"children\": [\n {\n \"level\": 1,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/bar_1.txt\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/bar_1.txt\",\n \"relative_path\": \".\",\n \"name\": \"bar_1.txt\",\n \"extension\": \".txt\",\n \"key\": \"bar_1\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/bar_1.txt\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/bar_1.txt\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"bar_1.txt\",\n \"resolved_extension\": \".txt\",\n \"resolved_key\": \"bar_1\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": true,\n \"is_resolved_link\": false,\n \"is_directory\": false,\n \"is_file\": true,\n \"is_link\": false,\n \"is_resolved\": true,\n \"children\": null,\n \"meta\": \"\\u001b[38;5;248m- \\u001b[39m\\u001b[38;5;231m\\u001b[48;5;127m 6 bytes \\u001b[39m\\u001b[49m {\\\"data\\\": \\\"bar_1\\\\n\\\"} \\u001b[38;5;37mThu Mar 07 2019 05:02:33 GMT-0500 (EST)\\u001b[39m\"\n },\n {\n \"level\": 1,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/bar_2.txt\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/bar_2.txt\",\n \"relative_path\": \".\",\n \"name\": \"bar_2.txt\",\n \"extension\": \".txt\",\n \"key\": \"bar_2\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/bar_2.txt\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/bar_2.txt\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"bar_2.txt\",\n \"resolved_extension\": \".txt\",\n \"resolved_key\": \"bar_2\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": true,\n \"is_resolved_link\": false,\n \"is_directory\": false,\n \"is_file\": true,\n \"is_link\": false,\n \"is_resolved\": true,\n \"children\": null,\n \"meta\": \"\\u001b[38;5;248m- \\u001b[39m\\u001b[38;5;231m\\u001b[48;5;127m 6 bytes \\u001b[39m\\u001b[49m {\\\"data\\\": \\\"bar_2\\\\n\\\"} \\u001b[38;5;37mThu Mar 07 2019 05:02:33 GMT-0500 (EST)\\u001b[39m\"\n },\n {\n \"level\": 1,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz\",\n \"relative_path\": \".\",\n \"name\": \"baz\",\n \"extension\": null,\n \"key\": \"baz\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"baz\",\n \"resolved_extension\": null,\n \"resolved_key\": \"baz\",\n \"is_resolved_directory\": true,\n \"is_resolved_file\": false,\n \"is_resolved_link\": false,\n \"is_directory\": true,\n \"is_file\": false,\n \"is_link\": false,\n \"is_resolved\": true,\n \"children\": [\n {\n \"level\": 2,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_1.txt\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_1.txt\",\n \"relative_path\": \".\",\n \"name\": \"baz_1.txt\",\n \"extension\": \".txt\",\n \"key\": \"baz_1\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_1.txt\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_1.txt\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"baz_1.txt\",\n \"resolved_extension\": \".txt\",\n \"resolved_key\": \"baz_1\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": true,\n \"is_resolved_link\": false,\n \"is_directory\": false,\n \"is_file\": true,\n \"is_link\": false,\n \"is_resolved\": true,\n \"children\": null,\n \"meta\": \"\\u001b[38;5;248m- \\u001b[39m\\u001b[38;5;231m\\u001b[48;5;127m 6 bytes \\u001b[39m\\u001b[49m {\\\"data\\\": \\\"baz_1\\\\n\\\"} \\u001b[38;5;37mThu Mar 07 2019 05:02:33 GMT-0500 (EST)\\u001b[39m\"\n },\n {\n \"level\": 2,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_2.txt\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_2.txt\",\n \"relative_path\": \".\",\n \"name\": \"baz_2.txt\",\n \"extension\": \".txt\",\n \"key\": \"baz_2\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_2.txt\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_2.txt\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"baz_2.txt\",\n \"resolved_extension\": \".txt\",\n \"resolved_key\": \"baz_2\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": true,\n \"is_resolved_link\": false,\n \"is_directory\": false,\n \"is_file\": true,\n \"is_link\": false,\n \"is_resolved\": true,\n \"children\": null,\n \"meta\": \"\\u001b[38;5;248m- \\u001b[39m\\u001b[38;5;231m\\u001b[48;5;127m 6 bytes \\u001b[39m\\u001b[49m {\\\"data\\\": \\\"baz_2\\\\n\\\"} \\u001b[38;5;37mThu Mar 07 2019 05:02:33 GMT-0500 (EST)\\u001b[39m\"\n }\n ],\n \"meta\": \"\\u001b[38;5;248m- \\u001b[39m\\u001b[38;5;231m\\u001b[48;5;127m 128 bytes \\u001b[39m\\u001b[49m \\u001b[38;5;37mThu Mar 07 2019 05:02:33 GMT-0500 (EST)\\u001b[39m\"\n }\n ],\n \"meta\": \"\\u001b[38;5;248m- \\u001b[39m\\u001b[38;5;231m\\u001b[48;5;127m 160 bytes \\u001b[39m\\u001b[49m \\u001b[38;5;37mThu Mar 07 2019 05:02:33 GMT-0500 (EST)\\u001b[39m\"\n },\n {\n \"level\": 0,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/baz\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/baz\",\n \"relative_path\": \".\",\n \"name\": \"baz\",\n \"extension\": null,\n \"key\": \"baz\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz\",\n \"resolved_relative_path\": \"../bar/baz\",\n \"resolved_name\": \"baz\",\n \"resolved_extension\": null,\n \"resolved_key\": \"baz\",\n \"is_resolved_directory\": true,\n \"is_resolved_file\": false,\n \"is_resolved_link\": false,\n \"is_directory\": true,\n \"is_file\": false,\n \"is_link\": true,\n \"is_resolved\": true,\n \"children\": null,\n \"meta\": \"\\u001b[38;5;248m- \\u001b[39m\\u001b[38;5;231m\\u001b[48;5;127m 128 bytes \\u001b[39m\\u001b[49m \\u001b[38;5;37mThu Mar 07 2019 05:02:33 GMT-0500 (EST)\\u001b[39m\"\n },\n {\n \"level\": 0,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/baz_1.txt\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/baz_1.txt\",\n \"relative_path\": \".\",\n \"name\": \"baz_1.txt\",\n \"extension\": \".txt\",\n \"key\": \"baz_1\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_1.txt\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/bar/baz/baz_1.txt\",\n \"resolved_relative_path\": \"../bar/baz/baz_1.txt\",\n \"resolved_name\": \"baz_1.txt\",\n \"resolved_extension\": \".txt\",\n \"resolved_key\": \"baz_1\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": true,\n \"is_resolved_link\": false,\n \"is_directory\": false,\n \"is_file\": true,\n \"is_link\": true,\n \"is_resolved\": true,\n \"children\": null,\n \"meta\": \"\\u001b[38;5;248m- \\u001b[39m\\u001b[38;5;231m\\u001b[48;5;127m 6 bytes \\u001b[39m\\u001b[49m {\\\"data\\\": \\\"baz_1\\\\n\\\"} \\u001b[38;5;37mThu Mar 07 2019 05:02:33 GMT-0500 (EST)\\u001b[39m\"\n },\n {\n \"level\": 0,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/foo_1.txt\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/foo_1.txt\",\n \"relative_path\": \".\",\n \"name\": \"foo_1.txt\",\n \"extension\": \".txt\",\n \"key\": \"foo_1\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/foo_1.txt\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/foo_1.txt\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"foo_1.txt\",\n \"resolved_extension\": \".txt\",\n \"resolved_key\": \"foo_1\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": true,\n \"is_resolved_link\": false,\n \"is_directory\": false,\n \"is_file\": true,\n \"is_link\": false,\n \"is_resolved\": true,\n \"children\": null,\n \"meta\": \"\\u001b[38;5;248m- \\u001b[39m\\u001b[38;5;231m\\u001b[48;5;127m 6 bytes \\u001b[39m\\u001b[49m {\\\"data\\\": \\\"foo_1\\\\n\\\"} \\u001b[38;5;37mThu Mar 07 2019 05:02:33 GMT-0500 (EST)\\u001b[39m\"\n },\n {\n \"level\": 0,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/foo_2.txt\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/foo_2.txt\",\n \"relative_path\": \".\",\n \"name\": \"foo_2.txt\",\n \"extension\": \".txt\",\n \"key\": \"foo_2\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/foo_2.txt\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/foo_2.txt\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"foo_2.txt\",\n \"resolved_extension\": \".txt\",\n \"resolved_key\": \"foo_2\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": true,\n \"is_resolved_link\": false,\n \"is_directory\": false,\n \"is_file\": true,\n \"is_link\": false,\n \"is_resolved\": true,\n \"children\": null,\n \"meta\": \"\\u001b[38;5;248m- \\u001b[39m\\u001b[38;5;231m\\u001b[48;5;127m 6 bytes \\u001b[39m\\u001b[49m {\\\"data\\\": \\\"foo_2\\\\n\\\"} \\u001b[38;5;37mThu Mar 07 2019 05:02:33 GMT-0500 (EST)\\u001b[39m\"\n },\n {\n \"level\": 0,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/xxx\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/xxx\",\n \"relative_path\": \".\",\n \"name\": \"xxx\",\n \"extension\": null,\n \"key\": \"xxx\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/xxx\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/xxx\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"xxx\",\n \"resolved_extension\": null,\n \"resolved_key\": \"xxx\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": false,\n \"is_resolved_link\": true,\n \"is_directory\": false,\n \"is_file\": false,\n \"is_link\": true,\n \"is_resolved\": false,\n \"children\": null,\n \"meta\": \"\\u001b[38;5;226m(!) could not read/resolve\\u001b[39m\"\n },\n {\n \"level\": 0,\n \"path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/xxx.txt\",\n \"absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/xxx.txt\",\n \"relative_path\": \".\",\n \"name\": \"xxx.txt\",\n \"extension\": \".txt\",\n \"key\": \"xxx\",\n \"resolved_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/xxx.txt\",\n \"resolved_absolute_path\": \"/Users/grimen/Dev/Private/python-palmtree/palmtree/tests/__fixtures__/foo/xxx.txt\",\n \"resolved_relative_path\": \".\",\n \"resolved_name\": \"xxx.txt\",\n \"resolved_extension\": \".txt\",\n \"resolved_key\": \"xxx\",\n \"is_resolved_directory\": false,\n \"is_resolved_file\": false,\n \"is_resolved_link\": true,\n \"is_directory\": false,\n \"is_file\": false,\n \"is_link\": true,\n \"is_resolved\": false,\n \"children\": null,\n \"meta\": \"\\u001b[38;5;226m(!) could not read/resolve\\u001b[39m\"\n }\n]\n```\n\n\n## Test\n\nClone down source code:\n\n```sh\n$ make install\n```\n\nRun **colorful tests**, with only native environment (dependency sandboxing up to you):\n\n```sh\n$ make test\n```\n\nRun **less colorful tests**, with **multi-environment** (using **tox**):\n\n```sh\n$ make test-tox\n```\n\n\n## Related\n\n- [**`node-palmtree`**](https://github.com/grimen/node-palmtree) - *\"A pretty filesystem tree inspection utility - for Node.js\"*\n\n\n## About\n\nThis project was mainly initiated - in lack of solid existing alternatives - to be used at our work at **[Markable.ai](https://markable.ai)** to have common code conventions between various programming environments where **Python** (research, CV, AI) is heavily used.\n\n\n## License\n\nReleased under the MIT license.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/grimen/python-palmtree", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/grimen/python-palmtree", "keywords": "tree,inspect,inspector,debug,debugger,filesystem,fs,file,link,directory,folder,path,meta,colors,pretty", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "palmtree", "package_url": "https://pypi.org/project/palmtree/", "platform": "", "project_url": "https://pypi.org/project/palmtree/", "project_urls": { "Download": "https://github.com/grimen/python-palmtree", "Homepage": "https://github.com/grimen/python-palmtree", "bugs": "https://github.com/grimen/python-palmtree/issues", "repository": "https://github.com/grimen/python-palmtree" }, "release_url": "https://pypi.org/project/palmtree/0.2.1/", "requires_dist": [ "setupextras (>=0.1.5)", "six (>=1.11.0)", "rootpath (>=0.1.0)", "inspecta (>=0.1.0)", "mybad (>=0.1.0)", "attributedict (>=0.1.0)", "colorful (>=0.5.0)", "colour-runner (>=0.0.5)", "deepdiff (>=3.3.0)", "tox (>=3.0.0)", "coverage (>=4.5.2)", "codecov (>=2.0.15)" ], "requires_python": "", "summary": "A pretty filesystem tree inspection utility - for Python.", "version": "0.2.1" }, "last_serial": 5513334, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "ca5f3518b9d61d6caf51a5046972581d", "sha256": "30242e59f7269000b6fafe34067c6c8e334c78faa5b62de02a278d944c5350e6" }, "downloads": -1, "filename": "palmtree-0.1.0-py2-none-any.whl", "has_sig": false, "md5_digest": "ca5f3518b9d61d6caf51a5046972581d", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 19302, "upload_time": "2019-03-09T07:01:01", "url": "https://files.pythonhosted.org/packages/76/b6/d1e0b1ec701688943e1a96ea451f3bbae11664351a8161961fce42624f8a/palmtree-0.1.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "be9beaba1a8dc9b58e1439639d2d81ea", "sha256": "d1dc1b715212312fb3b735394a3d72ea178ca073281508e06fb36cf60cb63b2f" }, "downloads": -1, "filename": "palmtree-0.1.0.tar.gz", "has_sig": false, "md5_digest": "be9beaba1a8dc9b58e1439639d2d81ea", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22486, "upload_time": "2019-03-09T07:01:03", "url": "https://files.pythonhosted.org/packages/ad/d8/6e26aa0198cb3a0c1e932972b6a332fdf0d72806984435aafea99d33c007/palmtree-0.1.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "60fd8b608aa7591da2c8633060a697cc", "sha256": "26ab94a7fcf2da33ee068af0bf1284abbf4c43e4a5e0acd2147d7e3fe1c4da13" }, "downloads": -1, "filename": "palmtree-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "60fd8b608aa7591da2c8633060a697cc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15587, "upload_time": "2019-07-10T18:08:29", "url": "https://files.pythonhosted.org/packages/21/c2/222dbe0257c9c3132d0f749480b45cbe44ca0678cc93496ca89dc96dd47a/palmtree-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e3f263275831ea5b3ef77d11caa35a30", "sha256": "f43751c3691512040492ed06d19d44cb4a5cf4181ec837fd5b16334e17e052f3" }, "downloads": -1, "filename": "palmtree-0.2.1.tar.gz", "has_sig": false, "md5_digest": "e3f263275831ea5b3ef77d11caa35a30", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22187, "upload_time": "2019-07-10T18:08:31", "url": "https://files.pythonhosted.org/packages/36/97/c684d3397ce4c8a42da3257289a64cb31338b954b1ac4b8ea42945c622b0/palmtree-0.2.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "60fd8b608aa7591da2c8633060a697cc", "sha256": "26ab94a7fcf2da33ee068af0bf1284abbf4c43e4a5e0acd2147d7e3fe1c4da13" }, "downloads": -1, "filename": "palmtree-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "60fd8b608aa7591da2c8633060a697cc", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15587, "upload_time": "2019-07-10T18:08:29", "url": "https://files.pythonhosted.org/packages/21/c2/222dbe0257c9c3132d0f749480b45cbe44ca0678cc93496ca89dc96dd47a/palmtree-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e3f263275831ea5b3ef77d11caa35a30", "sha256": "f43751c3691512040492ed06d19d44cb4a5cf4181ec837fd5b16334e17e052f3" }, "downloads": -1, "filename": "palmtree-0.2.1.tar.gz", "has_sig": false, "md5_digest": "e3f263275831ea5b3ef77d11caa35a30", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22187, "upload_time": "2019-07-10T18:08:31", "url": "https://files.pythonhosted.org/packages/36/97/c684d3397ce4c8a42da3257289a64cb31338b954b1ac4b8ea42945c622b0/palmtree-0.2.1.tar.gz" } ] }