Skip to main content

Universal ANSI colorizer for Python (8/16 colors, 256-color, RGB, styles)

Project description

wrapcolor

Універсальний ANSI-«кольоризатор» для Python: простий спосіб стилізувати текст у консолі. Підтримує 8/16 базових кольорів, 256‑кольорову палітру (xterm) та TrueColor (RGB), а також стилі шрифту.

  • Легкий і без залежностей (опційно: colorama для Windows)
  • Зручний екземпляр color із готовими кодами та утилітами
  • Працює з будь‑якою бібліотекою, що виводить у термінал (logging, click, argparse тощо)

Встановлення

pip install wrapcolor
# (опційно для Windows консоль/PowerShell)
pip install colorama

Якщо ви на Windows, рекомендовано ініціалізувати colorama на старті:

try:
    from colorama import justFixWindowsConsole
    justFixWindowsConsole()
except Exception:
    pass

Швидкий старт

from wrapcolor import color

print(color.paint("Привіт!", fg="red", styles=["bold"]))
print(color.rgb(255, 100, 0) + "TrueColor текст" + color.reset)
print(color.bg_idx(24) + "Фон 256‑кольорів" + color.reset)

Приклади використання

1) Базові кольори тексту

from wrapcolor import color

print(color.red + "Червоний" + color.reset)
print(color.green + "Зелений" + color.reset)
print(color.bright_blue + "Яскраво‑синій" + color.reset)

2) Кольори фону

from wrapcolor import color

print(color.bg_yellow + color.black + "Чорний на жовтому" + color.reset)
print(color.bg_bright_red + color.white + "Білий на яскраво‑червоному" + color.reset)

3) Стилі шрифту

from wrapcolor import color

print(color.bold + "Жирний" + color.reset)
print(color.italic + "Курсив" + color.reset)
print(color.underline + "Підкреслений" + color.reset)
print(color.inverse + "Інверсія" + color.reset)
print(color.strike + "Закреслений" + color.reset)

4) Комбінування стилів і кольорів

from wrapcolor import color

print(color.red + color.bold + "Червоний жирний" + color.reset)
print(color.bright_green + color.underline + "Зелений підкреслений" + color.reset)

5) Зручний paint()

from wrapcolor import color

print(color.paint("OK", fg="green", styles=["bold"]))
print(color.paint("УВАГА", fg="bright_yellow", bg="bg_black", styles=["underline"]))
print(color.paint("ПОМИЛКА", fg="bright_white", bg="bg_red", styles=["bold"]))

Перевага paint() — воно автоматично додає reset наприкінці.

6) Шаблон wrap() для багаторазового використання

from wrapcolor import color

warn = color.wrap(color.bright_yellow + color.bold)
err  = color.wrap(color.bg_red + color.white + color.bold)

print(warn.format("Попередження"))
print(err.format("Помилка"))

7) 256‑кольорів (xterm)

from wrapcolor import color

for i in range(16, 32):
    print(color.idx(i) + f" idx({i}) " + color.reset, end=" ")
print()

for i in [196, 202, 208, 214, 220, 226]:
    print(color.idx(i) + "●" + color.reset, end=" ")
print()

print(color.bg_idx(24) + color.bright_white + "Текст на фоні idx(24)" + color.reset)

8) TrueColor (RGB)

from wrapcolor import color

print(color.rgb(12, 200, 155) + "RGB передній план" + color.reset)
print(color.bg_rgb(20, 20, 20) + color.bright_cyan + "Яскравий на темному" + color.reset)

9) Допоміжні функції для статусів

from wrapcolor import color

def ok(msg):
    return color.paint(msg, fg="green", styles=["bold"])

def warn(msg):
    return color.paint(msg, fg="bright_yellow")

def err(msg):
    return color.paint(msg, fg="bright_white", bg="bg_red", styles=["bold"]) 

print(ok("Готово"))
print(warn("Увага"))
print(err("Збій"))

10) Інтеграція з logging

import logging
from wrapcolor import color

class ColorFormatter(logging.Formatter):
    LEVEL_COLOR = {
        logging.DEBUG: color.dim,
        logging.INFO: color.bright_green,
        logging.WARNING: color.bright_yellow,
        logging.ERROR: color.bright_red,
        logging.CRITICAL: color.bg_red + color.white + color.bold,
    }
    def format(self, record):
        base = super().format(record)
        code = self.LEVEL_COLOR.get(record.levelno, "")
        return f"{code}{base}{color.reset}" if code else base

