{ "info": { "author": "Paul K. Korir, PhD", "author_email": "pkorir@ebi.ac.uk, paul.korir@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Console", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Operating System :: OS Independent", "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", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Terminals", "Topic :: Text Processing", "Topic :: Text Processing :: Markup", "Topic :: Utilities" ], "description": "[![PyPI version](https://badge.fury.io/py/styled.svg)](https://badge.fury.io/py/styled) ![PyPI - Python Version](https://img.shields.io/pypi/pyversions/styled.svg) [![Coverage Status](https://coveralls.io/repos/github/emdb-empiar/styled/badge.svg?branch=master)](https://coveralls.io/github/emdb-empiar/styled?branch=master) [![Build Status](https://travis-ci.org/emdb-empiar/styled.svg?branch=master)](https://travis-ci.org/emdb-empiar/styled)\n\n# Introduction\n\nWelcome to `styled`, a simple Python package that makes a breeze of writing beautiful text to the terminal. \nThe main innovation behind `styled` is the dead-simple user interface which does away with the user's need to know \nanything other than the style names. Behind the scenes `styled` handles everything to keep \nyour styles consistent and redundant and informing you when you have made formatting errors.\n\n`styled` was borne out of the frustration encountered in using other packages which muddle the boundary between\n_user-space_ and _design-space_. The user should be free to be a _user_ and it is the _designer's_ job to hide the \nimplementation behind a simple user interface that facilitates the user's task. This is what I've tried to do. If I have \nfailed to live up to this please let me know. I'm sure together we can come up with something better.\n\n## Getting Started\n\nTo get it from `PyPI` use\n\n```bash\npip install styled\n```\n\nIt's best to do this in a virtual environment.\n\n```bash\n# anaconda/miniconda\nconda create -n styled python\nsource activate styled\npip install styled\n\n# virtualenv\nvirtualenv /path/to/env/styled -p /path/to/python\nsource /path/to/envs/styled/bin/activate\npip install styled\n\n```\n\nUsing `styled` is easy. Try this out in your Python console.\n\n```python\n>>> from styled import Styled\n>>> s = Styled(\"We are [[ 'bold'|bold ]] men!\")\n>>> print(s)\nWe are bold men!\n```\n\nYou can perform string formatting _directly_ in the constructor.\n\n```python\n>>> s = Styled(\"There were up to [[ '{}'|bold:fg-red ]] people who handed over themselves to the \\\n[[ '{police}'|fg-black:bg-red:bold ]].\", 24, police='policia')\n>>> print(s)\nThere were up to 24 people who handed over themselves to the policia.\n```\n\nYou have to delimit the text you want to style with `[[ ... ]]` then make sure that the following _three (3)_ conditions hold:\n\n* separate the text from the styles with a pipe (`|`),\n* quote the text part with either a pair of single (`'...'`) or double (`\"...\"`) quotes, then \n* separate each style with a colon (`:`)\n\nThere are _three (3)_ types of styles:\n\n* _text styling_ such as `bold`, `blink`, `underline` etc.\n* *foreground colours*, such as `fg-red`,\n* *background colours*, such as `bg-blue`.\n\nIf you want to style an extended piece of text you can use a special additional style marker (`no-end`) indicating to \ncontinue the styling for as long as possible. This can be useful if you want to style a long stretch of text.\n\n```python\n>>> s = Styled(\"There were up to [[ '{}'|bold:fg-red:no-end ]] people who handed over themselves to the \\\n[[ '{police}'|fg-black:bg-red:bold ]].\", 24, police='policia')\n>>> print(s)\nThere were up to 24 people who handed over themselves to the policia.\n``` \n\nThe above example will have all the text until the next marker affected by the red foreground styling. You can also \nmanually enforce an end marker by using `yes-end` as a style. By default all style markers will terminate on the \ntext to be styled. So, for example\n\n```python\n>>> # an example of a terminating end marker\n>>> s = Styled(\"There were up to [[ '{}'|bold:fg-red:no-end ]] people who handed over themselves [[ ''|yes-end ]] to the \\\n[[ '{police}'|fg-black:bg-red:bold ]].\", 24, police='policia')\n>>> print(s)\nThere were up to 24 people who handed over themselves to the policia.\n``` \n\nwill suspend red foreground at the end of the word 'themselves'.\n\nYou can only have one foreground and one background colour. Ignoring this produces a `StyleError`\n\n```python\n>>> from styled import Styled\n>>> s = Styled(\"There were up to [[ '{}'|bold:fg-red:fg-blue ]] people who handed over themselves to the [[ '{police}'|fg-black:bg-red:bold ]].\", 24, police='policia')\nTraceback (most recent call last):\n File \"/Users/pkorir/miniconda2/envs/styled/lib/python2.7/site-packages/IPython/core/interactiveshell.py\", line 2878, in run_code\n exec(code_obj, self.user_global_ns, self.user_ns)\n File \"\", line 1, in \n s = Styled(\"There were up to [[ '{}'|bold:fg-red:fg-blue ]] people who handed over themselves to the [[ '{police}'|fg-black:bg-red:bold ]].\", 24, police='policia')\n File \"/Users/pkorir/PycharmProjects/styled/styled/styled.py\", line 55, in __init__\n self._validate(self._tokens)\n File \"/Users/pkorir/PycharmProjects/styled/styled/styled.py\", line 156, in _validate\n raise StyleError(u\"Multiple foreground styles for text '{}': {}\".format(text, ', '.join(styles)))\nStyleError: Multiple foreground styles for text '24': bold, fg-red, fg-blue\n```\n\nInputing an invalid `style` also raises a `StyleError`\n\n```python\n>>> s = Styled(\"This just can't just [[ 'go'|underline ]] on forever! \")\nTraceback (most recent call last):\n File \"/Users/pkorir/miniconda2/envs/styled/lib/python2.7/site-packages/IPython/core/interactiveshell.py\", line 2878, in run_code\n exec(code_obj, self.user_global_ns, self.user_ns)\n File \"\", line 1, in \n s = Styled(\"This just can't just [[ 'go'|underline ]] on forever! \")\n File \"/Users/pkorir/PycharmProjects/styled/styled/styled.py\", line 59, in __init__\n self._styled = self._transform(self._plain, self._cleaned_tokens)\n File \"/Users/pkorir/PycharmProjects/styled/styled/styled.py\", line 99, in _transform\n styled += plain[i:start] + self.transform(token)\n File \"/Users/pkorir/PycharmProjects/styled/styled/styled.py\", line 87, in transform\n raise StyleError(u\"Unknown style '{}'\".format(style_))\nStyleError: Unknown style 'underline'\n```\n\n(In case you're wondering, it should have been `underlined` not `underline`.)\n\nWhich brings us to the tables of styles. (These are borrowed from , by the way.)\n\n| *styles* |\n|--------|\n| bold|\n| dim |\n| underlined |\n| blink |\n| reverse |\n| hidden |\n| reset |\n| res_bold |\n| res_dim |\n| res_underlined |\n| res_blink |\n| res_reverse |\n| res_hidden |\n\n\n| *colours* |\n|---|\n|black |\n|red |\n|green |\n|yellow |\n|blue |\n|magenta |\n|cyan |\n|light_gray |\n|dark_gray |\n|light_red |\n|light_green |\n|light_yellow |\n|light_blue |\n|light_magenta |\n|light_cyan |\n|white |\n|grey_0 |\n|navy_blue |\n|dark_blue |\n|blue_3a |\n|blue_3b |\n|blue_1 |\n|dark_green |\n|deep_sky_blue_4a |\n|deep_sky_blue_4b |\n|deep_sky_blue_4c |\n|dodger_blue_3 |\n|dodger_blue_2 |\n|green_4 |\n|spring_green_4 |\n|turquoise_4 |\n|deep_sky_blue_3a |\n|deep_sky_blue_3b |\n|dodger_blue_1 |\n|green_3a |\n|spring_green_3a |\n|dark_cyan |\n|light_sea_green |\n|deep_sky_blue_2 |\n|deep_sky_blue_1 |\n|green_3b |\n|spring_green_3b |\n|spring_green_2a |\n|cyan_3 |\n|dark_turquoise |\n|turquoise_2 |\n|green_1 |\n|spring_green_2b |\n|spring_green_1 |\n|medium_spring_green |\n|cyan_2 |\n|cyan_1 |\n|dark_red_1 |\n|deep_pink_4a |\n|purple_4a |\n|purple_4b |\n|purple_3 |\n|blue_violet |\n|orange_4a |\n|grey_37 |\n|medium_purple_4 |\n|slate_blue_3a |\n|slate_blue_3b |\n|royal_blue_1 |\n|chartreuse_4 |\n|dark_sea_green_4a |\n|pale_turquoise_4 |\n|steel_blue |\n|steel_blue_3 |\n|cornflower_blue |\n|chartreuse_3a |\n|dark_sea_green_4b |\n|cadet_blue_2 |\n|cadet_blue_1 |\n|sky_blue_3 |\n|steel_blue_1a |\n|chartreuse_3b |\n|pale_green_3a |\n|sea_green_3 |\n|aquamarine_3 |\n|medium_turquoise |\n|steel_blue_1b |\n|chartreuse_2a |\n|sea_green_2 |\n|sea_green_1a |\n|sea_green_1b |\n|aquamarine_1a |\n|dark_slate_gray_2 |\n|dark_red_2 |\n|deep_pink_4b |\n|dark_magenta_1 |\n|dark_magenta_2 |\n|dark_violet_1a |\n|purple_1a |\n|orange_4b |\n|light_pink_4 |\n|plum_4 |\n|medium_purple_3a |\n|medium_purple_3b |\n|slate_blue_1 |\n|yellow_4a |\n|wheat_4 |\n|grey_53 |\n|light_slate_grey |\n|medium_purple |\n|light_slate_blue |\n|yellow_4b |\n|dark_olive_green_3a |\n|dark_green_sea |\n|light_sky_blue_3a |\n|light_sky_blue_3b |\n|sky_blue_2 |\n|chartreuse_2b |\n|dark_olive_green_3b |\n|pale_green_3b |\n|dark_sea_green_3a |\n|dark_slate_gray_3 |\n|sky_blue_1 |\n|chartreuse_1 |\n|light_green_2 |\n|light_green_3 |\n|pale_green_1a |\n|aquamarine_1b |\n|dark_slate_gray_1 |\n|red_3a |\n|deep_pink_4c |\n|medium_violet_red |\n|magenta_3a |\n|dark_violet_1b |\n|purple_1b |\n|dark_orange_3a |\n|indian_red_1a |\n|hot_pink_3a |\n|medium_orchid_3 |\n|medium_orchid |\n|medium_purple_2a |\n|dark_goldenrod |\n|light_salmon_3a |\n|rosy_brown |\n|grey_63 |\n|medium_purple_2b |\n|medium_purple_1 |\n|gold_3a |\n|dark_khaki |\n|navajo_white_3 |\n|grey_69 |\n|light_steel_blue_3 |\n|light_steel_blue |\n|yellow_3a |\n|dark_olive_green_3 |\n|dark_sea_green_3b |\n|dark_sea_green_2 |\n|light_cyan_3 |\n|light_sky_blue_1 |\n|green_yellow |\n|dark_olive_green_2 |\n|pale_green_1b |\n|dark_sea_green_5b |\n|dark_sea_green_5a |\n|pale_turquoise_1 |\n|red_3b |\n|deep_pink_3a |\n|deep_pink_3b |\n|magenta_3b |\n|magenta_3c |\n|magenta_2a |\n|dark_orange_3b |\n|indian_red_1b |\n|hot_pink_3b |\n|hot_pink_2 |\n|orchid |\n|medium_orchid_1a |\n|orange_3 |\n|light_salmon_3b |\n|light_pink_3 |\n|pink_3 |\n|plum_3 |\n|violet |\n|gold_3b |\n|light_goldenrod_3 |\n|tan |\n|misty_rose_3 |\n|thistle_3 |\n|plum_2 |\n|yellow_3b |\n|khaki_3 |\n|light_goldenrod_2a |\n|light_yellow_3 |\n|grey_84 |\n|light_steel_blue_1 |\n|yellow_2 |\n|dark_olive_green_1a |\n|dark_olive_green_1b |\n|dark_sea_green_1 |\n|honeydew_2 |\n|light_cyan_1 |\n|red_1 |\n|deep_pink_2 |\n|deep_pink_1a |\n|deep_pink_1b |\n|magenta_2b |\n|magenta_1 |\n|orange_red_1 |\n|indian_red_1c |\n|indian_red_1d |\n|hot_pink_1a |\n|hot_pink_1b |\n|medium_orchid_1b |\n|dark_orange |\n|salmon_1 |\n|light_coral |\n|pale_violet_red_1 |\n|orchid_2 |\n|orchid_1 |\n|orange_1 |\n|sandy_brown |\n|light_salmon_1 |\n|light_pink_1 |\n|pink_1 |\n|plum_1 |\n|gold_1 |\n|light_goldenrod_2b |\n|light_goldenrod_2c |\n|navajo_white_1 |\n|misty_rose1 |\n|thistle_1 |\n|yellow_1 |\n|light_goldenrod_1 |\n|khaki_1 |\n|wheat_1 |\n|cornsilk_1 |\n|grey_100 |\n|grey_3 |\n|grey_7 |\n|grey_11 |\n|grey_15 |\n|grey_19 |\n|grey_23 |\n|grey_27 |\n|grey_30 |\n|grey_35 |\n|grey_39 |\n|grey_42 |\n|grey_46 |\n|grey_50 |\n|grey_54 |\n|grey_58 |\n|grey_62 |\n|grey_66 |\n|grey_70 |\n|grey_74 |\n|grey_78 |\n|grey_82 |\n|grey_85 |\n|grey_89 |\n|grey_93 |\n\n\nTo view the palette of colours run the following in a Python shell\n\n```python\n>>> from styled import Styled, COLOURS\n>>> for cn,cv in COLOURS.iteritems():\n... print Styled(\"Foreground: [[ '{:>30}'|fg-{} ]]\\tBackground: [[ '{:>30}'|bg-{} ]]\".format(cn, cn, cn, cn))\n```\n\n## Concatenation\n\nConcatenating a normal string and a `Styled` string produces a `Styled` string, which is a subclass of string. \nInternally, though, everything is a Unicode string.\n\n```python\n>>> s = Styled(\"This just can't just [[ 'go'|underlined ]] on forever! \")\n>>> u = \"She shouted back!\"\n>>> print(type(s + u))\n\n>>> print(type(u + s))\n\n>>> s += \"Gloria!\"\n>>> print(type(s))\n\n```\n\n## Validation\n\nThe process of generating the output involves some validation - to check that styles are sane. At present,\nonly multiple fore- and background colours are checked. This will be expanded as needed.\n\n## Cleaning Styles\n\nIn addition to validation, styles are cleaned. Cleaning ensures that the final set of styles is non-redundant.\n\n```python\n>>> s = Styled(\"It takes enormouse [[ 'courage'|bold:bold:bold ]] to admit that you're wrong (Hehehehehehe!)\")\n>>> s._tokens\n[(19, 49, u'courage', [u'bold', u'bold', u'bold'])]\n>>> s._cleaned_tokens\n[(19, 49, u'courage', [u'bold'])]\n```\n\n## Aspirations?\n\nWhen I grow up I want to have my own Python string declaration like so:\n\n```python\n# hey! I'm a styled string\ns = s\"You have to [[ 'believe'|fg-red ]] it to [[ 'see'|fg-green ]] it!\"\n```\n\n## Special Thanks\n\nTo the following people\n\n* Dimitris Zlatanidis (for the inspiration and resources in his package `colored` available at )\n* Cesare Catavitello (for being the _first_ user)\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "", "keywords": "", "license": "Apache 2.0", "maintainer": "", "maintainer_email": "", "name": "styled", "package_url": "https://pypi.org/project/styled/", "platform": "", "project_url": "https://pypi.org/project/styled/", "project_urls": null, "release_url": "https://pypi.org/project/styled/0.2.0.post1/", "requires_dist": null, "requires_python": "", "summary": "Style your terminal with ease!", "version": "0.2.0.post1" }, "last_serial": 5252605, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "83de1b6ae29060a8962d4e8f653f7cb9", "sha256": "93a5b4fe395288319e895bc938ede0381848585fd5b1a20f7875b16e329c928f" }, "downloads": -1, "filename": "styled-0.1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "83de1b6ae29060a8962d4e8f653f7cb9", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 14455, "upload_time": "2019-02-08T12:57:37", "url": "https://files.pythonhosted.org/packages/19/fd/3cf7ebab3497469c86b185e3a4bc1a214ff66d8c9555284a3b98f4330c7d/styled-0.1.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "17dbb68a8a5af4d38f808a716ca72b04", "sha256": "9133fc38e133092c2b4b9a767399ec19e736d404adc1683267ba91c36c19826a" }, "downloads": -1, "filename": "styled-0.1.2.tar.gz", "has_sig": false, "md5_digest": "17dbb68a8a5af4d38f808a716ca72b04", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14400, "upload_time": "2019-02-08T12:57:40", "url": "https://files.pythonhosted.org/packages/f8/06/bc0f4f26655482f6ce06897dabea6f4cb6631cf8acfcc2b11dffcc964e2b/styled-0.1.2.tar.gz" } ], "0.1.2.post0": [ { "comment_text": "", "digests": { "md5": "502a2444ce2cbe1adca90515ac96d874", "sha256": "4d0a540a14e75a0955bd0f9ab5082d58a5d6b43477408f37a5528b156e5cff72" }, "downloads": -1, "filename": "styled-0.1.2.post0-py2-none-any.whl", "has_sig": false, "md5_digest": "502a2444ce2cbe1adca90515ac96d874", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 14459, "upload_time": "2019-02-08T15:51:33", "url": "https://files.pythonhosted.org/packages/53/7a/5cb0963922a0adf9422ad0fcd4aa495944d767c27704c8eac59588e1561f/styled-0.1.2.post0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "30395f52dc643358fefb2e04c50a7c43", "sha256": "3f6bf539d6e63920d50febcd02b2c6f974623e7a08d309914edd95b59ef6030e" }, "downloads": -1, "filename": "styled-0.1.2.post0.tar.gz", "has_sig": false, "md5_digest": "30395f52dc643358fefb2e04c50a7c43", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 14261, "upload_time": "2019-02-08T15:51:35", "url": "https://files.pythonhosted.org/packages/10/7f/3d3230b597796a393e550314e012552778273ef137222acc0cd5f043fe28/styled-0.1.2.post0.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "b2a1c22c7fa2c334da0b8aa0964807bb", "sha256": "1f2535d5aa86c9d894be39fe896d22d76ee7e299979cd5537c84fe3dd9ac4936" }, "downloads": -1, "filename": "styled-0.2.0-py2-none-any.whl", "has_sig": false, "md5_digest": "b2a1c22c7fa2c334da0b8aa0964807bb", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 15104, "upload_time": "2019-05-10T13:43:28", "url": "https://files.pythonhosted.org/packages/f7/c5/241496e543de927616f9aac134a5f074209fa9d7d507178471a2b5236f05/styled-0.2.0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0b91118e9ecc19b6dc1d06ae2ead5ffc", "sha256": "91ab8022913de87fe1a614d3caeebafe046fd20cdd7d821a61738c1ce86e7276" }, "downloads": -1, "filename": "styled-0.2.0.tar.gz", "has_sig": false, "md5_digest": "0b91118e9ecc19b6dc1d06ae2ead5ffc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13038, "upload_time": "2019-05-10T13:43:30", "url": "https://files.pythonhosted.org/packages/88/d9/ceb2294a62577bb31a2cab075dc3329330e8bdde1312528ea7c40a22e349/styled-0.2.0.tar.gz" } ], "0.2.0.post0": [ { "comment_text": "", "digests": { "md5": "abc2787171750845a8e95ceb4526f130", "sha256": "f932de243a12bf7a263162b00a5eb8aea75ce259118c6d343cf33be4554bd8c1" }, "downloads": -1, "filename": "styled-0.2.0.post0-py2-none-any.whl", "has_sig": false, "md5_digest": "abc2787171750845a8e95ceb4526f130", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 15459, "upload_time": "2019-05-10T14:36:17", "url": "https://files.pythonhosted.org/packages/76/c3/f68e1389a553bed4744dfe6cac55220f7698a3b98a37d0487db434a3abf6/styled-0.2.0.post0-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "298fd8038db0e88deeaba9bd73e0711d", "sha256": "a3214d65db7fb12348ac6fb5b462dfeec7c26901b6694414433fe7ceee8d6d31" }, "downloads": -1, "filename": "styled-0.2.0.post0.tar.gz", "has_sig": false, "md5_digest": "298fd8038db0e88deeaba9bd73e0711d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13865, "upload_time": "2019-05-10T14:36:19", "url": "https://files.pythonhosted.org/packages/e3/cd/8d7cff87d1cd0842ce8f17867780c0366744e5fb752ec80db6034aa2373c/styled-0.2.0.post0.tar.gz" } ], "0.2.0.post1": [ { "comment_text": "", "digests": { "md5": "cb9e4f33ade7e6889fdeb17d48c703c7", "sha256": "25da04dbc3ef47ef8dda8fd25b30675236925bd3e8188e12d44aab38bffdf3a7" }, "downloads": -1, "filename": "styled-0.2.0.post1-py2-none-any.whl", "has_sig": false, "md5_digest": "cb9e4f33ade7e6889fdeb17d48c703c7", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 15517, "upload_time": "2019-05-10T14:45:26", "url": "https://files.pythonhosted.org/packages/fd/74/bf34711fdc41f29bec9a007a68bd436c2ea566cc291540afeedc343a956b/styled-0.2.0.post1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0fb47ae52801eefec8104d610dd61e2f", "sha256": "430c73c6127c8e58187719fec7b66ae692d0b909f553a183ffce119cef1748d4" }, "downloads": -1, "filename": "styled-0.2.0.post1.tar.gz", "has_sig": false, "md5_digest": "0fb47ae52801eefec8104d610dd61e2f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13963, "upload_time": "2019-05-10T14:45:27", "url": "https://files.pythonhosted.org/packages/a1/1c/709b2fdf63935cf2b355349fea7ad06eb9ec970b66dd63b789380590e420/styled-0.2.0.post1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "cb9e4f33ade7e6889fdeb17d48c703c7", "sha256": "25da04dbc3ef47ef8dda8fd25b30675236925bd3e8188e12d44aab38bffdf3a7" }, "downloads": -1, "filename": "styled-0.2.0.post1-py2-none-any.whl", "has_sig": false, "md5_digest": "cb9e4f33ade7e6889fdeb17d48c703c7", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 15517, "upload_time": "2019-05-10T14:45:26", "url": "https://files.pythonhosted.org/packages/fd/74/bf34711fdc41f29bec9a007a68bd436c2ea566cc291540afeedc343a956b/styled-0.2.0.post1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0fb47ae52801eefec8104d610dd61e2f", "sha256": "430c73c6127c8e58187719fec7b66ae692d0b909f553a183ffce119cef1748d4" }, "downloads": -1, "filename": "styled-0.2.0.post1.tar.gz", "has_sig": false, "md5_digest": "0fb47ae52801eefec8104d610dd61e2f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13963, "upload_time": "2019-05-10T14:45:27", "url": "https://files.pythonhosted.org/packages/a1/1c/709b2fdf63935cf2b355349fea7ad06eb9ec970b66dd63b789380590e420/styled-0.2.0.post1.tar.gz" } ] }