From e553507c3f4eafcd26e9083fd19a87e8c9850b65 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Fri, 16 Sep 2022 15:46:28 +0200 Subject: Adding upstream version 2.2.2. Signed-off-by: Daniel Baumann --- .travis.yml | 25 ------ CHANGELOG.md | 104 ++++++++++++++++++++++ Pipfile | 13 +++ Pipfile.lock | 108 +++++++++++++++++++++++ README.md | 99 +++++++++++++++++++++ README.rst | 229 ------------------------------------------------- appveyor.yml | 17 ---- build.sh | 11 +++ colorclass/codes.py | 5 +- dead_code/.travis.yml | 25 ++++++ dead_code/README.rst | 229 +++++++++++++++++++++++++++++++++++++++++++++++++ dead_code/appveyor.yml | 17 ++++ dead_code/setup.py | 63 ++++++++++++++ publish.sh | 1 + pyproject.toml | 66 ++++++++++++++ setup.py | 63 -------------- tests/screenshot.py | 2 +- 17 files changed, 741 insertions(+), 336 deletions(-) delete mode 100644 .travis.yml create mode 100644 CHANGELOG.md create mode 100644 Pipfile create mode 100644 Pipfile.lock create mode 100644 README.md delete mode 100644 README.rst delete mode 100644 appveyor.yml create mode 100644 build.sh create mode 100644 dead_code/.travis.yml create mode 100644 dead_code/README.rst create mode 100644 dead_code/appveyor.yml create mode 100644 dead_code/setup.py create mode 100644 publish.sh create mode 100644 pyproject.toml delete mode 100755 setup.py diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index e919857..0000000 --- a/.travis.yml +++ /dev/null @@ -1,25 +0,0 @@ -# Configure. -language: python -python: 3.5 -sudo: false - -# Run. -install: pip install appveyor-artifacts coveralls tox -script: tox -e lint,py35,py34,py33,pypy3,pypy,py27,py26 -after_success: - - mv .coverage .coverage.travis - - appveyor-artifacts -mi download - - coverage combine - - coveralls - -# Deploy. -deploy: - provider: pypi - user: Robpol86 - password: - secure: - "JYR5ZVOHqZnr4uq8qtA9bM0+pBCfenTUApgSK2eMY3AoQ/Xi4UmcJvsGQkX70wq4twstRm\ - twpb/oFkAuxLMKkK7AJOTt9lKzqjF62xm/yGilDIYMZGCWi30OcRuUSQsEaE1Bq0H1TxciV\ - /ztcdwcXpTq2+oNQz9M7sbH7Czmdbw=" - on: - tags: true diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..8cd490c --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,104 @@ +Changelog +========= + +This project adheres to `Semantic Versioning `_. + +2.2.1 - 2021-12-08 +------------------ + +Added + * Publishin wheels + +2.2.0 - 2016-05-14 +------------------ + +Added + * ``disable_if_no_tty()`` function to conditionally disable colors when STDERR and STDOUT are not streams. + +Changed + * Colors enabled by default always, like it was before v2.0.0. + +2.1.1 - 2016-05-10 +------------------ + +Fixed + * Printing box drawing characters on Windows from Python 2.6. + +2.1.0 - 2016-05-07 +------------------ + +Added + * ``keep_tags`` boolean keyword argument to Color(). Prevents colorclass from parsing curly brackets. + * Automatically skip replacing stderr/stdout streams on latest Windows 10 versions with native ANSI color support. + +Changed + * Refactored most of windows.py. + * Background color determined from either stderr or stdout, instead of just one stream (e.g. piping stderr to file). + +Fixed + * https://github.com/Robpol86/colorclass/issues/16 + * https://github.com/Robpol86/colorclass/issues/18 + +2.0.0 - 2016-04-10 +------------------ + +Added + * Python 3.5 support. + * ``enable_all_colors()``, ``is_enabled()``, and ``is_light()`` toggle functions. + * Library can be used as a script (e.g. ``echo "{red}Red{/red}" |python -m colorclass``). + * Ability to add/multiply Color instances just like str. + * Ability to iterate a Color instance and have each character keep its color codes. + +Changed + * Converted library from Python module to a package. + * ``set_light_background()`` and ``set_dark_background()`` no longer enable colors. Use ``enable_all_colors()``. + * Colors are disabled by default when STDERR and STDOUT are not streams (piped to files/null). Similar to ``grep``. + * Reduce size of ANSI escape sequences by removing codes that have no effect. e.g. ``\033[31;35m`` to ``\033[35m``. + * Color methods that return strings now return Color instances instead of str instances. + +Fixed + * https://github.com/Robpol86/colorclass/issues/15 + * https://github.com/Robpol86/colorclass/issues/17 + +1.2.0 - 2015-03-19 +------------------ + +Added + * Convenience single-color methods by `Marc Abramowitz `_. + +1.1.2 - 2015-01-07 +------------------ + +Fixed + * Maintaining ``Color`` type through ``.encode()`` and ``.decode()`` chains. + +1.1.1 - 2014-11-03 +------------------ + +Fixed + * Python 2.7 64-bit original colors bug on Windows. + * resetting colors when ``reset_atexit`` is True. + * Improved sorting of ``list_tags()``. + +1.1.0 - 2014-11-01 +------------------ + +Added + * Native Windows support and automatic background colors. + +1.0.2 - 2014-10-20 +------------------ + +Added + * Ability to disable/strip out all colors. + +1.0.1 - 2014-09-11 +------------------ + +Fixed + * ``splitlines()`` method. + +1.0.0 - 2014-09-01 +------------------ + +* Initial release. diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..b65ea42 --- /dev/null +++ b/Pipfile @@ -0,0 +1,13 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] + +[dev-packages] +pytest = "*" +vermin = "*" + +[requires] +python_version = "3.10" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..068d0d5 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,108 @@ +{ + "_meta": { + "hash": { + "sha256": "98f4caac4a46252f166ade98a8f70e0a01ea0f6a24ad1f3292f8549c6faf81f7" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.10" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "vermin": { + "hashes": [ + "sha256:ef38dedab8cf7b68f8037f531b82222153ab21d3c54b91dd80776bbf95637ae5" + ], + "index": "pypi", + "version": "==1.3.1" + } + }, + "develop": { + "atomicwrites": { + "hashes": [ + "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197", + "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a" + ], + "markers": "sys_platform == 'win32'", + "version": "==1.4.0" + }, + "attrs": { + "hashes": [ + "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1", + "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==21.2.0" + }, + "colorama": { + "hashes": [ + "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b", + "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2" + ], + "markers": "sys_platform == 'win32'", + "version": "==0.4.4" + }, + "iniconfig": { + "hashes": [ + "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3", + "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32" + ], + "version": "==1.1.1" + }, + "packaging": { + "hashes": [ + "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", + "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" + ], + "markers": "python_version >= '3.6'", + "version": "==21.3" + }, + "pluggy": { + "hashes": [ + "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", + "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" + ], + "markers": "python_version >= '3.6'", + "version": "==1.0.0" + }, + "py": { + "hashes": [ + "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719", + "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==1.11.0" + }, + "pyparsing": { + "hashes": [ + "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4", + "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81" + ], + "markers": "python_version >= '3.6'", + "version": "==3.0.6" + }, + "pytest": { + "hashes": [ + "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89", + "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134" + ], + "index": "pypi", + "version": "==6.2.5" + }, + "toml": { + "hashes": [ + "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", + "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" + ], + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==0.10.2" + } + } +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..83f704e --- /dev/null +++ b/README.md @@ -0,0 +1,99 @@ +# colorclass + +Yet another ANSI color text library for Python. Provides "auto colors" for dark/light terminals. Works on Linux, OS X, +and Windows. For Windows support you just need to call ``Windows.enable()`` in your application. + +On Linux/OS X ``autocolors`` are toggled by calling ``set_light_background()`` and ``set_dark_background()``. On Windows +this can be done automatically if you call ``Windows.enable(auto_colors=True)``. Even though the latest Windows 10 does +support ANSI color codes natively, you still need to run Windows.enable() to take advantage of automatically detecting +the console's background color. + +In Python2.x this library subclasses ``unicode``, while on Python3.x it subclasses ``str``. + +* Python 2.6, 2.7, PyPy, PyPy3, 3.3, 3.4, and 3.5 supported on Linux and OS X. +* Python 2.6, 2.7, 3.3, 3.4, and 3.5 supported on Windows (both 32 and 64 bit versions of Python). + +## Quickstart +Install: +```bash + pip install colorclass +``` + +## Piped Command Line +It is possible to pipe curly-bracket tagged (or regular ANSI coded) text to Python in the command line to produce color +text. Some examples: + +```bash + echo "{red}Red{/red}" |python -m colorclass # Red colored text. + echo -e "\033[31mRed\033[0m" | COLOR_DISABLE=true python -m colorclass # Strip colors + echo -e "\033[31mRed\033[0m" | COLOR_ENABLE=true python -m colorclass &> file.txt # Force colors. +``` +Export these environment variables as "true" to enable/disable some features: + + =============== ============================================ + Env Variable Description + =============== ============================================ + COLOR_ENABLE Force colors even when piping to a file. + COLOR_DISABLE Strip all colors from incoming text. + COLOR_LIGHT Use light colored text for dark backgrounds. + COLOR_DARK Use dark colored text for light backgrounds. + =============== ============================================ + +## Example Implementation + +![Example Script Screenshot](https://github.com/Robpol86/colorclass/raw/master/example.png?raw=true) + +![Example Windows Screenshot](https://github.com/Robpol86/colorclass/raw/master/example_windows.png?raw=true) + +Source code for the example code is: [example.py](https://github.com/Robpol86/colorclass/blob/master/example.py) + +## Usage + +Different colors are chosen using curly-bracket tags, such as ``{red}{/red}``. For a list of available colors, call +``colorclass.list_tags()``. + +The available "auto colors" tags are: + +* autoblack +* autored +* autogreen +* autoyellow +* autoblue +* automagenta +* autocyan +* autowhite +* autobgblack +* autobgred +* autobggreen +* autobgyellow +* autobgblue +* autobgmagenta +* autobgcyan +* autobgwhite + +Methods of Class instances try to return sane data, such as: + +```python + from colorclass import Color + color_string = Color('{red}Test{/red}') + + >>> color_string + u'\x1b[31mTest\x1b[39m' + + >>> len(color_string) + 4 + + >>> color_string.istitle() + True +``` +There are also a couple of helper attributes for all Color instances: + +```python + >>> color_string.value_colors + '\x1b[31mTest\x1b[39m' + + >>> color_string.value_no_colors + 'Test' +``` + +[Change Log](https://github.com/matthewdeanmartin/colorclass/blob/master/CHANGELOG.md) \ No newline at end of file diff --git a/README.rst b/README.rst deleted file mode 100644 index b236580..0000000 --- a/README.rst +++ /dev/null @@ -1,229 +0,0 @@ -========== -colorclass -========== - -Yet another ANSI color text library for Python. Provides "auto colors" for dark/light terminals. Works on Linux, OS X, -and Windows. For Windows support you just need to call ``Windows.enable()`` in your application. - -On Linux/OS X ``autocolors`` are toggled by calling ``set_light_background()`` and ``set_dark_background()``. On Windows -this can be done automatically if you call ``Windows.enable(auto_colors=True)``. Even though the latest Windows 10 does -support ANSI color codes natively, you still need to run Windows.enable() to take advantage of automatically detecting -the console's background color. - -In Python2.x this library subclasses ``unicode``, while on Python3.x it subclasses ``str``. - -* Python 2.6, 2.7, PyPy, PyPy3, 3.3, 3.4, and 3.5 supported on Linux and OS X. -* Python 2.6, 2.7, 3.3, 3.4, and 3.5 supported on Windows (both 32 and 64 bit versions of Python). - -.. image:: https://img.shields.io/appveyor/ci/Robpol86/colorclass/master.svg?style=flat-square&label=AppVeyor%20CI - :target: https://ci.appveyor.com/project/Robpol86/colorclass - :alt: Build Status Windows - -.. image:: https://img.shields.io/travis/Robpol86/colorclass/master.svg?style=flat-square&label=Travis%20CI - :target: https://travis-ci.org/Robpol86/colorclass - :alt: Build Status - -.. image:: https://img.shields.io/coveralls/Robpol86/colorclass/master.svg?style=flat-square&label=Coveralls - :target: https://coveralls.io/github/Robpol86/colorclass - :alt: Coverage Status - -.. image:: https://img.shields.io/pypi/v/colorclass.svg?style=flat-square&label=Latest - :target: https://pypi.python.org/pypi/colorclass - :alt: Latest Version - -.. image:: https://img.shields.io/pypi/dm/colorclass.svg?style=flat-square&label=PyPI%20Downloads - :target: https://pypi.python.org/pypi/colorclass - :alt: Downloads - -Quickstart -========== - -Install: - -.. code:: bash - - pip install colorclass - -Piped Command Line -================== - -It is possible to pipe curly-bracket tagged (or regular ANSI coded) text to Python in the command line to produce color -text. Some examples: - -.. code:: bash - - echo "{red}Red{/red}" |python -m colorclass # Red colored text. - echo -e "\033[31mRed\033[0m" | COLOR_DISABLE=true python -m colorclass # Strip colors - echo -e "\033[31mRed\033[0m" | COLOR_ENABLE=true python -m colorclass &> file.txt # Force colors. - -Export these environment variables as "true" to enable/disable some features: - -=============== ============================================ -Env Variable Description -=============== ============================================ -COLOR_ENABLE Force colors even when piping to a file. -COLOR_DISABLE Strip all colors from incoming text. -COLOR_LIGHT Use light colored text for dark backgrounds. -COLOR_DARK Use dark colored text for light backgrounds. -=============== ============================================ - -Example Implementation -====================== - -.. image:: https://github.com/Robpol86/colorclass/raw/master/example.png?raw=true - :alt: Example Script Screenshot - -.. image:: https://github.com/Robpol86/colorclass/raw/master/example_windows.png?raw=true - :alt: Example Windows Screenshot - -Source code for the example code is: `example.py `_ - -Usage -===== - -Different colors are chosen using curly-bracket tags, such as ``{red}{/red}``. For a list of available colors, call -``colorclass.list_tags()``. - -The available "auto colors" tags are: - -* autoblack -* autored -* autogreen -* autoyellow -* autoblue -* automagenta -* autocyan -* autowhite -* autobgblack -* autobgred -* autobggreen -* autobgyellow -* autobgblue -* autobgmagenta -* autobgcyan -* autobgwhite - -Methods of Class instances try to return sane data, such as: - -.. code:: python - - from colorclass import Color - color_string = Color('{red}Test{/red}') - - color_string - u'\x1b[31mTest\x1b[39m' - - len(color_string) - 4 - - color_string.istitle() - True - -There are also a couple of helper attributes for all Color instances: - -.. code:: python - - color_string.value_colors - '\x1b[31mTest\x1b[39m' - - color_string.value_no_colors - 'Test' - -Changelog -========= - -This project adheres to `Semantic Versioning `_. - -2.2.0 - 2016-05-14 ------------------- - -Added - * ``disable_if_no_tty()`` function to conditionally disable colors when STDERR and STDOUT are not streams. - -Changed - * Colors enabled by default always, like it was before v2.0.0. - -2.1.1 - 2016-05-10 ------------------- - -Fixed - * Printing box drawing characters on Windows from Python 2.6. - -2.1.0 - 2016-05-07 ------------------- - -Added - * ``keep_tags`` boolean keyword argument to Color(). Prevents colorclass from parsing curly brackets. - * Automatically skip replacing stderr/stdout streams on latest Windows 10 versions with native ANSI color support. - -Changed - * Refactored most of windows.py. - * Background color determined from either stderr or stdout, instead of just one stream (e.g. piping stderr to file). - -Fixed - * https://github.com/Robpol86/colorclass/issues/16 - * https://github.com/Robpol86/colorclass/issues/18 - -2.0.0 - 2016-04-10 ------------------- - -Added - * Python 3.5 support. - * ``enable_all_colors()``, ``is_enabled()``, and ``is_light()`` toggle functions. - * Library can be used as a script (e.g. ``echo "{red}Red{/red}" |python -m colorclass``). - * Ability to add/multiply Color instances just like str. - * Ability to iterate a Color instance and have each character keep its color codes. - -Changed - * Converted library from Python module to a package. - * ``set_light_background()`` and ``set_dark_background()`` no longer enable colors. Use ``enable_all_colors()``. - * Colors are disabled by default when STDERR and STDOUT are not streams (piped to files/null). Similar to ``grep``. - * Reduce size of ANSI escape sequences by removing codes that have no effect. e.g. ``\033[31;35m`` to ``\033[35m``. - * Color methods that return strings now return Color instances instead of str instances. - -Fixed - * https://github.com/Robpol86/colorclass/issues/15 - * https://github.com/Robpol86/colorclass/issues/17 - -1.2.0 - 2015-03-19 ------------------- - -Added - * Convenience single-color methods by `Marc Abramowitz `_. - -1.1.2 - 2015-01-07 ------------------- - -Fixed - * Maintaining ``Color`` type through ``.encode()`` and ``.decode()`` chains. - -1.1.1 - 2014-11-03 ------------------- - -Fixed - * Python 2.7 64-bit original colors bug on Windows. - * resetting colors when ``reset_atexit`` is True. - * Improved sorting of ``list_tags()``. - -1.1.0 - 2014-11-01 ------------------- - -Added - * Native Windows support and automatic background colors. - -1.0.2 - 2014-10-20 ------------------- - -Added - * Ability to disable/strip out all colors. - -1.0.1 - 2014-09-11 ------------------- - -Fixed - * ``splitlines()`` method. - -1.0.0 - 2014-09-01 ------------------- - -* Initial release. diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 5b14160..0000000 --- a/appveyor.yml +++ /dev/null @@ -1,17 +0,0 @@ -# Configure. -artifacts: - - path: .coverage - -# Run. -init: set PATH=C:\Python35-x64;C:\Python35-x64\Scripts;%PATH% -install: - - appveyor DownloadFile https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-desktop.ps1 - - ps: .\enable-desktop -build_script: pip install tox -test_script: tox -e lint,py35,py34,py33,py27,py26,py35x64,py34x64,py33x64,py27x64,py26x64 - -# Post. -on_finish: - - appveyor PushArtifact test_example_test_windows_screenshot.png - - appveyor PushArtifact test_windows_test_enable_disable.png - - appveyor PushArtifact test_windows_test_box_characters.png diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..12bb762 --- /dev/null +++ b/build.sh @@ -0,0 +1,11 @@ +echo assuming we still want to support python 2! +PROJECT="colorclass" +export PYTHONPATH=$PYTHONPATH:. +pylint "$PROJECT" +flake8 "$PROJECT" +python -m pytest "$PROJECT" +python -m pytest --doctest-glob="$PROJECT/**/*.py" +pytest tests -v --cov-report html:coverage --cov="$PROJECT" +echo not bumping version here, just checking if we can create the wheel +poetry build +check-wheel-contents dist/*.whl \ No newline at end of file diff --git a/colorclass/codes.py b/colorclass/codes.py index b0ecb03..a69958d 100644 --- a/colorclass/codes.py +++ b/colorclass/codes.py @@ -1,7 +1,10 @@ """Handles mapping between color names and ANSI codes and determining auto color codes.""" import sys -from collections import Mapping +try: + from collections import Mapping +except ImportError: + from collections.abc import Mapping BASE_CODES = { '/all': 0, 'b': 1, 'f': 2, 'i': 3, 'u': 4, 'flash': 5, 'outline': 6, 'negative': 7, 'invis': 8, 'strike': 9, diff --git a/dead_code/.travis.yml b/dead_code/.travis.yml new file mode 100644 index 0000000..e919857 --- /dev/null +++ b/dead_code/.travis.yml @@ -0,0 +1,25 @@ +# Configure. +language: python +python: 3.5 +sudo: false + +# Run. +install: pip install appveyor-artifacts coveralls tox +script: tox -e lint,py35,py34,py33,pypy3,pypy,py27,py26 +after_success: + - mv .coverage .coverage.travis + - appveyor-artifacts -mi download + - coverage combine + - coveralls + +# Deploy. +deploy: + provider: pypi + user: Robpol86 + password: + secure: + "JYR5ZVOHqZnr4uq8qtA9bM0+pBCfenTUApgSK2eMY3AoQ/Xi4UmcJvsGQkX70wq4twstRm\ + twpb/oFkAuxLMKkK7AJOTt9lKzqjF62xm/yGilDIYMZGCWi30OcRuUSQsEaE1Bq0H1TxciV\ + /ztcdwcXpTq2+oNQz9M7sbH7Czmdbw=" + on: + tags: true diff --git a/dead_code/README.rst b/dead_code/README.rst new file mode 100644 index 0000000..b236580 --- /dev/null +++ b/dead_code/README.rst @@ -0,0 +1,229 @@ +========== +colorclass +========== + +Yet another ANSI color text library for Python. Provides "auto colors" for dark/light terminals. Works on Linux, OS X, +and Windows. For Windows support you just need to call ``Windows.enable()`` in your application. + +On Linux/OS X ``autocolors`` are toggled by calling ``set_light_background()`` and ``set_dark_background()``. On Windows +this can be done automatically if you call ``Windows.enable(auto_colors=True)``. Even though the latest Windows 10 does +support ANSI color codes natively, you still need to run Windows.enable() to take advantage of automatically detecting +the console's background color. + +In Python2.x this library subclasses ``unicode``, while on Python3.x it subclasses ``str``. + +* Python 2.6, 2.7, PyPy, PyPy3, 3.3, 3.4, and 3.5 supported on Linux and OS X. +* Python 2.6, 2.7, 3.3, 3.4, and 3.5 supported on Windows (both 32 and 64 bit versions of Python). + +.. image:: https://img.shields.io/appveyor/ci/Robpol86/colorclass/master.svg?style=flat-square&label=AppVeyor%20CI + :target: https://ci.appveyor.com/project/Robpol86/colorclass + :alt: Build Status Windows + +.. image:: https://img.shields.io/travis/Robpol86/colorclass/master.svg?style=flat-square&label=Travis%20CI + :target: https://travis-ci.org/Robpol86/colorclass + :alt: Build Status + +.. image:: https://img.shields.io/coveralls/Robpol86/colorclass/master.svg?style=flat-square&label=Coveralls + :target: https://coveralls.io/github/Robpol86/colorclass + :alt: Coverage Status + +.. image:: https://img.shields.io/pypi/v/colorclass.svg?style=flat-square&label=Latest + :target: https://pypi.python.org/pypi/colorclass + :alt: Latest Version + +.. image:: https://img.shields.io/pypi/dm/colorclass.svg?style=flat-square&label=PyPI%20Downloads + :target: https://pypi.python.org/pypi/colorclass + :alt: Downloads + +Quickstart +========== + +Install: + +.. code:: bash + + pip install colorclass + +Piped Command Line +================== + +It is possible to pipe curly-bracket tagged (or regular ANSI coded) text to Python in the command line to produce color +text. Some examples: + +.. code:: bash + + echo "{red}Red{/red}" |python -m colorclass # Red colored text. + echo -e "\033[31mRed\033[0m" | COLOR_DISABLE=true python -m colorclass # Strip colors + echo -e "\033[31mRed\033[0m" | COLOR_ENABLE=true python -m colorclass &> file.txt # Force colors. + +Export these environment variables as "true" to enable/disable some features: + +=============== ============================================ +Env Variable Description +=============== ============================================ +COLOR_ENABLE Force colors even when piping to a file. +COLOR_DISABLE Strip all colors from incoming text. +COLOR_LIGHT Use light colored text for dark backgrounds. +COLOR_DARK Use dark colored text for light backgrounds. +=============== ============================================ + +Example Implementation +====================== + +.. image:: https://github.com/Robpol86/colorclass/raw/master/example.png?raw=true + :alt: Example Script Screenshot + +.. image:: https://github.com/Robpol86/colorclass/raw/master/example_windows.png?raw=true + :alt: Example Windows Screenshot + +Source code for the example code is: `example.py `_ + +Usage +===== + +Different colors are chosen using curly-bracket tags, such as ``{red}{/red}``. For a list of available colors, call +``colorclass.list_tags()``. + +The available "auto colors" tags are: + +* autoblack +* autored +* autogreen +* autoyellow +* autoblue +* automagenta +* autocyan +* autowhite +* autobgblack +* autobgred +* autobggreen +* autobgyellow +* autobgblue +* autobgmagenta +* autobgcyan +* autobgwhite + +Methods of Class instances try to return sane data, such as: + +.. code:: python + + from colorclass import Color + color_string = Color('{red}Test{/red}') + + color_string + u'\x1b[31mTest\x1b[39m' + + len(color_string) + 4 + + color_string.istitle() + True + +There are also a couple of helper attributes for all Color instances: + +.. code:: python + + color_string.value_colors + '\x1b[31mTest\x1b[39m' + + color_string.value_no_colors + 'Test' + +Changelog +========= + +This project adheres to `Semantic Versioning `_. + +2.2.0 - 2016-05-14 +------------------ + +Added + * ``disable_if_no_tty()`` function to conditionally disable colors when STDERR and STDOUT are not streams. + +Changed + * Colors enabled by default always, like it was before v2.0.0. + +2.1.1 - 2016-05-10 +------------------ + +Fixed + * Printing box drawing characters on Windows from Python 2.6. + +2.1.0 - 2016-05-07 +------------------ + +Added + * ``keep_tags`` boolean keyword argument to Color(). Prevents colorclass from parsing curly brackets. + * Automatically skip replacing stderr/stdout streams on latest Windows 10 versions with native ANSI color support. + +Changed + * Refactored most of windows.py. + * Background color determined from either stderr or stdout, instead of just one stream (e.g. piping stderr to file). + +Fixed + * https://github.com/Robpol86/colorclass/issues/16 + * https://github.com/Robpol86/colorclass/issues/18 + +2.0.0 - 2016-04-10 +------------------ + +Added + * Python 3.5 support. + * ``enable_all_colors()``, ``is_enabled()``, and ``is_light()`` toggle functions. + * Library can be used as a script (e.g. ``echo "{red}Red{/red}" |python -m colorclass``). + * Ability to add/multiply Color instances just like str. + * Ability to iterate a Color instance and have each character keep its color codes. + +Changed + * Converted library from Python module to a package. + * ``set_light_background()`` and ``set_dark_background()`` no longer enable colors. Use ``enable_all_colors()``. + * Colors are disabled by default when STDERR and STDOUT are not streams (piped to files/null). Similar to ``grep``. + * Reduce size of ANSI escape sequences by removing codes that have no effect. e.g. ``\033[31;35m`` to ``\033[35m``. + * Color methods that return strings now return Color instances instead of str instances. + +Fixed + * https://github.com/Robpol86/colorclass/issues/15 + * https://github.com/Robpol86/colorclass/issues/17 + +1.2.0 - 2015-03-19 +------------------ + +Added + * Convenience single-color methods by `Marc Abramowitz `_. + +1.1.2 - 2015-01-07 +------------------ + +Fixed + * Maintaining ``Color`` type through ``.encode()`` and ``.decode()`` chains. + +1.1.1 - 2014-11-03 +------------------ + +Fixed + * Python 2.7 64-bit original colors bug on Windows. + * resetting colors when ``reset_atexit`` is True. + * Improved sorting of ``list_tags()``. + +1.1.0 - 2014-11-01 +------------------ + +Added + * Native Windows support and automatic background colors. + +1.0.2 - 2014-10-20 +------------------ + +Added + * Ability to disable/strip out all colors. + +1.0.1 - 2014-09-11 +------------------ + +Fixed + * ``splitlines()`` method. + +1.0.0 - 2014-09-01 +------------------ + +* Initial release. diff --git a/dead_code/appveyor.yml b/dead_code/appveyor.yml new file mode 100644 index 0000000..5b14160 --- /dev/null +++ b/dead_code/appveyor.yml @@ -0,0 +1,17 @@ +# Configure. +artifacts: + - path: .coverage + +# Run. +init: set PATH=C:\Python35-x64;C:\Python35-x64\Scripts;%PATH% +install: + - appveyor DownloadFile https://raw.githubusercontent.com/appveyor/ci/master/scripts/enable-desktop.ps1 + - ps: .\enable-desktop +build_script: pip install tox +test_script: tox -e lint,py35,py34,py33,py27,py26,py35x64,py34x64,py33x64,py27x64,py26x64 + +# Post. +on_finish: + - appveyor PushArtifact test_example_test_windows_screenshot.png + - appveyor PushArtifact test_windows_test_enable_disable.png + - appveyor PushArtifact test_windows_test_box_characters.png diff --git a/dead_code/setup.py b/dead_code/setup.py new file mode 100644 index 0000000..3f22821 --- /dev/null +++ b/dead_code/setup.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python +"""Setup script for the project.""" + +from __future__ import print_function + +import codecs +import os + +from setuptools import setup + + +def readme(): + """Try to read README.rst or return empty string if failed. + + :return: File contents. + :rtype: str + """ + path = os.path.realpath(os.path.join(os.path.dirname(__file__), 'README.rst')) + handle = None + try: + handle = codecs.open(path, encoding='utf-8') + return handle.read(131072) + except IOError: + return '' + finally: + getattr(handle, 'close', lambda: None)() + + +setup( + author='@Robpol86', + author_email='robpol86@gmail.com', + classifiers=[ + 'Development Status :: 5 - Production/Stable', + 'Environment :: Console', + 'Environment :: MacOS X', + 'Environment :: Win32 (MS Windows)', + 'Intended Audience :: Developers', + 'License :: OSI Approved :: MIT License', + 'Operating System :: MacOS :: MacOS X', + 'Operating System :: Microsoft :: Windows', + 'Operating System :: POSIX :: Linux', + 'Operating System :: POSIX', + 'Programming Language :: Python :: 2.6', + 'Programming Language :: Python :: 2.7', + 'Programming Language :: Python :: 3.3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: Implementation :: PyPy', + 'Topic :: Software Development :: Libraries', + 'Topic :: Terminals', + 'Topic :: Text Processing :: Markup', + ], + description='Colorful worry-free console applications for Linux, Mac OS X, and Windows.', + install_requires=[], + keywords='Shell Bash ANSI ASCII terminal console colors automatic', + license='MIT', + long_description=readme(), + name='colorclass', + packages=['colorclass'], + url='https://github.com/Robpol86/colorclass', + version='2.2.0', + zip_safe=True, +) diff --git a/publish.sh b/publish.sh new file mode 100644 index 0000000..8ad6022 --- /dev/null +++ b/publish.sh @@ -0,0 +1 @@ +rm -rf dist && poetry version patch && poetry build && twine upload dist/* diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..65eaec9 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,66 @@ +[tool.poetry] +name = "colorclass" +version = "2.2.2" +description = "Colorful worry-free console applications for Linux, Mac OS X, and Windows." +authors = [ + "Robpol86 ", + "Matthew Martin " +] +keywords = ["Shell", "Bash", "ANSI", "ASCII", "terminal", "console", "colors", "automatic"] +classifiers = [ + "Development Status :: 5 - Production/Stable", + "Environment :: Console", + "Environment :: MacOS X", + "Environment :: Win32 (MS Windows)", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "Operating System :: MacOS :: MacOS X", + "Operating System :: Microsoft :: Windows", + "Operating System :: POSIX :: Linux", + "Operating System :: POSIX", + "Programming Language :: Python :: 2.6", + "Programming Language :: Python :: 2.7", + "Programming Language :: Python :: 3.3", + "Programming Language :: Python :: 3.4", + "Programming Language :: Python :: 3.5", + "Programming Language :: Python :: 3.6", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: Implementation :: PyPy", + "Topic :: Software Development :: Libraries", + "Topic :: Terminals", + "Topic :: Text Processing :: Markup" +] +packages = [ + { include = "colorclass" }, +] +include = [ + "colorclass/**/*.py", +] +exclude = [ +] +license = "MIT" +readme = "README.md" +repository = "https://github.com/matthewdeanmartin/colorclass" +homepage = "https://github.com/matthewdeanmartin/colorclass" +documentation = "https://github.com/matthewdeanmartin/colorclass" + +[tool.poetry.urls] +"Bug Tracker" = "https://github.com/matthewdeanmartin/colorclass/issues" +"Change Log" = "https://github.com/matthewdeanmartin/colorclass/blob/master/CHANGELOG.md" + +[tool.poetry.scripts] + + +[tool.poetry.dependencies] +# per vermin's estimation +python = ">=2.6 || >=3.0" + +[tool.poetry.dev-dependencies] +pytest = "==6.0.1" + +[build-system] +requires = ["poetry>=0.12"] +build-backend = "poetry.masonry.api" diff --git a/setup.py b/setup.py deleted file mode 100755 index 3f22821..0000000 --- a/setup.py +++ /dev/null @@ -1,63 +0,0 @@ -#!/usr/bin/env python -"""Setup script for the project.""" - -from __future__ import print_function - -import codecs -import os - -from setuptools import setup - - -def readme(): - """Try to read README.rst or return empty string if failed. - - :return: File contents. - :rtype: str - """ - path = os.path.realpath(os.path.join(os.path.dirname(__file__), 'README.rst')) - handle = None - try: - handle = codecs.open(path, encoding='utf-8') - return handle.read(131072) - except IOError: - return '' - finally: - getattr(handle, 'close', lambda: None)() - - -setup( - author='@Robpol86', - author_email='robpol86@gmail.com', - classifiers=[ - 'Development Status :: 5 - Production/Stable', - 'Environment :: Console', - 'Environment :: MacOS X', - 'Environment :: Win32 (MS Windows)', - 'Intended Audience :: Developers', - 'License :: OSI Approved :: MIT License', - 'Operating System :: MacOS :: MacOS X', - 'Operating System :: Microsoft :: Windows', - 'Operating System :: POSIX :: Linux', - 'Operating System :: POSIX', - 'Programming Language :: Python :: 2.6', - 'Programming Language :: Python :: 2.7', - 'Programming Language :: Python :: 3.3', - 'Programming Language :: Python :: 3.4', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: Implementation :: PyPy', - 'Topic :: Software Development :: Libraries', - 'Topic :: Terminals', - 'Topic :: Text Processing :: Markup', - ], - description='Colorful worry-free console applications for Linux, Mac OS X, and Windows.', - install_requires=[], - keywords='Shell Bash ANSI ASCII terminal console colors automatic', - license='MIT', - long_description=readme(), - name='colorclass', - packages=['colorclass'], - url='https://github.com/Robpol86/colorclass', - version='2.2.0', - zip_safe=True, -) diff --git a/tests/screenshot.py b/tests/screenshot.py index cc391eb..eef06b9 100644 --- a/tests/screenshot.py +++ b/tests/screenshot.py @@ -174,7 +174,7 @@ class RunNewConsole(object): def iter_rows(pil_image): """Yield tuple of pixels for each row in the image. - itertools.izip in Python 2.x and zip in Python 3.x are writen in C. Much faster than anything else I've found + itertools.izip in Python 2.x and zip in Python 3.x are written in C. Much faster than anything else I've found written in pure Python. From: -- cgit v1.2.3