Outputting pretty data structure on console programs
Our application has a command-line API interface for convenient access via shell/console. It used to output API result data in YAML:
# /c/sbin/spanel api --yaml File list --account steven --volume data --dir /public --- dir: atime: '1270675429' ctime: '1285916065' gid: 1023 group: steven is_dir: 1 mtime: '1285916065' perms: 493 uid: 1012 url: ~ user: steven entries: - atime: '1284665000' ctime: '1289609859' dir: /public gid: 1023 group: steven icon_file: folder.gif inode: 1984908 is_dir: 1 is_link: 0 mtime: '1289609859' name: git perms: 493 reldir: '' size: 4096 uid: 1012 url: ~ user: steven - atime: '1270675424' ctime: '1285130140' dir: /public gid: 1023 group: steven icon_file: text.gif inode: 1976727 is_dir: 0 is_link: 0 mtime: '1155368486' name: .htaccess perms: 436 reldir: '' size: 48 uid: 1012 url: ~ user: steven - atime: '1270675424' ctime: '1285130140' dir: /public gid: 1023 group: steven icon_file: unknown.gif inode: 1976725 is_dir: 0 is_link: 0 mtime: '1155368397' name: .htaccess~ perms: 436 reldir: '' size: 63 uid: 1012 url: ~ user: steven total_num_entries: 3 url: ~
YAML is relatively readable if you compare to JSON or (shudder) XML, but I soon grew tired of reading YAML for data that should be tabulated and better formatted for human consumption.
Thus, Data::Format::Pretty::Console. The idea is for me, a lazy programmer, to throw it data structure of various kind and it will display it nicely suitable for console viewing. The command line API interface now by default shows nicely formatted text for API result data (but still provides --yaml and --json option). Please bear with this blog post's misformatting and assume it's all pretty:
dir: .---------------------. | key | value | +--------+------------+ | atime | 1270675429 | | ctime | 1285916065 | | gid | 1023 | | group | steven | | is_dir | 1 | | mtime | 1285916065 | | perms | 493 | | uid | 1012 | | url | | | user | steven | '--------+------------' entries: .----------------------------------------------------------------------------------------------------------------------------------------------------------------------. | atime | ctime | dir | gid | group | icon_file | inode | is_dir | is_link | mtime | name | perms | reldir | size | uid | url | user | +------------+------------+---------+------+--------+-------------+---------+--------+---------+------------+------------+-------+--------+------+------+-----+--------+ | 1284665000 | 1289609859 | /public | 1023 | steven | folder.gif | 1984908 | 1 | 0 | 1289609859 | git | 493 | | 4096 | 1012 | | steven | | 1270675424 | 1285130140 | /public | 1023 | steven | text.gif | 1976727 | 0 | 0 | 1155368486 | .htaccess | 436 | | 48 | 1012 | | steven | | 1270675424 | 1285130140 | /public | 1023 | steven | unknown.gif | 1976725 | 0 | 0 | 1155368397 | .htaccess~ | 436 | | 63 | 1012 | | steven | '------------+------------+---------+------+--------+-------------+---------+--------+---------+------------+------------+-------+--------+------+------+-----+--------' total_num_entries: 3 url:
Cool, looks useful. I often find myself hacking console tables and all that, or using one of the modules for this. But this system doesn't require me to work out how its supposed to look, which will save me time. Thanks! --John