Skip to content

Commit

Permalink
Apply colour to HTML output (#176)
Browse files Browse the repository at this point in the history
  • Loading branch information
hugovk committed Nov 8, 2023
2 parents 1e79906 + 9524208 commit de0738b
Show file tree
Hide file tree
Showing 8 changed files with 125 additions and 97 deletions.
5 changes: 1 addition & 4 deletions .coveragerc
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,7 @@

[report]
# Regexes for lines to exclude from consideration
exclude_lines =
# Have to re-enable the standard pragma:
pragma: no cover

exclude_also =
# Don't complain if non-runnable code isn't run:
if __name__ == .__main__.:
def main
Expand Down
45 changes: 17 additions & 28 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -1,53 +1,37 @@
repos:
- repo: https://github.com/asottile/pyupgrade
rev: v3.14.0
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.1.4
hooks:
- id: pyupgrade
args: [--py38-plus]
- id: ruff
args: [--fix, --exit-non-zero-on-fix]

- repo: https://github.com/psf/black-pre-commit-mirror
rev: 23.9.1
rev: 23.11.0
hooks:
- id: black

- repo: https://github.com/PyCQA/isort
rev: 5.12.0
hooks:
- id: isort
args: [--add-import=from __future__ import annotations]

- repo: https://github.com/PyCQA/flake8
rev: 6.1.0
hooks:
- id: flake8
additional_dependencies:
[flake8-2020, flake8-errmsg, flake8-implicit-str-concat]

- repo: https://github.com/pre-commit/pygrep-hooks
rev: v1.10.0
hooks:
- id: python-check-blanket-noqa
- id: python-no-log-warn

- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
rev: v4.5.0
hooks:
- id: check-case-conflict
- id: check-merge-conflict
- id: check-json
- id: check-toml
- id: check-yaml
- id: requirements-txt-fixer
- id: debug-statements
- id: end-of-file-fixer
- id: requirements-txt-fixer
- id: trailing-whitespace
exclude: tests/data/expected_output.py

- repo: https://github.com/tox-dev/pyproject-fmt
rev: 1.2.0
rev: 1.4.1
hooks:
- id: pyproject-fmt
additional_dependencies: [tox]

- repo: https://github.com/abravalheri/validate-pyproject
rev: v0.14
rev: v0.15
hooks:
- id: validate-pyproject

Expand All @@ -62,5 +46,10 @@ repos:
- id: prettier
args: [--prose-wrap=always, --print-width=88]

- repo: meta
hooks:
- id: check-hooks-apply
- id: check-useless-excludes

ci:
autoupdate_schedule: quarterly
71 changes: 37 additions & 34 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ options:
deprecated: use direct options instead: --html, --json, --md, --pretty, --rst, --csv, --tsv or
--yaml.
-c {yes,no,auto}, --color {yes,no,auto}
colour the terminal output (default: auto)
colour the output (default: auto)
--clear-cache clear cache before running
-v, --verbose print extra messages to stderr
-V, --version show program's version number and exit
Expand Down Expand Up @@ -98,11 +98,11 @@ run("eol", line_limit=5)

```console
$ eol
akeneo-pim
alibaba-dragonwell
almalinux
alpine
amazon-corretto
amazon-eks
amazon-cdk
...
```

Expand All @@ -116,21 +116,22 @@ run("norwegianblue python")

```console
$ norwegianblue python
┌───────┬────────────┬─────────┬────────────────┬────────────┐
│ cycle │ release │ latest │ latest release │ eol │
├───────┼────────────┼─────────┼────────────────┼────────────┤
│ 3.11 │ 2022-10-24 │ 3.11.4 │ 2023-06-06 │ 2027-10-24 │
│ 3.10 │ 2021-10-04 │ 3.10.12 │ 2023-06-06 │ 2026-10-04 │
│ 3.9 │ 2020-10-05 │ 3.9.17 │ 2023-06-06 │ 2025-10-05 │
│ 3.8 │ 2019-10-14 │ 3.8.17 │ 2023-06-06 │ 2024-10-14 │
│ 3.7 │ 2018-06-26 │ 3.7.17 │ 2023-06-05 │ 2023-06-27 │
│ 3.6 │ 2016-12-22 │ 3.6.15 │ 2021-09-03 │ 2021-12-23 │
│ 3.5 │ 2015-09-12 │ 3.5.10 │ 2020-09-05 │ 2020-09-13 │
│ 3.4 │ 2014-03-15 │ 3.4.10 │ 2019-03-18 │ 2019-03-18 │
│ 3.3 │ 2012-09-29 │ 3.3.7 │ 2017-09-19 │ 2017-09-29 │
│ 2.7 │ 2010-07-03 │ 2.7.18 │ 2020-04-19 │ 2020-01-01 │
│ 2.6 │ 2008-10-01 │ 2.6.9 │ 2013-10-29 │ 2013-10-29 │
└───────┴────────────┴─────────┴────────────────┴────────────┘
┌───────┬────────────┬─────────┬────────────────┬────────────┬────────────┐
│ cycle │ release │ latest │ latest release │ support │ eol │
├───────┼────────────┼─────────┼────────────────┼────────────┼────────────┤
│ 3.12 │ 2023-10-02 │ 3.12.0 │ 2023-10-02 │ 2025-04-02 │ 2028-10-02 │
│ 3.11 │ 2022-10-24 │ 3.11.6 │ 2023-10-02 │ 2024-04-01 │ 2027-10-24 │
│ 3.10 │ 2021-10-04 │ 3.10.13 │ 2023-08-24 │ 2023-04-05 │ 2026-10-04 │
│ 3.9 │ 2020-10-05 │ 3.9.18 │ 2023-08-24 │ 2022-05-17 │ 2025-10-05 │
│ 3.8 │ 2019-10-14 │ 3.8.18 │ 2023-08-24 │ 2021-05-03 │ 2024-10-14 │
│ 3.7 │ 2018-06-26 │ 3.7.17 │ 2023-06-05 │ 2020-06-27 │ 2023-06-27 │
│ 3.6 │ 2016-12-22 │ 3.6.15 │ 2021-09-03 │ 2018-12-24 │ 2021-12-23 │
│ 3.5 │ 2015-09-12 │ 3.5.10 │ 2020-09-05 │ False │ 2020-09-13 │
│ 3.4 │ 2014-03-15 │ 3.4.10 │ 2019-03-18 │ False │ 2019-03-18 │
│ 3.3 │ 2012-09-29 │ 3.3.7 │ 2017-09-19 │ False │ 2017-09-29 │
│ 2.7 │ 2010-07-03 │ 2.7.18 │ 2020-04-19 │ False │ 2020-01-01 │
│ 2.6 │ 2008-10-01 │ 2.6.9 │ 2013-10-29 │ False │ 2013-10-29 │
└───────┴────────────┴─────────┴────────────────┴────────────┴────────────┘
```

<!-- [[[end]]] -->
Expand All @@ -141,19 +142,20 @@ You can format in Markdown, ready for pasting in GitHub issues and PRs:
run("eol python --md", with_console=False)
]]] -->

