From 4a5922a0ec1298d9b98e552a930dd96f447dee62 Mon Sep 17 00:00:00 2001 From: Mikhail Titov Date: Fri, 28 Feb 2025 09:38:45 -0500 Subject: [PATCH] py-radical-*: new version 1.90 (#48586) * rct: update packages (RE, RG, RP, RS, RU) with new version 1.90 * radical: added `url_for_version` for older versions * radical: set latest versions for `radical.pilot` and `radical.utils` * radical: fixed `url_for_version` setup * radical: set the latest version for `radical.entk` * radical: fixed style for `url_for_version` * Apply suggestions from code review (python version dependency) Co-authored-by: Wouter Deconinck --------- Co-authored-by: Wouter Deconinck --- .../packages/py-radical-entk/package.py | 86 ++++---------- .../packages/py-radical-gtod/package.py | 37 +++--- .../packages/py-radical-pilot/package.py | 109 ++++-------------- .../packages/py-radical-saga/package.py | 77 +++---------- .../packages/py-radical-utils/package.py | 86 +++----------- 5 files changed, 95 insertions(+), 300 deletions(-) diff --git a/var/spack/repos/builtin/packages/py-radical-entk/package.py b/var/spack/repos/builtin/packages/py-radical-entk/package.py index 75cbafa7e86..9330cb56ccd 100644 --- a/var/spack/repos/builtin/packages/py-radical-entk/package.py +++ b/var/spack/repos/builtin/packages/py-radical-entk/package.py @@ -2,6 +2,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.url from spack.package import * @@ -11,89 +12,42 @@ class PyRadicalEntk(PythonPackage): homepage = "https://radical-cybertools.github.io" git = "https://github.com/radical-cybertools/radical.entk.git" - pypi = "radical.entk/radical.entk-1.47.0.tar.gz" + pypi = "radical_entk/radical_entk-1.92.0.tar.gz" maintainers("andre-merzky") license("MIT") version("develop", branch="devel") - version("1.47.0", sha256="a4338e3a87147c032fb3a16a03990155742cc64c6625cfb4e1588ae0e51aafda") - version("1.39.0", sha256="72d64b25df9f3cb1dcbc32323a669d86d947cf07d15bed91cfedca2a99fb3ef1") + version("1.92.0", sha256="908a5d35cbc801c8b064837a21cbf5ad1a9b4aed0db48f2db84ef85d4e529cef") version( - "1.20.0", - sha256="1b9fc470b926a93528fd2a898636bdcd1c565bd58ba47608f9bead811d8a46d7", + "1.47.0", + sha256="a4338e3a87147c032fb3a16a03990155742cc64c6625cfb4e1588ae0e51aafda", deprecated=True, ) version( - "1.18.0", - sha256="049f70ec7e95819ec0ea706ee6275db04799ceff119dd7b675ef0d36d814de6f", - deprecated=True, - ) - version( - "1.17.0", - sha256="695e162b8b6209384660400920f4a2e613d01f0b904e44cfe5b5d012dcc35af9", - deprecated=True, - ) - version( - "1.16.0", - sha256="6611b4634ad554651601d9aed3a6d8b8273073da6218112bb472ce51f771ac8e", - deprecated=True, - ) - version( - "1.14.0", - sha256="beb6de5625b52b3aeeace52f7b4ac608e9f1bb761d8e9cdfe85d3e36931ce9f3", - deprecated=True, - ) - version( - "1.13.0", - sha256="5489338173409777d69885fd5fdb296552937d5a539a8182321bebe273647e1c", - deprecated=True, - ) - version( - "1.12.0", - sha256="1ea4814c8324e28cc2b86e6f44d26aaa09c8257ed58f50d1d2eada99adaa17da", - deprecated=True, - ) - version( - "1.11.0", - sha256="a912ae3aee4c1a323910dbbb33c87a65f02bb30da94e64d81bb3203c2109fb83", - deprecated=True, - ) - version( - "1.9.0", - sha256="918c716ac5eecb012a57452f45f5a064af7ea72f70765c7b0c60be4322b23557", - deprecated=True, - ) - version( - "1.8.0", - sha256="47a3f7f1409612d015a3e6633853d31ec4e4b0681aecb7554be16ebf39c7f756", - deprecated=True, - ) - version( - "1.6.7", - sha256="9384568279d29b9619a565c075f287a08bca8365e2af55e520af0c2f3595f8a2", + "1.39.0", + sha256="72d64b25df9f3cb1dcbc32323a669d86d947cf07d15bed91cfedca2a99fb3ef1", deprecated=True, ) - depends_on("py-radical-utils@1.40:", type=("build", "run"), when="@1.40:") - depends_on("py-radical-pilot@1.40:", type=("build", "run"), when="@1.40:") + depends_on("py-radical-utils@1.90:1.99", type=("build", "run"), when="@1.90:") + depends_on("py-radical-pilot@1.90:1.99", type=("build", "run"), when="@1.90:") + + depends_on("py-radical-utils@1.40:1.52", type=("build", "run"), when="@1.40:1.52") + depends_on("py-radical-pilot@1.40:1.52.1", type=("build", "run"), when="@1.40:1.52") depends_on("py-radical-utils@1.39", type=("build", "run"), when="@1.39") depends_on("py-radical-pilot@1.39", type=("build", "run"), when="@1.39") - depends_on("py-radical-pilot@1.18:1.20", type=("build", "run"), when="@1.20") + depends_on("python@3.7:", type=("build", "run"), when="@1.53:") + depends_on("python@3.6:", type=("build", "run"), when="@:1.52") - depends_on("py-radical-utils@1.12:1.20", type=("build", "run"), when="@1.12:1.20") - depends_on("py-radical-pilot@1.12:1.17", type=("build", "run"), when="@1.12:1.19") - - depends_on("py-radical-utils@:1.11", type=("build", "run"), when="@:1.11") - depends_on("py-radical-pilot@:1.11", type=("build", "run"), when="@:1.11") - - depends_on("py-packaging", type=("build", "run"), when="@:1.20") - depends_on("py-pika@0.13.0", type=("build", "run"), when="@:1.20") - depends_on("py-requests", type=("build", "run"), when="@:1.20") - - depends_on("python@3.6:", type=("build", "run")) depends_on("py-setuptools", type="build") + + def url_for_version(self, version): + if version >= Version("1.48.1"): + return super().url_for_version(version) + url = self.url.replace("_", ".") + return spack.url.substitute_version(url, self.url_version(version)) diff --git a/var/spack/repos/builtin/packages/py-radical-gtod/package.py b/var/spack/repos/builtin/packages/py-radical-gtod/package.py index 2cfc6ee9ff5..780cea41f60 100644 --- a/var/spack/repos/builtin/packages/py-radical-gtod/package.py +++ b/var/spack/repos/builtin/packages/py-radical-gtod/package.py @@ -2,6 +2,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.url from spack.package import * @@ -13,40 +14,38 @@ class PyRadicalGtod(PythonPackage): homepage = "https://radical-cybertools.github.io" git = "https://github.com/radical-cybertools/radical.gtod.git" - pypi = "radical.gtod/radical.gtod-1.47.0.tar.gz" + pypi = "radical_gtod/radical_gtod-1.90.0.tar.gz" maintainers("andre-merzky") license("LGPL-3.0-or-later") version("develop", branch="devel") - version("1.47.0", sha256="52e75bf14faf352165ffa0d9e32ca472bd63f479020cd78f832baa34f8acfe6d") - version("1.39.0", sha256="254f1e805b58a33b93c6180f018904db25538710ec9e75b3a3a9969d7206ecf6") + version("1.90.0", sha256="70889239d3a60f8f323f62b942939665464fa368c4a00d0fbc49c878658f57b2") version( - "1.20.0", - sha256="8d0846de7a5d094146c01fbb7c137f343e4da06af51efafeba79dd3fdfe421dc", + "1.47.0", + sha256="52e75bf14faf352165ffa0d9e32ca472bd63f479020cd78f832baa34f8acfe6d", deprecated=True, ) version( - "1.16.0", - sha256="1fe9da598a965c7194ed9c7df49d5b30632a11a7f9ece12152bea9aaa91bd4b8", - deprecated=True, - ) - version( - "1.13.0", - sha256="15df4ae728a8878b111cfdedffb9457aecc8003c2cfbdf2c918dfcb6b836cc93", - deprecated=True, - ) - version( - "1.6.7", - sha256="8d7d32e3d0bcf6d7cf176454a9892a46919b03e1ed96bee389380e6d75d6eff8", + "1.39.0", + sha256="254f1e805b58a33b93c6180f018904db25538710ec9e75b3a3a9969d7206ecf6", deprecated=True, ) depends_on("c", type="build") # generated - depends_on("py-radical-utils", type=("build", "run"), when="@1.13:") + depends_on("py-radical-utils@1.90:1.99", type=("build", "run"), when="@1.90:") + depends_on("py-radical-utils@:1.52", type=("build", "run"), when="@1.13:1.52") + + depends_on("python@3.7:", type=("build", "run"), when="@1.53:") + depends_on("python@3.6:", type=("build", "run"), when="@:1.52") - depends_on("python@3.6:", type=("build", "run")) depends_on("py-setuptools", type="build") + + def url_for_version(self, version): + if version >= Version("1.47.1"): + return super().url_for_version(version) + url = self.url.replace("_", ".") + return spack.url.substitute_version(url, self.url_version(version)) diff --git a/var/spack/repos/builtin/packages/py-radical-pilot/package.py b/var/spack/repos/builtin/packages/py-radical-pilot/package.py index cfbedd031fb..6a1453cbc21 100644 --- a/var/spack/repos/builtin/packages/py-radical-pilot/package.py +++ b/var/spack/repos/builtin/packages/py-radical-pilot/package.py @@ -2,6 +2,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.url from spack.package import * @@ -12,112 +13,50 @@ class PyRadicalPilot(PythonPackage): homepage = "https://radical-cybertools.github.io" git = "https://github.com/radical-cybertools/radical.pilot.git" - pypi = "radical.pilot/radical.pilot-1.47.0.tar.gz" + pypi = "radical_pilot/radical_pilot-1.92.0.tar.gz" maintainers("andre-merzky") license("MIT") version("develop", branch="devel") - version("1.47.0", sha256="58f41a0c42fe61381f15263a63424294732606ab7cee717540c0b730308f7908") - version("1.39.0", sha256="7ba0bfa3258b861db71e73d52f0915bfb8b3ac1099badacf69628307cab3b913") + version("1.92.0", sha256="5c65df02ec097f71648259db8ed8638580ea8e4c1c7f360879afff7f99e56134") version( - "1.20.0", - sha256="a0747e573a01a856dc330797dbee158f7e1cf8652001dc26f06a1d6c5e553bc6", + "1.47.0", + sha256="58f41a0c42fe61381f15263a63424294732606ab7cee717540c0b730308f7908", deprecated=True, ) version( - "1.18.1", - sha256="fd6a0ffaa727b6b9bab35d8f2dc300bf4d9c4ff3541136d83560aa7b853d6100", - deprecated=True, - ) - version( - "1.17.0", - sha256="0bfbb321a623a684e6694241aa3b7804208846515d23afa3b930553274f4a69f", - deprecated=True, - ) - version( - "1.16.0", - sha256="057941a206ee96b62b97a63a507c1136b7fe821ae9f9e5eebe7949a3f53941f9", - deprecated=True, - ) - version( - "1.15.1", - sha256="35c3b179a0bc85f52d2165e98e19acf2bf79037dd14f4d9ff3fc55ae0122d17e", - deprecated=True, - ) - version( - "1.14.0", - sha256="462471065de25f6d6e8baee705790828444c2eebb2073f5faf67a8da800d15a9", - deprecated=True, - ) - version( - "1.13.0", - sha256="5bd9eef1884ccca09c242ab6d1361588a442d9cd980613c66604ba140786bde5", - deprecated=True, - ) - version( - "1.12.0", - sha256="a266355d30d838f20b6cac190ce589ca919acd41883ad06aec62386239475133", - deprecated=True, - ) - version( - "1.11.2", - sha256="9d239f747589b8ae5d6faaea90ea5304b6f230a1edfd8d4efb440bc3799c8a9d", - deprecated=True, - ) - version( - "1.10.2", - sha256="56e9d8b1ce7ed05eff471d7df660e4940f485027e5f353aa36fd17425846a499", - deprecated=True, - ) - version( - "1.10.1", - sha256="003f4c519b991bded31693026b69dd51547a5a69a5f94355dc8beff766524b3c", - deprecated=True, - ) - version( - "1.9.2", - sha256="7c872ac9103a2aed0c5cd46057048a182f672191e194e0fd42794b0012e6e947", - deprecated=True, - ) - version( - "1.8.0", - sha256="a4c3bca163db61206e15a2d820d9a64e888da5c72672448ae975c26768130b9d", - deprecated=True, - ) - version( - "1.6.8", - sha256="fa8fd3f348a68b54ee8338d5c5cf1a3d99c10c0b6da804424a839239ee0d313d", - deprecated=True, - ) - version( - "1.6.7", - sha256="6ca0a3bd3cda65034fa756f37fa05681d5a43441c1605408a58364f89c627970", + "1.39.0", + sha256="7ba0bfa3258b861db71e73d52f0915bfb8b3ac1099badacf69628307cab3b913", deprecated=True, ) - depends_on("py-radical-utils@1.44:", type=("build", "run"), when="@1.47:") - depends_on("py-radical-saga@1.40:", type=("build", "run"), when="@1.47:") - depends_on("py-radical-gtod", type=("build", "run"), when="@1.14:") + depends_on("py-radical-utils@1.90:1.99", type=("build", "run"), when="@1.90:") + depends_on("py-radical-gtod@1.90:1.99", type=("build", "run"), when="@1.90:") + + depends_on("py-radical-utils@1.44:1.52", type=("build", "run"), when="@1.47:1.52.1") + depends_on("py-radical-saga@1.40:", type=("build", "run"), when="@1.47") + depends_on("py-radical-gtod@:1.52", type=("build", "run"), when="@1.14:1.52.1") depends_on("py-radical-utils@1.39", type=("build", "run"), when="@1.39") depends_on("py-radical-saga@1.39", type=("build", "run"), when="@1.39") depends_on("py-radical-gtod@1.39", type=("build", "run"), when="@1.39") - depends_on("py-radical-utils@1.12:1.20", type=("build", "run"), when="@1.12:1.20") - depends_on("py-radical-saga@1.12:1.20", type=("build", "run"), when="@1.12:1.20") - - depends_on("py-radical-utils@1.8.4:1.11", type=("build", "run"), when="@1.11") - depends_on("py-radical-saga@1.8:1.11", type=("build", "run"), when="@1.11") - - depends_on("py-radical-utils@:1.8.3", type=("build", "run"), when="@:1.10") - depends_on("py-radical-saga@:1.7", type=("build", "run"), when="@:1.10") - depends_on("py-pymongo@:3", type=("build", "run"), when="@:1.39") - depends_on("python@3.6:", type=("build", "run")) + depends_on("python@3.7:", type=("build", "run"), when="@1.48:") + depends_on("python@3.6:", type=("build", "run"), when="@:1.47") + + depends_on("py-requests", type=("build", "run"), when="@1.90:") + depends_on("py-psij-python", type=("build", "run"), when="@1.48:") depends_on("py-dill", type=("build", "run"), when="@1.14:") depends_on("py-setproctitle", type=("build", "run")) depends_on("py-setuptools", type="build") + + def url_for_version(self, version): + if version >= Version("1.49.3"): + return super().url_for_version(version) + url = self.url.replace("_", ".") + return spack.url.substitute_version(url, self.url_version(version)) diff --git a/var/spack/repos/builtin/packages/py-radical-saga/package.py b/var/spack/repos/builtin/packages/py-radical-saga/package.py index 40908a7a0ea..27cc71240c6 100644 --- a/var/spack/repos/builtin/packages/py-radical-saga/package.py +++ b/var/spack/repos/builtin/packages/py-radical-saga/package.py @@ -2,6 +2,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.url from spack.package import * @@ -13,81 +14,39 @@ class PyRadicalSaga(PythonPackage): homepage = "https://radical-cybertools.github.io" git = "https://github.com/radical-cybertools/radical.saga.git" - pypi = "radical.saga/radical.saga-1.47.0.tar.gz" + pypi = "radical_saga/radical_saga-1.90.0.tar.gz" maintainers("andre-merzky") license("MIT") version("develop", branch="devel") - version("1.47.0", sha256="fc9a8fc060e708852ce6c40b08a65111f8d72b9ad5f8afef9ceaa866c1351233") - version("1.39.0", sha256="0fea8103d3f96c821c977bcb55ff1c6a9844de727539b182dda4cbc2570df791") + version("1.90.0", sha256="55758339f58087477574ed598e5a34cb99d045a540a74ba9e11b34eead4af78d") version( - "1.20.0", - sha256="d85f3ed564d9eaf3ead2aa349c854e944ca459492ebf88542404106fce4204ab", + "1.47.0", + sha256="fc9a8fc060e708852ce6c40b08a65111f8d72b9ad5f8afef9ceaa866c1351233", deprecated=True, ) version( - "1.18.0", - sha256="544d4ffafc0b311151724db371ee11e27744103068748962866351ce31ccb810", - deprecated=True, - ) - version( - "1.17.0", - sha256="e48b42c232ac0ad53a410c1317746a5f15214fd3108fad773d098714fb4c40a0", - deprecated=True, - ) - version( - "1.16.0", - sha256="d269e2e7043f05e8f1d45ca3d50be973857150d7928d53bedd6844f39b224786", - deprecated=True, - ) - version( - "1.14.0", - sha256="337d8778bf392fd54845b1876de903c4c12f6fa938ef16220e1847561b66731a", - deprecated=True, - ) - version( - "1.13.0", - sha256="90d8e875f48402deab87314ea5c08d591264fb576c461bd9663ac611fc2e547e", - deprecated=True, - ) - version( - "1.12.0", - sha256="769c83bab95c0e3ef970da0fa6cb30878d7a31216ff8b542e894686357f7cb5b", - deprecated=True, - ) - version( - "1.11.1", - sha256="edb1def63fadd192a4be4f508e9e65669745843e158ce27a965bf2f43d18b84d", - deprecated=True, - ) - version( - "1.8.0", - sha256="6edf94897102a08dcb994f7f107a0e25e7f546a0a9488af3f8b92ceeeaaf58a6", - deprecated=True, - ) - version( - "1.6.10", - sha256="8fe7e281e9f81234f34f5c7c7986871761e9e37230d2a874c65d18daeccd976a", - deprecated=True, - ) - version( - "1.6.8", - sha256="d5e9f95a027087fb637cef065ff3af848e5902e403360189e36c9aa7c3f6f29b", + "1.39.0", + sha256="0fea8103d3f96c821c977bcb55ff1c6a9844de727539b182dda4cbc2570df791", deprecated=True, ) - depends_on("py-radical-utils@1.40:", type=("build", "run"), when="@1.40:") - + depends_on("py-radical-utils@1.90:1.99", type=("build", "run"), when="@1.90:") + depends_on("py-radical-utils@1.40:1.52", type=("build", "run"), when="@1.40:1.52") depends_on("py-radical-utils@1.39", type=("build", "run"), when="@1.39") - depends_on("py-radical-utils@1.12:1.20", type=("build", "run"), when="@1.12:1.20") + depends_on("python@3.7:", type=("build", "run"), when="@1.53:") + depends_on("python@3.6:", type=("build", "run"), when="@:1.52") - depends_on("py-radical-utils@:1.11", type=("build", "run"), when="@:1.11") - - depends_on("python@3.6:", type=("build", "run")) - depends_on("py-apache-libcloud", type=("build", "run")) + depends_on("py-apache-libcloud", type=("build", "run"), when="@:1.60") depends_on("py-parse", type=("build", "run")) depends_on("py-setuptools", type="build") + + def url_for_version(self, version): + if version >= Version("1.47.1"): + return super().url_for_version(version) + url = self.url.replace("_", ".") + return spack.url.substitute_version(url, self.url_version(version)) diff --git a/var/spack/repos/builtin/packages/py-radical-utils/package.py b/var/spack/repos/builtin/packages/py-radical-utils/package.py index 207f0c20096..45fbcf683b3 100644 --- a/var/spack/repos/builtin/packages/py-radical-utils/package.py +++ b/var/spack/repos/builtin/packages/py-radical-utils/package.py @@ -2,6 +2,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) +import spack.url from spack.package import * @@ -11,92 +12,29 @@ class PyRadicalUtils(PythonPackage): homepage = "https://radical-cybertools.github.io" git = "https://github.com/radical-cybertools/radical.utils.git" - pypi = "radical.utils/radical.utils-1.47.0.tar.gz" + pypi = "radical_utils/radical_utils-1.91.1.tar.gz" maintainers("andre-merzky") license("MIT") version("develop", branch="devel") - version("1.47.0", sha256="f85a4a452561dd018217f1ed38d97c9be96fa448437cfeb1b879121174fd5311") - version("1.39.0", sha256="fade87ee4c6ccf335d5e26d5158ce22ee891e4d4c576464274999ddf36dc4977") + version("1.91.1", sha256="5293f375f699161e451982b2e7668613c24e2562252f65e765ebbc83d8ae0118") version( - "1.20.0", - sha256="9b39dd616d70c387fb3f97d3510a506bac92c159b6482c3aebd3d11eeaeebcc9", + "1.47.0", + sha256="f85a4a452561dd018217f1ed38d97c9be96fa448437cfeb1b879121174fd5311", deprecated=True, ) version( - "1.18.1", - sha256="5b3ab15417a1ef82f63f8a77763a177d6bc59b61a80823be0df8c0f7502d9b3e", - deprecated=True, - ) - version( - "1.17.0", - sha256="ee3fec190e89522f648e191d2e380689842746f1eacda27772a9471215908cfe", - deprecated=True, - ) - version( - "1.16.0", - sha256="6eddfba5c73e71c7c5ddeba6c8ebe5260616d66b26d1f7123613c3cd543d61e9", - deprecated=True, - ) - version( - "1.15.0", - sha256="22e5028de75c0a471bfed587d437dded214625b150deaca0289474a3619d395b", - deprecated=True, - ) - version( - "1.14.0", - sha256="f61f0e335bbdc51e4023458e7e6959551686ebf170adc5353220dcc83fd677c9", - deprecated=True, - ) - version( - "1.13.0", - sha256="84c1cad8be988dad7fb2b8455d19a4fb0c979fab02c5b7a7b531a4ae8fe52580", - deprecated=True, - ) - version( - "1.12.0", - sha256="1474dbe4d94cdf3e992e1711e10d73dffa352c1c29ff51d81c1686e5081e9398", - deprecated=True, - ) - version( - "1.11.1", - sha256="4fec3f6d45d7309c891ab4f8aeda0257f06f9a8404ca87c7eb643cd8d7415804", - deprecated=True, - ) - version( - "1.11.0", - sha256="81537c2a2f8a1a409b4a1aac67323c6b49cc994e2b70052425e2bc8d4622e2de", - deprecated=True, - ) - version( - "1.9.1", - sha256="0837d75e7f9dcce5ba5ac63151ab1683d6ba9ab3954b076d1f170cc4a3cdb1b4", - deprecated=True, - ) - version( - "1.8.4", - sha256="4777ba20e9f881bf3e73ad917638fdeca5a4b253d57ed7b321a07f670e3f737b", - deprecated=True, - ) - version( - "1.8.0", - sha256="8582c65593f51d394fc263c6354ec5ad9cc7173369dcedfb2eef4f5e8146cf03", - deprecated=True, - ) - version( - "1.6.7", - sha256="552f6c282f960ccd9d2401d686b0b3bfab35dfa94a26baeb2d3b4e45211f05a9", + "1.39.0", + sha256="fade87ee4c6ccf335d5e26d5158ce22ee891e4d4c576464274999ddf36dc4977", deprecated=True, ) - depends_on("py-radical-gtod", type=("build", "run"), when="@:1.13") + depends_on("python@3.7:", type=("build", "run"), when="@1.53:") + depends_on("python@3.6:", type=("build", "run"), when="@:1.52") - depends_on("py-pymongo@:3", type=("build", "run"), when="@:1.39") - - depends_on("python@3.6:", type=("build", "run")) depends_on("py-colorama", type=("build", "run")) depends_on("py-msgpack", type=("build", "run")) depends_on("py-netifaces", type=("build", "run")) @@ -108,3 +46,9 @@ class PyRadicalUtils(PythonPackage): depends_on("py-setuptools") # https://github.com/radical-cybertools/radical.utils/issues/403 depends_on("py-setuptools@:69.2", when="@:1.51") + + def url_for_version(self, version): + if version >= Version("1.48.1"): + return super().url_for_version(version) + url = self.url.replace("_", ".") + return spack.url.substitute_version(url, self.url_version(version))