Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-click-extra for openSUSE:Factory checked in at 2026-05-15 23:56:31 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-click-extra (Old) and /work/SRC/openSUSE:Factory/.python-click-extra.new.1966 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-click-extra" Fri May 15 23:56:31 2026 rev:22 rq:1353416 version:7.16.1 Changes: -------- --- /work/SRC/openSUSE:Factory/python-click-extra/python-click-extra.changes 2026-04-29 19:21:08.345179778 +0200 +++ /work/SRC/openSUSE:Factory/.python-click-extra.new.1966/python-click-extra.changes 2026-05-15 23:58:27.669337170 +0200 @@ -1,0 +2,268 @@ +Fri May 15 10:48:03 UTC 2026 - Johannes Kastl <[email protected]> + +- update to 7.16.1: + * Fix ConfigOption mutating its cached params_template when + merging user configuration. '_recursive_update' updates its + first argument in place, so back-to-back invocations of the + same CLI (Sphinx builds, test runners, REPLs) leaked keys set + by an earlier --config into the current invocation's + default_map. Both the --config load path and --validate-config + now pass a deep copy of the template. +- update to 7.16.0: + * Theme system overhaul. Four branded palettes join the built-in + catalog: solarized_dark (Ethan Schoonover), dracula (Zeno + Rocha), nord (Arctic Ice Studio), and monokai (Wimer + Hazenberg), hand-curated for the semantic roles click-extra + exposes (option, metavar, choice, deprecated, envvar, …). The + full catalog now ships as click_extra/themes.toml (a TOML data + file) instead of Python subclasses, loaded at import time via + importlib.resources for proper wheel/zipapp support. + BUILTIN_THEMES is the single public dict of {name: + HelpExtraTheme}; access individual palettes via + BUILTIN_THEMES["dark"], BUILTIN_THEMES["solarized_dark"], etc. + Adding a built-in theme is a one-file data edit: declare a + [<name>] table with one inline-table per styled slot, no Python + needed. Breaking: the click_extra.themes module is removed + (import from click_extra or click_extra.theme); the six + per-theme UPPER_CASE constants (DARK, DRACULA, LIGHT, MONOKAI, + NORD, SOLARIZED_DARK) are removed (use BUILTIN_THEMES["<name>"] + instead). + * Breaking: default_theme module attribute replaced by the + get_default_theme() / set_default_theme(theme) accessors. The + previous module-attribute pattern silently froze whatever was + bound at import time when consumers (e.g. ExtraVersionOption's + style defaults) captured default_theme.invoked_command as a + default function parameter, so later overrides via + wrap.patch_click() didn't propagate. The function pair always + observes the current value. click_extra.wrap.patch_click() now + calls set_default_theme(). + * Breaking: OK and KO pre-rendered constants removed. They were + frozen at import time against the dark theme, so --theme light + invocations still showed dark-themed glyphs in --show-params + output. Replaced with OK_GLYPH = "✓" and KO_GLYPH = "✘" raw + strings; style at the call site via + get_current_theme().success(OK_GLYPH) / .error(KO_GLYPH) so the + rendering follows the active theme. + * Breaking: theme_registry no longer accepts a Callable[[], + HelpExtraTheme] value; only HelpExtraTheme instances are valid + entries. The runtime-detection-via-callable pattern was + documented but never used; loading themes from --config is the + supported equivalent (see Themes from your --config file). + * New ThemeChoice is now a fresh click.ParamType (not a + click.Choice subclass), exposing the same choices / + case_sensitive / normalize_choice duck-type interface so + click_extra.colorize keeps per-choice token coloring. Avoids + the fragile no-op setter the previous subclass design relied + on. + * New TELEMETRY context-meta key in click_extra.context; + TelemetryOption now writes the reconciled value to + ctx.meta[click_extra.context.TELEMETRY] instead of an ad-hoc + ctx.telemetry attribute, aligning with every other option's + storage pattern. Breaking: consumers reading ctx.telemetry + directly must switch to context.get(ctx, context.TELEMETRY). + * Callback method renames for harmonized verb taxonomy (set_<key> + writes to ctx.meta[<key>]; init_<system> wires up sibling + machinery): ColorOption.disable_colors → set_color (also fixes + the misleading name — the callback handles enable too); + TelemetryOption.save_telemetry → set_telemetry; + TimerOption.register_timer_on_close → init_timer. + ColorOption.set_color and ThemeOption.set_theme are now bound + methods (not @staticmethod). + * New click_extra.styling module — a feature-rich Style subclass + of cloup.Style, transparently shadowed as from click_extra + import Style. Additions: compact single-line __repr__; hex + shorthand constructor (Style(fg="#f1fa8c") and 3-digit #abc); + __str__ returning a styled "sample" for REPL visualization; + composition operator a | b (right operand wins); cascade(base) + for theme-inheritance fills; to_dict() / from_dict() for + TOML/JSON round-trip; to_css() emitting CSS declarations; + from_ansi() parsing SGR sequences back into a Style; + contrast_ratio(other) for WCAG 2.x luminance ratio. Equality + and hash ignore the lazy _style_kwargs cache so identical + styles compare equal regardless of call history. WCAG AA Large + contrast gates added for all branded themes. The module also + exposes fields_to_dict, dict_to_fields, and cascade_fields as + shared dataclass-roundtrip helpers used internally by both + Style and HelpExtraTheme. + * HelpExtraTheme gains to_dict() / from_dict() / cascade(base). + to_dict() emits only slots that diverge from the default; + from_dict() rejects unknown keys so typos surface immediately. + cascade(base) layers a sparse override on top of a full + palette: config-set slots win, unset slots inherit from the + base. + * --config now reads user-defined theme palettes from the config + file. Every [<cli>.themes.<name>] table (or + [tool.<cli>.themes.<name>] in pyproject.toml) is parsed via + HelpExtraTheme.from_dict and available to --theme for the + current invocation. Known names cascade on top of the matching + built-in; unknown names become stand-alone themes. The registry + update lands on ctx.meta under + click_extra.context.THEME_OVERRIDES and never mutates the + module-level theme_registry, so back-to-back invocations don't + cross-contaminate. A built-in ConfigValidator for the themes + extension path is auto-registered on every ConfigOption, so + malformed entries surface as ValidationError with a rooted path + during --validate-config and at normal load time. wrap inherits + the same behavior automatically. + * --theme now uses ThemeChoice, a click.Choice subclass whose + choices property reads the live registry (global plus + per-context overrides) at every lookup. Themes loaded from + --config appear as valid choices and in the --help metavar with + no extra wiring. Subclassing click.Choice preserves the + per-token colorization that click_extra.colorize already + applies to choice metavars. + * Extend configuration validation with an app-defined hook for + sub-trees whose keys are data rather than CLI flag names. New + public types: ConfigValidator (binds a dotted extension_path to + a callable that inspects the matching sub-tree), + ValidationError (rooted path, message, optional code), and the + EXTENSION_METADATA_KEY dataclass-field flag for marking + extension points whose Python type isn't a mapping. Validators + are registered through a new config_validators= kwarg on + ExtraCommand / ExtraGroup (and the @command / @group / + @config_option decorators), and run during both + --validate-config and normal --config loading. Schema-typed + dict[str, X] fields are also recognized as extension points. + --validate-config now collects every error before exiting and + surfaces all failures with the same ValidationError shape. + * Flip the AnsiColorLexer.true_color default to True. 24-bit RGB + sequences now render as inline style="color: #rrggbb" spans by + default in Sphinx, MkDocs, and pygmentize output. Behavior + change for downstream HTML: documents that previously used + Ansi-C{n} CSS classes now use inline RGB styles. The old + behavior is still available as + AnsiColorLexer(true_color=False). Add :emphasize-result-lines: + option to click:run and python:run Sphinx directives so authors + can highlight specific lines in the captured output + independently of :emphasize-lines: on the source block. Fix + HelpExtraFormatter.write_usage to bypass Click's wrap_text when + the styled usage fits on a single visible line: 24-bit RGB + themes embed 17+ bytes of ANSI escape per token, inflating + Click's byte-based line measurement and causing premature + mid-token wraps on branded themes. + * Fix pyproject.toml CWD discovery to skip files lacking a + [tool.<cli_name>] section. An unrelated pyproject.toml (like a + dotfiles repo's [tool.ruff]) no longer shadows the user's + app-dir config. + * Fix ExtraVerbosity.set_level() to no-op during + ctx.resilient_parsing, preventing spurious logger level changes + during help rendering, shell completion, and any + make_context(resilient_parsing=True) path. Fix reset_loggers + double-registration: when both --verbosity and -v are passed, + the close callback is now registered at most once per + invocation via a sentinel in ctx.meta. + * Inner bracket-field slots (envvar, default, required, + range_label) fall back to the bracket slot's style when left at + identity. A theme that sets only bracket now colours the entire + bracket field uniformly — structural tokens and value tokens + alike — so a minimal palette never renders value tokens + unstyled inside a styled bracket. + * Deprecate click_extra.sphinx.alerts now that myst-parser 5.1.0 + ships a native "alert" syntax extension. + click_extra.sphinx.setup() registers the regex-based + GitHub-alerts converter only when the installed myst-parser is + below the new MYST_NATIVE_ALERTS_VERSION constant + (Version("5.1.0")); on newer releases it logs a migration + notice pointing at myst_enable_extensions = [..., "alert"] and + skips the hook. The converter also emits a % empty alert body + MyST comment placeholder so a bare > [!TIP] renders as a + title-only admonition, matching myst-parser 5.1+'s output + instead of being silently dropped. Slated for removal once the + myst-parser floor moves to >=5.1. + * Relax default_config_file_pattern in click_extra.pytest to make + *.json5 and *.jsonc optional in the regex, so test assertions + pass in hermetic builds where those optional extras are not + installed. +- update to 7.15.0: + * Add opt-in 24-bit true-color rendering to the ANSI Pygments + stack. Pass true_color=True to AnsiColorLexer, AnsiFilter, or + any session lexer (like get_lexer_by_name("ansi-shell-session", + true_color=True)) to preserve SGR 38;2;r;g;b and 48;2;r;g;b + sequences as Token.Ansi.FG_{rrggbb} / Token.Ansi.BG_{rrggbb} + tokens instead of quantizing them to the 256-color palette. + AnsiHtmlFormatter renders those tokens as inline style="color: +#rrggbb" / style="background-color: #rrggbb" spans. The default +behavior (256-color quantization) is unchanged. + * New click_extra.theme module centralizes all theme machinery: + HelpExtraTheme, default_theme, nocolor_theme, OK, KO, + ThemeOption, theme_option decorator, theme_registry, and + register_theme(). Every click-extra command now accepts --theme + [dark|light]; downstream consumers can extend the choice list + via register_theme(). The active theme for a CLI run is stored + in ctx.meta[context.THEME] by ThemeOption and retrieved via + get_current_theme(), so back-to-back invocations in the same + process (Sphinx builds, test runners, REPLs) no longer leak + --theme choices into each other. The wrap subcommand reads the + theme from the parent group's context rather than carrying its + own --theme. Adds a corresponding docs/theme.md user guide. + Breaking: downstream code importing theme symbols directly from + click_extra.colorize must update to click_extra.theme; the + canonical from click_extra import HelpExtraTheme path is + unaffected. + * New click_extra.context module consolidates ExtraContext (moved + from click_extra.commands) and a documented registry of every + ctx.meta key Click Extra writes or reads: RAW_ARGS, + CONF_SOURCE, CONF_FULL, TOOL_CONFIG, VERBOSITY_LEVEL, + VERBOSITY, VERBOSE, START_TIME, JOBS, TABLE_FORMAT, SORT_BY, + and THEME. The get() and set() helpers replace scattered + ctx.meta.get(key, ...) calls throughout the codebase. Replaces + the former click_extra.ctx_meta module. Breaking: from + click_extra.commands import ExtraContext and from click_extra + import ctx_meta must be updated to from click_extra.context + import ExtraContext and from click_extra import context + respectively; the canonical from click_extra import + ExtraContext path is unaffected. + * Add python:source, python:run, python:render, + python:render-myst, and python:render-rst Sphinx directives + under a new python domain in click_extra.sphinx. They mirror + click:source / click:run for arbitrary Python (no Click CLI + required): python:source runs silently and shows source, + python:run captures stdout and renders it in a code block + (default lexer text, override via :language:), and the render + family parses the captured stdout as live document content: + generated tables, headings, admonitions, and cross-references + become first-class document nodes rather than a code block. + python:render uses the host file's parser; python:render-myst + forces MyST parsing (so a .rst host can embed MyST-generated + content); python:render-rst forces reST parsing (so a .md host + can embed reST-generated content). The Python and Click runners + hold independent per-document namespaces. The render family + replaces the docs_update.py regenerator + marker-region pattern + many downstream projects use; the same logic now lives inline + in the doc page and runs at build time, so the rendered HTML is + always current. + * Breaking change: the click:* and python:* Sphinx directives are + now disabled by default. Both families execute arbitrary Python + at build time with full Sphinx-process privileges (filesystem, + network, environment secrets), so registering them on every + project that imports click_extra.sphinx silently expanded the + attack surface of every consumer. To re-enable, add + click_extra_enable_exec_directives = True to conf.py. Always-on + features (the ANSI-capable Pygments HTML formatter and the + GitHub-alerts → MyST/reST converter) are unaffected. Without + the flag, click:source, click:run, python:source, python:run, + python:render, python:render-myst, and python:render-rst are + not registered and any reference to them produces an "Unknown + directive" warning at build time. + * Tighten Click floor from 8.1 to 8.3.1. The relaxation in 7.14.1 + went further than needed; 8.3.1 is the minimum that ships the + parameter-name fix we depend on. + * Move --cov and --cov-report=term from pyproject.toml + [tool.pytest].addopts into the CI workflow. Removes pytest-cov + as an unconditional test-time dependency for downstream + packagers. + * Move tests/test_mkdocs.py into tests/mkdocs/. Downstream + packagers can skip it with --ignore=tests/mkdocs without + pulling in mkdocs-click. + * Loosen default_debug_*_version_details regex helpers to also + match None for git_long_hash, git_short_hash, and git_date. + Lets debug-output tests pass when the source tree has no .git + directory (Guix git-fetch, sdist installs). + * Mark test_ansi_lexers_candidates with the new network marker. + Sandboxed builds can exclude it with pytest -m "not network". + * Make tests/test_table.py tolerate tabulate <0.10: branch the + asciidoc fixture on the cell-alignment marker (<8 vs 8<) and + skip the colon-grid parametrize case when the format is aliased + to grid. + +------------------------------------------------------------------- Old: ---- click-extra-7.14.1.tar.gz New: ---- click-extra-7.16.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-click-extra.spec ++++++ --- /var/tmp/diff_new_pack.lJk8UE/_old 2026-05-15 23:58:28.325364174 +0200 +++ /var/tmp/diff_new_pack.lJk8UE/_new 2026-05-15 23:58:28.329364340 +0200 @@ -27,7 +27,7 @@ %{?sle15_python_module_pythons} Name: python-click-extra -Version: 7.14.1 +Version: 7.16.1 Release: 0 Summary: Drop-in replacement for Click to make user-friendly and colorful CLI License: GPL-2.0-or-later @@ -38,7 +38,7 @@ # SECTION Build dependencies # https://github.com/kdeldycke/click-extra/blob/v6.0.3/pyproject.toml#L73 BuildRequires: %{python_module boltons >= 20.0.0} -BuildRequires: %{python_module click >= 8.1} +BuildRequires: %{python_module click >= 8.3.1} BuildRequires: %{python_module cloup >= 3.0.7} BuildRequires: %{python_module deepmerge >= 1.0.1} BuildRequires: %{python_module extra-platforms >= 8.0.0} @@ -70,7 +70,7 @@ BuildRequires: fdupes BuildRequires: python-rpm-macros Requires: python-boltons >= 20.0.0 -Requires: python-click >= 8.3.3 +Requires: python-click >= 8.3.1 Requires: python-cloup >= 3.0.7 Requires: python-deepmerge >= 1.0.1 Requires: python-extra-platforms >= 8.0.0 ++++++ click-extra-7.14.1.tar.gz -> click-extra-7.16.1.tar.gz ++++++ ++++ 13049 lines of diff (skipped)