| cycle | release | latest | latest release | eol |
| :---- | :--------: | :------ | :------------: | :--------: |
| 3.11 | 2022-10-24 | 3.11.4 | 2023-06-06 | 2027-10-24 |
| 3.10 | 2021-10-04 | 3.10.12 | 2023-06-06 | 2026-10-04 |
| 3.9 | 2020-10-05 | 3.9.17 | 2023-06-06 | 2025-10-05 |
| 3.8 | 2019-10-14 | 3.8.17 | 2023-06-06 | 2024-10-14 |
| 3.7 | 2018-06-26 | 3.7.17 | 2023-06-05 | 2023-06-27 |
| 3.6 | 2016-12-22 | 3.6.15 | 2021-09-03 | 2021-12-23 |
| 3.5 | 2015-09-12 | 3.5.10 | 2020-09-05 | 2020-09-13 |
| 3.4 | 2014-03-15 | 3.4.10 | 2019-03-18 | 2019-03-18 |
| 3.3 | 2012-09-29 | 3.3.7 | 2017-09-19 | 2017-09-29 |
| 2.7 | 2010-07-03 | 2.7.18 | 2020-04-19 | 2020-01-01 |
| 2.6 | 2008-10-01 | 2.6.9 | 2013-10-29 | 2013-10-29 |
| cycle | release | latest | latest release | support | eol |
| :---- | :--------: | :------ | :------------: | :--------: | :--------: |
| 3.12 | 2023-10-02 | 3.12.0 | 2023-10-02 | 2025-04-02 | 2028-10-02 |
| 3.11 | 2022-10-24 | 3.11.6 | 2023-10-02 | 2024-04-01 | 2027-10-24 |
| 3.10 | 2021-10-04 | 3.10.13 | 2023-08-24 | 2023-04-05 | 2026-10-04 |
| 3.9 | 2020-10-05 | 3.9.18 | 2023-08-24 | 2022-05-17 | 2025-10-05 |
| 3.8 | 2019-10-14 | 3.8.18 | 2023-08-24 | 2021-05-03 | 2024-10-14 |
| 3.7 | 2018-06-26 | 3.7.17 | 2023-06-05 | 2020-06-27 | 2023-06-27 |
| 3.6 | 2016-12-22 | 3.6.15 | 2021-09-03 | 2018-12-24 | 2021-12-23 |
| 3.5 | 2015-09-12 | 3.5.10 | 2020-09-05 | False | 2020-09-13 |
| 3.4 | 2014-03-15 | 3.4.10 | 2019-03-18 | False | 2019-03-18 |
| 3.3 | 2012-09-29 | 3.3.7 | 2017-09-19 | False | 2017-09-29 |
| 2.7 | 2010-07-03 | 2.7.18 | 2020-04-19 | False | 2020-01-01 |
| 2.6 | 2008-10-01 | 2.6.9 | 2013-10-29 | False | 2013-10-29 |

