From ac1a31aa95b9e696fd423807a7af172897744b57 Mon Sep 17 00:00:00 2001 From: Wes John-Alder Date: Wed, 28 Oct 2026 08:22:50 -0400 Subject: [PATCH 1/4] PNE-9647: Say how the server fills allowed_names The ProcessTemplate docstring states that the Citrine Platform ignores a supplied allowed_names list and fills the field on read with the distinct names from the template's ingredient specs. Co-Authored-By: Claude Fable 5.1 --- gemd/__version__.py | 2 +- gemd/entity/template/process_template.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/gemd/__version__.py b/gemd/__version__.py index 3d67cd6..54499df 100644 --- a/gemd/__version__.py +++ b/gemd/__version__.py @@ -1 +1 @@ -__version__ = "2.4.0" +__version__ = "2.4.1" diff --git a/gemd/entity/template/process_template.py b/gemd/entity/template/process_template.py index b31ba52..3f7a2b0 100644 --- a/gemd/entity/template/process_template.py +++ b/gemd/entity/template/process_template.py @@ -32,7 +32,9 @@ class ProcessTemplate( are hierarchical strings that store information about an entity. They can be used for filtering and discoverability. allowed_names: List[str], optional - The set of names that a process' ingredients are allowed to use in their name field. + A list of ingredient names, kept for compatibility with existing code and stored JSON. + The Citrine Platform ignores a supplied list and fills this field on read with the + distinct names found in the ingredient specs that use the template. allowed_labels: List[str], optional The set of labels that a process' ingredients are allowed to use in their labels field. conditions: List[~gemd.entity.template.condition_template.ConditionTemplate] or \ From 6d3d4ec85dbd6083a49bc92ce10b3d4dd84e8598 Mon Sep 17 00:00:00 2001 From: Wes John-Alder Date: Wed, 28 Oct 2026 08:37:57 -0400 Subject: [PATCH 2/4] PNE-9647: clarify allowed_names deprecation --- gemd/entity/template/process_template.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/gemd/entity/template/process_template.py b/gemd/entity/template/process_template.py index 3f7a2b0..77cf514 100644 --- a/gemd/entity/template/process_template.py +++ b/gemd/entity/template/process_template.py @@ -32,9 +32,11 @@ class ProcessTemplate( are hierarchical strings that store information about an entity. They can be used for filtering and discoverability. allowed_names: List[str], optional - A list of ingredient names, kept for compatibility with existing code and stored JSON. - The Citrine Platform ignores a supplied list and fills this field on read with the - distinct names found in the ingredient specs that use the template. + Deprecated. This field does not limit ingredient names. + The Citrine Platform ignores this list when you save a template. When you fetch a + template, this list has the distinct ingredient names from process specs that use + the template. Names come from datasets you can read. GEMD Python keeps this field + so code and JSON that use it keep working. allowed_labels: List[str], optional The set of labels that a process' ingredients are allowed to use in their labels field. conditions: List[~gemd.entity.template.condition_template.ConditionTemplate] or \ From 71e001ca9722856c8fb3a3e153f89a4df4818332 Mon Sep 17 00:00:00 2001 From: Wes John-Alder Date: Wed, 28 Oct 2026 08:45:50 -0400 Subject: [PATCH 3/4] PNE-9647: explain migration purpose of deprecated field --- gemd/entity/template/process_template.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gemd/entity/template/process_template.py b/gemd/entity/template/process_template.py index 77cf514..443f406 100644 --- a/gemd/entity/template/process_template.py +++ b/gemd/entity/template/process_template.py @@ -36,7 +36,7 @@ class ProcessTemplate( The Citrine Platform ignores this list when you save a template. When you fetch a template, this list has the distinct ingredient names from process specs that use the template. Names come from datasets you can read. GEMD Python keeps this field - so code and JSON that use it keep working. + to give users time to migrate code and JSON away from it. allowed_labels: List[str], optional The set of labels that a process' ingredients are allowed to use in their labels field. conditions: List[~gemd.entity.template.condition_template.ConditionTemplate] or \ From 463b3d0734db75be786347311306bc101cd4d4ff Mon Sep 17 00:00:00 2001 From: Ken Kroenlein Date: Mon, 2 Nov 2026 11:11:16 -0700 Subject: [PATCH 4/4] Upgrade Sphinx so the docs build on Python 3.13+ GitHub's ubuntu-latest image now ships Python 3.14, and the docs job builds with the runner's default interpreter. Sphinx 5.0.0 imports imghdr, which Python 3.13 removed, so the docs gate failed. Sphinx 8.1.3 is the newest release that still supports Python 3.10. Co-Authored-By: Claude Opus 5.5 --- pyproject.toml | 6 +++--- uv.lock | 44 +++++++++++++++++++++++++++++--------------- 2 files changed, 32 insertions(+), 18 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 200e98e..78d32b4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -53,9 +53,9 @@ dev = [ "tomli>=2.2.1", ] docs = [ - "sphinx==5.0.0", - "sphinx-rtd-theme==1.0.0", - "sphinxcontrib-apidoc==0.3.0", + "sphinx==8.1.3", + "sphinx-rtd-theme==3.1.0", + "sphinxcontrib-apidoc==0.6.0", ] [tool.pytest.ini_options] diff --git a/uv.lock b/uv.lock index 1ea2d78..ecf4bea 100644 --- a/uv.lock +++ b/uv.lock @@ -360,11 +360,11 @@ wheels = [ [[package]] name = "docutils" -version = "0.17.1" +version = "0.21.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4c/17/559b4d020f4b46e0287a2eddf2d8ebf76318fd3bd495f1625414b052fdc9/docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125", size = 2016138, upload-time = "2021-04-17T14:13:28.434Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz", hash = "sha256:3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", size = 2204444, upload-time = "2024-04-23T18:57:18.24Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/4c/5e/6003a0d1f37725ec2ebd4046b657abb9372202655f96e76795dca8c0063c/docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61", size = 575533, upload-time = "2021-04-17T14:13:24.796Z" }, + { url = "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl", hash = "sha256:dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", size = 587408, upload-time = "2024-04-23T18:57:14.835Z" }, ] [[package]] @@ -447,9 +447,9 @@ dev = [ { name = "tomli", specifier = ">=2.2.1" }, ] docs = [ - { name = "sphinx", specifier = "==5.0.0" }, - { name = "sphinx-rtd-theme", specifier = "==1.0.0" }, - { name = "sphinxcontrib-apidoc", specifier = "==0.3.0" }, + { name = "sphinx", specifier = "==8.1.3" }, + { name = "sphinx-rtd-theme", specifier = "==3.1.0" }, + { name = "sphinxcontrib-apidoc", specifier = "==0.6.0" }, ] [[package]] @@ -1219,7 +1219,7 @@ wheels = [ [[package]] name = "sphinx" -version = "5.0.0" +version = "8.1.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "alabaster" }, @@ -1238,36 +1238,38 @@ dependencies = [ { name = "sphinxcontrib-jsmath" }, { name = "sphinxcontrib-qthelp" }, { name = "sphinxcontrib-serializinghtml" }, + { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ea/c0/8a5833e4e2f5924f96c34d0a546ef22ac487c4c423a4c1b93f72186683bb/Sphinx-5.0.0.tar.gz", hash = "sha256:464d9c1bd5613bcebe76b46658763f3f3dbb184da7406e632a84596d3cd8ee90", size = 6726986, upload-time = "2022-05-29T16:20:01.014Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/be0b61178fe2cdcb67e2a92fc9ebb488e3c51c4f74a36a7824c0adf23425/sphinx-8.1.3.tar.gz", hash = "sha256:43c1911eecb0d3e161ad78611bc905d1ad0e523e4ddc202a58a821773dc4c927", size = 8184611, upload-time = "2024-10-13T20:27:13.93Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/68/24/4ea9d6189a5b2db45adf12aafbaa5b489910b3a4f106a0ea7ecdcf70dae0/Sphinx-5.0.0-py3-none-any.whl", hash = "sha256:af248b21e3282f847ff20feebe7a1985fb34773cbe3fc75bf206897f1a2199c4", size = 3125045, upload-time = "2022-05-29T16:19:56.891Z" }, + { url = "https://files.pythonhosted.org/packages/26/60/1ddff83a56d33aaf6f10ec8ce84b4c007d9368b21008876fceda7e7381ef/sphinx-8.1.3-py3-none-any.whl", hash = "sha256:09719015511837b76bf6e03e42eb7595ac8c2e41eeb9c29c5b755c6b677992a2", size = 3487125, upload-time = "2024-10-13T20:27:10.448Z" }, ] [[package]] name = "sphinx-rtd-theme" -version = "1.0.0" +version = "3.1.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "docutils" }, { name = "sphinx" }, + { name = "sphinxcontrib-jquery" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1c/32/580309c9fd5b1892c6616ce814710c6b14423e98bf1c101bf2c710433cee/sphinx_rtd_theme-1.0.0.tar.gz", hash = "sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c", size = 2780623, upload-time = "2021-09-13T19:54:10.078Z" } +sdist = { url = "https://files.pythonhosted.org/packages/84/68/a1bfbf38c0f7bccc9b10bbf76b94606f64acb1552ae394f0b8285bfaea25/sphinx_rtd_theme-3.1.0.tar.gz", hash = "sha256:b44276f2c276e909239a4f6c955aa667aaafeb78597923b1c60babc76db78e4c", size = 7620915, upload-time = "2026-01-12T16:03:31.17Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e0/d2/3818e4730e314719e27f639c44164419e40eed826d63753dc480262036e8/sphinx_rtd_theme-1.0.0-py2.py3-none-any.whl", hash = "sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8", size = 2815240, upload-time = "2021-09-13T19:53:37.37Z" }, + { url = "https://files.pythonhosted.org/packages/87/c7/b5c8015d823bfda1a346adb2c634a2101d50bb75d421eb6dcb31acd25ebc/sphinx_rtd_theme-3.1.0-py2.py3-none-any.whl", hash = "sha256:1785824ae8e6632060490f67cf3a72d404a85d2d9fc26bce3619944de5682b89", size = 7655617, upload-time = "2026-01-12T16:03:28.101Z" }, ] [[package]] name = "sphinxcontrib-apidoc" -version = "0.3.0" +version = "0.6.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pbr" }, { name = "sphinx" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/57/55/23f6919551a5e0a824f0effc3a85dd1cbc8df225196c0f6b82c7cea38299/sphinxcontrib-apidoc-0.3.0.tar.gz", hash = "sha256:729bf592cf7b7dd57c4c05794f732dc026127275d785c2a5494521fdde773fb9", size = 15396, upload-time = "2018-10-04T08:37:03.562Z" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/8d/161842a1c199c1baed5f5bc0765a59a791324f962fea3b604f105c9493e7/sphinxcontrib_apidoc-0.6.0.tar.gz", hash = "sha256:329b9810d66988f48e127a6bd18cc8efbbd1cd20b8deb4691a35738af49ad88d", size = 16790, upload-time = "2025-05-08T12:55:44.463Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/60/8d/a426a9f7f9ffc8e02d377ca82e3f005817ccf0141b85dbb8653aad13901b/sphinxcontrib_apidoc-0.3.0-py2.py3-none-any.whl", hash = "sha256:6671a46b2c6c5b0dca3d8a147849d159065e50443df79614f921b42fbd15cb09", size = 8525, upload-time = "2018-10-04T08:37:01.321Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ac/6b94ecdca590ad0596b83d78277f89d897539a6cfdc997d62f27651540bc/sphinxcontrib_apidoc-0.6.0-py3-none-any.whl", hash = "sha256:668592f933eee858f3bc0d0810d56d50dfa0a70f650a2faaaad501b9a3504633", size = 8765, upload-time = "2025-05-08T12:55:42.733Z" }, ] [[package]] @@ -1297,6 +1299,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0a/7b/18a8c0bcec9182c05a0b3ec2a776bba4ead82750a55ff798e8d406dae604/sphinxcontrib_htmlhelp-2.1.0-py3-none-any.whl", hash = "sha256:166759820b47002d22914d64a075ce08f4c46818e17cfc9470a9786b759b19f8", size = 98705, upload-time = "2024-07-29T01:09:36.407Z" }, ] +[[package]] +name = "sphinxcontrib-jquery" +version = "4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "sphinx" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/de/f3/aa67467e051df70a6330fe7770894b3e4f09436dea6881ae0b4f3d87cad8/sphinxcontrib-jquery-4.1.tar.gz", hash = "sha256:1620739f04e36a2c779f1a131a2dfd49b2fd07351bf1968ced074365933abc7a", size = 122331, upload-time = "2023-03-14T15:01:01.944Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/76/85/749bd22d1a68db7291c89e2ebca53f4306c3f205853cf31e9de279034c3c/sphinxcontrib_jquery-4.1-py2.py3-none-any.whl", hash = "sha256:f936030d7d0147dd026a4f2b5a57343d233f1fc7b363f68b3d4f1cb0993878ae", size = 121104, upload-time = "2023-03-14T15:01:00.356Z" }, +] + [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1"