diff --git a/bokeh-pr10987-python312-configparser.patch b/bokeh-pr10987-python312-configparser.patch new file mode 100644 index 0000000..43a4737 --- /dev/null +++ b/bokeh-pr10987-python312-configparser.patch @@ -0,0 +1,52 @@ +From 865c54896e6158c1195e5ec8352f300cbf10920f Mon Sep 17 00:00:00 2001 +From: Bryan Van de Ven +Date: Tue, 2 Mar 2021 21:53:55 -0800 +Subject: [PATCH] Bryanv/2 3 1 forwardports (#10987) + +* Add missing comma in example code (#10973) + +* update to versioneer 0.19 (#10969) + +* update to versioneer 0.19 + +* unused loop var + +* Add note re. Chrome/MacOS bug (#10964) + +* Add note re. Chrome/MacOS bug + +* Make wording consistent with preceding paragraph + +* Link to GH issue + +* Add information about Bokeh channel for installation (#10953) + +* Add info about Bokeh channel on Anaconda + +* Add info on new releases + +Co-authored-by: Timo Cornelius Metzger +--- + bokeh/_version.py | 65 ++--- + bokeh/models/widgets/inputs.py | 8 + + .../source/docs/first_steps/first_steps_9.rst | 2 +- + .../source/docs/first_steps/installation.rst | 8 + + versioneer.py | 234 ++++++++++-------- + 5 files changed, 188 insertions(+), 129 deletions(-) + +diff --git a/versioneer.py b/versioneer.py +index 60e4efb714f..eaf1aba67bd 100644 +--- a/versioneer.py ++++ b/versioneer.py +@@ -337,9 +331,9 @@ def get_config_from_root(root): + # configparser.NoOptionError (if it lacks "VCS="). See the docstring at + # the top of versioneer.py for instructions on writing your setup.cfg . + setup_cfg = os.path.join(root, "setup.cfg") +- parser = configparser.SafeConfigParser() ++ parser = configparser.ConfigParser() + with open(setup_cfg, "r") as f: +- parser.readfp(f) ++ parser.read_file(f) + VCS = parser.get("versioneer", "VCS") # mandatory + + def get(parser, name): diff --git a/bokeh-pr11174-replace-jinja2-markup.patch b/bokeh-pr11174-replace-jinja2-markup.patch new file mode 100644 index 0000000..8e6f9a8 --- /dev/null +++ b/bokeh-pr11174-replace-jinja2-markup.patch @@ -0,0 +1,131 @@ +From 7047c6a90535564c9d05121fc8a095aef1de3c21 Mon Sep 17 00:00:00 2001 +From: kernc +Date: Wed, 21 Apr 2021 17:29:22 +0200 +Subject: [PATCH] Replace deprecated jinja2.Markup with jinja2.tojson (#11174) + +* Replace deprecated jinja2.Markup -> markupsafe.Markup + +* Expose |tojson as |json. Bump Jinja2 >=2.9 + +* Replace |json filter with jinja's |tojson throughout + +* Fix test_autoload_template_has_changed +--- + _setup_support.py | 2 +- + bokeh/core/_templates/autoload_js.js | 14 +++++++------- + bokeh/core/_templates/autoload_nb_js.js | 6 +++--- + bokeh/core/templates.py | 4 +--- + tests/unit/bokeh/core/test_templates.py | 2 +- + 5 files changed, 13 insertions(+), 15 deletions(-) + +diff --git a/bokeh/core/_templates/autoload_js.js b/bokeh/core/_templates/autoload_js.js +index 792a74c7cc2..d15ea9778e6 100644 +--- a/bokeh/core/_templates/autoload_js.js ++++ b/bokeh/core/_templates/autoload_js.js +@@ -20,7 +20,7 @@ calls it with the rendered model. + return new Date(); + } + +- var force = {{ force|default(False)|json }}; ++ var force = {{ force|default(False)|tojson }}; + + if (typeof root._bokeh_onload_callbacks === "undefined" || force === true) { + root._bokeh_onload_callbacks = []; +@@ -32,7 +32,7 @@ calls it with the rendered model. + + {% block autoload_init %} + {%- if elementid -%} +- var element = document.getElementById({{ elementid|json }}); ++ var element = document.getElementById({{ elementid|tojson }}); + if (element == null) { + console.warn("Bokeh: autoload.js configured with elementid '{{ elementid }}' but no matching script tag was found.") + } +@@ -91,7 +91,7 @@ calls it with the rendered model. + document.body.appendChild(element); + } + +- const hashes = {{ bundle.hashes|json }}; ++ const hashes = {{ bundle.hashes|tojson }}; + + for (let i = 0; i < js_urls.length; i++) { + const url = js_urls[i]; +@@ -110,17 +110,17 @@ calls it with the rendered model. + } + + {% if bundle %} +- var js_urls = {{ bundle.js_urls|json }}; +- var css_urls = {{ bundle.css_urls|json }}; ++ var js_urls = {{ bundle.js_urls|tojson }}; ++ var css_urls = {{ bundle.css_urls|tojson }}; + {% else %} +- var js_urls = {{ js_urls|json }}; +- var css_urls = {{ css_urls|json }}; ++ var js_urls = {{ js_urls|tojson }}; ++ var css_urls = {{ css_urls|tojson }}; + {% endif %} + + var inline_js = [ + {%- for css in (bundle.css_raw if bundle else css_raw) %} + function(Bokeh) { +- inject_raw_css({{ css|json }}); ++ inject_raw_css({{ css|tojson }}); + }, + {%- endfor %} + {%- for js in (bundle.js_raw if bundle else js_raw) %} +diff --git a/bokeh/core/_templates/autoload_nb_js.js b/bokeh/core/_templates/autoload_nb_js.js +index 2c75850b2b4..ca96a59cd2d 100644 +--- a/bokeh/core/_templates/autoload_nb_js.js ++++ b/bokeh/core/_templates/autoload_nb_js.js +@@ -132,7 +132,7 @@ + + {% block autoload_init %} + if (typeof (root._bokeh_timeout) === "undefined" || force === true) { +- root._bokeh_timeout = Date.now() + {{ timeout|default(0)|json }}; ++ root._bokeh_timeout = Date.now() + {{ timeout|default(0)|tojson }}; + root._bokeh_failed_load = false; + } + +@@ -153,7 +153,7 @@ + ""}}; + + function display_loaded() { +- var el = document.getElementById({{ elementid|json }}); ++ var el = document.getElementById({{ elementid|tojson }}); + if (el != null) { + el.textContent = "BokehJS is loading..."; + } +@@ -181,7 +181,7 @@ + console.log("Bokeh: BokehJS failed to load within specified timeout."); + root._bokeh_failed_load = true; + } else if (force !== true) { +- var cell = $(document.getElementById({{ elementid|json }})).parents('.cell').data().cell; ++ var cell = $(document.getElementById({{ elementid|tojson }})).parents('.cell').data().cell; + cell.output_area.append_execute_result(NB_LOAD_WARNING) + } + {% endblock %} +diff --git a/bokeh/core/templates.py b/bokeh/core/templates.py +index 10344ecaf7d..c7cd25ea7f2 100644 +--- a/bokeh/core/templates.py ++++ b/bokeh/core/templates.py +@@ -36,12 +36,11 @@ + #----------------------------------------------------------------------------- + + # Standard library imports +-import json + import sys + from os.path import dirname, join + + # External imports +-from jinja2 import Environment, FileSystemLoader, Markup ++from jinja2 import Environment, FileSystemLoader + + #----------------------------------------------------------------------------- + # Globals and constants +@@ -86,7 +85,6 @@ def get_env(): + #----------------------------------------------------------------------------- + + _env = get_env() +-_env.filters['json'] = lambda obj: Markup(json.dumps(obj)) + + #----------------------------------------------------------------------------- + # General API diff --git a/python-bokeh.spec b/python-bokeh.spec index 65c0851..d0b006d 100644 --- a/python-bokeh.spec +++ b/python-bokeh.spec @@ -13,7 +13,7 @@ and data applications.} Name: python-%{pypi_name} Version: 2.3.0 -Release: 4%{?dist} +Release: 23%{?dist} Summary: Interactive plots and applications in the browser from Python # License breakdown: licensecheck -r . | sed '/UNKNOWN/ d' | sort -t ':' -k 2 @@ -60,11 +60,18 @@ Summary: Interactive plots and applications in the browser from Python # Also see the breakdown in the bundled JS below # and https://github.com/bokeh/bokeh/blob/branch-2.2/bokehjs/LICENSE -License: BSD and ASL 2.0 and MIT and ISC +# Automatically converted from old format: BSD and ASL 2.0 and MIT and ISC - review is highly recommended. +License: BSD-3-Clause AND Apache-2.0 AND MIT AND ISC URL: https://github.com/bokeh/bokeh Source0: %pypi_source # Read package-lock.json and general list of bundled runtime libraries their versions Source1: parse-deps.py +# From https://github.com/bokeh/bokeh/commit/865c54896e6158c1195e5ec8352f300cbf10920f +# https://github.com/bokeh/bokeh/pull/10987 +Patch0: bokeh-pr10987-python312-configparser.patch +# https://github.com/bokeh/bokeh/commit/7047c6a90535564c9d05121fc8a095aef1de3c21 +# https://github.com/bokeh/bokeh/pull/11174 +Patch1: bokeh-pr11174-replace-jinja2-markup.patch BuildArch: noarch @@ -192,9 +199,15 @@ BuildRequires: %{py3_dist typing_extensions} >= 3.7.4 %description -n python3-%{pypi_name} %_description %prep -%autosetup -n %{pypi_name}-%{version} +%autosetup -n %{pypi_name}-%{version} -p1 rm -rf %{pypi_name}.egg-info +# Replace `np.bool8` with `np.bool_` for NumPy 2.x. +# This is for `netpyne` failing on the deprecated type alias. +# https://github.com/bokeh/bokeh/pull/12690 +sed -i 's/np\.bool8/np.bool_/g' $(grep -rl 'np\.bool8') + + %build %py3_build @@ -219,6 +232,63 @@ rm -f %{buildroot}/%{python3_sitelib}/bokeh/server/static/.keep %{python3_sitelib}/%{pypi_name} %changelog +* Tue Jan 13 2026 Ankur Sinha - 2.3.0-23 +- use spdx license + +* Fri Sep 19 2025 Python Maint - 2.3.0-22 +- Rebuilt for Python 3.14.0rc3 bytecode + +* Fri Aug 15 2025 Python Maint - 2.3.0-21 +- Rebuilt for Python 3.14.0rc2 bytecode + +* Fri Jul 25 2025 Fedora Release Engineering - 2.3.0-20 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild + +* Mon Jun 02 2025 Python Maint - 2.3.0-19 +- Rebuilt for Python 3.14 + +* Wed Jan 22 2025 Sandro - 2.3.0-18 +- Apply patch for NumPy 2.x compatibility + +* Sat Jan 18 2025 Fedora Release Engineering - 2.3.0-17 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild + +* Wed Sep 04 2024 Miroslav Suchý - 2.3.0-16 +- convert license to SPDX + +* Fri Jul 19 2024 Fedora Release Engineering - 2.3.0-15 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild + +* Fri Jun 07 2024 Python Maint - 2.3.0-14 +- Rebuilt for Python 3.13 + +* Fri Jan 26 2024 Fedora Release Engineering - 2.3.0-13 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Sun Jan 21 2024 Fedora Release Engineering - 2.3.0-12 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild + +* Tue Jul 25 2023 Mamoru TASAKA - 2.3.0-11 +- Backport upstream patch for Jinja2 3.1 change + +* Tue Jul 25 2023 Mamoru TASAKA - 2.3.0-10 +- Backport upstream patch for python 3.12 SafeConfigParser removal + +* Fri Jul 21 2023 Fedora Release Engineering - 2.3.0-9 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Tue Jun 13 2023 Python Maint - 2.3.0-8 +- Rebuilt for Python 3.12 + +* Fri Jan 20 2023 Fedora Release Engineering - 2.3.0-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Fri Jul 22 2022 Fedora Release Engineering - 2.3.0-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Mon Jun 13 2022 Python Maint - 2.3.0-5 +- Rebuilt for Python 3.11 + * Fri Jan 21 2022 Fedora Release Engineering - 2.3.0-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild