Skip to main content

A lightweight CLI + lib that allows you to perform basic IO tasks and display your content as rich trees and tables.

Project description

A many-in-one tool for managing your Markup Language files.

What is it?

iotree is a tool for managing your Markup Language files. It is capable to write and read files in the following formats:

  • JSON
  • YAML
  • TOML
  • XML
  • And soon more... 😉

The basic goal was to have a small package anyone could add to their project and use it to manage their files. It is also possible to use it as a CLI tool.

Installation

You cannot install the CLI tool separately for now. You can install it with the following command:

pip install iotree

Usage

As a CLI tool

To see what the display function can do, you can use the following command:

iotree demo

For example, the following JSON file (displayed in VSCode)

{
    "glossary": {
        "title": "example glossary",
        "GlossDiv": {
            "title": "S",
            "GlossList": {
                "GlossEntry": {
                    "ID": "SGML",
                    "SortAs": "SGML",
                    "GlossTerm": "Standard Generalized Markup Language",
                    "Acronym": "SGML",
                    "Abbrev": "ISO 8879:1986",
                    "GlossDef": {
                        "para": "A meta-markup language, used to create markup languages such as DocBook.",
                        "GlossSeeAlso": [
                            "GML",
                            "XML"
                        ]
                    },
                    "GlossSee": "markup"
                }
            }
        }
    }
}

will be displayed like this:

JSON file displayed

While the following YAML file (displayed in VSCode)

---
 doe: "a deer, a female deer"
 ray: "a drop of golden sun"
 pi: 3.14159
 xmas: true
 french-hens: 3
 calling-birds:
   - huey
   - dewey
   - louie
   - fred
 xmas-fifth-day:
   calling-birds: four
   french-hens: 3
   golden-rings: 5
   partridges:
     count: 1
     location: "a pear tree"
   turtle-doves: two

will be displayed like this:

YAML file displayed

Note: The CLI tool is not yet finished. It is still in development.
If this just looks like a wrapper around rich trees) to you, it almost because it is. :wink:

As a CLI tool, the key difference I want to bring is the ability to configure themes and styles.

Just run the following command to interactively create a theme:

iotree config init

But if you're lazy, just use a file:

iotree config init from-json my_theme.json

For example, the following JSON file

{   
    "name": "My super pseudonym",
    "username": "my.username",
    "symbol": "lgpoint",
    "theme": "bright-blue-green"
}

Does not immediately affect the display of the files. You need to use the following command:
To understand why, you can run

iotree config ls # same as iotree cfg ls

This is what the output looks like:

iotree config ls

You can see that the theme is registered, but will not be used by default. The best proof of this is to ask who the current user is:

iotree cfg get last_user
#> ✅ Config found for user arnov
#> arnov

So the current user is arnov. To use YOUR theme, you need to run the following command:

iotree cfg set last_user my.username
#> 👷 Config: last_user ===> my.username

Now, if you try to render a file, you will see that the theme is used:

iotree render .\iotree\examples\example.toml

Here's what the output looks like:

iotree render after

The theme is now used. 🎉🎉

As a Python package

You can use the package in your Python project. Here's an example:

from iotree.core.render import build

mydict = {
    "super" : {
        "dict": {
            "just": {
                "for": {
                    "example": "🤷‍♂️"
                }
            }
        }
    }
}

# Build the tree from the dict without hassle

tree = build(mydict) # or build(mydict, theme="my_style", symbol="my_symbol")

# Display the rich tree later

console.print(tree) # or rich.print(tree)

But there is more. You can also use the 'all in one' IO from the package:

from iotree.core.io import reader, writer

# Read a file, any extension is supported from the list

dict_one = reader.read("my_file.json")
dict_two = reader.read("my_file.yaml")
dict_three = reader.read("my_file.toml")
dict_four = reader.read("my_file.xml")
dict_five = reader.read("my_file.html")

# ... do some manipulations, like possibly merging the dicts or creating a new one

# Write the dict to a file

writer.write("my_file.json", dict_one)
writer.write("my_file.yaml", dict_two)
writer.write("my_file.toml", dict_three)
writer.write("my_file.xml", dict_four)
# writer.write("my_file.html", dict_five) # Not supported yet

Another small feature is the ability to detect the type of a file:

dict_guess = reader.read("mysterious_file.not_a_real_extension")
# if the content of the file is one of the supported types, it will be read correctly

There's also a functional package, which is not yet documented.
It allows you to compose functions while displaying rich progress using rich.progress.

Contributing

If you want to contribute, you can do so by forking the repository and creating a pull request.

You can also help me pick the new themes and symbols.

To see the possibilities, just run either of the following commands:

iotree view themes # or
iotree view symbols # or
iotree view colors

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

iotree-0.1.22.post1.tar.gz (32.2 kB view details)

Uploaded Source

Built Distribution

iotree-0.1.22.post1-py3-none-any.whl (38.0 kB view details)

Uploaded Python 3

File details

Details for the file iotree-0.1.22.post1.tar.gz.

File metadata

  • Download URL: iotree-0.1.22.post1.tar.gz
  • Upload date:
  • Size: 32.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.9.13 Windows/10

File hashes

Hashes for iotree-0.1.22.post1.tar.gz
Algorithm Hash digest
SHA256 088e5fd068a4e3b271251b776f0c4ad68ff74a7dab46a6698f67c9c42311130b
MD5 f3a8237869c22061511f7226f6bf9447
BLAKE2b-256 724bc896949424f50ee5c81aa3dbad474e83dabd7fc4f599a934e40fe7a79320

See more details on using hashes here.

File details

Details for the file iotree-0.1.22.post1-py3-none-any.whl.

File metadata

  • Download URL: iotree-0.1.22.post1-py3-none-any.whl
  • Upload date:
  • Size: 38.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.3.2 CPython/3.9.13 Windows/10

File hashes

Hashes for iotree-0.1.22.post1-py3-none-any.whl
Algorithm Hash digest
SHA256 a51c5c325a2998227a1a63ae808531bae2817838edffa5658077722eee4b3e68
MD5 680717b89a9fc9f585cdb9e0344dcbfd
BLAKE2b-256 886e4141ea72e0c4bf288045ea0f2f874b995bac1c6587b26e95af374cb0cb22

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page