<!-- [[[end]]] -->

Expand All @@ -170,11 +172,12 @@ $ eol nodejs --rst
======== ============ ========== ================ ============ ============ ======================================================================================
cycle release latest latest release support eol link
======== ============ ========== ================ ============ ============ ======================================================================================
20 LTS 2023-04-18 20.5.0 2023-07-20 2024-10-22 2026-04-30
21 2023-10-17 21.1.0 2023-10-24 2024-04-01 2024-06-01
20 LTS 2023-04-18 20.9.0 2023-10-24 2024-10-22 2026-04-30
19 2022-10-18 19.9.0 2023-04-10 2023-04-01 2023-06-01
18 LTS 2022-04-19 18.17.0 2023-07-18 2023-10-18 2025-04-30
18 LTS 2022-04-19 18.18.2 2023-10-13 2023-10-18 2025-04-30
17 2021-10-19 17.9.1 2022-06-01 2022-04-01 2022-06-01
16 LTS 2021-04-20 16.20.1 2023-06-20 2022-10-18 2023-09-11
16 LTS 2021-04-20 16.20.2 2023-08-09 2022-10-18 2023-09-11
15 2020-10-20 15.14.0 2021-04-06 2021-04-01 2021-06-01
14 LTS 2020-04-21 14.21.3 2023-02-16 2021-10-19 2023-04-30
13 2019-10-22 13.14.0 2020-04-29 2020-04-01 2020-06-01
Expand Down
27 changes: 25 additions & 2 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,31 @@ version.source = "vcs"
[tool.hatch.version.raw-options]
local_scheme = "no-local-version"

[tool.isort]
profile = "black"
[tool.ruff]
line-length = 88
select = [
"E", # pycodestyle errors
"EM", # flake8-errmsg
"F", # pyflakes errors
"I", # isort
"ISC", # flake8-implicit-str-concat
"PGH", # pygrep-hooks
"RUF100", # unused noqa (yesqa)
"UP", # pyupgrade
"W", # pycodestyle warnings
"YTT", # flake8-2020
# "LOG", # TODO: enable flake8-logging when it's not in preview anymore
]
extend-ignore = [
"E203", # Whitespace before ':'
"E221", # Multiple spaces before operator
"E226", # Missing whitespace around arithmetic operator
"E241", # Multiple spaces after ','
]

[tool.ruff.isort]
known-first-party = ["norwegianblue"]
required-imports = ["from __future__ import annotations"]

[tool.pytest.ini_options]
addopts = "--color=yes"
24 changes: 17 additions & 7 deletions src/norwegianblue/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ def norwegianblue(
return "\n".join(data)

data = _ltsify(data)
if color != "no" and format not in ("html", "yaml"):
data = _colourify(data)
if color != "no" and format != "yaml":
data = _colourify(data, is_html=format == "html")

output = _tabulate(data, format, color, product if show_title else None)
logging.info("")
Expand Down Expand Up @@ -117,7 +117,7 @@ def _ltsify(data: list[dict]) -> list[dict]:
return data


def _colourify(data: list[dict]) -> list[dict]:
def _colourify(data: list[dict], *, is_html: bool = False) -> list[dict]:
"""Add colour to dates:
red: in the past
yellow: will pass in six months
Expand All @@ -137,7 +137,10 @@ def _colourify(data: list[dict]) -> list[dict]:
colour = "green" if cycle["support"] else "red"
else: # "eol" and "discontinued"
colour = "red" if cycle[property_] else "green"
cycle[property_] = colored(cycle[property_], colour)

cycle[property_] = _apply_colour(
cycle[property_], colour, is_html=is_html
)
continue

# Handle date
Expand All @@ -147,14 +150,21 @@ def _colourify(data: list[dict]) -> list[dict]:
tzinfo=dt.timezone.utc
)
if date_datetime < now:
cycle[property_] = colored(date_str, "red")
cycle[property_] = _apply_colour(date_str, "red", is_html=is_html)
elif date_datetime < six_months_from_now:
cycle[property_] = colored(date_str, "yellow")
cycle[property_] = _apply_colour(date_str, "yellow", is_html=is_html)
else:
cycle[property_] = colored(date_str, "green")
cycle[property_] = _apply_colour(date_str, "green", is_html=is_html)
return data


def _apply_colour(text: str, colour: str, *, is_html: bool = False) -> str:
if is_html:
return f'<font color="{colour}">{text}</font>'

return colored(text, colour)


def _tabulate(
data: list[dict], format_: str = "markdown", color: str = "yes", title: str = None
) -> str:
Expand Down
2 changes: 1 addition & 1 deletion src/norwegianblue/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ def main() -> None:
"--color",
default="auto",
choices=("yes", "no", "auto"),
help="colour the terminal output (default: auto)",
help="colour the output (default: auto)",
)
parser.add_argument(
"--clear-cache", action="store_true", help="clear cache before running"
Expand Down
Loading

0 comments on commit de0738b

Please sign in to comment.