diff --git a/dev-python/editorconfig-core-py/Manifest b/dev-python/editorconfig-core-py/Manifest
new file mode 100644
index 000000000..73c1a2dc3
--- /dev/null
+++ b/dev-python/editorconfig-core-py/Manifest
@@ -0,0 +1,2 @@
+DIST editorconfig-core-py-0.12.3.gh.tar.gz 19261 BLAKE2B 58cac122cfee19527bc45def7e923da50982de0e2cd443cf67dd824c050fb12352b85a5679815a701bc5b8d88a089a0a98280c364730086d01b80f119ad996a4 SHA512 005d0698c410c8865d177a1e891b5c51b15255f36303b116fddbbbc08e309d1d60ca3003d27e6fd8455e53c5956db0c29e298f22f4b10950e1f7c56c7c6e0ab3
+DIST editorconfig-core-test-abb579e00f2deeede91cb485e53512efab9c6474.gh.tar.gz 7900 BLAKE2B 9ebdb5e522948bc9e86ea84435ccaa11585a8a12f4cd6fe54c64d78917281c913568351767d8077623b1196d84206d1c2d0126a0510f70df484c1b55d829028b SHA512 ae5424b4926d6cb127cb3da473400ced4f7ccf224f7baa8bc5bde0317cc045bb7b99738a56efe5fd0e5a0fbe39b997b9fb1739d24713e7f83b58e987c5e56a32
diff --git a/dev-python/editorconfig-core-py/editorconfig-core-py-0.12.3-r1.ebuild b/dev-python/editorconfig-core-py/editorconfig-core-py-0.12.3-r1.ebuild
new file mode 100644
index 000000000..e74a3bb0e
--- /dev/null
+++ b/dev-python/editorconfig-core-py/editorconfig-core-py-0.12.3-r1.ebuild
@@ -0,0 +1,47 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{9..12} )
+inherit cmake distutils-r1
+
+TESTVER="abb579e00f2deeede91cb485e53512efab9c6474"
+DESCRIPTION="Clone of EditorConfig core written in Python"
+HOMEPAGE="https://editorconfig.org/"
+SRC_URI="https://github.com/${PN%-core-py}/${PN}/archive/v${PV}.tar.gz -> ${P}.gh.tar.gz
+ test? (
+ https://github.com/${PN%-core-py}/${PN%-core-py}-core-test/archive/${TESTVER}.tar.gz -> ${PN%-core-py}-core-test-${TESTVER}.gh.tar.gz
+ )"
+
+LICENSE="PYTHON BSD-4"
+SLOT="0"
+KEYWORDS="amd64 arm64 x86"
+IUSE="cli test"
+RESTRICT="!test? ( test )"
+
+RDEPEND="
+ cli? ( !app-text/editorconfig-core-c[cli] )"
+
+src_prepare() {
+ if use test; then
+ mv "${WORKDIR}"/${PN%-core-py}-core-test-${TESTVER}/* "${S}"/tests || die
+ fi
+ if ! use cli; then
+ sed -i -e '/editorconfig\.__main__/d' setup.py || die
+ fi
+
+ cmake_src_prepare
+ distutils-r1_src_prepare
+}
+
+python_test() {
+ local mycmakeargs=(
+ -DPYTHON_EXECUTABLE="${PYTHON}"
+ )
+
+ cmake_src_configure
+ cmake_src_compile
+ cmake_src_test
+}
diff --git a/dev-python/editorconfig-core-py/metadata.xml b/dev-python/editorconfig-core-py/metadata.xml
new file mode 100644
index 000000000..70597073f
--- /dev/null
+++ b/dev-python/editorconfig-core-py/metadata.xml
@@ -0,0 +1,24 @@
+
+
+
+
+ chutzpah@gentoo.org
+ Patrick McLean
+
+
+ python@gentoo.org
+ Python
+
+
+
+ EditorConfig Python Core provides the same functionality as the
+ EditorConfig C Core. EditorConfig Python core can be used as a
+ command line program or as an importable library.
+
+
+ editorconfig/editorconfig-core-test
+ EditorConfig
+
+
diff --git a/dev-python/jsbeautifier/Manifest b/dev-python/jsbeautifier/Manifest
index b12e04bb9..4f1d7a8ef 100644
--- a/dev-python/jsbeautifier/Manifest
+++ b/dev-python/jsbeautifier/Manifest
@@ -1,3 +1,2 @@
DIST jsbeautifier-1.14.11.tar.gz 75586 BLAKE2B ce0518b6eb159443323dbb6394063a5ab2d91326ecca7503e4b17626082fba09f1f4713eb101e9f8a3e19a29a2b273840f011b80b0dad4a7dee8ed296338a803 SHA512 d84847ad71af40a08ca47af449eeaaaf1d4b8ad3981f9573b4322e42b0060caba0fbd2632d6686306fcdac64a7e03ad6eaf9ad4461489984aabff3b33331a310
-DIST jsbeautifier-1.14.6.tar.gz 74554 BLAKE2B fd9761d352add4541d828f3a59f1e857968c8522230c32528fbd8f471e862246d3082649c8f9ee258adf291e0805793e06be3a9b3626ef169b366a3f87b6fd40 SHA512 503bcb5e805dc385a0463127590a00339ec8f6fc4ba6b6c1fc7eb3ff91310fa4bfd8a92112eec7d8c503452de2df2dc105642313ece396120befb84c142161fb
DIST jsbeautifier-1.14.7.tar.gz 74564 BLAKE2B cbf08275b3d0e3b5342548c6277d4284448915685a4b2705673789eee1d1e6ed86f66dc2c682c000d3722194947384c8fc7f4fdb15c96d2bff489fc5a2601452 SHA512 bd3c201050db470373fad62bb1f3e78fe42b728d410d9079f3ca12a3f2e8a7aa48f9ca34e8c5449a0abd1ac67e3feece55a51ef52f6328539c5406a40e4bf4df
diff --git a/dev-python/jsbeautifier/jsbeautifier-1.14.11.ebuild b/dev-python/jsbeautifier/jsbeautifier-1.14.11.ebuild
index b1953166c..9f0834687 100644
--- a/dev-python/jsbeautifier/jsbeautifier-1.14.11.ebuild
+++ b/dev-python/jsbeautifier/jsbeautifier-1.14.11.ebuild
@@ -1,21 +1,19 @@
-# Copyright 1999-2023 Gentoo Authors
+# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
-EAPI=7
+EAPI=8
DISTUTILS_USE_PEP517=setuptools
-PYTHON_COMPAT=( python3_{10..11} )
+PYTHON_COMPAT=( python3_{10..12} )
-inherit distutils-r1
+inherit distutils-r1 pypi
DESCRIPTION="Beautify, unpack or deobfuscate JavaScript"
HOMEPAGE="https://pypi.python.org/pypi/jsbeautifier"
-SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
LICENSE="MIT"
SLOT="0"
KEYWORDS="amd64 ~arm64 x86"
-IUSE=""
RDEPEND=">=dev-python/six-1.13.0[${PYTHON_USEDEP}]
>=dev-python/editorconfig-core-py-0.12.2[${PYTHON_USEDEP}]"
diff --git a/dev-python/jsbeautifier/jsbeautifier-1.14.6.ebuild b/dev-python/jsbeautifier/jsbeautifier-1.14.6.ebuild
deleted file mode 100644
index 4ebd8a361..000000000
--- a/dev-python/jsbeautifier/jsbeautifier-1.14.6.ebuild
+++ /dev/null
@@ -1,21 +0,0 @@
-# Copyright 1999-2022 Gentoo Authors
-# Distributed under the terms of the GNU General Public License v2
-
-EAPI=7
-
-PYTHON_COMPAT=( python3_{10..11} )
-
-inherit distutils-r1
-
-DESCRIPTION="Beautify, unpack or deobfuscate JavaScript"
-HOMEPAGE="https://pypi.python.org/pypi/jsbeautifier"
-SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
-
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="amd64 ~arm64 x86"
-IUSE=""
-
-RDEPEND=">=dev-python/six-1.13.0[${PYTHON_USEDEP}]
- >=dev-python/editorconfig-core-py-0.12.2[${PYTHON_USEDEP}]"
-DEPEND="${RDEPEND}"
diff --git a/dev-python/jsbeautifier/jsbeautifier-1.14.7.ebuild b/dev-python/jsbeautifier/jsbeautifier-1.14.7.ebuild
index 4ebd8a361..f3113b7db 100644
--- a/dev-python/jsbeautifier/jsbeautifier-1.14.7.ebuild
+++ b/dev-python/jsbeautifier/jsbeautifier-1.14.7.ebuild
@@ -1,20 +1,19 @@
-# Copyright 1999-2022 Gentoo Authors
+# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
-EAPI=7
+EAPI=8
-PYTHON_COMPAT=( python3_{10..11} )
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( python3_{10..12} )
-inherit distutils-r1
+inherit distutils-r1 pypi
DESCRIPTION="Beautify, unpack or deobfuscate JavaScript"
HOMEPAGE="https://pypi.python.org/pypi/jsbeautifier"
-SRC_URI="mirror://pypi/${PN:0:1}/${PN}/${P}.tar.gz"
LICENSE="MIT"
SLOT="0"
KEYWORDS="amd64 ~arm64 x86"
-IUSE=""
RDEPEND=">=dev-python/six-1.13.0[${PYTHON_USEDEP}]
>=dev-python/editorconfig-core-py-0.12.2[${PYTHON_USEDEP}]"
diff --git a/dev-python/jsbeautifier/metadata.xml b/dev-python/jsbeautifier/metadata.xml
index ace7c2d3a..f4b26874b 100644
--- a/dev-python/jsbeautifier/metadata.xml
+++ b/dev-python/jsbeautifier/metadata.xml
@@ -5,4 +5,7 @@
unknown@pentoo.ch
Author Unknown
+
+ jsbeautifier
+