URI:
       add new sabnzbd - overlay - 📔 drkhsh gentoo overlay
  HTML git clone https://git.drkhsh.at/overlay.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
       ---
   DIR commit 6bfb97e84e232bc6f36c28af540db5948df491f2
   DIR parent 972049be71a06a31f47bc3b1e34c1347cb06c615
  HTML Author: drkhsh <me@drkhsh.at>
       Date:   Sun, 12 Jan 2025 15:43:23 +0100
       
       add new sabnzbd
       
       Diffstat:
         A net-nntp/sabnzbd/Manifest           |       3 +++
         A net-nntp/sabnzbd/files/sabnzbd-r1.… |      12 ++++++++++++
         A net-nntp/sabnzbd/files/sabnzbd-r1.… |      71 +++++++++++++++++++++++++++++++
         A net-nntp/sabnzbd/files/sabnzbd.con… |       6 ++++++
         A net-nntp/sabnzbd/files/sabnzbd_at.… |      10 ++++++++++
         A net-nntp/sabnzbd/metadata.xml       |      15 +++++++++++++++
         A net-nntp/sabnzbd/sabnzbd-4.4.0.ebu… |     180 +++++++++++++++++++++++++++++++
         A net-nntp/sabnzbd/sabnzbd-4.4.1.ebu… |     180 +++++++++++++++++++++++++++++++
         A net-nntp/sabnzbd/sabnzbd-4.4.1_rc1… |     180 +++++++++++++++++++++++++++++++
       
       9 files changed, 657 insertions(+), 0 deletions(-)
       ---
   DIR diff --git a/net-nntp/sabnzbd/Manifest b/net-nntp/sabnzbd/Manifest
       @@ -0,0 +1,3 @@
       +DIST SABnzbd-4.4.0-src.tar.gz 5113415 BLAKE2B caeadf20fbef16c568a0ef52f57c710ae084c948c72cad3da79a0056bd695b6532e895170d5aae1ce13f6d926a03b073bf1d3d881336ae66c0d790d21422f9ce SHA512 00beb32d73ae215cc0e0666ca62b56ccde9f43d67df3862cca840d7a9c7aab5f573042e076a2147f95154a1cc2b3d43024d88eda8ffeafbf77dd2fbc0bf16fac
       +DIST SABnzbd-4.4.1-src.tar.gz 5114314 BLAKE2B 2cd96635b35c23ca4a34534ac2133b33fe414ae5037ebaebd8d6cf57da38d04fd26ffcac52fe72f8893483328ffc229cdc3a98d293e5976453b33128eb743a70 SHA512 a0fa34bc6abafa0cd0aacf51ca4527c2fa2bf1a38e8e7fd03417a66621c54eae493cdcb03697bdd0e6c010f30f002290362b6aa0f62f4ef67693a80af5c39bbf
       +DIST SABnzbd-4.4.1RC1-src.tar.gz 5114738 BLAKE2B 6a2d998803e7adcb4dc6854ed1437e33683149a00db4baefc056cd76f9ec644ac8c6970bb35329e21fc7cc55e9fa07db66223c4faedf143c6f1cc37e42c6206f SHA512 d2dab40169e796f8ea45fec726f4c7dae99109ecb5320e7a94e1dbc605d4faa54128aaa0f5a2ab5d23416e2b0fdbc59644965b04c03ba33427ba9edc7a09c736
   DIR diff --git a/net-nntp/sabnzbd/files/sabnzbd-r1.ini b/net-nntp/sabnzbd/files/sabnzbd-r1.ini
       @@ -0,0 +1,12 @@
       +__version__ = 19
       +[misc]
       +log_dir = /var/log/sabnzbd
       +admin_dir = /var/lib/sabnzbd/admin
       +cache_dir = /var/lib/sabnzbd/cache
       +complete_dir = /var/lib/sabnzbd/complete
       +download_dir = /var/lib/sabnzbd/download
       +dirscan_dir = /var/lib/sabnzbd/dirscan
       +nzb_backup_dir = /var/lib/sabnzbd/backup
       +auto_browser = 0
       +host = ::
       +port = 8080
   DIR diff --git a/net-nntp/sabnzbd/files/sabnzbd-r1.initd b/net-nntp/sabnzbd/files/sabnzbd-r1.initd
       @@ -0,0 +1,71 @@
       +#!/sbin/openrc-run
       +# Copyright 1999-2020 Gentoo Authors
       +# Distributed under the terms of the GNU General Public License v2
       +
       +PIDFILE="/run/sabnzbd/sabnzbd.pid"
       +
       +depend() {
       +        use dns
       +}
       +
       +get_var() {
       +        grep -P -o -m 1 "(?<=^${1} = ).*" "${SABNZBD_CONFIGFILE}" || echo 0
       +}
       +
       +start() {
       +        ebegin "Starting SABnzbd"
       +
       +        checkpath -q -d -o ${SABNZBD_USER}:${SABNZBD_GROUP} -m 0770 "$(dirname "${PIDFILE}")"
       +
       +        start-stop-daemon \
       +                --quiet \
       +                --start \
       +                --user ${SABNZBD_USER} \
       +                --group ${SABNZBD_GROUP} \
       +                --pidfile "${PIDFILE}" \
       +                --wait 1000 \
       +                --exec /usr/share/sabnzbd/SABnzbd.py \
       +                -- \
       +                --config-file "${SABNZBD_CONFIGFILE}" \
       +                --logging "${SABNZBD_LOGGING}" \
       +                --daemon \
       +                --pidfile "${PIDFILE}"
       +
       +        eend $?
       +}
       +
       +stop() {
       +        local protocol="http"
       +        local host="$(get_var "host")"
       +        local port="$(get_var "port")"
       +
       +        if [ $(get_var "enable_https") -eq 1 ]; then
       +                protocol="https"
       +                port="$(get_var "https_port")"
       +        fi
       +
       +        case "${host}" in
       +                *:*) host="[${host}]" ;;
       +        esac
       +
       +        local url="${protocol}://${host}:${port}/sabnzbd/api?mode=shutdown"
       +
       +        if [ $(get_var "disable_api_key") -eq 0 ]; then
       +                url="${url}&apikey=$(get_var "api_key")"
       +        fi
       +
       +        local signals="TERM/1/KILL/1"
       +
       +        ebegin "Stopping SABnzbd"
       +
       +        if [ "$(wget -o /dev/null -t 1 -O - -T 10 "${url}")" = "ok" ]; then
       +                signals="NULL/5/${signals}"
       +        fi
       +
       +        start-stop-daemon \
       +                --stop \
       +                --pidfile "${PIDFILE}" \
       +                --retry "${signals}"
       +
       +        eend $?
       +}
   DIR diff --git a/net-nntp/sabnzbd/files/sabnzbd.confd b/net-nntp/sabnzbd/files/sabnzbd.confd
       @@ -0,0 +1,6 @@
       +SABNZBD_CONFIGFILE="/etc/sabnzbd/sabnzbd.ini"
       +SABNZBD_USER="sabnzbd"
       +SABNZBD_GROUP="sabnzbd"
       +
       +# 0 - error/warnings, 1 - info, 2 - debug
       +SABNZBD_LOGGING="1"
   DIR diff --git a/net-nntp/sabnzbd/files/sabnzbd_at.service b/net-nntp/sabnzbd/files/sabnzbd_at.service
       @@ -0,0 +1,10 @@
       +[Unit]
       +Description=SABnzbd binary newsreader
       +
       +[Service]
       +ExecStart=/usr/share/sabnzbd/SABnzbd.py --logging 1 --browser 0
       +User=sabnzbd
       +Group=sabnzbd
       +
       +[Install]
       +WantedBy=multi-user.target
   DIR diff --git a/net-nntp/sabnzbd/metadata.xml b/net-nntp/sabnzbd/metadata.xml
       @@ -0,0 +1,15 @@
       +<?xml version="1.0" encoding="UTF-8"?>
       +<!DOCTYPE pkgmetadata SYSTEM "https://www.gentoo.org/dtd/metadata.dtd">
       +<pkgmetadata>
       +        <maintainer type="person" proxied="yes">
       +                <email>joe@wt.gd</email>
       +                <name>Joe Kappus</name>
       +        </maintainer>
       +        <maintainer type="project" proxied="proxy">
       +                <email>proxy-maint@gentoo.org</email>
       +                <name>Proxy Maintainers</name>
       +        </maintainer>
       +        <upstream>
       +                <remote-id type="github">sabnzbd/sabnzbd</remote-id>
       +        </upstream>
       +</pkgmetadata>
   DIR diff --git a/net-nntp/sabnzbd/sabnzbd-4.4.0.ebuild b/net-nntp/sabnzbd/sabnzbd-4.4.0.ebuild
       @@ -0,0 +1,180 @@
       +# Copyright 1999-2024 Gentoo Authors
       +# Distributed under the terms of the GNU General Public License v2
       +
       +EAPI="8"
       +
       +#dev-python/tavern needs py3.13 before incrementing
       +PYTHON_COMPAT=( python3_{10..12} )
       +PYTHON_REQ_USE="sqlite"
       +
       +inherit optfeature python-single-r1 systemd
       +
       +MY_PV="${PV/_alpha/Alpha}"
       +MY_PV="${MY_PV/_beta/Beta}"
       +MY_PV="${MY_PV/_rc/RC}"
       +
       +MY_P="SABnzbd-${MY_PV}"
       +
       +DESCRIPTION="Binary newsgrabber with web-interface"
       +HOMEPAGE="https://sabnzbd.org/"
       +SRC_URI="https://github.com/sabnzbd/sabnzbd/releases/download/${MY_PV}/${MY_P}-src.tar.gz"
       +S="${WORKDIR}/${MY_P}"
       +
       +# Sabnzbd is GPL-2 but bundles software with the following licenses.
       +LICENSE="GPL-2 BSD LGPL-2 MIT BSD-1"
       +SLOT="0"
       +KEYWORDS="~amd64"
       +IUSE="test"
       +RESTRICT="!test? ( test )"
       +REQUIRED_USE="${PYTHON_REQUIRED_USE}"
       +
       +DEPEND="
       +        acct-user/sabnzbd
       +        acct-group/sabnzbd
       +        ${PYTHON_DEPS}
       +        $(python_gen_cond_dep '
       +                >=dev-python/apprise-1.8.0[${PYTHON_USEDEP}]
       +                dev-python/chardet[${PYTHON_USEDEP}]
       +                =dev-python/cheetah3-3.4.0_beta6[${PYTHON_USEDEP}]
       +                dev-python/cherrypy[${PYTHON_USEDEP}]
       +                dev-python/configobj[${PYTHON_USEDEP}]
       +                dev-python/cryptography[${PYTHON_USEDEP}]
       +                >=dev-python/feedparser-6.0.11[${PYTHON_USEDEP}]
       +                >=dev-python/guessit-3.8.0[${PYTHON_USEDEP}]
       +                dev-python/notify2[${PYTHON_USEDEP}]
       +                dev-python/portend[${PYTHON_USEDEP}]
       +                dev-python/puremagic[${PYTHON_USEDEP}]
       +                ~dev-python/sabctools-8.2.5[${PYTHON_USEDEP}]
       +        ')
       +"
       +RDEPEND="
       +        ${DEPEND}
       +        || (
       +                >=app-arch/par2cmdline-0.8
       +                >=app-arch/par2cmdline-turbo-1.1.0
       +        )
       +        net-misc/wget
       +"
       +BDEPEND="
       +        test? (
       +                $(python_gen_cond_dep '
       +                        dev-python/flaky[${PYTHON_USEDEP}]
       +                        >=dev-python/lxml-4.5.0[${PYTHON_USEDEP}]
       +                        >=dev-python/pyfakefs-5.6.0[${PYTHON_USEDEP}]
       +                        dev-python/pytest-asyncio[${PYTHON_USEDEP}]
       +                        dev-python/pytest-httpbin[${PYTHON_USEDEP}]
       +                        dev-python/pytest-httpserver[${PYTHON_USEDEP}]
       +                        dev-python/pytest-mock[${PYTHON_USEDEP}]
       +                        dev-python/pytest[${PYTHON_USEDEP}]
       +                        dev-python/requests[${PYTHON_USEDEP}]
       +                        dev-python/selenium[${PYTHON_USEDEP}]
       +                        dev-python/tavalidate[${PYTHON_USEDEP}]
       +                        >=dev-python/tavern-2[${PYTHON_USEDEP}]
       +                        dev-python/werkzeug[${PYTHON_USEDEP}]
       +                        dev-python/xmltodict[${PYTHON_USEDEP}]
       +                ')
       +                app-arch/p7zip
       +                app-arch/unrar
       +                app-arch/unzip
       +                www-apps/chromedriver-bin
       +        )
       +"
       +
       +src_test() {
       +        local EPYTEST_IGNORE=(
       +                # network sandbox
       +                tests/test_getipaddress.py
       +                tests/test_rss.py
       +                tests/test_urlgrabber.py
       +                tests/test_utils/test_happyeyeballs.py
       +                tests/test_utils/test_internetspeed.py
       +        )
       +        local EPYTEST_DESELECT=(
       +                # network sandbox
       +                'tests/test_cfg.py::TestValidators::test_validate_host'
       +                'tests/test_consistency.py::TestWiki'
       +                'tests/test_newswrapper.py::TestNewsWrapper'
       +                'tests/test_happyeyeballs.py::TestHappyEyeballs'
       +                'tests/test_internetspeed.py::TestInternetSpeed'
       +                # Just plain fails
       +                'tests/test_newsunpack.py::TestPar2Repair::test_basic'
       +                # Does not work with pytest-8.x
       +                'tests/test_functional_api.py'
       +                # Chromedriver tests don't want to behave in portage
       +                'tests/test_functional_config.py::TestBasicPages::test_base_pages'
       +                'tests/test_functional_config.py::TestBasicPages::test_base_submit_pages'
       +                'tests/test_functional_config.py::TestConfigLogin::test_login'
       +                'tests/test_functional_config.py::TestConfigCategories::test_page'
       +                'tests/test_functional_config.py::TestConfigRSS::test_rss_basic_flow'
       +                'tests/test_functional_config.py::TestConfigServers::test_add_and_remove_server'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_basic_rar5'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_zip'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_7zip'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_passworded'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_fully_obfuscated'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_unicode_rar'
       +                'tests/test_functional_misc.py::TestShowLogging::test_showlog'
       +                'tests/test_functional_misc.py::TestQueueRepair::test_queue_repair'
       +                'tests/test_functional_misc.py::TestDaemonizing::test_daemonizing'
       +                'tests/test_functional_sorting.py::TestDownloadSorting'
       +                # Bug https://bugs.gentoo.org/934331 fixed in 4.3.3.
       +                'tests/test_sorting.py::TestSortingSorter'
       +                # cryptography-43, https://bugs.gentoo.org/938453
       +                'tests/test_utils/test_cert_gen.py::TestCertGen::test_generate_key_custom[512-test_key.pem]'
       +        )
       +
       +        # The test suite is prone to being broken by random plugins that happen
       +        # to be installed, so disable autoloading.
       +        local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
       +        # Use PYTEST_PLUGINS instead of args to 'epytest' because the test suite
       +        # calls pytest itself and the args would get lost. To get the list of plugins,
       +        # if stuck, comment out the AUTOLOAD line above, look at the list of loaded
       +        # plugins at the top of the pytest output, then translate those into module names
       +        # by e.g. checking equery f.
       +        local -x PYTEST_PLUGINS=pytest_mock,tavern,tavern._core.pytest,pyfakefs.pytest_plugin,pytest_asyncio.plugin
       +
       +        epytest -s
       +}
       +
       +src_install() {
       +        insinto /usr/share/${PN}
       +        doins -r email icons interfaces locale po sabnzbd scripts tools
       +
       +        exeinto /usr/share/${PN}
       +        doexe SABnzbd.py
       +
       +        python_fix_shebang "${ED}"/usr/share/${PN}
       +        python_optimize "${ED}"/usr/share/${PN}
       +
       +        newinitd "${FILESDIR}"/${PN}-r1.initd ${PN}
       +        newconfd "${FILESDIR}"/${PN}.confd ${PN}
       +
       +        diropts -o ${PN} -g ${PN}
       +        dodir /etc/${PN}
       +        keepdir /var/log/${PN}
       +
       +        insinto "/etc/${PN}"
       +        insopts -m 0600 -o "${PN}" -g "${PN}"
       +        newins "${FILESDIR}"/${PN}-r1.ini ${PN}.ini
       +
       +        dodoc ISSUES.txt README.mkd
       +
       +        systemd_newunit "${FILESDIR}"/sabnzbd_at.service 'sabnzbd@.service'
       +}
       +
       +pkg_postinst() {
       +        if [[ -z "${REPLACING_VERSIONS}" ]]; then
       +                # This is a new installation
       +                einfo "Default directory: /var/lib/${PN}"
       +                einfo
       +                einfo "To add a user to the sabnzbd group so it can edit SABnzbd+ files, run:"
       +                einfo
       +                einfo "    usermod -a -G sabnzbd <user>"
       +                einfo
       +                einfo "By default, SABnzbd will listen on TCP port 8080."
       +        fi
       +
       +        optfeature "7z archive support" app-arch/p7zip
       +        optfeature "rar archive support" app-arch/unrar app-arch/rar
       +        optfeature "zip archive support" app-arch/unzip
       +}
   DIR diff --git a/net-nntp/sabnzbd/sabnzbd-4.4.1.ebuild b/net-nntp/sabnzbd/sabnzbd-4.4.1.ebuild
       @@ -0,0 +1,180 @@
       +# Copyright 1999-2024 Gentoo Authors
       +# Distributed under the terms of the GNU General Public License v2
       +
       +EAPI="8"
       +
       +#dev-python/tavern needs py3.13 before incrementing
       +PYTHON_COMPAT=( python3_{10..12} )
       +PYTHON_REQ_USE="sqlite"
       +
       +inherit optfeature python-single-r1 systemd
       +
       +MY_PV="${PV/_alpha/Alpha}"
       +MY_PV="${MY_PV/_beta/Beta}"
       +MY_PV="${MY_PV/_rc/RC}"
       +
       +MY_P="SABnzbd-${MY_PV}"
       +
       +DESCRIPTION="Binary newsgrabber with web-interface"
       +HOMEPAGE="https://sabnzbd.org/"
       +SRC_URI="https://github.com/sabnzbd/sabnzbd/releases/download/${MY_PV}/${MY_P}-src.tar.gz"
       +S="${WORKDIR}/${MY_P}"
       +
       +# Sabnzbd is GPL-2 but bundles software with the following licenses.
       +LICENSE="GPL-2 BSD LGPL-2 MIT BSD-1"
       +SLOT="0"
       +KEYWORDS="~amd64"
       +IUSE="test"
       +RESTRICT="!test? ( test )"
       +REQUIRED_USE="${PYTHON_REQUIRED_USE}"
       +
       +DEPEND="
       +        acct-user/sabnzbd
       +        acct-group/sabnzbd
       +        ${PYTHON_DEPS}
       +        $(python_gen_cond_dep '
       +                >=dev-python/apprise-1.8.0[${PYTHON_USEDEP}]
       +                dev-python/chardet[${PYTHON_USEDEP}]
       +                =dev-python/cheetah3-3.4.0_beta6[${PYTHON_USEDEP}]
       +                dev-python/cherrypy[${PYTHON_USEDEP}]
       +                dev-python/configobj[${PYTHON_USEDEP}]
       +                dev-python/cryptography[${PYTHON_USEDEP}]
       +                >=dev-python/feedparser-6.0.11[${PYTHON_USEDEP}]
       +                >=dev-python/guessit-3.8.0[${PYTHON_USEDEP}]
       +                dev-python/notify2[${PYTHON_USEDEP}]
       +                dev-python/portend[${PYTHON_USEDEP}]
       +                dev-python/puremagic[${PYTHON_USEDEP}]
       +                ~dev-python/sabctools-8.2.5[${PYTHON_USEDEP}]
       +        ')
       +"
       +RDEPEND="
       +        ${DEPEND}
       +        || (
       +                >=app-arch/par2cmdline-0.8
       +                >=app-arch/par2cmdline-turbo-1.1.0
       +        )
       +        net-misc/wget
       +"
       +BDEPEND="
       +        test? (
       +                $(python_gen_cond_dep '
       +                        dev-python/flaky[${PYTHON_USEDEP}]
       +                        >=dev-python/lxml-4.5.0[${PYTHON_USEDEP}]
       +                        >=dev-python/pyfakefs-5.6.0[${PYTHON_USEDEP}]
       +                        dev-python/pytest-asyncio[${PYTHON_USEDEP}]
       +                        dev-python/pytest-httpbin[${PYTHON_USEDEP}]
       +                        dev-python/pytest-httpserver[${PYTHON_USEDEP}]
       +                        dev-python/pytest-mock[${PYTHON_USEDEP}]
       +                        dev-python/pytest[${PYTHON_USEDEP}]
       +                        dev-python/requests[${PYTHON_USEDEP}]
       +                        dev-python/selenium[${PYTHON_USEDEP}]
       +                        dev-python/tavalidate[${PYTHON_USEDEP}]
       +                        >=dev-python/tavern-2[${PYTHON_USEDEP}]
       +                        dev-python/werkzeug[${PYTHON_USEDEP}]
       +                        dev-python/xmltodict[${PYTHON_USEDEP}]
       +                ')
       +                app-arch/p7zip
       +                app-arch/unrar
       +                app-arch/unzip
       +                www-apps/chromedriver-bin
       +        )
       +"
       +
       +src_test() {
       +        local EPYTEST_IGNORE=(
       +                # network sandbox
       +                tests/test_getipaddress.py
       +                tests/test_rss.py
       +                tests/test_urlgrabber.py
       +                tests/test_utils/test_happyeyeballs.py
       +                tests/test_utils/test_internetspeed.py
       +        )
       +        local EPYTEST_DESELECT=(
       +                # network sandbox
       +                'tests/test_cfg.py::TestValidators::test_validate_host'
       +                'tests/test_consistency.py::TestWiki'
       +                'tests/test_newswrapper.py::TestNewsWrapper'
       +                'tests/test_happyeyeballs.py::TestHappyEyeballs'
       +                'tests/test_internetspeed.py::TestInternetSpeed'
       +                # Just plain fails
       +                'tests/test_newsunpack.py::TestPar2Repair::test_basic'
       +                # Does not work with pytest-8.x
       +                'tests/test_functional_api.py'
       +                # Chromedriver tests don't want to behave in portage
       +                'tests/test_functional_config.py::TestBasicPages::test_base_pages'
       +                'tests/test_functional_config.py::TestBasicPages::test_base_submit_pages'
       +                'tests/test_functional_config.py::TestConfigLogin::test_login'
       +                'tests/test_functional_config.py::TestConfigCategories::test_page'
       +                'tests/test_functional_config.py::TestConfigRSS::test_rss_basic_flow'
       +                'tests/test_functional_config.py::TestConfigServers::test_add_and_remove_server'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_basic_rar5'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_zip'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_7zip'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_passworded'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_fully_obfuscated'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_unicode_rar'
       +                'tests/test_functional_misc.py::TestShowLogging::test_showlog'
       +                'tests/test_functional_misc.py::TestQueueRepair::test_queue_repair'
       +                'tests/test_functional_misc.py::TestDaemonizing::test_daemonizing'
       +                'tests/test_functional_sorting.py::TestDownloadSorting'
       +                # Bug https://bugs.gentoo.org/934331 fixed in 4.3.3.
       +                'tests/test_sorting.py::TestSortingSorter'
       +                # cryptography-43, https://bugs.gentoo.org/938453
       +                'tests/test_utils/test_cert_gen.py::TestCertGen::test_generate_key_custom[512-test_key.pem]'
       +        )
       +
       +        # The test suite is prone to being broken by random plugins that happen
       +        # to be installed, so disable autoloading.
       +        local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
       +        # Use PYTEST_PLUGINS instead of args to 'epytest' because the test suite
       +        # calls pytest itself and the args would get lost. To get the list of plugins,
       +        # if stuck, comment out the AUTOLOAD line above, look at the list of loaded
       +        # plugins at the top of the pytest output, then translate those into module names
       +        # by e.g. checking equery f.
       +        local -x PYTEST_PLUGINS=pytest_mock,tavern,tavern._core.pytest,pyfakefs.pytest_plugin,pytest_asyncio.plugin
       +
       +        epytest -s
       +}
       +
       +src_install() {
       +        insinto /usr/share/${PN}
       +        doins -r email icons interfaces locale po sabnzbd scripts tools
       +
       +        exeinto /usr/share/${PN}
       +        doexe SABnzbd.py
       +
       +        python_fix_shebang "${ED}"/usr/share/${PN}
       +        python_optimize "${ED}"/usr/share/${PN}
       +
       +        newinitd "${FILESDIR}"/${PN}-r1.initd ${PN}
       +        newconfd "${FILESDIR}"/${PN}.confd ${PN}
       +
       +        diropts -o ${PN} -g ${PN}
       +        dodir /etc/${PN}
       +        keepdir /var/log/${PN}
       +
       +        insinto "/etc/${PN}"
       +        insopts -m 0600 -o "${PN}" -g "${PN}"
       +        newins "${FILESDIR}"/${PN}-r1.ini ${PN}.ini
       +
       +        dodoc ISSUES.txt README.mkd
       +
       +        systemd_newunit "${FILESDIR}"/sabnzbd_at.service 'sabnzbd@.service'
       +}
       +
       +pkg_postinst() {
       +        if [[ -z "${REPLACING_VERSIONS}" ]]; then
       +                # This is a new installation
       +                einfo "Default directory: /var/lib/${PN}"
       +                einfo
       +                einfo "To add a user to the sabnzbd group so it can edit SABnzbd+ files, run:"
       +                einfo
       +                einfo "    usermod -a -G sabnzbd <user>"
       +                einfo
       +                einfo "By default, SABnzbd will listen on TCP port 8080."
       +        fi
       +
       +        optfeature "7z archive support" app-arch/p7zip
       +        optfeature "rar archive support" app-arch/unrar app-arch/rar
       +        optfeature "zip archive support" app-arch/unzip
       +}
   DIR diff --git a/net-nntp/sabnzbd/sabnzbd-4.4.1_rc1.ebuild b/net-nntp/sabnzbd/sabnzbd-4.4.1_rc1.ebuild
       @@ -0,0 +1,180 @@
       +# Copyright 1999-2024 Gentoo Authors
       +# Distributed under the terms of the GNU General Public License v2
       +
       +EAPI="8"
       +
       +#dev-python/tavern needs py3.13 before incrementing
       +PYTHON_COMPAT=( python3_{10..12} )
       +PYTHON_REQ_USE="sqlite"
       +
       +inherit optfeature python-single-r1 systemd
       +
       +MY_PV="${PV/_alpha/Alpha}"
       +MY_PV="${MY_PV/_beta/Beta}"
       +MY_PV="${MY_PV/_rc/RC}"
       +
       +MY_P="SABnzbd-${MY_PV}"
       +
       +DESCRIPTION="Binary newsgrabber with web-interface"
       +HOMEPAGE="https://sabnzbd.org/"
       +SRC_URI="https://github.com/sabnzbd/sabnzbd/releases/download/${MY_PV}/${MY_P}-src.tar.gz"
       +S="${WORKDIR}/${MY_P}"
       +
       +# Sabnzbd is GPL-2 but bundles software with the following licenses.
       +LICENSE="GPL-2 BSD LGPL-2 MIT BSD-1"
       +SLOT="0"
       +KEYWORDS="~amd64"
       +IUSE="test"
       +RESTRICT="!test? ( test )"
       +REQUIRED_USE="${PYTHON_REQUIRED_USE}"
       +
       +DEPEND="
       +        acct-user/sabnzbd
       +        acct-group/sabnzbd
       +        ${PYTHON_DEPS}
       +        $(python_gen_cond_dep '
       +                >=dev-python/apprise-1.8.0[${PYTHON_USEDEP}]
       +                dev-python/chardet[${PYTHON_USEDEP}]
       +                =dev-python/cheetah3-3.4.0_beta6[${PYTHON_USEDEP}]
       +                dev-python/cherrypy[${PYTHON_USEDEP}]
       +                dev-python/configobj[${PYTHON_USEDEP}]
       +                dev-python/cryptography[${PYTHON_USEDEP}]
       +                >=dev-python/feedparser-6.0.11[${PYTHON_USEDEP}]
       +                >=dev-python/guessit-3.8.0[${PYTHON_USEDEP}]
       +                dev-python/notify2[${PYTHON_USEDEP}]
       +                dev-python/portend[${PYTHON_USEDEP}]
       +                dev-python/puremagic[${PYTHON_USEDEP}]
       +                ~dev-python/sabctools-8.2.5[${PYTHON_USEDEP}]
       +        ')
       +"
       +RDEPEND="
       +        ${DEPEND}
       +        || (
       +                >=app-arch/par2cmdline-0.8
       +                >=app-arch/par2cmdline-turbo-1.1.0
       +        )
       +        net-misc/wget
       +"
       +BDEPEND="
       +        test? (
       +                $(python_gen_cond_dep '
       +                        dev-python/flaky[${PYTHON_USEDEP}]
       +                        >=dev-python/lxml-4.5.0[${PYTHON_USEDEP}]
       +                        >=dev-python/pyfakefs-5.6.0[${PYTHON_USEDEP}]
       +                        dev-python/pytest-asyncio[${PYTHON_USEDEP}]
       +                        dev-python/pytest-httpbin[${PYTHON_USEDEP}]
       +                        dev-python/pytest-httpserver[${PYTHON_USEDEP}]
       +                        dev-python/pytest-mock[${PYTHON_USEDEP}]
       +                        dev-python/pytest[${PYTHON_USEDEP}]
       +                        dev-python/requests[${PYTHON_USEDEP}]
       +                        dev-python/selenium[${PYTHON_USEDEP}]
       +                        dev-python/tavalidate[${PYTHON_USEDEP}]
       +                        >=dev-python/tavern-2[${PYTHON_USEDEP}]
       +                        dev-python/werkzeug[${PYTHON_USEDEP}]
       +                        dev-python/xmltodict[${PYTHON_USEDEP}]
       +                ')
       +                app-arch/p7zip
       +                app-arch/unrar
       +                app-arch/unzip
       +                www-apps/chromedriver-bin
       +        )
       +"
       +
       +src_test() {
       +        local EPYTEST_IGNORE=(
       +                # network sandbox
       +                tests/test_getipaddress.py
       +                tests/test_rss.py
       +                tests/test_urlgrabber.py
       +                tests/test_utils/test_happyeyeballs.py
       +                tests/test_utils/test_internetspeed.py
       +        )
       +        local EPYTEST_DESELECT=(
       +                # network sandbox
       +                'tests/test_cfg.py::TestValidators::test_validate_host'
       +                'tests/test_consistency.py::TestWiki'
       +                'tests/test_newswrapper.py::TestNewsWrapper'
       +                'tests/test_happyeyeballs.py::TestHappyEyeballs'
       +                'tests/test_internetspeed.py::TestInternetSpeed'
       +                # Just plain fails
       +                'tests/test_newsunpack.py::TestPar2Repair::test_basic'
       +                # Does not work with pytest-8.x
       +                'tests/test_functional_api.py'
       +                # Chromedriver tests don't want to behave in portage
       +                'tests/test_functional_config.py::TestBasicPages::test_base_pages'
       +                'tests/test_functional_config.py::TestBasicPages::test_base_submit_pages'
       +                'tests/test_functional_config.py::TestConfigLogin::test_login'
       +                'tests/test_functional_config.py::TestConfigCategories::test_page'
       +                'tests/test_functional_config.py::TestConfigRSS::test_rss_basic_flow'
       +                'tests/test_functional_config.py::TestConfigServers::test_add_and_remove_server'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_basic_rar5'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_zip'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_7zip'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_passworded'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_fully_obfuscated'
       +                'tests/test_functional_downloads.py::TestDownloadFlow::test_download_unicode_rar'
       +                'tests/test_functional_misc.py::TestShowLogging::test_showlog'
       +                'tests/test_functional_misc.py::TestQueueRepair::test_queue_repair'
       +                'tests/test_functional_misc.py::TestDaemonizing::test_daemonizing'
       +                'tests/test_functional_sorting.py::TestDownloadSorting'
       +                # Bug https://bugs.gentoo.org/934331 fixed in 4.3.3.
       +                'tests/test_sorting.py::TestSortingSorter'
       +                # cryptography-43, https://bugs.gentoo.org/938453
       +                'tests/test_utils/test_cert_gen.py::TestCertGen::test_generate_key_custom[512-test_key.pem]'
       +        )
       +
       +        # The test suite is prone to being broken by random plugins that happen
       +        # to be installed, so disable autoloading.
       +        local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
       +        # Use PYTEST_PLUGINS instead of args to 'epytest' because the test suite
       +        # calls pytest itself and the args would get lost. To get the list of plugins,
       +        # if stuck, comment out the AUTOLOAD line above, look at the list of loaded
       +        # plugins at the top of the pytest output, then translate those into module names
       +        # by e.g. checking equery f.
       +        local -x PYTEST_PLUGINS=pytest_mock,tavern,tavern._core.pytest,pyfakefs.pytest_plugin,pytest_asyncio.plugin
       +
       +        epytest -s
       +}
       +
       +src_install() {
       +        insinto /usr/share/${PN}
       +        doins -r email icons interfaces locale po sabnzbd scripts tools
       +
       +        exeinto /usr/share/${PN}
       +        doexe SABnzbd.py
       +
       +        python_fix_shebang "${ED}"/usr/share/${PN}
       +        python_optimize "${ED}"/usr/share/${PN}
       +
       +        newinitd "${FILESDIR}"/${PN}-r1.initd ${PN}
       +        newconfd "${FILESDIR}"/${PN}.confd ${PN}
       +
       +        diropts -o ${PN} -g ${PN}
       +        dodir /etc/${PN}
       +        keepdir /var/log/${PN}
       +
       +        insinto "/etc/${PN}"
       +        insopts -m 0600 -o "${PN}" -g "${PN}"
       +        newins "${FILESDIR}"/${PN}-r1.ini ${PN}.ini
       +
       +        dodoc ISSUES.txt README.mkd
       +
       +        systemd_newunit "${FILESDIR}"/sabnzbd_at.service 'sabnzbd@.service'
       +}
       +
       +pkg_postinst() {
       +        if [[ -z "${REPLACING_VERSIONS}" ]]; then
       +                # This is a new installation
       +                einfo "Default directory: /var/lib/${PN}"
       +                einfo
       +                einfo "To add a user to the sabnzbd group so it can edit SABnzbd+ files, run:"
       +                einfo
       +                einfo "    usermod -a -G sabnzbd <user>"
       +                einfo
       +                einfo "By default, SABnzbd will listen on TCP port 8080."
       +        fi
       +
       +        optfeature "7z archive support" app-arch/p7zip
       +        optfeature "rar archive support" app-arch/unrar app-arch/rar
       +        optfeature "zip archive support" app-arch/unzip
       +}