{ "info": { "author": "John Thorvald Wodder II", "author_email": "txtble@varonathe.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython", "Programming Language :: Python :: Implementation :: PyPy", "Topic :: Software Development :: User Interfaces", "Topic :: Text Processing" ], "description": ".. image:: http://www.repostatus.org/badges/latest/active.svg\n :target: http://www.repostatus.org/#active\n :alt: Project Status: Active \u2014 The project has reached a stable, usable\n state and is being actively developed.\n\n.. image:: https://travis-ci.org/jwodder/txtble.svg?branch=master\n :target: https://travis-ci.org/jwodder/txtble\n\n.. image:: https://codecov.io/gh/jwodder/txtble/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/jwodder/txtble\n\n.. image:: https://img.shields.io/pypi/pyversions/txtble.svg\n :target: https://pypi.org/project/txtble/\n\n.. image:: https://img.shields.io/github/license/jwodder/txtble.svg\n :target: https://opensource.org/licenses/MIT\n :alt: MIT License\n\n.. image:: https://img.shields.io/badge/Say%20Thanks-!-1EAEDB.svg\n :target: https://saythanks.io/to/jwodder\n\n`GitHub `_\n| `PyPI `_\n| `Issues `_\n| `Changelog `_\n\n.. contents::\n :backlinks: top\n\n``txtble`` is yet another Python library for creating plain-text tables. (All\nthe good names were taken, OK?) Pass in a list of lists of strings (or other\nstringable things) and get out something nice like::\n\n +---------+----------+------------------+\n |Month |Birthstone|Birth Flower |\n +---------+----------+------------------+\n |January |Garnet |Carnation |\n |February |Amethyst |Violet |\n |March |Aquamarine|Jonquil |\n |April |Diamond |Sweetpea |\n |May |Emerald |Lily Of The Valley|\n |June |Pearl |Rose |\n |July |Ruby |Larkspur |\n |August |Peridot |Gladiolus |\n |September|Sapphire |Aster |\n |October |Opal |Calendula |\n |November |Topaz |Chrysanthemum |\n |December |Turquoise |Narcissus |\n +---------+----------+------------------+\n\nFeatures:\n\n- Rows can be passed as lists or `dict`\\ s\n- ANSI color aware\n- Unicode fullwidth & combining character aware\n- Control the horizontal (left, center, & right) and vertical (top, middle, &\n bottom) alignment of text\n- Align numbers along their decimal points\n- Customize characters used for drawing borders\n- Toggle inter-row, inter-column, and outer borders\n- Set the value used to fill out ragged rows\n- Pad cells on the left & right\n- Set column widths, with long lines wrapped to fit\n- Configure how `None` values are displayed\n\n\nInstallation\n============\nJust use `pip `_ (You have pip, right?) to install\n``txtble`` and its dependencies::\n\n pip install txtble\n\n\nExamples\n========\n\nConstruct & show a basic table::\n\n >>> from txtble import Txtble\n >>> # Taken from /usr/share/misc/birthtoken.gz in Ubuntu Xenial's miscfiles package:\n >>> HEADERS = ['Month', 'Birthstone', 'Birth Flower']\n >>> DATA = [\n ... ['January', 'Garnet', 'Carnation'],\n ... ['February', 'Amethyst', 'Violet'],\n ... ['March', 'Aquamarine', 'Jonquil'],\n ... ['April', 'Diamond', 'Sweetpea'],\n ... ['May', 'Emerald', 'Lily Of The Valley'],\n ... ['June', 'Pearl', 'Rose'],\n ... ['July', 'Ruby', 'Larkspur'],\n ... ['August', 'Peridot', 'Gladiolus'],\n ... ['September', 'Sapphire', 'Aster'],\n ... ['October', 'Opal', 'Calendula'],\n ... ['November', 'Topaz', 'Chrysanthemum'],\n ... ['December', 'Turquoise', 'Narcissus'],\n ... ]\n >>> tbl = Txtble(DATA, headers=HEADERS)\n >>> print(tbl)\n +---------+----------+------------------+\n |Month |Birthstone|Birth Flower |\n +---------+----------+------------------+\n |January |Garnet |Carnation |\n |February |Amethyst |Violet |\n |March |Aquamarine|Jonquil |\n |April |Diamond |Sweetpea |\n |May |Emerald |Lily Of The Valley|\n |June |Pearl |Rose |\n |July |Ruby |Larkspur |\n |August |Peridot |Gladiolus |\n |September|Sapphire |Aster |\n |October |Opal |Calendula |\n |November |Topaz |Chrysanthemum |\n |December |Turquoise |Narcissus |\n +---------+----------+------------------+\n\nThe table can also be constructed like this::\n\n >>> tbl = Txtble(headers=HEADERS)\n >>> tbl.extend(DATA)\n\nOr like this::\n\n >>> tbl = Txtble(headers=HEADERS)\n >>> for row in DATA:\n ... tbl.append(row)\n\nOr even like this::\n\n >>> tbl = Txtble(DATA)\n >>> tbl.headers = HEADERS\n\nThe rows of the table can be lists of values (as seen above) or `dict`\\ s that\nmap header names to values::\n\n >>> tbl = Txtble(\n ... headers = [\"Red\", \"Green\", \"Blue\"],\n ... data = [\n ... {\"Red\": \"Ruby\", \"Green\": \"Emerald\", \"Blue\": \"Sapphire\"},\n ... {\"Red\": \"Fire\", \"Green\": \"Earth\", \"Blue\": \"Water\"},\n ... ],\n ... )\n >>> print(tbl)\n +----+-------+--------+\n |Red |Green |Blue |\n +----+-------+--------+\n |Ruby|Emerald|Sapphire|\n |Fire|Earth |Water |\n +----+-------+--------+\n\nMissing `dict` keys can be filled in with the ``dict_fill`` option (Without it,\nyou'd get a `KeyError` here)::\n\n >>> tbl = Txtble(\n ... headers = [\"Red\", \"Green\", \"Blue\"],\n ... data = [\n ... {\"Red\": \"Ruby\", \"Green\": \"Emerald\", \"Blue\": \"Sapphire\"},\n ... {\"Red\": \"Fire\", \"Green\": \"Earth\", \"Blue\": \"Water\"},\n ... {\"Red\": \"Hot\", \"Blue\": \"Cold\"},\n ... ],\n ... dict_fill = 'UNKNOWN',\n ... )\n >>> print(tbl)\n +----+-------+--------+\n |Red |Green |Blue |\n +----+-------+--------+\n |Ruby|Emerald|Sapphire|\n |Fire|Earth |Water |\n |Hot |UNKNOWN|Cold |\n +----+-------+--------+\n\nThe number of columns is automatically set to the length of the longest row::\n\n >>> tbl = Txtble([\n ... ['1', '1'],\n ... ['Z_6', '1', 'x', 'x^2', 'x^3', 'x^4', 'x^5'],\n ... ['S_3', '1', 'a', 'b', 'aba', 'ba', 'ab'],\n ... ['Z_4', '1', 'x', 'x^2', 'x^3'],\n ... ['V_4', '1', 'a', 'b', 'ab'],\n ... ])\n >>> print(tbl)\n +---+-+-+---+---+---+---+\n |1 |1| | | | | |\n |Z_6|1|x|x^2|x^3|x^4|x^5|\n |S_3|1|a|b |aba|ba |ab |\n |Z_4|1|x|x^2|x^3| | |\n |V_4|1|a|b |ab | | |\n +---+-+-+---+---+---+---+\n\n... unless you've specified a header row, which puts a limit on the number of\ncolumns::\n\n >>> tbl.headers = ['Group', 'Elements']\n >>> print(tbl)\n +-----+--------+\n |Group|Elements|\n +-----+--------+\n |1 |1 |\n |Z_6 |1 |\n |S_3 |1 |\n |Z_4 |1 |\n |V_4 |1 |\n +-----+--------+\n\n... unless you've *also* specified a ``header_fill`` to use as the header for\nextra columns::\n\n >>> tbl.header_fill = 'Extra!'\n >>> print(tbl)\n +-----+--------+------+------+------+------+------+\n |Group|Elements|Extra!|Extra!|Extra!|Extra!|Extra!|\n +-----+--------+------+------+------+------+------+\n |1 |1 | | | | | |\n |Z_6 |1 |x |x^2 |x^3 |x^4 |x^5 |\n |S_3 |1 |a |b |aba |ba |ab |\n |Z_4 |1 |x |x^2 |x^3 | | |\n |V_4 |1 |a |b |ab | | |\n +-----+--------+------+------+------+------+------+\n\nYou can set the widths of columns; long lines will be wrapped to fit::\n\n >>> tbl = Txtble(\n ... headers=['Short Text', 'Long Text'],\n ... data=[\n ... [\n ... 'Hi there!',\n ... 'Lorem ipsum dolor sit amet, consectetur adipisicing elit',\n ... ]\n ... ],\n ... widths=[20, 20],\n ... )\n >>> print(tbl)\n +--------------------+--------------------+\n |Short Text |Long Text |\n +--------------------+--------------------+\n |Hi there! |Lorem ipsum dolor |\n | |sit amet, |\n | |consectetur |\n | |adipisicing elit |\n +--------------------+--------------------+\n\nYou can align column text to the left, right, or center::\n\n >>> tbl = Txtble(DATA, headers=HEADERS, align=['r', 'c', 'l'])\n >>> print(tbl)\n +---------+----------+------------------+\n | Month|Birthstone|Birth Flower |\n +---------+----------+------------------+\n | January| Garnet |Carnation |\n | February| Amethyst |Violet |\n | March|Aquamarine|Jonquil |\n | April| Diamond |Sweetpea |\n | May| Emerald |Lily Of The Valley|\n | June| Pearl |Rose |\n | July| Ruby |Larkspur |\n | August| Peridot |Gladiolus |\n |September| Sapphire |Aster |\n | October| Opal |Calendula |\n | November| Topaz |Chrysanthemum |\n | December|Turquoise |Narcissus |\n +---------+----------+------------------+\n\nNumbers in the same column can be aligned on their decimal point with the\n``'n'`` alignment::\n\n >>> tbl = Txtble(\n ... headers=['Thing', 'Value'],\n ... data=[\n ... ['Foo', 12345],\n ... ['Bar', 1234.5],\n ... ['Baz', 123.45],\n ... ['Quux', 12.345],\n ... ['Glarch', 1.2345],\n ... ['Gnusto', .12345],\n ... ],\n ... align=['l', 'n'],\n ... )\n >>> print(tbl)\n +------+-----------+\n |Thing |Value |\n +------+-----------+\n |Foo |12345 |\n |Bar | 1234.5 |\n |Baz | 123.45 |\n |Quux | 12.345 |\n |Glarch| 1.2345 |\n |Gnusto| 0.12345|\n +------+-----------+\n\nUnicode works too, even fullwidth characters and combining characters::\n\n >>> tbl = Txtble(\n ... headers=['Wide', 'Accented'],\n ... data=[\n ... [\n ... u'\\uFF37\\uFF49\\uFF44\\uFF45',\n ... u'A\\u0301c\\u0301c\\u0301e\\u0301n\\u0301t\\u0301e\\u0301d\\u0301',\n ... ]\n ... ]\n ... )\n >>> print(tbl.show())\n +--------+--------+\n |Wide |Accented|\n +--------+--------+\n |\uff37\uff49\uff44\uff45|A\u0301c\u0301c\u0301e\u0301n\u0301t\u0301e\u0301d\u0301|\n +--------+--------+\n\nYou can configure the borders and make them fancy::\n\n >>> from txtble import ASCII_EQ_BORDERS\n >>> tbl = Txtble(\n ... DATA,\n ... headers = HEADERS,\n ... header_border = ASCII_EQ_BORDERS,\n ... row_border = True,\n ... )\n >>> print(tbl)\n +---------+----------+------------------+\n |Month |Birthstone|Birth Flower |\n +=========+==========+==================+\n |January |Garnet |Carnation |\n +---------+----------+------------------+\n |February |Amethyst |Violet |\n +---------+----------+------------------+\n |March |Aquamarine|Jonquil |\n +---------+----------+------------------+\n |April |Diamond |Sweetpea |\n +---------+----------+------------------+\n |May |Emerald |Lily Of The Valley|\n +---------+----------+------------------+\n |June |Pearl |Rose |\n +---------+----------+------------------+\n |July |Ruby |Larkspur |\n +---------+----------+------------------+\n |August |Peridot |Gladiolus |\n +---------+----------+------------------+\n |September|Sapphire |Aster |\n +---------+----------+------------------+\n |October |Opal |Calendula |\n +---------+----------+------------------+\n |November |Topaz |Chrysanthemum |\n +---------+----------+------------------+\n |December |Turquoise |Narcissus |\n +---------+----------+------------------+\n\n... or *very* fancy::\n\n >>> from txtble import DOUBLE_BORDERS\n >>> tbl = Txtble(DATA, headers=HEADERS, border_style=DOUBLE_BORDERS)\n >>> print(tbl.show())\n \u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2566\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2566\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557\n \u2551Month \u2551Birthstone\u2551Birth Flower \u2551\n \u2560\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256c\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u256c\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2563\n \u2551January \u2551Garnet \u2551Carnation \u2551\n \u2551February \u2551Amethyst \u2551Violet \u2551\n \u2551March \u2551Aquamarine\u2551Jonquil \u2551\n \u2551April \u2551Diamond \u2551Sweetpea \u2551\n \u2551May \u2551Emerald \u2551Lily Of The Valley\u2551\n \u2551June \u2551Pearl \u2551Rose \u2551\n \u2551July \u2551Ruby \u2551Larkspur \u2551\n \u2551August \u2551Peridot \u2551Gladiolus \u2551\n \u2551September\u2551Sapphire \u2551Aster \u2551\n \u2551October \u2551Opal \u2551Calendula \u2551\n \u2551November \u2551Topaz \u2551Chrysanthemum \u2551\n \u2551December \u2551Turquoise \u2551Narcissus \u2551\n \u255a\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2569\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2569\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255d\n\nSee the following documentation for more information:\n\n\nAPI\n===\n\n``Txtble``\n----------\n\n``Txtble(data=(), **kwargs)``\n Create a new ``Txtble`` object. The table's data may be passed to the\n constructor as an iterable of rows of values, where each row is either an\n iterable of cell values or a mapping from header names to cell values;\n otherwise, the data starts out empty. In either case, further data rows can\n be added via the ``append()`` and ``extend()`` methods.\n\n ``**kwargs`` are used to configure the ``Txtble`` instance; see\n \"`Configuration Options `_\" below.\n\n``tbl.append(row)``\n Add a new data row at the bottom of the table. ``row`` can be either an\n iterable of cell values or a mapping from header names to cell values.\n\n``tbl.extend(rows)``\n Add zero or more new data rows at the bottom of the table\n\n``tbl.show()`` or ``str(tbl)``\n Convert the ``Txtble`` instance to a string showing a plain text table.\n Table cells and filler values that are not already strings are converted by\n calling `str()` on them; the exceptions are `None` values, which are\n displayed according to the ``none_str`` option (see below). All tab\n characters are expanded to spaces before building the table. If any of the\n resulting strings have indeterminate width (i.e., if ``wcwidth.wcswidth()``\n returns a negative number for any of them), an ``IndeterminateWidthError``\n (a subclass of `ValueError`) is raised.\n\n Note that the resulting string will likely contain one or more embedded\n newlines, but (outside of some very odd cases) it will not end with a\n newline. This means that you can do ``print(tbl)`` and there won't be a\n blank line added at the end.\n\n In Python 2, ``unicode(tbl)`` is like ``str(tbl)``, except it produces a\n `unicode` value. This is necessary if one or more table cells are\n `unicode`.\n\n\n.. _configuration_options:\n\nConfiguration Options\n---------------------\nThese options can be set either as keywords passed to the ``Txtble``\nconstructor or as attributes on a ``Txtble`` instance::\n\n tbl = Txtble(data, border=False)\n # Same as:\n tbl = Txtble(data)\n tbl.border = False\n\n``align=()``\n A sequence of alignment specifiers indicating how the contents of each\n column, in order, should be horizontally aligned. The alignment specifiers\n are ``'l'`` (left alignment), ``'c'`` (centered alignment), and ``'r'``\n (right alignment). ``align`` may optionally be set to a single alignment\n specifier to cause all columns to be aligned in that way.\n\n An alignment specifier may optionally include ``'n'`` to cause all numbers\n in the relevant column to be aligned on their decimal point; the ``'l'``,\n ``'c'``, or ``'r'`` then determines how the \"block\" of numbers is aligned as\n a whole (This is generally only relevant if the column also contains a\n string value longer than any of the numbers). An alignment specifier of\n just ``'n'`` is equivalent to ``'ln'`` or ``'nl'``.\n\n``align_fill='l'``\n If there are more columns than there are entries in ``align``, the extra\n columns will have their alignment set to ``align_fill``.\n\n``border=True``\n Whether to draw a border around the edge of the table. ``border`` may\n optionally be set to a ``BorderStyle`` instance to set the characters used\n for drawing the border around the edge of the table. Individual edges can\n be toggled or stylized by setting the ``bottom_border``, ``left_border``,\n ``right_border``, and ``top_border`` options.\n\n``border_style=ASCII_BORDERS``\n A ``BorderStyle`` instance specifying the characters to use for drawing all\n of the table's borders & rules. The border style can be overridden for\n individual borders by setting their respective options (``border``,\n ``column_border``, etc.) to ``BorderStyle`` instances. See \"`BorderStyle\n `_\" below for more information.\n\n``bottom_border=None``\n Whether to draw a border along the bottom edge of the table. The default\n value of `None` means to inherit the value set for ``border``.\n ``bottom_border`` may optionally be set to a ``BorderStyle`` instance to set\n the characters used for drawing the border along the bottom edge.\n\n``break_long_words=True``\n Whether to force a line break in the middle of a word if said word is too\n long for the column's width\n\n``break_on_hyphens=True``\n Whether to break on hyphens in addition to whitespace when wrapping text\n\n``column_border=True``\n Whether to draw a vertical rule between individual columns.\n ``column_border`` may optionally be set to a ``BorderStyle`` instance to set\n the characters used for drawing the vertical rules between columns.\n\n``columns=None``\n An optional positive integer. When set, show exactly the given number of\n columns per row, adding cells with ``row_fill`` and discarding extra cells\n as needed. If ``headers`` is also set, its length must equal ``columns`` or\n else a `ValueError` is raised. Setting both ``columns`` and ``headers``\n causes ``header_fill`` to be ignored.\n\n``dict_fill``\n If a header name does not appear as a key in a `dict`/mapping row, the value\n of ``dict_fill`` will be used for the corresponding cell value. If\n ``dict_fill`` is not set, a missing key will cause a ``KeyError`` to be\n raised.\n\n``header_border=None``\n Whether to draw a horizontal rule above the data rows, below the header row\n (if any). The default value of `None` means that the border will be drawn\n if & only if ``headers`` is non-`None`. ``header_border`` may optionally be\n set to a ``BorderStyle`` instance to set the characters used for drawing the\n horizontal rule above the data rows.\n\n If ``headers`` is `None` and ``top_border`` is set to a true value (or\n inherits a true value from ``border``), the header border will not be drawn.\n\n``header_fill=None``\n When ``headers`` is non-`None` and ``columns`` is `None`, this option\n determines how rows with more columns than there are headers are handled.\n When ``header_fill=None``, any extra columns are discarded from long rows.\n For all other values, the header row will be extended to the length of the\n longest data row, and the new header cells will contain the ``header_fill``\n value.\n\n``headers=None``\n An optional list of cell values to display in a row at the top of the table.\n Setting this option also implicitly sets a minimum number of columns per\n row; see ``header_fill`` for allowing extra columns.\n\n If ``headers`` is set to an empty list, ``header_fill`` must be set to a\n non-`None` value or else a `ValueError` will be raised upon trying to render\n the ``Txtble``.\n\n``left_border=None``\n Whether to draw a border along the left edge of the table. The default\n value of `None` means to inherit the value set for ``border``.\n ``left_border`` may optionally be set to a ``BorderStyle`` instance to set\n the characters used for drawing the border along the left edge.\n\n``left_padding=None``\n Padding to insert on the left of every table cell. This can be either an\n integer (to insert that many space characters) or a string. If a string, it\n may not contain any newlines. The default value of `None` means to inherit\n the value set for ``padding``.\n\n``len_func``\n The function to use for calculating how many terminal cells wide a string\n is; it should take one string argument and return a width. Returning a\n negative width causes ``Txtble`` to raise an ``IndeterminateWidthError``.\n The default value is ``with_color_stripped(wcwidth.wcswidth)`` (See \"`Other\n `_\" below).\n\n``none_str=''``\n The string to display in place of `None` values (Setting ``none_str=None``\n is the same as setting it to ``'None'``)\n\n``padding=0``\n Padding to insert on the left & right of every table cell. This can be\n either an integer (to insert that many space characters) or a string. If a\n string, it may not contain any newlines. Padding for the left and right of\n table cells can be specified separately via the ``left_padding`` and\n ``right_padding`` options.\n\n``right_border=None``\n Whether to draw a border along the right edge of the table. The default\n value of `None` means to inherit the value set for ``border``.\n ``right_border`` may optionally be set to a ``BorderStyle`` instance to set\n the characters used for drawing the border along the right edge.\n\n``right_padding=None``\n Padding to insert on the right of every table cell. This can be either an\n integer (to insert that many space characters) or a string. If a string, it\n may not contain any newlines. The default value of `None` means to inherit\n the value set for ``padding``.\n\n``row_border=False``\n Whether to draw horizontal rules between data rows. ``row_border`` may\n optionally be set to a ``BorderStyle`` instance to set the characters used\n for drawing the horizontal rules between data rows.\n\n``row_fill=''``\n If the rows of a table differ in number of columns, cells are added to the\n shorter rows until they all line up, and the added cells contain\n ``row_fill`` as their value.\n\n``rstrip=True``\n When ``border=False``, setting ``rstrip=False`` will cause the last cell of\n each row to still be padded with trailing whitespace and ``padding`` in\n order to reach the full column width. (Normally, this whitespace and\n ``padding`` is omitted when ``border=False`` as there is no end-of-line\n border to align.) This option is useful if you wish to append text to one\n or more lines of the output and have it appear strictly outside the table.\n\n``top_border=None``\n Whether to draw a border along the top edge of the table. The default value\n of `None` means to inherit the value set for ``border``. ``top_border`` may\n optionally be set to a ``BorderStyle`` instance to set the characters used\n for drawing the border along the top edge.\n\n``valign=()``\n A sequence of vertical alignment specifiers indicating how the contents of\n each column, in order, should be vertically aligned. The vertical alignment\n specifiers are ``'t'`` (top alignment), ``'m'`` (middle alignment), and\n ``'b'`` (bottom alignment). ``valign`` may optionally be set to a single\n vertical alignment specifier to cause all columns to be vertically aligned\n in that way.\n\n``valign_fill='t'``\n If there are more columns than there are entries in ``valign``, the extra\n columns will have their vertical alignment set to ``valign_fill``.\n\n``width_fill=None``\n If there are more columns than there are entries in ``widths``, the extra\n columns will have their widths set to ``width_fill``.\n\n``widths=()``\n A sequence of integers specifying the width of each column, in order. Lines\n wider than the given width will be wrapped; the wrapping can be configured\n via the ``break_long_words`` and ``break_on_hyphens`` options. A width of\n `None` disables wrapping for that column and causes the column's width to be\n set to the width of the longest line. ``widths`` may optionally be set to a\n single width to cause all columns to be that wide.\n\n``wrap_func``\n The function to use for wrapping long lines; it should take a string and a\n width and return an iterable of strings. The default value is a custom\n function that properly handles fullwidth characters, ANSI color escape\n sequences, etc.; if your table contains such strings, any user-supplied\n ``wrap_func`` must be able to handle them as well. When ``wrap_func`` is\n set to a user-supplied value, the ``break_long_words`` and\n ``break_on_hyphens`` options are ignored.\n\n\n.. _borderstyle:\n\n``BorderStyle``\n---------------\nThe ``BorderStyle`` class is a `namedtuple` listing the strings to use for\ndrawing a table's borders & rules. Its attributes are:\n\n.. csv-table::\n :header: Attribute,Description,Example\n\n ``hline``,horizontal line,\u2500\n ``vline``,vertical line,\u2502\n ``ulcorner``,upper-left box corner,\u250c\n ``urcorner``,upper-right box corner,\u2510\n ``llcorner``,lower-left box corner,\u2514\n ``lrcorner``,lower-right box corner,\u2518\n ``vrtee``,tee pointing right,\u251c\n ``vltee``,tee pointing left,\u2524\n ``dhtee``,tee pointing down,\u252c\n ``uhtee``,tee pointing up,\u2534\n ``plus``,cross/four-way joint,\u253c\n\n``txtble`` provides the following predefined ``BorderStyle`` instances:\n\n``ASCII_BORDERS``\n The default border style. Draws borders using only the ASCII characters\n ``-``, ``|``, and ``+``::\n\n +-+-+\n |A|B|\n +-+-+\n |C|D|\n +-+-+\n\n``ASCII_EQ_BORDERS``\n Like ``ASCII_BORDERS``, but uses ``=`` in place of ``-``::\n\n +=+=+\n |A|B|\n +=+=+\n |C|D|\n +=+=+\n\n``LIGHT_BORDERS``\n Uses the light box drawing characters::\n\n \u250c\u2500\u252c\u2500\u2510\n |A|B|\n \u251c\u2500\u253c\u2500\u2524\n |C|D|\n \u2514\u2500\u2534\u2500\u2518\n\n``HEAVY_BORDERS``\n Uses the heavy box drawing characters::\n\n \u250f\u2501\u2533\u2501\u2513\n \u2503A\u2503B\u2503\n \u2523\u2501\u254b\u2501\u252b\n \u2503C\u2503D\u2503\n \u2517\u2501\u253b\u2501\u251b\n\n``DOUBLE_BORDERS``\n Uses the double box drawing characters::\n\n \u2554\u2550\u2566\u2550\u2557\n \u2551A\u2551B\u2551\n \u2560\u2550\u256c\u2550\u2563\n \u2551C\u2551D\u2551\n \u255a\u2550\u2569\u2550\u255d\n\n``DOT_BORDERS``\n Uses ``\u22ef``, ``\u22ee``, and ``\u00b7``::\n\n \u00b7\u22ef\u00b7\u22ef\u00b7\n \u22eeA\u22eeB\u22ee\n \u00b7\u22ef\u00b7\u22ef\u00b7\n \u22eeC\u22eeD\u22ee\n \u00b7\u22ef\u00b7\u22ef\u00b7\n\nIf you define your own custom instances of ``BorderStyle``, they must adhere to\nthe following rules:\n\n- The ``hline`` string must be exactly one terminal column wide (the same width\n as a space character).\n- All strings other than ``hline`` must be the same width.\n- No string may contain a newline.\n\n\n.. _other:\n\nOther\n-----\n\n``IndeterminateWidthError``\n Subclass of ``ValueError``. Raised when a string is reported as having\n negative/indeterminate width. (For the default ``len_func``, this happens\n when the string contains a DEL or a C0 or C1 control character other than a\n tab, newline, or ANSI color escape sequence.) The string in question is\n available as the exception's ``string`` attribute.\n\n``NumericWidthOverflowError``\n Subclass of ``ValueError``. Raised when a column has a non-`None` width,\n the column's ``align`` value contains ``'n'``, and aligning the numbers in\n the column along their decimal points would cause one or more cells to\n exceed the column's width.\n\n``UnterminatedColorError``\n Subclass of ``ValueError``. Raised by ``with_color_stripped`` upon\n encountering an ANSI color escape sequence that is not eventually terminated\n by a reset/sgr0 sequence. The string in question is available as the\n exception's ``string`` attribute.\n\n``with_color_stripped``\n A function decorator for applying to ``len`` or imitators thereof that\n strips ANSI color sequences from a single string argument before passing it\n on. If any color sequences are not followed by a reset sequence, an\n ``UnterminatedColorError`` is raised.\n\n\nUnicode in Python 2\n-------------------\nThe following guarantees are made regarding ``txtble``'s handling of Unicode in\nthe fragile twilight realm that is Python 2:\n\n- If all table elements (table cells, ``*_fill`` options, ``none_str``, border\n style strings, etc.) are or stringify to ASCII-only `str` values, calling\n ``str(tbl)`` will work, and ``tbl.show()`` will return a `str`.\n\n- If one or more table elements are `unicode` and all other cell values are or\n stringify to ASCII-only `str` values, calling ``unicode(tbl)`` will work, and\n ``tbl.show()`` will return a `unicode`.\n\nIn all other cases, you're on your own.\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/jwodder/txtble", "keywords": "box-drawing,grid,table", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "txtble", "package_url": "https://pypi.org/project/txtble/", "platform": "", "project_url": "https://pypi.org/project/txtble/", "project_urls": { "Bug Tracker": "https://github.com/jwodder/txtble/issues", "Homepage": "https://github.com/jwodder/txtble", "Say Thanks!": "https://saythanks.io/to/jwodder", "Source Code": "https://github.com/jwodder/txtble" }, "release_url": "https://pypi.org/project/txtble/0.11.1/", "requires_dist": [ "attrs (>=18.1)", "six (~=1.4)", "wcwidth (~=0.1.7)" ], "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "summary": "Yet another plain-text table typesetter", "version": "0.11.1" }, "last_serial": 5333733, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "0bab1395ce758179cb3b9a850e983ac0", "sha256": "25103e370ee304327751856ef5ecd7f59f9be88269838c7b558d4ac692d3e375" }, "downloads": -1, "filename": "txtble-0.1.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "0bab1395ce758179cb3b9a850e983ac0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 7927, "upload_time": "2018-06-14T15:12:40", "url": "https://files.pythonhosted.org/packages/05/35/aa8dc452b753bd9b405a0d23ee3ebac693edd2d0a5896bcc2c98f6263039/txtble-0.1.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "260e7d851407d61415d4c270962181b2", "sha256": "74862038c17cd8c5132a65eb9775bf98ced6f3509f13dd556eefac7e3f4ae4c0" }, "downloads": -1, "filename": "txtble-0.1.0.tar.gz", "has_sig": true, "md5_digest": "260e7d851407d61415d4c270962181b2", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 12425, "upload_time": "2018-06-14T15:12:41", "url": "https://files.pythonhosted.org/packages/b6/91/f3fd931256a2c9fdf0ad620615ecca940c81c8bc7647f5403e8b8663cf27/txtble-0.1.0.tar.gz" } ], "0.10.0": [ { "comment_text": "", "digests": { "md5": "4b65668619b14bb20bf236ee97f088bb", "sha256": "03b93c8bae5309c30cdc624b4de4c087f0892aa5ec30ec36cb0a512844753d98" }, "downloads": -1, "filename": "txtble-0.10.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "4b65668619b14bb20bf236ee97f088bb", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 17223, "upload_time": "2018-09-10T19:22:49", "url": "https://files.pythonhosted.org/packages/ef/5e/40b87c077ae69642b65eb21959fdcbbe4f8e4b882e4539b410e749001eba/txtble-0.10.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7b54d8c54e5d6cf386afab18bf724890", "sha256": "71152d4e625079e9f8bc70292c55d044e076c391595174ea706252f7a11b1a3c" }, "downloads": -1, "filename": "txtble-0.10.0.tar.gz", "has_sig": true, "md5_digest": "7b54d8c54e5d6cf386afab18bf724890", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 47887, "upload_time": "2018-09-10T19:22:51", "url": "https://files.pythonhosted.org/packages/16/c8/71ae9373001f518fcf02ae242d1421657510893159e4318c5ecdf9c03ae6/txtble-0.10.0.tar.gz" } ], "0.11.0": [ { "comment_text": "", "digests": { "md5": "21dd715f8d61ad60ab3a9b0c304a901f", "sha256": "4ccee2740160a9ab8ff78b28489b357d9161847f904841617c4af4a8c8514aaf" }, "downloads": -1, "filename": "txtble-0.11.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "21dd715f8d61ad60ab3a9b0c304a901f", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 18365, "upload_time": "2018-11-15T16:07:14", "url": "https://files.pythonhosted.org/packages/0b/e1/992443af3e6fdd639315575dd9e3fc0fa5cf0330f795796c8c247d9197e7/txtble-0.11.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "2bb8923f0bc2b728e21ce5977394711c", "sha256": "d6abc615d3c4a12d8e189081d10af16ef9196f55f747db477bd3e68efb5d39b3" }, "downloads": -1, "filename": "txtble-0.11.0.tar.gz", "has_sig": true, "md5_digest": "2bb8923f0bc2b728e21ce5977394711c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 53866, "upload_time": "2018-11-15T16:07:16", "url": "https://files.pythonhosted.org/packages/61/98/2a3a26b4c4a376f241cb09cf57ba2e0fc78707418f51dd416783718b738f/txtble-0.11.0.tar.gz" } ], "0.11.1": [ { "comment_text": "", "digests": { "md5": "4d3113d43cfdddeef0fcc60c65b7f99c", "sha256": "a9615597ffe91fa4dd5ef27873d9d17a0a4841a8e32491c0a279e24ab9d8a349" }, "downloads": -1, "filename": "txtble-0.11.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "4d3113d43cfdddeef0fcc60c65b7f99c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 18400, "upload_time": "2019-05-29T18:21:10", "url": "https://files.pythonhosted.org/packages/59/42/d732aeab07841bff489ad282ff40d9cb4106abc691d4433be0bb8db4c596/txtble-0.11.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "41874bbf1d08371e652ffcdb70649883", "sha256": "ee3dbbd2ced70a6894c269f211e4e99b18f6f89f2f5366657eb78ae93686625b" }, "downloads": -1, "filename": "txtble-0.11.1.tar.gz", "has_sig": true, "md5_digest": "41874bbf1d08371e652ffcdb70649883", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 54466, "upload_time": "2019-05-29T18:21:12", "url": "https://files.pythonhosted.org/packages/de/10/3a7047de7a813dec2c4a7554c6db01ec1a73bc702526e57ef0a93efe9e03/txtble-0.11.1.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "5155a594d26d8080da1692f98e87167c", "sha256": "b65ebf9cb1c96292a3cbd924bb593c6d17d0331bb41ed7c83a602e1e60a63701" }, "downloads": -1, "filename": "txtble-0.2.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "5155a594d26d8080da1692f98e87167c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 9587, "upload_time": "2018-06-16T16:04:25", "url": "https://files.pythonhosted.org/packages/04/a7/d512009b8b796f9c1a928eba71c031adf7308efa07f54c55f2f59ae777e2/txtble-0.2.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8f8213cc3b7d6a2e9a005e043050de7b", "sha256": "a55a3b7d2553694520c6680374f70d3b6397e6cc4c8329b6d02ef934ffb53250" }, "downloads": -1, "filename": "txtble-0.2.0.tar.gz", "has_sig": true, "md5_digest": "8f8213cc3b7d6a2e9a005e043050de7b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 17985, "upload_time": "2018-06-16T16:04:27", "url": "https://files.pythonhosted.org/packages/3c/f5/1d99e3514c838d1432f00a2a161aa748e011a8f5c1a2d0a01cd497f338c4/txtble-0.2.0.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "16b378fd568463718911334941dd1bda", "sha256": "b0a9bbe0d0ff82f18efd13964275e9d3728c392aefec7856b6225755a3d3b287" }, "downloads": -1, "filename": "txtble-0.3.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "16b378fd568463718911334941dd1bda", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 10440, "upload_time": "2018-06-25T18:24:48", "url": "https://files.pythonhosted.org/packages/16/0e/05c699e2fa438a0f266c8ca9ca8921f5575f8302636899b98d157a1046d9/txtble-0.3.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "da960ac9a73a483d7b55b88d30476c6a", "sha256": "e57932d5d5cda93b2ce5add1e21a61c6cc537a64991f338cc35523b0d1d6de00" }, "downloads": -1, "filename": "txtble-0.3.0.tar.gz", "has_sig": true, "md5_digest": "da960ac9a73a483d7b55b88d30476c6a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 22529, "upload_time": "2018-06-25T18:24:49", "url": "https://files.pythonhosted.org/packages/6f/20/463f14aa770a3688968e9860a8366800a54a48f39fd01e57999f21927228/txtble-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "f384729fb79ddc0e22a696b37d643838", "sha256": "cfde037a00f98575d31ff1d138573d6e5ae6d3b196a542f79c673e28928258af" }, "downloads": -1, "filename": "txtble-0.4.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "f384729fb79ddc0e22a696b37d643838", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 10585, "upload_time": "2018-07-01T13:43:53", "url": "https://files.pythonhosted.org/packages/6e/68/89e5fad25539125cb92c24d1b2c32faf8a81b90997ef8dbb8edf7b8ac1f6/txtble-0.4.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "63707f725925d81dcd15fc1ca9bb277b", "sha256": "012da61fa93651173dcc81051c4be2853398ad2752a710be5c0c35dd2acc39ad" }, "downloads": -1, "filename": "txtble-0.4.0.tar.gz", "has_sig": true, "md5_digest": "63707f725925d81dcd15fc1ca9bb277b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 23649, "upload_time": "2018-07-01T13:43:54", "url": "https://files.pythonhosted.org/packages/00/b6/077b229eb34d3761d11a4bae11f9a8429394366996f4f2046ed2b4c1c4b1/txtble-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "975711403a8510ef4e424662aa1a748c", "sha256": "d6b117694953620eaff34d104703e0609d0c139642aa7a2f2342f0e163798178" }, "downloads": -1, "filename": "txtble-0.5.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "975711403a8510ef4e424662aa1a748c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 10933, "upload_time": "2018-07-06T14:02:16", "url": "https://files.pythonhosted.org/packages/6c/f7/314016ad542e7c977fb52034a10ad0665089370b849fc6305c1e302f87ef/txtble-0.5.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "973b5863bb238afca9cf5adf8c644eee", "sha256": "517c08cb5bf02696a6a538662a25a22560570c98341270ec57ea085746844187" }, "downloads": -1, "filename": "txtble-0.5.0.tar.gz", "has_sig": true, "md5_digest": "973b5863bb238afca9cf5adf8c644eee", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 25308, "upload_time": "2018-07-06T14:02:17", "url": "https://files.pythonhosted.org/packages/8b/40/a219cef64f27bd55f22ad097d4c088bc209332dde1f9715a4baa8e8e8649/txtble-0.5.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "d7653648c2f3db1a5a31b5fa975cd0dd", "sha256": "c29ad25d77d3a9ec2d00709187372273ebaeae343f04cd18c6804ee9fa4ba1dc" }, "downloads": -1, "filename": "txtble-0.6.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "d7653648c2f3db1a5a31b5fa975cd0dd", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 11610, "upload_time": "2018-07-11T14:00:36", "url": "https://files.pythonhosted.org/packages/46/f8/70bee0e92ffc7eb26f4a09d5cf3a22329bf0a24e0d6935fe947852d9ae84/txtble-0.6.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8604d7c073c0bf37af2b2f8fd50b50d8", "sha256": "a52668c466f6655f98d4e753c3460c8af2783191d7aff394e68f0a96cea47d39" }, "downloads": -1, "filename": "txtble-0.6.0.tar.gz", "has_sig": true, "md5_digest": "8604d7c073c0bf37af2b2f8fd50b50d8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 27910, "upload_time": "2018-07-11T14:00:38", "url": "https://files.pythonhosted.org/packages/07/91/66ba7dfe49b3dc88fab7018fed0a69f29eb257a595294ac525f34c7daabb/txtble-0.6.0.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "948407d315c07069e9ef6bd99e073fa0", "sha256": "1018fd2dfe169dc0bad4d52162ef10a7d2eca25c2083b32f8acffc077a6ac779" }, "downloads": -1, "filename": "txtble-0.7.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "948407d315c07069e9ef6bd99e073fa0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 15854, "upload_time": "2018-07-18T14:35:21", "url": "https://files.pythonhosted.org/packages/79/a0/b491eed9afd6890825ddaebe48633125c584d0d6786f1d862ddc4f9f91d8/txtble-0.7.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "aafb5a7969859dedd369120399e5ec08", "sha256": "526cf81fa11300e171c627a53b9466e101b89e3a237571ae44323a206dd4f5bf" }, "downloads": -1, "filename": "txtble-0.7.0.tar.gz", "has_sig": true, "md5_digest": "aafb5a7969859dedd369120399e5ec08", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 36650, "upload_time": "2018-07-18T14:35:23", "url": "https://files.pythonhosted.org/packages/e7/41/78a58f08ca8b5c1d8129a856e19f9da3ff747781f5bff1bd96132e0e4e24/txtble-0.7.0.tar.gz" } ], "0.8.0": [ { "comment_text": "", "digests": { "md5": "1b6d8b01aaade9d9c8fad4c7ea280e79", "sha256": "792499a5b03fa4d2ffc9628fb05c78e7519a34588826cf45fac869a2d9f4ee77" }, "downloads": -1, "filename": "txtble-0.8.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "1b6d8b01aaade9d9c8fad4c7ea280e79", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 16329, "upload_time": "2018-07-24T13:26:57", "url": "https://files.pythonhosted.org/packages/b5/13/91d571673ea2465236c1625cecd530741e1290cab0610afc32bd43cd2579/txtble-0.8.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9d057d21e9d5abe05a62fb5a749a7361", "sha256": "66182eefdbb2eb76ff3de5bbcf61992e11fac48ea88e7e0656dd6512b2046efa" }, "downloads": -1, "filename": "txtble-0.8.0.tar.gz", "has_sig": true, "md5_digest": "9d057d21e9d5abe05a62fb5a749a7361", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 39918, "upload_time": "2018-07-24T13:26:58", "url": "https://files.pythonhosted.org/packages/41/71/ee16b32fdef5c1b2e3e57f34a711da6f215e79ba6538ac361988502e6a1d/txtble-0.8.0.tar.gz" } ], "0.9.0": [ { "comment_text": "", "digests": { "md5": "4281b225a6e6422ee44297dc79c9ae9e", "sha256": "156c1d6872589bff551b9d8532edfb963f10db203d66684ae05081f0a8f3b5cb" }, "downloads": -1, "filename": "txtble-0.9.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "4281b225a6e6422ee44297dc79c9ae9e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 16956, "upload_time": "2018-07-28T16:15:12", "url": "https://files.pythonhosted.org/packages/53/58/fbe4d82acf3c7e421fa978ba17441a82d27dc8ada860bf93225ec68ca695/txtble-0.9.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fc5ff42e6b67bd4a06076d5629fb383d", "sha256": "c464cce3424ad18c939e91de5643376ba2f7686956a65c9d263a03c9c7a1f648" }, "downloads": -1, "filename": "txtble-0.9.0.tar.gz", "has_sig": true, "md5_digest": "fc5ff42e6b67bd4a06076d5629fb383d", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 44775, "upload_time": "2018-07-28T16:15:13", "url": "https://files.pythonhosted.org/packages/e5/6d/1ae9c1ad45f705b2071b6b84a0b8ff67a8beb1913b2e25595c028962d4ad/txtble-0.9.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4d3113d43cfdddeef0fcc60c65b7f99c", "sha256": "a9615597ffe91fa4dd5ef27873d9d17a0a4841a8e32491c0a279e24ab9d8a349" }, "downloads": -1, "filename": "txtble-0.11.1-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "4d3113d43cfdddeef0fcc60c65b7f99c", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 18400, "upload_time": "2019-05-29T18:21:10", "url": "https://files.pythonhosted.org/packages/59/42/d732aeab07841bff489ad282ff40d9cb4106abc691d4433be0bb8db4c596/txtble-0.11.1-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "41874bbf1d08371e652ffcdb70649883", "sha256": "ee3dbbd2ced70a6894c269f211e4e99b18f6f89f2f5366657eb78ae93686625b" }, "downloads": -1, "filename": "txtble-0.11.1.tar.gz", "has_sig": true, "md5_digest": "41874bbf1d08371e652ffcdb70649883", "packagetype": "sdist", "python_version": "source", "requires_python": ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4", "size": 54466, "upload_time": "2019-05-29T18:21:12", "url": "https://files.pythonhosted.org/packages/de/10/3a7047de7a813dec2c4a7554c6db01ec1a73bc702526e57ef0a93efe9e03/txtble-0.11.1.tar.gz" } ] }