h = logging.StreamHandler()
fmt = ColorFormatter("%(levelname)s: %(message)s")
h.setFormatter(fmt)
log = logging.getLogger("demo")
log.addHandler(h)
log.setLevel(logging.DEBUG)

log.debug("debug")
log.info("info")
log.warning("warning")
log.error("error")
log.critical("critical")

11) Поважайте NO_COLOR і TTY

import os, sys
from wrapcolor import color as _color

USE_COLOR = sys.stdout.isatty() and os.getenv("NO_COLOR") is None

class _NoColor:
    reset = ""
    bold = dim = italic = underline = inverse = strike = ""
    black = red = green = yellow = blue = magenta = cyan = white = ""
    bright_black = bright_red = bright_green = bright_yellow = ""
    bright_blue = bright_magenta = bright_cyan = bright_white = ""
    bg_black = bg_red = bg_green = bg_yellow = bg_blue = bg_magenta = bg_cyan = bg_white = ""
    bg_bright_black = bg_bright_red = bg_bright_green = bg_bright_yellow = ""
    bg_bright_blue = bg_bright_magenta = bg_bright_cyan = bg_bright_white = ""
    @staticmethod
    def idx(n): return ""
    @staticmethod
    def bg_idx(n): return ""
    @staticmethod
    def rgb(r,g,b): return ""
    @staticmethod
    def bg_rgb(r,g,b): return ""
    @classmethod
    def paint(cls, text, *, fg=None, bg=None, styles=None): return str(text)
    @classmethod
    def wrap(cls, code): return "{}"

color = _color if USE_COLOR else _NoColor()

print(color.paint("Це працює навіть без кольорів", fg="green"))

12) Підказки та нюанси

  • Якщо поєднуєте коди вручну, не забудьте в кінці додати color.reset.
  • paint() та wrap() самі додають reset, що зручно для безпечного форматування.
  • Не всі термінали підтримують 256/TrueColor — на старих системах кольори можуть знижуватись.

Довідка API (скорочено)

Об’єкти й методи доступні з:

from wrapcolor import color, _Color
  • Атрибути стилів: bold, dim, italic, underline, inverse, strike
  • 8 кольорів переднього плану: black, red, green, yellow, blue, magenta, cyan, white
  • Яскраві варіанти: bright_black .. bright_white
  • Фон: bg_black .. bg_white, bg_bright_black .. bg_bright_white
  • Методи:
    • idx(n: int) -> str — 256‑кольорів (0..255), передній план
    • bg_idx(n: int) -> str — 256‑кольорів (0..255), фон
    • rgb(r,g,b) -> str — TrueColor (0..255) передній план
    • bg_rgb(r,g,b) -> str — TrueColor (0..255) фон
    • paint(text, *, fg=None, bg=None, styles=None) -> str — безпечно обгортає текст і додає reset
    • wrap(code: str) -> str — повертає шаблон "{code}{}\x1b[0m" для багаторазового format()

Сумісність

  • Python 3.10+
  • Linux/macOS/Windows (для Windows бажано colorama)

Чому wrapcolor?

  • Мінімалістичний інтерфейс: використовуй властивості або утиліти
  • Не нав’язує залежностей
  • Добре працює з існуючими бібліотеками

Ліцензія

MIT

Внесок

Issue/PR вітаються.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wrapcolor-0.1.0.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wrapcolor-0.1.0-py3-none-any.whl (6.9 kB view details)

Uploaded Python 3

File details

Details for the file wrapcolor-0.1.0.tar.gz.

File metadata

  • Download URL: wrapcolor-0.1.0.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for wrapcolor-0.1.0.tar.gz
Algorithm Hash digest
SHA256 2ffd921663aca6c2cb38af61d6dde73080cc20454b54601bd5a7bae972f2b311
MD5 2818b8b8818754db0e898ffd330d0e8f
BLAKE2b-256 be055eddbddc4bcd29b71795d80fa2519a6c214c5747430f66913bba2c6c2fc5

See more details on using hashes here.

Provenance

The following attestation bundles were made for wrapcolor-0.1.0.tar.gz:

Publisher: publish.yml on datsiuk7/wrapcolor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file wrapcolor-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: wrapcolor-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for wrapcolor-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2281ab4eb45c239f7c0afd7febc6f89ff1325104f0a00f0ffe5ccef1274d71f3
MD5 f213c4e68ad5fcf65a70c3a970350403
BLAKE2b-256 673ef53c497fa412b21979b2e8e58c9511f911ba0dc89d1dbf2d359eabab34ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for wrapcolor-0.1.0-py3-none-any.whl:

Publisher: publish.yml on datsiuk7/wrapcolor

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page