{ "info": { "author": "Ofir Manor", "author_email": "ofir.manor@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# nicetable\n* A clean and elegant way to print text tables in Python with minimal boilerplate code.\n* Built with modern Python (including type annotations) and has an extensive test suite. Requires Python 3.6 and up.\n\n## Quickstart\n'NiceTable' object is printable. In its simplest form, you just pass your data object to the constructor: \n````python\nfrom nicetable.nicetable import NiceTable\n\ninput = [{\"name\": \"Jones Green\", \"height_cm\": 98.8, \"shirt\": \"XL\"},\n {\"name\": \"Jill\", \"height_cm\": 175, \"birth_year\": 1956}]\nprint(NiceTable(input))\n````\nOutput:\n````\n+---------------+-------------+---------+--------------+\n| name | height_cm | shirt | birth_year |\n+---------------+-------------+---------+--------------+\n| Jones Green | 98.8 | XL | None |\n| Jill | 175.0 | None | 1956 |\n+---------------+-------------+---------+--------------+\n````\nNote that:\n1. The input is a list of dicts. A column was generated for each unique key in those dicts. \n2. String columns are by default left adjusted, and their column width is set automatically by the longest value. \n3. Numeric columns are nicely well-aligned by the digit to the right (see the height_cm column). \n\nYou can specify a different layout as the second parameter and pass other formatting options by name. \nYou can also use a dot notation to specify column-level options (by column name or column position). \nFor example, printing as a pipe-delimited CSV, or printing as a regular CSV, without an header line, when None values are printed as 'N/A' only for the 'shirt' column:\n````python\nfrom nicetable.nicetable import NiceTable\n\ninput = [{\"name\": \"Jones Green\", \"height_cm\": 98.8, \"shirt\": \"XL\"},\n {\"name\": \"Jill\", \"height_cm\": 175, \"birth_year\": 1956}]\n\nprint(NiceTable(input, 'csv', sep_vertical='|'))\nprint(NiceTable(input, 'csv', header=False).set_col_options('shirt', none_string='N/A'))\n````\nOutput:\n````\nname|height_cm|shirt|birth_year\nJones Green|167.8|XL|None\nJill|175|None|1956\n\nJones Green,167.8,XL,None\nJill,175,N/A,1956\n````\n### Working with different input types and column names \n#### List of lists / List of tuples\nThese inputs are interpreted as list of rows, each with a list / tuple of columns values. \n* if you *DO NOT* specify column names, they will be assigned automatically, as 'C001', 'C002' etc:\n````python\nfrom nicetable.nicetable import NiceTable\n\ninput = [[1], (1,2,3), [1,3,5,7,9]]\nprint(NiceTable(input))\n````\nOutput:\n````\n+--------+--------+--------+--------+--------+\n| c001 | c002 | c003 | c004 | c005 |\n+--------+--------+--------+--------+--------+\n| 1 | None | None | None | None |\n| 1 | 2 | 3 | None | None |\n| 1 | 3 | 5 | 7 | 9 |\n+--------+--------+--------+--------+--------+\n````\n* If you *DO* specify a list of column names, those will be used instead of the auto-generated names. \nThe next example uses the function `NiceTable.builtin_layouts()` that returns a list of lists:\n````python\nfrom nicetable.nicetable import NiceTable\n\nprint(NiceTable(NiceTable.builtin_layouts(), col_names=['Layout', 'Description']))\n````\nOutput:\n````\n+-----------+------------------------------------------------------------------------------------------------------+\n| Layout | Description |\n+-----------+------------------------------------------------------------------------------------------------------+\n| csv | comma-separated values with a one-line header. |\n| default | fixed-width table with data auto-alignment. |\n| grep | tab-separated values with no header. Great for CLI output, easily post-processed by cut, grep etc. |\n| md | for tables inside Markdown(.md) files, using the GFM table extension. Ex: README.md on github. |\n| tsv | tab-separated values with a one-line header. |\n+-----------+------------------------------------------------------------------------------------------------------+\n````\n\n#### List of dicts \nThis input is interpreted as list of rows, each with a dict of {column name : column value} pairs.\n* If you *DO NOT* specify column names, they will be collected from the input, as in the first example:\n ````python\nfrom nicetable.nicetable import NiceTable\n\ninput = [{\"name\": \"Jones Green\", \"height_cm\": 98.8, \"shirt\": \"XL\"},\n {\"name\": \"Jill\", \"height_cm\": 175, \"birth_year\": 1956}]\nprint(NiceTable(input))\n````\nOutput:\n````\n+---------------+-------------+---------+--------------+\n| name | height_cm | shirt | birth_year |\n+---------------+-------------+---------+--------------+\n| Jones Green | 98.8 | XL | None |\n| Jill | 175.0 | None | 1956 |\n+---------------+-------------+---------+--------------+\n````\n* If you *DO* specify a list of column names, *ONLY THOSE COLUMNS WILL BE COLLECTED*. \nFor example, collecting only three columns, and setting a specific column order:\n ````python\nfrom nicetable.nicetable import NiceTable\n\ninput = [{\"name\": \"Jones Green\", \"height_cm\": 98.8, \"shirt\": \"XL\"},\n {\"name\": \"Jill\", \"height_cm\": 175, \"birth_year\": 1956}]\nprint(NiceTable(input, col_names=['name', 'birth_year', 'height_cm']))\n````\nOutput:\n````\n+---------------+--------------+-------------+\n| name | birth_year | height_cm |\n+---------------+--------------+-------------+\n| Jones Green | None | 98.8 |\n| Jill | 1956 | 175.0 |\n+---------------+--------------+-------------+\n````\n* If you want to collect all columns, but provide them a new name, use the `rename_columns()` function.\n ````python\nfrom nicetable.nicetable import NiceTable\n\ninput = [{\"name\": \"Jones Green\", \"height_cm\": 98.8, \"shirt\": \"XL\"},\n {\"name\": \"Jill\", \"height_cm\": 175, \"birth_year\": 1956}]\nprint(NiceTable(input).rename_columns(['Name', 'Height(cm)', 'Shirt Size', 'Year of Birth']))\n````\nOutput:\n````\n+---------------+--------------+--------------+-----------------+\n| Name | Height(cm) | Shirt Size | Year of Birth |\n+---------------+--------------+--------------+-----------------+\n| Jones Green | 98.8 | XL | None |\n| Jill | 175.0 | None | 1956 |\n+---------------+--------------+--------------+-----------------+\n````\n\n### Fine-grained NiceTable control \nInstead of creating a NiceTable object inside a print() statement, you can alternatively:\n1. Create a standalone NiceTable object, specifying a list of column names. \n2. Populate it iteratively with the append() function, passing a list, a tuple or a dict, representing a new row.\n3. Print it multiple times with different formatting. \n\nThis example uses the string `NiceTable.SAMPLE_JSON`, parses it as JSON, and chery-pick four columns: \n````python\nimport json\nfrom nicetable.nicetable import NiceTable\n\nout = NiceTable(col_names=['Name', 'Type', 'Height(cm)', 'Weight(kg)'])\nfor pokemon in json.loads(NiceTable.SAMPLE_JSON):\n out.append([pokemon['name'], pokemon['type'], pokemon['height'], pokemon['weight']])\n\nprint(out)\nout.layout = 'md'\nprint(out)\n````\nOutput:\n````\n+-------------+----------------+--------------+--------------+\n| Name | Type | Height(cm) | Weight(kg) |\n+-------------+----------------+--------------+--------------+\n| Bulbasaur | Grass/Poison | 70 | 6.901 |\n| Pikachu | Electric | 40 | 6.100 |\n| Mewtwo | Psychic | 200 | 122.000 |\n+-------------+----------------+--------------+--------------+\n\n| Name | Type | Height(cm) | Weight(kg) |\n|-------------|----------------|--------------|--------------|\n| Bulbasaur | Grass/Poison | 70 | 6.901 |\n| Pikachu | Electric | 40 | 6.100 |\n| Mewtwo | Psychic | 200 | 122.000 |\n````\n\n## Table-level settings\nBelow is the list of the table-level settings, which you can use in the constructor, or set on an existing NiceTable object: \n\n| Setting | Type | Default | Description |\n|-------------------------|------------|-----------|--------------------------------------------------------------------------------------------------------------------------------|\n| header | bool | 1 | whether the table header will be printed |\n| header_sepline | bool | 1 | if the header is printed, whether a sepline will be printed after it |\n| header_adjust | str | left | adjust of the column names, one of: ['left', 'center', 'right', 'compact'] |\n| sep_vertical | str | \\| | a vertical separator string |\n| sep_horizontal | str | - | a horizontal separator string |\n| sep_cross | str | + | a crossing separator string (where vertical and horizontal separators meet) |\n| border_top | bool | 1 | whether the table top border will be printed |\n| border_bottom | bool | 1 | whether the table bottom border will be printed |\n| border_left | bool | 1 | whether the table left border will be printed |\n| border_right | bool | 1 | whether the table right border will be printed |\n| cell_adjust | str | auto | adjust of the values, one of: ['auto', 'left', 'center', 'right', 'compact', 'strict_left', 'strict_center', 'strict_right'] |\n| cell_spacing | int | 2 | number of spaces to add to each side of a value |\n| value_min_len | int | 1 | minimal string length of a value. Shorter values will be space-padded |\n| value_max_len | int | 9999 | maximum string length of a value |\n| value_too_long_policy | str | wrap | handling of a string longer than `value_max_len`, one of: ['truncate', 'wrap'] |\n| value_newline_replace | str | None | if set, replace newlines in string value with this |\n| value_none_string | str | None | string representation of the None value |\n| value_escape_type | str | ignore | handling of `sep_vertical` inside a value, one of: ['remove', 'replace', 'prefix', 'ignore'] |\n| value_escape_char | str | \\ | a string to replace or prefix `sep_vertical`, based on `value_escape_type` |\n| value_func | function | None | a function to pre-process the value before any other settings apply |\n\n*The table above was generated from `NiceTable.FORMATTING_SETTINGS`, using the `md` layout:*\n````python\nfrom nicetable.nicetable import NiceTable\n\nprint(NiceTable(NiceTable.FORMATTING_SETTINGS,\n 'md', \n ['Setting', 'Type', 'Default', 'Description']))\n````\n\n## Column-level settings\nThe `set_col_options()` function sets allows you to set the following settings at the column-level:\n\n| Parameter | Meaning |\n| ----------------|------------------------------------------------|\n| adjust | overrides the table-wide cell_adjust |\n| max_len | overrides the table-wide value_max_len |\n| newline_replace | overrides the table-wide value_newline_replace |\n| none_string | overrides the table-wide value_none_string |\n| func | overrides the table-wide value_func |\n\nThis function accepts either a column name or a column position for the first parameter. For example: \n````python\nimport json\nfrom nicetable.nicetable import NiceTable\n\nout = NiceTable(json.loads(NiceTable.SAMPLE_JSON))\nout.rename_columns(['ID','Name', 'Type', 'Height(cm)', ' Weight(kg)'])\n# set the second column options by position (column positions starts from zero)\nout.set_col_options(1, adjust='center')\n# set the third column options by column name\nout.set_col_options('Type',\n func=lambda x: x.lower() if x != 'Electric' else None,\n none_string='N/A')\nprint(out)\n````\nOutput:\n````\n+-------+-------------+----------------+--------------+---------------+\n| ID | Name | Type | Height(cm) | Weight(kg) |\n+-------+-------------+----------------+--------------+---------------+\n| 001 | Bulbasaur | grass/poison | 70 | 6.901 |\n| 025 | Pikachu | N/A | 40 | 6.100 |\n| 150 | Mewtwo | psychic | 200 | 122.000 |\n+-------+-------------+----------------+--------------+---------------+\n````\n\n\n## Cell adjustment\n* Cell contents can be adjusted `left`, `center` or `right`, and are space-padded to the width of the longest value in the column (see also next section on wrapping). \nAlternatively, cell contents can be kept as-is with `compact` adjustment, though it means that the table vertical lines will not align (this is used in some layouts such as `csv`).\n* The default adjustment is `auto`, meaning that numeric columns (those with only numbers or None values) are adjusted `right`, and non-numeric columns are adjusted `left`. \n* Numeric columns automatically well-aligned, meaning all their ones digit are printed in the same position. \nTo print them as strings, add a `strict_` prefix to the adjust, like `strict_left`. For example:\n````\n+-----------------+-------------------+------------------+---------------+-----------------+----------------+\n| standard left | standard center | standard right | strict_left | strict_center | strict_right |\n+-----------------+-------------------+------------------+---------------+-----------------+----------------+\n| 6.901 | 6.901 | 6.901 | 6.901 | 6.901 | 6.901 |\n| 6.000 | 6.000 | 6.000 | 6 | 6 | 6 |\n| 1.000 | 1.000 | 1.000 | 1 | 1 | 1 |\n| 122.000 | 122.000 | 122.000 | 122 | 122 | 122 |\n+-----------------+-------------------+------------------+---------------+-----------------+----------------+\n````\n*The example above uses long column names on purpose, otherwise `left`, `center` and `right` would look the same,\nas all the numbers in each column have the same fixed width (based on their longest column value).*\n\n## Text wrapping and newlines\n`NiceTable` supports handling long values and newlines in both column names and cell values. \n#### Text wrapping\nWhen a value is longer than `value_max_len`, it handled by a `value_too_long_policy` policy. \nThe default policy is `wrap`, which means the value will be broken to multiple lines every `value_max_len` characters. \nAlternatively, specify the `truncate` policy to have to values truncated. \nThe following examples demonstrates the two policies:\n````python\nfrom nicetable.nicetable import NiceTable\n\nout = NiceTable(col_names=['Code', 'Product Description(Long)'])\nout.append([1, 'Boeing 777. Batteries not included. May contain nuts.'])\nout.append([2, 'Sack of sand'])\nprint(out)\nout.value_max_len = 19\nprint(out)\nout.value_too_long_policy = 'truncate'\nprint(out)\n````\nOutput:\n````\n+--------+---------------------------------------------------------+\n| Code | Product Description(Long) |\n+--------+---------------------------------------------------------+\n| 1 | Boeing 777. Batteries not included. May contain nuts. |\n| 2 | Sack of sand |\n+--------+---------------------------------------------------------+\n\n+--------+-----------------------+\n| Code | Product Description |\n| | (Long) |\n+--------+-----------------------+\n| 1 | Boeing 777. Batteri |\n| | es not included. Ma |\n| | y contain nuts. |\n| 2 | Sack of sand |\n+--------+-----------------------+\n\n+--------+-----------------------+\n| Code | Product Description |\n+--------+-----------------------+\n| 1 | Boeing 777. Batteri |\n| 2 | Sack of sand |\n+--------+-----------------------+\n````\n#### Newlines \nWhen newlines are encountered in a column name or a value, they by default cause the text to wrap. Alternatively, you can ask that newlines will be replaced, by setting `value_newline_replace` to an alternative string (default is `None`). \nThe following example first shows the default behavior, and than shows replacing newlines with the string `\\n`:\n````python\nfrom nicetable.nicetable import NiceTable\n\nout = NiceTable(col_names=['Code', 'Product Description\\n(Long)']) \\\n .append([1, 'Boeing 777\\nBatteries not included.\\nMay contain nuts.']) \\\n .append([2, 'Sack of sand'])\nprint(out)\nout.value_newline_replace = '\\\\n'\nprint(out)\n````\nOutput:\n````\n+--------+---------------------------+\n| Code | Product Description |\n| | (Long) |\n+--------+---------------------------+\n| 1 | Boeing 777 |\n| | Batteries not included. |\n| | May contain nuts. |\n| 2 | Sack of sand |\n+--------+---------------------------+\n\n+--------+----------------------------------------------------------+\n| Code | Product Description\\n(Long) |\n+--------+----------------------------------------------------------+\n| 1 | Boeing 777\\nBatteries not included.\\nMay contain nuts. |\n| 2 | Sack of sand |\n+--------+----------------------------------------------------------+\n````\n#### Escaping\nThe values in different columns of the same row are separated by the vertical separator string (default is `|`, set by the `sep_vertical` property). \nWhat happens if the content of a cell contains that string? It might be irrelevant if the output is just viewed by a person, but it might matter if the string output will be processed by another program (for example, for the `CSV` layout). \nThere are four supported behaviors you can choose from, if the one set by the layout you picked is not appropriate: \n1. **ignore**: no special handling of the vertical separator in a a cell, it is printed as is. \nThis is the default escaping behavior.\n2. **remove**: the vertical separator is removed. \nThis is set by the `csv` layout and its derivatives (`tsv` and `grep` layouts).\n3. **prefix**: the vertical separator is prefixed by another string, controlled by `value_escape_char`. \n This is set by the `md` layout, which uses `\\` as a prefix.\n4. **replace**: the vertical separator is prefixed by another string, controlled by `value_escape_char`.\n\n\n## Others\n**get_column(col)** \nreturns a `List` of the column values. \n\n\n## Adding a custom layout\nTo add a custom layout based on the existing options, you can inherit from `NiceTable` \nand define your own layout function. \nThe description of your function will be incorporated in the `builtin_layouts()` output\n````python\nfrom nicetable.nicetable import NiceTable\n\nclass MyNiceTable(NiceTable):\n def _layout_as_winter_columns(self) -> None:\n \"\"\"Table with a winter-themed separator. Quite Ugly.\"\"\"\n self.sep_vertical = '\u2744\u2602\ud83c\udf27\u2602\u2744'\n self.sep_cross = '\u2744\u2602\ud83c\udf27\u2602\u2744'\n self.sep_horizontal = '\u02e3'\n\nprint(MyNiceTable(MyNiceTable.builtin_layouts(),\n 'winter_columns',\n ['Layout', 'Description']))\n````\nOutput:\n````\n\u2744\u2602\ud83c\udf27\u2602\u2744\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u2744\u2602\ud83c\udf27\u2602\u2744\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u2744\u2602\ud83c\udf27\u2602\u2744\n\u2744\u2602\ud83c\udf27\u2602\u2744 Layout \u2744\u2602\ud83c\udf27\u2602\u2744 Description \u2744\u2602\ud83c\udf27\u2602\u2744\n\u2744\u2602\ud83c\udf27\u2602\u2744\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u2744\u2602\ud83c\udf27\u2602\u2744\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u2744\u2602\ud83c\udf27\u2602\u2744\n\u2744\u2602\ud83c\udf27\u2602\u2744 csv \u2744\u2602\ud83c\udf27\u2602\u2744 comma-separated values with a one-line header. \u2744\u2602\ud83c\udf27\u2602\u2744\n\u2744\u2602\ud83c\udf27\u2602\u2744 default \u2744\u2602\ud83c\udf27\u2602\u2744 fixed-width table with data auto-alignment. \u2744\u2602\ud83c\udf27\u2602\u2744\n\u2744\u2602\ud83c\udf27\u2602\u2744 grep \u2744\u2602\ud83c\udf27\u2602\u2744 tab-separated values with no header. Great for CLI output, easily post-processed by cut, grep etc. \u2744\u2602\ud83c\udf27\u2602\u2744\n\u2744\u2602\ud83c\udf27\u2602\u2744 md \u2744\u2602\ud83c\udf27\u2602\u2744 for tables inside Markdown(.md) files, using the GFM table extension. Ex: README.md on github. \u2744\u2602\ud83c\udf27\u2602\u2744\n\u2744\u2602\ud83c\udf27\u2602\u2744 tsv \u2744\u2602\ud83c\udf27\u2602\u2744 tab-separated values with a one-line header. \u2744\u2602\ud83c\udf27\u2602\u2744\n\u2744\u2602\ud83c\udf27\u2602\u2744 winter_columns \u2744\u2602\ud83c\udf27\u2602\u2744 Table with a winter-themed separator. Quite Ugly. \u2744\u2602\ud83c\udf27\u2602\u2744\n\u2744\u2602\ud83c\udf27\u2602\u2744\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u2744\u2602\ud83c\udf27\u2602\u2744\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u02e3\u2744\u2602\ud83c\udf27\u2602\u2744\n````\nNote that the new layout and its description were added the output of `builtin_layouts()` of the new class.\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/ofirmanor/nicetable", "keywords": "table tabular textual display data formatter ascii", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "nicetable", "package_url": "https://pypi.org/project/nicetable/", "platform": "", "project_url": "https://pypi.org/project/nicetable/", "project_urls": { "Homepage": "https://github.com/ofirmanor/nicetable" }, "release_url": "https://pypi.org/project/nicetable/0.7.0/", "requires_dist": null, "requires_python": ">=3.6", "summary": "A clean and elegant way to print text tables in Python with minimal boilerplate code", "version": "0.7.0" }, "last_serial": 5468260, "releases": { "0.5.2": [ { "comment_text": "", "digests": { "md5": "ae1f24f39a645d8b822090031dfa137c", "sha256": "5c9d5c67b0887a0c8df554c4bd035022f96a6b411fc65dacd680c3174881fa01" }, "downloads": -1, "filename": "nicetable-0.5.2-py3-none-any.whl", "has_sig": false, "md5_digest": "ae1f24f39a645d8b822090031dfa137c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 14981, "upload_time": "2019-01-06T19:04:23", "url": "https://files.pythonhosted.org/packages/aa/d8/8035ac9530fe8494e6200cf6c1cf1e703a7ab63e6821b086ef0480726303/nicetable-0.5.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "947c0299b285f1e311608f425da9bb39", "sha256": "f011eca682d6e88c99e075ae7f364689eecb87a2bb1398a944be10b559123c03" }, "downloads": -1, "filename": "nicetable-0.5.2.tar.gz", "has_sig": false, "md5_digest": "947c0299b285f1e311608f425da9bb39", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 15145, "upload_time": "2019-01-06T19:04:26", "url": "https://files.pythonhosted.org/packages/4d/25/611e08a5f485a574104265a73de727f4b258160d277acd6c4ccb7d301378/nicetable-0.5.2.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "24d0df302f12f32d63e8542f76a4f0ba", "sha256": "3d36dddce0d2856f2640dfe2f2ed2f482625e6ab96058f84b71d7e52467c3cca" }, "downloads": -1, "filename": "nicetable-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "24d0df302f12f32d63e8542f76a4f0ba", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 19154, "upload_time": "2019-01-14T13:45:29", "url": "https://files.pythonhosted.org/packages/b5/b6/5679afb52f98c11c4cfac9e9e0e1ecbdb46d89dd31e087dbf48559ace28c/nicetable-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3e6c12f88cc37b3cbdf1a759bc169b93", "sha256": "f47cb05f0b7c962956069fd7273c7da9b5f5c8a2b819615a61d064fca679a928" }, "downloads": -1, "filename": "nicetable-0.6.0.tar.gz", "has_sig": false, "md5_digest": "3e6c12f88cc37b3cbdf1a759bc169b93", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 20202, "upload_time": "2019-01-14T13:45:30", "url": "https://files.pythonhosted.org/packages/34/e3/d83dffa67cd77343060250f1edf543178044b0f2d0afeac3851fa72a2456/nicetable-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "c638dfef616f846772003adae8da8887", "sha256": "6152e77b7a06247ef672ecf50d09bf31d88e5958cedd3d880a02dadbf915c258" }, "downloads": -1, "filename": "nicetable-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c638dfef616f846772003adae8da8887", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 21056, "upload_time": "2019-06-30T16:06:12", "url": "https://files.pythonhosted.org/packages/a8/38/5a6117d6565148ced92b7e96edaa824d6c6ee8f1e0cd989dd3bb440fcc2f/nicetable-0.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6e193ae7455cd72648f9e8e726e3edd1", "sha256": "f9851ce69c2e820303bb8265432c85a50b73760faff85d2e8f1fa9be8c833a88" }, "downloads": -1, "filename": "nicetable-0.7.0.tar.gz", "has_sig": false, "md5_digest": "6e193ae7455cd72648f9e8e726e3edd1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 19365, "upload_time": "2019-06-30T16:06:13", "url": "https://files.pythonhosted.org/packages/95/8e/56dc71f653d40bd079c8778fb8209008f21853cad6d023217ae785aea424/nicetable-0.7.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c638dfef616f846772003adae8da8887", "sha256": "6152e77b7a06247ef672ecf50d09bf31d88e5958cedd3d880a02dadbf915c258" }, "downloads": -1, "filename": "nicetable-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c638dfef616f846772003adae8da8887", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 21056, "upload_time": "2019-06-30T16:06:12", "url": "https://files.pythonhosted.org/packages/a8/38/5a6117d6565148ced92b7e96edaa824d6c6ee8f1e0cd989dd3bb440fcc2f/nicetable-0.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6e193ae7455cd72648f9e8e726e3edd1", "sha256": "f9851ce69c2e820303bb8265432c85a50b73760faff85d2e8f1fa9be8c833a88" }, "downloads": -1, "filename": "nicetable-0.7.0.tar.gz", "has_sig": false, "md5_digest": "6e193ae7455cd72648f9e8e726e3edd1", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 19365, "upload_time": "2019-06-30T16:06:13", "url": "https://files.pythonhosted.org/packages/95/8e/56dc71f653d40bd079c8778fb8209008f21853cad6d023217ae785aea424/nicetable-0.7.0.tar.gz" } ] }