Running as unit: rb-build-arm64_11-129474.service; invocation ID: 38289ac2e9484cd1a9d3421cad3bc6e8 ==================================================================================== Thu Oct 30 07:06:40 UTC 2025 - running /srv/jenkins/bin/reproducible_build.sh (for job reproducible_builder_arm64_11) on jenkins, called using "codethink04-arm64 codethink03-arm64" as arguments. Thu Oct 30 07:06:40 UTC 2025 - actually running "reproducible_build.sh" (md5sum cc591790ab2c8e13f5e554202b95c89c) as "/tmp/jenkins-script-ys6yjIrR" $ git clone https://salsa.debian.org/qa/jenkins.debian.net.git ; more CONTRIBUTING Thu Oct 30 07:06:40 UTC 2025 - checking /var/lib/jenkins/offline_nodes if codethink04-arm64.debian.net is marked as down. Thu Oct 30 07:06:40 UTC 2025 - checking via ssh if codethink04-arm64.debian.net is up. removed '/tmp/read-only-fs-test-SAQMHs' Thu Oct 30 07:06:41 UTC 2025 - checking /var/lib/jenkins/offline_nodes if codethink03-arm64.debian.net is marked as down. Thu Oct 30 07:06:41 UTC 2025 - checking via ssh if codethink03-arm64.debian.net is up. removed '/tmp/read-only-fs-test-XyZvyw' ok, let's check if pyrate-limiter is building anywhere yet… ok, pyrate-limiter is not building anywhere… UPDATE 1 ============================================================================= Initialising reproducibly build of pyrate-limiter in forky on arm64 on jenkins now. 1st build will be done on codethink04-arm64.debian.net. 2nd build will be done on codethink03-arm64.debian.net. ============================================================================= Thu Oct 30 07:07:04 UTC 2025 I: starting to build pyrate-limiter/forky/arm64 on jenkins on '2025-10-30 07:06' Thu Oct 30 07:07:04 UTC 2025 I: The jenkins build log is/was available at https://jenkins.debian.net/userContent/reproducible/debian/build_service/arm64_11/129474/console.log 1761808024 arm64 forky pyrate-limiter Thu Oct 30 07:07:04 UTC 2025 I: Downloading source for forky/pyrate-limiter=3.9.0-4 --2025-10-30 07:07:04-- http://deb.debian.org/debian/pool/main/p/pyrate-limiter/pyrate-limiter_3.9.0-4.dsc Connecting to 46.16.76.132:3128... connected. Proxy request sent, awaiting response... 200 OK Length: 2575 (2.5K) [text/prs.lines.tag] Saving to: ‘pyrate-limiter_3.9.0-4.dsc’ 0K .. 100% 319M=0s 2025-10-30 07:07:04 (319 MB/s) - ‘pyrate-limiter_3.9.0-4.dsc’ saved [2575/2575] --2025-10-30 07:07:04-- http://deb.debian.org/debian/pool/main/p/pyrate-limiter/pyrate-limiter_3.9.0-4.dsc Connecting to 46.16.76.132:3128... connected. Proxy request sent, awaiting response... 200 OK Length: 2575 (2.5K) [text/prs.lines.tag] Saving to: ‘pyrate-limiter_3.9.0-4.dsc’ 0K .. 100% 319M=0s 2025-10-30 07:07:04 (319 MB/s) - ‘pyrate-limiter_3.9.0-4.dsc’ saved [2575/2575] Thu Oct 30 07:07:04 UTC 2025 I: pyrate-limiter_3.9.0-4.dsc -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA512 Format: 3.0 (quilt) Source: pyrate-limiter Binary: python3-pyrate-limiter Architecture: all Version: 3.9.0-4 Maintainer: Home Assistant Team Uploaders: Edward Betts , Homepage: https://github.com/vutran1710/PyrateLimiter Standards-Version: 4.7.2 Vcs-Browser: https://salsa.debian.org/homeassistant-team/deps/pyrate-limiter Vcs-Git: https://salsa.debian.org/homeassistant-team/deps/pyrate-limiter.git Testsuite: autopkgtest-pkg-pybuild Build-Depends: debhelper-compat (= 13), dh-sequence-python3, dh-sequence-sphinxdoc , pybuild-plugin-pyproject, python3-poetry-core Build-Depends-Indep: furo , python3-all, python3-filelock , python3-myst-parser , python3-psycopg-pool , python3-pytest , python3-pytest-asyncio , python3-pytest-cov , python3-redis , python3-sphinx , python3-sphinx-autodoc-typehints , python3-sphinx-copybutton , python3-sphinxcontrib.apidoc , redis Package-List: python3-pyrate-limiter deb python optional arch=all Checksums-Sha1: 40eb3d7631ba48de6368af593893402be6251b09 316364 pyrate-limiter_3.9.0.orig.tar.gz 3213e8b4eb748a4aedd176e90152ee6df1b72e3b 4448 pyrate-limiter_3.9.0-4.debian.tar.xz Checksums-Sha256: 51f184b93695401dc0c45cfa58bd9cd465df0dd02c3bb2e4c401b561b0005e7f 316364 pyrate-limiter_3.9.0.orig.tar.gz f88503eab27bb687795ef2963664ee6dd02dcb0dbaf812b971c48f39f8c57362 4448 pyrate-limiter_3.9.0-4.debian.tar.xz Files: bf488fb74d240c2236d35d48dcda4dce 316364 pyrate-limiter_3.9.0.orig.tar.gz 77b3654a4762e0653382d34484fb782b 4448 pyrate-limiter_3.9.0-4.debian.tar.xz -----BEGIN PGP SIGNATURE----- iQIzBAEBCgAdFiEE+4rPp4xyYInDitAmlgWhCYxjuSoFAmkAhAcACgkQlgWhCYxj uSrcmw//Z3H2TEpeOwDveh3tBpK7lsxnhRb5bBbn9fWXt5eUhrIG0YfXwECR7OiY tV7z3B5poewG8yy2VuL9192Z9WxX6t7Tmjv9a3Bb3o8mH0IK3+hY5RsN53Z/KfqQ EHi0eohZl16zkIMdXuFsTn7TFUkj5rbZe48SKGWaJ+fL13soEPg5LcBTkqIcaMqB /N6e195NJVcf/btaSKCl1ecKqIZwvwxkQINBNghGreXzc4G4qHKdpgV0jAn741xo 7eSOXqCfPrjs5Si6qqSbUZZp0OFPx+oWBm1FxXmV+tK4hKVEuS0n2jrBKf+oq5BL 32+l6mLLQBYjz55PoNu5zdfVeoPK4OhaFcKqQcKJzDkbW+uUu5KZAmCr83hZmDRL c06UO6/9mzV73RByQCY7bt70iIq+8ppfafBR7XzfuZT+IDG3vpYGD3Dj4/eDyLoi QzO4m/Z4/5eqa8vKNLtNMJJ5KEPs6DVs8Z+DjFgW5IAyJIahUwJi31Qd9HuGwCVz ahPLbhdU99cSU/2HaZevkK4rkuRjsUKOR6gPS3w+BXBBT8p6FDVy9poUn/L7d+Vd dCzoQ9pFk0w478ELx7LPtcpAOWAVoSQhksoVNAJGAtNmrZSRcj4vzAo3PW9fm/Fx DPzacXqiT77oGxEAaQ+yECYCZm8zVIOu8WibAj6Bph6rv3r7zdE= =37ps -----END PGP SIGNATURE----- Thu Oct 30 07:07:04 UTC 2025 I: Checking whether the package is not for us Thu Oct 30 07:07:04 UTC 2025 I: Starting 1st build on remote node codethink04-arm64.debian.net. Thu Oct 30 07:07:04 UTC 2025 I: Preparing to do remote build '1' on codethink04-arm64.debian.net. Thu Oct 30 07:07:04 UTC 2025 - checking /var/lib/jenkins/offline_nodes if codethink04-arm64.debian.net is marked as down. Thu Oct 30 07:07:04 UTC 2025 - checking via ssh if codethink04-arm64.debian.net is up. removed '/tmp/read-only-fs-test-loDfMX' ==================================================================================== Thu Oct 30 07:07:06 UTC 2025 - running /srv/jenkins/bin/reproducible_build.sh (for job /srv/jenkins/bin/reproducible_build.sh) on codethink04-arm64, called using "1 pyrate-limiter forky /srv/reproducible-results/rbuild-debian/r-b-build.3thU9jMr 3.9.0-4" as arguments. Thu Oct 30 07:07:06 UTC 2025 - actually running "reproducible_build.sh" (md5sum cc591790ab2c8e13f5e554202b95c89c) as "/tmp/jenkins-script-OtuBSwAS" $ git clone https://salsa.debian.org/qa/jenkins.debian.net.git ; more CONTRIBUTING Thu Oct 30 07:07:06 UTC 2025 I: Downloading source for forky/pyrate-limiter=3.9.0-4 Reading package lists... NOTICE: 'pyrate-limiter' packaging is maintained in the 'Git' version control system at: https://salsa.debian.org/homeassistant-team/deps/pyrate-limiter.git Please use: git clone https://salsa.debian.org/homeassistant-team/deps/pyrate-limiter.git to retrieve the latest (possibly unreleased) updates to the package. Need to get 323 kB of source archives. Get:1 http://deb.debian.org/debian forky/main pyrate-limiter 3.9.0-4 (dsc) [2575 B] Get:2 http://deb.debian.org/debian forky/main pyrate-limiter 3.9.0-4 (tar) [316 kB] Get:3 http://deb.debian.org/debian forky/main pyrate-limiter 3.9.0-4 (diff) [4448 B] Fetched 323 kB in 0s (6441 kB/s) Download complete and in download only mode Reading package lists... NOTICE: 'pyrate-limiter' packaging is maintained in the 'Git' version control system at: https://salsa.debian.org/homeassistant-team/deps/pyrate-limiter.git Please use: git clone https://salsa.debian.org/homeassistant-team/deps/pyrate-limiter.git to retrieve the latest (possibly unreleased) updates to the package. Need to get 323 kB of source archives. Get:1 http://deb.debian.org/debian forky/main pyrate-limiter 3.9.0-4 (dsc) [2575 B] Get:2 http://deb.debian.org/debian forky/main pyrate-limiter 3.9.0-4 (tar) [316 kB] Get:3 http://deb.debian.org/debian forky/main pyrate-limiter 3.9.0-4 (diff) [4448 B] Fetched 323 kB in 0s (6441 kB/s) Download complete and in download only mode ============================================================================= Building pyrate-limiter in forky on arm64 on codethink04-arm64 now. Date: Thu Oct 30 07:07:06 GMT 2025 Date UTC: Thu Oct 30 07:07:06 UTC 2025 ============================================================================= W: /root/.pbuilderrc does not exist I: Logging to b1/build.log I: pbuilder: network access will be disabled during build I: Current time: Wed Oct 29 19:07:06 -12 2025 I: pbuilder-time-stamp: 1761808026 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/forky-reproducible-base.tgz] I: copying local configuration W: --override-config is not set; not updating apt.conf Read the manpage for details. I: mounting /proc filesystem I: mounting /sys filesystem I: creating /{dev,run}/shm I: mounting /dev/pts filesystem I: redirecting /dev/ptmx to /dev/pts/ptmx I: policy-rc.d already exists I: Copying source file I: copying [pyrate-limiter_3.9.0-4.dsc] I: copying [./pyrate-limiter_3.9.0.orig.tar.gz] I: copying [./pyrate-limiter_3.9.0-4.debian.tar.xz] I: Extracting source dpkg-source: warning: cannot verify inline signature for ./pyrate-limiter_3.9.0-4.dsc: no acceptable signature found dpkg-source: info: extracting pyrate-limiter in pyrate-limiter-3.9.0 dpkg-source: info: unpacking pyrate-limiter_3.9.0.orig.tar.gz dpkg-source: info: unpacking pyrate-limiter_3.9.0-4.debian.tar.xz dpkg-source: info: using patch list from debian/patches/series dpkg-source: info: applying 0001-read-version-from-pyproject.toml.patch dpkg-source: info: applying 0002-remove-privacy-breach-images.patch I: using fakeroot in build. I: Installing the build-deps I: user script /srv/workspace/pbuilder/2056616/tmp/hooks/D02_print_environment starting I: set BUILDDIR='/build/reproducible-path' BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' BUILDUSERNAME='pbuilder1' BUILD_ARCH='arm64' DEBIAN_FRONTEND='noninteractive' DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 ' DISTRIBUTION='forky' HOME='/root' HOST_ARCH='arm64' IFS=' ' INVOCATION_ID='a3d86fa39cc94a49b4aa60ffd974c0de' LANG='C' LANGUAGE='en_US:en' LC_ALL='C' MAIL='/var/mail/root' OPTIND='1' PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' PBCURRENTCOMMANDLINEOPERATION='build' PBUILDER_OPERATION='build' PBUILDER_PKGDATADIR='/usr/share/pbuilder' PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' PBUILDER_SYSCONFDIR='/etc' PPID='2056616' PS1='# ' PS2='> ' PS4='+ ' PWD='/' SHELL='/bin/bash' SHLVL='2' SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.3thU9jMr/pbuilderrc_y1tg --distribution forky --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/forky-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.3thU9jMr/b1 --logfile b1/build.log pyrate-limiter_3.9.0-4.dsc' SUDO_GID='109' SUDO_HOME='/var/lib/jenkins' SUDO_UID='104' SUDO_USER='jenkins' TERM='unknown' TZ='/usr/share/zoneinfo/Etc/GMT+12' USER='root' _='/usr/bin/systemd-run' http_proxy='http://192.168.101.4:3128' I: uname -a Linux codethink04-arm64 6.12.48+deb13-cloud-arm64 #1 SMP Debian 6.12.48-1 (2025-09-20) aarch64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 Aug 10 12:30 /bin -> usr/bin I: user script /srv/workspace/pbuilder/2056616/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy Version: 0.invalid.0 Architecture: arm64 Maintainer: Debian Pbuilder Team Description: Dummy package to satisfy dependencies with aptitude - created by pbuilder This package was created automatically by pbuilder to satisfy the build-dependencies of the package being currently built. Depends: debhelper-compat (= 13), dh-sequence-python3, dh-sequence-sphinxdoc, pybuild-plugin-pyproject, python3-poetry-core, furo, python3-all, python3-filelock, python3-myst-parser, python3-psycopg-pool, python3-pytest, python3-pytest-asyncio, python3-pytest-cov, python3-redis, python3-sphinx, python3-sphinx-autodoc-typehints, python3-sphinx-copybutton, python3-sphinxcontrib.apidoc, redis dpkg-deb: building package 'pbuilder-satisfydepends-dummy' in '/tmp/satisfydepends-aptitude/pbuilder-satisfydepends-dummy.deb'. Selecting previously unselected package pbuilder-satisfydepends-dummy. (Reading database ... 19971 files and directories currently installed.) Preparing to unpack .../pbuilder-satisfydepends-dummy.deb ... Unpacking pbuilder-satisfydepends-dummy (0.invalid.0) ... dpkg: pbuilder-satisfydepends-dummy: dependency problems, but configuring anyway as you requested: pbuilder-satisfydepends-dummy depends on debhelper-compat (= 13); however: Package debhelper-compat is not installed. pbuilder-satisfydepends-dummy depends on dh-sequence-python3; however: Package dh-sequence-python3 is not installed. pbuilder-satisfydepends-dummy depends on dh-sequence-sphinxdoc; however: Package dh-sequence-sphinxdoc is not installed. pbuilder-satisfydepends-dummy depends on pybuild-plugin-pyproject; however: Package pybuild-plugin-pyproject is not installed. pbuilder-satisfydepends-dummy depends on python3-poetry-core; however: Package python3-poetry-core is not installed. pbuilder-satisfydepends-dummy depends on furo; however: Package furo is not installed. pbuilder-satisfydepends-dummy depends on python3-all; however: Package python3-all is not installed. pbuilder-satisfydepends-dummy depends on python3-filelock; however: Package python3-filelock is not installed. pbuilder-satisfydepends-dummy depends on python3-myst-parser; however: Package python3-myst-parser is not installed. pbuilder-satisfydepends-dummy depends on python3-psycopg-pool; however: Package python3-psycopg-pool is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest; however: Package python3-pytest is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest-asyncio; however: Package python3-pytest-asyncio is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest-cov; however: Package python3-pytest-cov is not installed. pbuilder-satisfydepends-dummy depends on python3-redis; however: Package python3-redis is not installed. pbuilder-satisfydepends-dummy depends on python3-sphinx; however: Package python3-sphinx is not installed. pbuilder-satisfydepends-dummy depends on python3-sphinx-autodoc-typehints; however: Package python3-sphinx-autodoc-typehints is not installed. pbuilder-satisfydepends-dummy depends on python3-sphinx-copybutton; however: Package python3-sphinx-copybutton is not installed. pbuilder-satisfydepends-dummy depends on python3-sphinxcontrib.apidoc; however: Package python3-sphinxcontrib.apidoc is not installed. pbuilder-satisfydepends-dummy depends on redis; however: Package redis is not installed. Setting up pbuilder-satisfydepends-dummy (0.invalid.0) ... Reading package lists... Building dependency tree... Reading state information... Initializing package states... Writing extended state information... Building tag database... pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) The following NEW packages will be installed: autoconf{a} automake{a} autopoint{a} autotools-dev{a} bsdextrautils{a} ca-certificates{a} debhelper{a} dh-autoreconf{a} dh-python{a} dh-strip-nondeterminism{a} docutils-common{a} dwz{a} file{a} furo{a} gettext{a} gettext-base{a} groff-base{a} intltool-debian{a} libarchive-zip-perl{a} libcom-err2{a} libdebhelper-perl{a} libelf1t64{a} libexpat1{a} libffi8{a} libfile-stripnondeterminism-perl{a} libgssapi-krb5-2{a} libjemalloc2{a} libjs-jquery{a} libjs-jquery-hotkeys{a} libjs-jquery-isonscreen{a} libjs-jquery-metadata{a} libjs-jquery-tablesorter{a} libjs-jquery-throttle-debounce{a} libjs-sphinxdoc{a} libjson-perl{a} libk5crypto3{a} libkeyutils1{a} libkrb5-3{a} libkrb5support0{a} libldap2{a} liblzf1{a} libmagic-mgc{a} libmagic1t64{a} libpipeline1{a} libpq5{a} libpython3-stdlib{a} libpython3.13-minimal{a} libpython3.13-stdlib{a} libreadline8t64{a} libsasl2-2{a} libsasl2-modules-db{a} libtool{a} libuchardet0{a} libunistring5{a} libxml2-16{a} libyaml-0-2{a} m4{a} man-db{a} media-types{a} netbase{a} openssl{a} po-debconf{a} pybuild-plugin-pyproject{a} python-babel-localedata{a} python3{a} python3-accessible-pygments{a} python3-alabaster{a} python3-all{a} python3-async-generator{a} python3-autocommand{a} python3-babel{a} python3-bs4{a} python3-build{a} python3-certifi{a} python3-chardet{a} python3-charset-normalizer{a} python3-coverage{a} python3-defusedxml{a} python3-docutils{a} python3-filelock{a} python3-idna{a} python3-imagesize{a} python3-inflect{a} python3-iniconfig{a} python3-installer{a} python3-jaraco.context{a} python3-jaraco.functools{a} python3-jaraco.text{a} python3-jinja2{a} python3-linkify-it{a} python3-markdown-it{a} python3-markupsafe{a} python3-mdit-py-plugins{a} python3-mdurl{a} python3-minimal{a} python3-more-itertools{a} python3-myst-parser{a} python3-packaging{a} python3-pbr{a} python3-pkg-resources{a} python3-pluggy{a} python3-poetry-core{a} python3-psycopg{a} python3-psycopg-pool{a} python3-pygments{a} python3-pyproject-hooks{a} python3-pytest{a} python3-pytest-asyncio{a} python3-pytest-cov{a} python3-redis{a} python3-requests{a} python3-roman-numerals{a} python3-setuptools{a} python3-snowballstemmer{a} python3-soupsieve{a} python3-sphinx{a} python3-sphinx-autodoc-typehints{a} python3-sphinx-copybutton{a} python3-sphinxcontrib.apidoc{a} python3-typeguard{a} python3-typing-extensions{a} python3-uc-micro{a} python3-urllib3{a} python3-wheel{a} python3-yaml{a} python3-zipp{a} python3.13{a} python3.13-minimal{a} readline-common{a} redis{a} redis-server{a} redis-tools{a} sensible-utils{a} sgml-base{a} sphinx-basic-ng{a} sphinx-common{a} tzdata{a} xml-core{a} The following packages are RECOMMENDED but will NOT be installed: curl javascript-common krb5-locales libarchive-cpio-perl libjson-xs-perl libldap-common libltdl-dev libmail-sendmail-perl libpaper-utils libsasl2-modules lynx python3-lxml python3-pil python3-psycopg-c wget 0 packages upgraded, 138 newly installed, 0 to remove and 0 not upgraded. Need to get 36.3 MB of archives. After unpacking 159 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian forky/main arm64 libexpat1 arm64 2.7.3-1 [96.5 kB] Get: 2 http://deb.debian.org/debian forky/main arm64 libpython3.13-minimal arm64 3.13.9-1 [858 kB] Get: 3 http://deb.debian.org/debian forky/main arm64 python3.13-minimal arm64 3.13.9-1 [2061 kB] Get: 4 http://deb.debian.org/debian forky/main arm64 python3-minimal arm64 3.13.7-1 [27.2 kB] Get: 5 http://deb.debian.org/debian forky/main arm64 media-types all 14.0.0 [30.8 kB] Get: 6 http://deb.debian.org/debian forky/main arm64 netbase all 6.5 [12.4 kB] Get: 7 http://deb.debian.org/debian forky/main arm64 tzdata all 2025b-5 [260 kB] Get: 8 http://deb.debian.org/debian forky/main arm64 libffi8 arm64 3.5.2-2 [21.5 kB] Get: 9 http://deb.debian.org/debian forky/main arm64 readline-common all 8.3-3 [74.8 kB] Get: 10 http://deb.debian.org/debian forky/main arm64 libreadline8t64 arm64 8.3-3 [169 kB] Get: 11 http://deb.debian.org/debian forky/main arm64 libpython3.13-stdlib arm64 3.13.9-1 [1900 kB] Get: 12 http://deb.debian.org/debian forky/main arm64 python3.13 arm64 3.13.9-1 [764 kB] Get: 13 http://deb.debian.org/debian forky/main arm64 libpython3-stdlib arm64 3.13.7-1 [10.2 kB] Get: 14 http://deb.debian.org/debian forky/main arm64 python3 arm64 3.13.7-1 [28.3 kB] Get: 15 http://deb.debian.org/debian forky/main arm64 libjemalloc2 arm64 5.3.0-3 [216 kB] Get: 16 http://deb.debian.org/debian forky/main arm64 liblzf1 arm64 3.6-4+b3 [10.1 kB] Get: 17 http://deb.debian.org/debian forky/main arm64 redis-tools arm64 5:8.0.4-1 [1142 kB] Get: 18 http://deb.debian.org/debian forky/main arm64 redis-server arm64 5:8.0.4-1 [66.9 kB] Get: 19 http://deb.debian.org/debian forky/main arm64 sensible-utils all 0.0.26 [27.0 kB] Get: 20 http://deb.debian.org/debian forky/main arm64 openssl arm64 3.5.4-1 [1457 kB] Get: 21 http://deb.debian.org/debian forky/main arm64 ca-certificates all 20250419 [162 kB] Get: 22 http://deb.debian.org/debian forky/main arm64 libmagic-mgc arm64 1:5.46-5 [338 kB] Get: 23 http://deb.debian.org/debian forky/main arm64 libmagic1t64 arm64 1:5.46-5 [103 kB] Get: 24 http://deb.debian.org/debian forky/main arm64 file arm64 1:5.46-5 [43.7 kB] Get: 25 http://deb.debian.org/debian forky/main arm64 gettext-base arm64 0.23.1-2+b1 [241 kB] Get: 26 http://deb.debian.org/debian forky/main arm64 libuchardet0 arm64 0.0.8-2 [69.0 kB] Get: 27 http://deb.debian.org/debian forky/main arm64 groff-base arm64 1.23.0-9 [1130 kB] Get: 28 http://deb.debian.org/debian forky/main arm64 bsdextrautils arm64 2.41.2-4 [97.3 kB] Get: 29 http://deb.debian.org/debian forky/main arm64 libpipeline1 arm64 1.5.8-1 [40.2 kB] Get: 30 http://deb.debian.org/debian forky/main arm64 man-db arm64 2.13.1-1 [1453 kB] Get: 31 http://deb.debian.org/debian forky/main arm64 m4 arm64 1.4.20-2 [315 kB] Get: 32 http://deb.debian.org/debian forky/main arm64 autoconf all 2.72-3.1 [494 kB] Get: 33 http://deb.debian.org/debian forky/main arm64 autotools-dev all 20240727.1 [60.2 kB] Get: 34 http://deb.debian.org/debian forky/main arm64 automake all 1:1.18.1-2 [877 kB] Get: 35 http://deb.debian.org/debian forky/main arm64 autopoint all 0.23.1-2 [770 kB] Get: 36 http://deb.debian.org/debian forky/main arm64 libdebhelper-perl all 13.28 [92.4 kB] Get: 37 http://deb.debian.org/debian forky/main arm64 libtool all 2.5.4-7 [540 kB] Get: 38 http://deb.debian.org/debian forky/main arm64 dh-autoreconf all 21 [12.2 kB] Get: 39 http://deb.debian.org/debian forky/main arm64 libarchive-zip-perl all 1.68-1 [104 kB] Get: 40 http://deb.debian.org/debian forky/main arm64 libfile-stripnondeterminism-perl all 1.15.0-1 [19.9 kB] Get: 41 http://deb.debian.org/debian forky/main arm64 dh-strip-nondeterminism all 1.15.0-1 [8812 B] Get: 42 http://deb.debian.org/debian forky/main arm64 libelf1t64 arm64 0.193-3 [189 kB] Get: 43 http://deb.debian.org/debian forky/main arm64 dwz arm64 0.16-2 [100 kB] Get: 44 http://deb.debian.org/debian forky/main arm64 libunistring5 arm64 1.3-2 [453 kB] Get: 45 http://deb.debian.org/debian forky/main arm64 libxml2-16 arm64 2.14.6+dfsg-0.1 [601 kB] Get: 46 http://deb.debian.org/debian forky/main arm64 gettext arm64 0.23.1-2+b1 [1612 kB] Get: 47 http://deb.debian.org/debian forky/main arm64 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get: 48 http://deb.debian.org/debian forky/main arm64 po-debconf all 1.0.21+nmu1 [248 kB] Get: 49 http://deb.debian.org/debian forky/main arm64 debhelper all 13.28 [941 kB] Get: 50 http://deb.debian.org/debian forky/main arm64 dh-python all 6.20250414 [116 kB] Get: 51 http://deb.debian.org/debian forky/main arm64 sgml-base all 1.31+nmu1 [10.9 kB] Get: 52 http://deb.debian.org/debian forky/main arm64 xml-core all 0.19 [20.1 kB] Get: 53 http://deb.debian.org/debian forky/main arm64 docutils-common all 0.22.2+dfsg-2 [128 kB] Get: 54 http://deb.debian.org/debian forky/main arm64 python3-pygments all 2.18.0+dfsg-2 [836 kB] Get: 55 http://deb.debian.org/debian forky/main arm64 python3-accessible-pygments all 0.0.5-2 [1306 kB] Get: 56 http://deb.debian.org/debian forky/main arm64 python3-soupsieve all 2.7-2 [39.0 kB] Get: 57 http://deb.debian.org/debian forky/main arm64 python3-typing-extensions all 4.15.0-1 [92.4 kB] Get: 58 http://deb.debian.org/debian forky/main arm64 python3-bs4 all 4.14.2-1 [116 kB] Get: 59 http://deb.debian.org/debian forky/main arm64 python3-defusedxml all 0.7.1-3 [43.4 kB] Get: 60 http://deb.debian.org/debian forky/main arm64 libjs-sphinxdoc all 8.2.3-8 [27.6 kB] Get: 61 http://deb.debian.org/debian forky/main arm64 libjson-perl all 4.10000-1 [87.5 kB] Get: 62 http://deb.debian.org/debian forky/main arm64 sphinx-common all 8.2.3-8 [619 kB] Get: 63 http://deb.debian.org/debian forky/main arm64 python3-alabaster all 0.7.16-0.1 [27.9 kB] Get: 64 http://deb.debian.org/debian forky/main arm64 python-babel-localedata all 2.17.0-1 [6050 kB] Get: 65 http://deb.debian.org/debian forky/main arm64 python3-babel all 2.17.0-1 [117 kB] Get: 66 http://deb.debian.org/debian forky/main arm64 python3-roman-numerals all 3.1.0-2 [8740 B] Get: 67 http://deb.debian.org/debian forky/main arm64 python3-docutils all 0.22.2+dfsg-2 [432 kB] Get: 68 http://deb.debian.org/debian forky/main arm64 python3-imagesize all 1.4.1-1 [6688 B] Get: 69 http://deb.debian.org/debian forky/main arm64 python3-markupsafe arm64 3.0.3-1 [13.6 kB] Get: 70 http://deb.debian.org/debian forky/main arm64 python3-jinja2 all 3.1.6-1 [107 kB] Get: 71 http://deb.debian.org/debian forky/main arm64 python3-packaging all 25.0-1 [56.6 kB] Get: 72 http://deb.debian.org/debian forky/main arm64 python3-certifi all 2025.1.31+ds-1 [9652 B] Get: 73 http://deb.debian.org/debian forky/main arm64 python3-charset-normalizer arm64 3.4.3-1 [123 kB] Get: 74 http://deb.debian.org/debian forky/main arm64 python3-idna all 3.10-1 [42.0 kB] Get: 75 http://deb.debian.org/debian forky/main arm64 python3-urllib3 all 2.5.0-1 [116 kB] Get: 76 http://deb.debian.org/debian forky/main arm64 python3-chardet all 5.2.0+dfsg-2 [108 kB] Get: 77 http://deb.debian.org/debian forky/main arm64 python3-requests all 2.32.5+dfsg-1 [72.4 kB] Get: 78 http://deb.debian.org/debian forky/main arm64 python3-snowballstemmer all 3.0.1-1 [63.5 kB] Get: 79 http://deb.debian.org/debian forky/main arm64 python3-sphinx all 8.2.3-8 [477 kB] Get: 80 http://deb.debian.org/debian forky/main arm64 sphinx-basic-ng all 1.0.0~beta2-1 [13.0 kB] Get: 81 http://deb.debian.org/debian forky/main arm64 furo all 2025.09.25+dfsg-1 [62.0 kB] Get: 82 http://deb.debian.org/debian forky/main arm64 libcom-err2 arm64 1.47.2-3+b3 [24.9 kB] Get: 83 http://deb.debian.org/debian forky/main arm64 libkrb5support0 arm64 1.21.3-5 [32.4 kB] Get: 84 http://deb.debian.org/debian forky/main arm64 libk5crypto3 arm64 1.21.3-5 [81.2 kB] Get: 85 http://deb.debian.org/debian forky/main arm64 libkeyutils1 arm64 1.6.3-6 [9716 B] Get: 86 http://deb.debian.org/debian forky/main arm64 libkrb5-3 arm64 1.21.3-5 [308 kB] Get: 87 http://deb.debian.org/debian forky/main arm64 libgssapi-krb5-2 arm64 1.21.3-5 [127 kB] Get: 88 http://deb.debian.org/debian forky/main arm64 libjs-jquery all 3.7.1+dfsg+~3.5.33-1 [319 kB] Get: 89 http://deb.debian.org/debian forky/main arm64 libjs-jquery-hotkeys all 0.2.0-1 [12.6 kB] Get: 90 http://deb.debian.org/debian forky/main arm64 libjs-jquery-isonscreen all 1.2.0-1.1 [3196 B] Get: 91 http://deb.debian.org/debian forky/main arm64 libjs-jquery-metadata all 12-4 [6532 B] Get: 92 http://deb.debian.org/debian forky/main arm64 libjs-jquery-tablesorter all 1:2.31.3+dfsg1-4 [184 kB] Get: 93 http://deb.debian.org/debian forky/main arm64 libjs-jquery-throttle-debounce all 1.1+dfsg.1-2 [12.2 kB] Get: 94 http://deb.debian.org/debian forky/main arm64 libsasl2-modules-db arm64 2.1.28+dfsg1-10 [19.8 kB] Get: 95 http://deb.debian.org/debian forky/main arm64 libsasl2-2 arm64 2.1.28+dfsg1-10 [55.0 kB] Get: 96 http://deb.debian.org/debian forky/main arm64 libldap2 arm64 2.6.10+dfsg-1 [179 kB] Get: 97 http://deb.debian.org/debian forky/main arm64 libpq5 arm64 18.0-1 [240 kB] Get: 98 http://deb.debian.org/debian forky/main arm64 libyaml-0-2 arm64 0.2.5-2 [49.2 kB] Get: 99 http://deb.debian.org/debian forky/main arm64 python3-pyproject-hooks all 1.2.0-1 [11.7 kB] Get: 100 http://deb.debian.org/debian forky/main arm64 python3-wheel all 0.46.1-2 [21.7 kB] Get: 101 http://deb.debian.org/debian forky/main arm64 python3-build all 1.2.2-4 [36.2 kB] Get: 102 http://deb.debian.org/debian forky/main arm64 python3-installer all 0.7.0+dfsg1-3 [18.6 kB] Get: 103 http://deb.debian.org/debian forky/main arm64 pybuild-plugin-pyproject all 6.20250414 [11.8 kB] Get: 104 http://deb.debian.org/debian forky/main arm64 python3-all arm64 3.13.7-1 [1044 B] Get: 105 http://deb.debian.org/debian forky/main arm64 python3-async-generator all 1.10-6 [17.6 kB] Get: 106 http://deb.debian.org/debian forky/main arm64 python3-autocommand all 2.2.2-3 [13.6 kB] Get: 107 http://deb.debian.org/debian forky/main arm64 python3-coverage arm64 7.8.2+dfsg1-1 [182 kB] Get: 108 http://deb.debian.org/debian forky/main arm64 python3-filelock all 3.20.0-1 [12.6 kB] Get: 109 http://deb.debian.org/debian forky/main arm64 python3-more-itertools all 10.8.0-1 [71.7 kB] Get: 110 http://deb.debian.org/debian forky/main arm64 python3-typeguard all 4.4.4-1 [37.1 kB] Get: 111 http://deb.debian.org/debian forky/main arm64 python3-inflect all 7.5.0-1 [33.0 kB] Get: 112 http://deb.debian.org/debian forky/main arm64 python3-iniconfig all 2.1.0-1 [7432 B] Get: 113 http://deb.debian.org/debian forky/main arm64 python3-jaraco.functools all 4.1.0-1 [12.0 kB] Get: 114 http://deb.debian.org/debian forky/main arm64 python3-pkg-resources all 78.1.1-0.1 [224 kB] Get: 115 http://deb.debian.org/debian forky/main arm64 python3-jaraco.text all 4.0.0-1 [11.4 kB] Get: 116 http://deb.debian.org/debian forky/main arm64 python3-zipp all 3.23.0-1 [11.0 kB] Get: 117 http://deb.debian.org/debian forky/main arm64 python3-setuptools all 78.1.1-0.1 [738 kB] Get: 118 http://deb.debian.org/debian forky/main arm64 python3-jaraco.context all 6.0.1-1 [8276 B] Get: 119 http://deb.debian.org/debian forky/main arm64 python3-uc-micro all 1.0.3-1 [5744 B] Get: 120 http://deb.debian.org/debian forky/main arm64 python3-linkify-it all 2.0.3-1 [18.7 kB] Get: 121 http://deb.debian.org/debian forky/main arm64 python3-mdurl all 0.1.2-1 [9444 B] Get: 122 http://deb.debian.org/debian forky/main arm64 python3-markdown-it all 3.0.0-3 [59.5 kB] Get: 123 http://deb.debian.org/debian forky/main arm64 python3-mdit-py-plugins all 0.5.0-1 [33.4 kB] Get: 124 http://deb.debian.org/debian forky/main arm64 python3-yaml arm64 6.0.2-2 [122 kB] Get: 125 http://deb.debian.org/debian forky/main arm64 python3-myst-parser all 4.0.1-1 [78.8 kB] Get: 126 http://deb.debian.org/debian forky/main arm64 python3-pbr all 7.0.1-3 [59.1 kB] Get: 127 http://deb.debian.org/debian forky/main arm64 python3-pluggy all 1.6.0-1 [27.1 kB] Get: 128 http://deb.debian.org/debian forky/main arm64 python3-poetry-core all 2.2.1-2 [234 kB] Get: 129 http://deb.debian.org/debian forky/main arm64 python3-psycopg all 3.2.10-2 [127 kB] Get: 130 http://deb.debian.org/debian forky/main arm64 python3-psycopg-pool all 3.2.10-2 [23.9 kB] Get: 131 http://deb.debian.org/debian forky/main arm64 python3-pytest all 8.4.2-1 [266 kB] Get: 132 http://deb.debian.org/debian forky/main arm64 python3-pytest-asyncio all 1.2.0-1 [13.3 kB] Get: 133 http://deb.debian.org/debian forky/main arm64 python3-pytest-cov all 5.0.0-1 [26.8 kB] Get: 134 http://deb.debian.org/debian forky/main arm64 python3-redis all 6.4.0-1 [244 kB] Get: 135 http://deb.debian.org/debian forky/main arm64 python3-sphinx-autodoc-typehints all 3.2.0-2 [22.0 kB] Get: 136 http://deb.debian.org/debian forky/main arm64 python3-sphinx-copybutton all 0.5.2-3 [18.1 kB] Get: 137 http://deb.debian.org/debian forky/main arm64 python3-sphinxcontrib.apidoc all 0.6.0-2 [7980 B] Get: 138 http://deb.debian.org/debian forky/main arm64 redis all 5:8.0.4-1 [17.6 kB] Fetched 36.3 MB in 1s (49.2 MB/s) Preconfiguring packages ... Selecting previously unselected package libexpat1:arm64. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19971 files and directories currently installed.) Preparing to unpack .../libexpat1_2.7.3-1_arm64.deb ... Unpacking libexpat1:arm64 (2.7.3-1) ... Selecting previously unselected package libpython3.13-minimal:arm64. Preparing to unpack .../libpython3.13-minimal_3.13.9-1_arm64.deb ... Unpacking libpython3.13-minimal:arm64 (3.13.9-1) ... Selecting previously unselected package python3.13-minimal. Preparing to unpack .../python3.13-minimal_3.13.9-1_arm64.deb ... Unpacking python3.13-minimal (3.13.9-1) ... Setting up libpython3.13-minimal:arm64 (3.13.9-1) ... Setting up libexpat1:arm64 (2.7.3-1) ... Setting up python3.13-minimal (3.13.9-1) ... Selecting previously unselected package python3-minimal. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 20305 files and directories currently installed.) Preparing to unpack .../0-python3-minimal_3.13.7-1_arm64.deb ... Unpacking python3-minimal (3.13.7-1) ... Selecting previously unselected package media-types. Preparing to unpack .../1-media-types_14.0.0_all.deb ... Unpacking media-types (14.0.0) ... Selecting previously unselected package netbase. Preparing to unpack .../2-netbase_6.5_all.deb ... Unpacking netbase (6.5) ... Selecting previously unselected package tzdata. Preparing to unpack .../3-tzdata_2025b-5_all.deb ... Unpacking tzdata (2025b-5) ... Selecting previously unselected package libffi8:arm64. Preparing to unpack .../4-libffi8_3.5.2-2_arm64.deb ... Unpacking libffi8:arm64 (3.5.2-2) ... Selecting previously unselected package readline-common. Preparing to unpack .../5-readline-common_8.3-3_all.deb ... Unpacking readline-common (8.3-3) ... Selecting previously unselected package libreadline8t64:arm64. Preparing to unpack .../6-libreadline8t64_8.3-3_arm64.deb ... Adding 'diversion of /lib/aarch64-linux-gnu/libhistory.so.8 to /lib/aarch64-linux-gnu/libhistory.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/aarch64-linux-gnu/libhistory.so.8.2 to /lib/aarch64-linux-gnu/libhistory.so.8.2.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/aarch64-linux-gnu/libreadline.so.8 to /lib/aarch64-linux-gnu/libreadline.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/aarch64-linux-gnu/libreadline.so.8.2 to /lib/aarch64-linux-gnu/libreadline.so.8.2.usr-is-merged by libreadline8t64' Unpacking libreadline8t64:arm64 (8.3-3) ... Selecting previously unselected package libpython3.13-stdlib:arm64. Preparing to unpack .../7-libpython3.13-stdlib_3.13.9-1_arm64.deb ... Unpacking libpython3.13-stdlib:arm64 (3.13.9-1) ... Selecting previously unselected package python3.13. Preparing to unpack .../8-python3.13_3.13.9-1_arm64.deb ... Unpacking python3.13 (3.13.9-1) ... Selecting previously unselected package libpython3-stdlib:arm64. Preparing to unpack .../9-libpython3-stdlib_3.13.7-1_arm64.deb ... Unpacking libpython3-stdlib:arm64 (3.13.7-1) ... Setting up python3-minimal (3.13.7-1) ... Selecting previously unselected package python3. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 21320 files and directories currently installed.) Preparing to unpack .../000-python3_3.13.7-1_arm64.deb ... Unpacking python3 (3.13.7-1) ... Selecting previously unselected package libjemalloc2:arm64. Preparing to unpack .../001-libjemalloc2_5.3.0-3_arm64.deb ... Unpacking libjemalloc2:arm64 (5.3.0-3) ... Selecting previously unselected package liblzf1:arm64. Preparing to unpack .../002-liblzf1_3.6-4+b3_arm64.deb ... Unpacking liblzf1:arm64 (3.6-4+b3) ... Selecting previously unselected package redis-tools. Preparing to unpack .../003-redis-tools_5%3a8.0.4-1_arm64.deb ... Unpacking redis-tools (5:8.0.4-1) ... Selecting previously unselected package redis-server. Preparing to unpack .../004-redis-server_5%3a8.0.4-1_arm64.deb ... Unpacking redis-server (5:8.0.4-1) ... Selecting previously unselected package sensible-utils. Preparing to unpack .../005-sensible-utils_0.0.26_all.deb ... Unpacking sensible-utils (0.0.26) ... Selecting previously unselected package openssl. Preparing to unpack .../006-openssl_3.5.4-1_arm64.deb ... Unpacking openssl (3.5.4-1) ... Selecting previously unselected package ca-certificates. Preparing to unpack .../007-ca-certificates_20250419_all.deb ... Unpacking ca-certificates (20250419) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../008-libmagic-mgc_1%3a5.46-5_arm64.deb ... Unpacking libmagic-mgc (1:5.46-5) ... Selecting previously unselected package libmagic1t64:arm64. Preparing to unpack .../009-libmagic1t64_1%3a5.46-5_arm64.deb ... Unpacking libmagic1t64:arm64 (1:5.46-5) ... Selecting previously unselected package file. Preparing to unpack .../010-file_1%3a5.46-5_arm64.deb ... Unpacking file (1:5.46-5) ... Selecting previously unselected package gettext-base. Preparing to unpack .../011-gettext-base_0.23.1-2+b1_arm64.deb ... Unpacking gettext-base (0.23.1-2+b1) ... Selecting previously unselected package libuchardet0:arm64. Preparing to unpack .../012-libuchardet0_0.0.8-2_arm64.deb ... Unpacking libuchardet0:arm64 (0.0.8-2) ... Selecting previously unselected package groff-base. Preparing to unpack .../013-groff-base_1.23.0-9_arm64.deb ... Unpacking groff-base (1.23.0-9) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../014-bsdextrautils_2.41.2-4_arm64.deb ... Unpacking bsdextrautils (2.41.2-4) ... Selecting previously unselected package libpipeline1:arm64. Preparing to unpack .../015-libpipeline1_1.5.8-1_arm64.deb ... Unpacking libpipeline1:arm64 (1.5.8-1) ... Selecting previously unselected package man-db. Preparing to unpack .../016-man-db_2.13.1-1_arm64.deb ... Unpacking man-db (2.13.1-1) ... Selecting previously unselected package m4. Preparing to unpack .../017-m4_1.4.20-2_arm64.deb ... Unpacking m4 (1.4.20-2) ... Selecting previously unselected package autoconf. Preparing to unpack .../018-autoconf_2.72-3.1_all.deb ... Unpacking autoconf (2.72-3.1) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../019-autotools-dev_20240727.1_all.deb ... Unpacking autotools-dev (20240727.1) ... Selecting previously unselected package automake. Preparing to unpack .../020-automake_1%3a1.18.1-2_all.deb ... Unpacking automake (1:1.18.1-2) ... Selecting previously unselected package autopoint. Preparing to unpack .../021-autopoint_0.23.1-2_all.deb ... Unpacking autopoint (0.23.1-2) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../022-libdebhelper-perl_13.28_all.deb ... Unpacking libdebhelper-perl (13.28) ... Selecting previously unselected package libtool. Preparing to unpack .../023-libtool_2.5.4-7_all.deb ... Unpacking libtool (2.5.4-7) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../024-dh-autoreconf_21_all.deb ... Unpacking dh-autoreconf (21) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../025-libarchive-zip-perl_1.68-1_all.deb ... Unpacking libarchive-zip-perl (1.68-1) ... Selecting previously unselected package libfile-stripnondeterminism-perl. Preparing to unpack .../026-libfile-stripnondeterminism-perl_1.15.0-1_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.15.0-1) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../027-dh-strip-nondeterminism_1.15.0-1_all.deb ... Unpacking dh-strip-nondeterminism (1.15.0-1) ... Selecting previously unselected package libelf1t64:arm64. Preparing to unpack .../028-libelf1t64_0.193-3_arm64.deb ... Unpacking libelf1t64:arm64 (0.193-3) ... Selecting previously unselected package dwz. Preparing to unpack .../029-dwz_0.16-2_arm64.deb ... Unpacking dwz (0.16-2) ... Selecting previously unselected package libunistring5:arm64. Preparing to unpack .../030-libunistring5_1.3-2_arm64.deb ... Unpacking libunistring5:arm64 (1.3-2) ... Selecting previously unselected package libxml2-16:arm64. Preparing to unpack .../031-libxml2-16_2.14.6+dfsg-0.1_arm64.deb ... Unpacking libxml2-16:arm64 (2.14.6+dfsg-0.1) ... Selecting previously unselected package gettext. Preparing to unpack .../032-gettext_0.23.1-2+b1_arm64.deb ... Unpacking gettext (0.23.1-2+b1) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../033-intltool-debian_0.35.0+20060710.6_all.deb ... Unpacking intltool-debian (0.35.0+20060710.6) ... Selecting previously unselected package po-debconf. Preparing to unpack .../034-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../035-debhelper_13.28_all.deb ... Unpacking debhelper (13.28) ... Selecting previously unselected package dh-python. Preparing to unpack .../036-dh-python_6.20250414_all.deb ... Unpacking dh-python (6.20250414) ... Selecting previously unselected package sgml-base. Preparing to unpack .../037-sgml-base_1.31+nmu1_all.deb ... Unpacking sgml-base (1.31+nmu1) ... Selecting previously unselected package xml-core. Preparing to unpack .../038-xml-core_0.19_all.deb ... Unpacking xml-core (0.19) ... Selecting previously unselected package docutils-common. Preparing to unpack .../039-docutils-common_0.22.2+dfsg-2_all.deb ... Unpacking docutils-common (0.22.2+dfsg-2) ... Selecting previously unselected package python3-pygments. Preparing to unpack .../040-python3-pygments_2.18.0+dfsg-2_all.deb ... Unpacking python3-pygments (2.18.0+dfsg-2) ... Selecting previously unselected package python3-accessible-pygments. Preparing to unpack .../041-python3-accessible-pygments_0.0.5-2_all.deb ... Unpacking python3-accessible-pygments (0.0.5-2) ... Selecting previously unselected package python3-soupsieve. Preparing to unpack .../042-python3-soupsieve_2.7-2_all.deb ... Unpacking python3-soupsieve (2.7-2) ... Selecting previously unselected package python3-typing-extensions. Preparing to unpack .../043-python3-typing-extensions_4.15.0-1_all.deb ... Unpacking python3-typing-extensions (4.15.0-1) ... Selecting previously unselected package python3-bs4. Preparing to unpack .../044-python3-bs4_4.14.2-1_all.deb ... Unpacking python3-bs4 (4.14.2-1) ... Selecting previously unselected package python3-defusedxml. Preparing to unpack .../045-python3-defusedxml_0.7.1-3_all.deb ... Unpacking python3-defusedxml (0.7.1-3) ... Selecting previously unselected package libjs-sphinxdoc. Preparing to unpack .../046-libjs-sphinxdoc_8.2.3-8_all.deb ... Unpacking libjs-sphinxdoc (8.2.3-8) ... Selecting previously unselected package libjson-perl. Preparing to unpack .../047-libjson-perl_4.10000-1_all.deb ... Unpacking libjson-perl (4.10000-1) ... Selecting previously unselected package sphinx-common. Preparing to unpack .../048-sphinx-common_8.2.3-8_all.deb ... Unpacking sphinx-common (8.2.3-8) ... Selecting previously unselected package python3-alabaster. Preparing to unpack .../049-python3-alabaster_0.7.16-0.1_all.deb ... Unpacking python3-alabaster (0.7.16-0.1) ... Selecting previously unselected package python-babel-localedata. Preparing to unpack .../050-python-babel-localedata_2.17.0-1_all.deb ... Unpacking python-babel-localedata (2.17.0-1) ... Selecting previously unselected package python3-babel. Preparing to unpack .../051-python3-babel_2.17.0-1_all.deb ... Unpacking python3-babel (2.17.0-1) ... Selecting previously unselected package python3-roman-numerals. Preparing to unpack .../052-python3-roman-numerals_3.1.0-2_all.deb ... Unpacking python3-roman-numerals (3.1.0-2) ... Selecting previously unselected package python3-docutils. Preparing to unpack .../053-python3-docutils_0.22.2+dfsg-2_all.deb ... Unpacking python3-docutils (0.22.2+dfsg-2) ... Selecting previously unselected package python3-imagesize. Preparing to unpack .../054-python3-imagesize_1.4.1-1_all.deb ... Unpacking python3-imagesize (1.4.1-1) ... Selecting previously unselected package python3-markupsafe. Preparing to unpack .../055-python3-markupsafe_3.0.3-1_arm64.deb ... Unpacking python3-markupsafe (3.0.3-1) ... Selecting previously unselected package python3-jinja2. Preparing to unpack .../056-python3-jinja2_3.1.6-1_all.deb ... Unpacking python3-jinja2 (3.1.6-1) ... Selecting previously unselected package python3-packaging. Preparing to unpack .../057-python3-packaging_25.0-1_all.deb ... Unpacking python3-packaging (25.0-1) ... Selecting previously unselected package python3-certifi. Preparing to unpack .../058-python3-certifi_2025.1.31+ds-1_all.deb ... Unpacking python3-certifi (2025.1.31+ds-1) ... Selecting previously unselected package python3-charset-normalizer. Preparing to unpack .../059-python3-charset-normalizer_3.4.3-1_arm64.deb ... Unpacking python3-charset-normalizer (3.4.3-1) ... Selecting previously unselected package python3-idna. Preparing to unpack .../060-python3-idna_3.10-1_all.deb ... Unpacking python3-idna (3.10-1) ... Selecting previously unselected package python3-urllib3. Preparing to unpack .../061-python3-urllib3_2.5.0-1_all.deb ... Unpacking python3-urllib3 (2.5.0-1) ... Selecting previously unselected package python3-chardet. Preparing to unpack .../062-python3-chardet_5.2.0+dfsg-2_all.deb ... Unpacking python3-chardet (5.2.0+dfsg-2) ... Selecting previously unselected package python3-requests. Preparing to unpack .../063-python3-requests_2.32.5+dfsg-1_all.deb ... Unpacking python3-requests (2.32.5+dfsg-1) ... Selecting previously unselected package python3-snowballstemmer. Preparing to unpack .../064-python3-snowballstemmer_3.0.1-1_all.deb ... Unpacking python3-snowballstemmer (3.0.1-1) ... Selecting previously unselected package python3-sphinx. Preparing to unpack .../065-python3-sphinx_8.2.3-8_all.deb ... Unpacking python3-sphinx (8.2.3-8) ... Selecting previously unselected package sphinx-basic-ng. Preparing to unpack .../066-sphinx-basic-ng_1.0.0~beta2-1_all.deb ... Unpacking sphinx-basic-ng (1.0.0~beta2-1) ... Selecting previously unselected package furo. Preparing to unpack .../067-furo_2025.09.25+dfsg-1_all.deb ... Unpacking furo (2025.09.25+dfsg-1) ... Selecting previously unselected package libcom-err2:arm64. Preparing to unpack .../068-libcom-err2_1.47.2-3+b3_arm64.deb ... Unpacking libcom-err2:arm64 (1.47.2-3+b3) ... Selecting previously unselected package libkrb5support0:arm64. Preparing to unpack .../069-libkrb5support0_1.21.3-5_arm64.deb ... Unpacking libkrb5support0:arm64 (1.21.3-5) ... Selecting previously unselected package libk5crypto3:arm64. Preparing to unpack .../070-libk5crypto3_1.21.3-5_arm64.deb ... Unpacking libk5crypto3:arm64 (1.21.3-5) ... Selecting previously unselected package libkeyutils1:arm64. Preparing to unpack .../071-libkeyutils1_1.6.3-6_arm64.deb ... Unpacking libkeyutils1:arm64 (1.6.3-6) ... Selecting previously unselected package libkrb5-3:arm64. Preparing to unpack .../072-libkrb5-3_1.21.3-5_arm64.deb ... Unpacking libkrb5-3:arm64 (1.21.3-5) ... Selecting previously unselected package libgssapi-krb5-2:arm64. Preparing to unpack .../073-libgssapi-krb5-2_1.21.3-5_arm64.deb ... Unpacking libgssapi-krb5-2:arm64 (1.21.3-5) ... Selecting previously unselected package libjs-jquery. Preparing to unpack .../074-libjs-jquery_3.7.1+dfsg+~3.5.33-1_all.deb ... Unpacking libjs-jquery (3.7.1+dfsg+~3.5.33-1) ... Selecting previously unselected package libjs-jquery-hotkeys. Preparing to unpack .../075-libjs-jquery-hotkeys_0.2.0-1_all.deb ... Unpacking libjs-jquery-hotkeys (0.2.0-1) ... Selecting previously unselected package libjs-jquery-isonscreen. Preparing to unpack .../076-libjs-jquery-isonscreen_1.2.0-1.1_all.deb ... Unpacking libjs-jquery-isonscreen (1.2.0-1.1) ... Selecting previously unselected package libjs-jquery-metadata. Preparing to unpack .../077-libjs-jquery-metadata_12-4_all.deb ... Unpacking libjs-jquery-metadata (12-4) ... Selecting previously unselected package libjs-jquery-tablesorter. Preparing to unpack .../078-libjs-jquery-tablesorter_1%3a2.31.3+dfsg1-4_all.deb ... Unpacking libjs-jquery-tablesorter (1:2.31.3+dfsg1-4) ... Selecting previously unselected package libjs-jquery-throttle-debounce. Preparing to unpack .../079-libjs-jquery-throttle-debounce_1.1+dfsg.1-2_all.deb ... Unpacking libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... Selecting previously unselected package libsasl2-modules-db:arm64. Preparing to unpack .../080-libsasl2-modules-db_2.1.28+dfsg1-10_arm64.deb ... Unpacking libsasl2-modules-db:arm64 (2.1.28+dfsg1-10) ... Selecting previously unselected package libsasl2-2:arm64. Preparing to unpack .../081-libsasl2-2_2.1.28+dfsg1-10_arm64.deb ... Unpacking libsasl2-2:arm64 (2.1.28+dfsg1-10) ... Selecting previously unselected package libldap2:arm64. Preparing to unpack .../082-libldap2_2.6.10+dfsg-1_arm64.deb ... Unpacking libldap2:arm64 (2.6.10+dfsg-1) ... Selecting previously unselected package libpq5:arm64. Preparing to unpack .../083-libpq5_18.0-1_arm64.deb ... Unpacking libpq5:arm64 (18.0-1) ... Selecting previously unselected package libyaml-0-2:arm64. Preparing to unpack .../084-libyaml-0-2_0.2.5-2_arm64.deb ... Unpacking libyaml-0-2:arm64 (0.2.5-2) ... Selecting previously unselected package python3-pyproject-hooks. Preparing to unpack .../085-python3-pyproject-hooks_1.2.0-1_all.deb ... Unpacking python3-pyproject-hooks (1.2.0-1) ... Selecting previously unselected package python3-wheel. Preparing to unpack .../086-python3-wheel_0.46.1-2_all.deb ... Unpacking python3-wheel (0.46.1-2) ... Selecting previously unselected package python3-build. Preparing to unpack .../087-python3-build_1.2.2-4_all.deb ... Unpacking python3-build (1.2.2-4) ... Selecting previously unselected package python3-installer. Preparing to unpack .../088-python3-installer_0.7.0+dfsg1-3_all.deb ... Unpacking python3-installer (0.7.0+dfsg1-3) ... Selecting previously unselected package pybuild-plugin-pyproject. Preparing to unpack .../089-pybuild-plugin-pyproject_6.20250414_all.deb ... Unpacking pybuild-plugin-pyproject (6.20250414) ... Selecting previously unselected package python3-all. Preparing to unpack .../090-python3-all_3.13.7-1_arm64.deb ... Unpacking python3-all (3.13.7-1) ... Selecting previously unselected package python3-async-generator. Preparing to unpack .../091-python3-async-generator_1.10-6_all.deb ... Unpacking python3-async-generator (1.10-6) ... Selecting previously unselected package python3-autocommand. Preparing to unpack .../092-python3-autocommand_2.2.2-3_all.deb ... Unpacking python3-autocommand (2.2.2-3) ... Selecting previously unselected package python3-coverage. Preparing to unpack .../093-python3-coverage_7.8.2+dfsg1-1_arm64.deb ... Unpacking python3-coverage (7.8.2+dfsg1-1) ... Selecting previously unselected package python3-filelock. Preparing to unpack .../094-python3-filelock_3.20.0-1_all.deb ... Unpacking python3-filelock (3.20.0-1) ... Selecting previously unselected package python3-more-itertools. Preparing to unpack .../095-python3-more-itertools_10.8.0-1_all.deb ... Unpacking python3-more-itertools (10.8.0-1) ... Selecting previously unselected package python3-typeguard. Preparing to unpack .../096-python3-typeguard_4.4.4-1_all.deb ... Unpacking python3-typeguard (4.4.4-1) ... Selecting previously unselected package python3-inflect. Preparing to unpack .../097-python3-inflect_7.5.0-1_all.deb ... Unpacking python3-inflect (7.5.0-1) ... Selecting previously unselected package python3-iniconfig. Preparing to unpack .../098-python3-iniconfig_2.1.0-1_all.deb ... Unpacking python3-iniconfig (2.1.0-1) ... Selecting previously unselected package python3-jaraco.functools. Preparing to unpack .../099-python3-jaraco.functools_4.1.0-1_all.deb ... Unpacking python3-jaraco.functools (4.1.0-1) ... Selecting previously unselected package python3-pkg-resources. Preparing to unpack .../100-python3-pkg-resources_78.1.1-0.1_all.deb ... Unpacking python3-pkg-resources (78.1.1-0.1) ... Selecting previously unselected package python3-jaraco.text. Preparing to unpack .../101-python3-jaraco.text_4.0.0-1_all.deb ... Unpacking python3-jaraco.text (4.0.0-1) ... Selecting previously unselected package python3-zipp. Preparing to unpack .../102-python3-zipp_3.23.0-1_all.deb ... Unpacking python3-zipp (3.23.0-1) ... Selecting previously unselected package python3-setuptools. Preparing to unpack .../103-python3-setuptools_78.1.1-0.1_all.deb ... Unpacking python3-setuptools (78.1.1-0.1) ... Selecting previously unselected package python3-jaraco.context. Preparing to unpack .../104-python3-jaraco.context_6.0.1-1_all.deb ... Unpacking python3-jaraco.context (6.0.1-1) ... Selecting previously unselected package python3-uc-micro. Preparing to unpack .../105-python3-uc-micro_1.0.3-1_all.deb ... Unpacking python3-uc-micro (1.0.3-1) ... Selecting previously unselected package python3-linkify-it. Preparing to unpack .../106-python3-linkify-it_2.0.3-1_all.deb ... Unpacking python3-linkify-it (2.0.3-1) ... Selecting previously unselected package python3-mdurl. Preparing to unpack .../107-python3-mdurl_0.1.2-1_all.deb ... Unpacking python3-mdurl (0.1.2-1) ... Selecting previously unselected package python3-markdown-it. Preparing to unpack .../108-python3-markdown-it_3.0.0-3_all.deb ... Unpacking python3-markdown-it (3.0.0-3) ... Selecting previously unselected package python3-mdit-py-plugins. Preparing to unpack .../109-python3-mdit-py-plugins_0.5.0-1_all.deb ... Unpacking python3-mdit-py-plugins (0.5.0-1) ... Selecting previously unselected package python3-yaml. Preparing to unpack .../110-python3-yaml_6.0.2-2_arm64.deb ... Unpacking python3-yaml (6.0.2-2) ... Selecting previously unselected package python3-myst-parser. Preparing to unpack .../111-python3-myst-parser_4.0.1-1_all.deb ... Unpacking python3-myst-parser (4.0.1-1) ... Selecting previously unselected package python3-pbr. Preparing to unpack .../112-python3-pbr_7.0.1-3_all.deb ... Unpacking python3-pbr (7.0.1-3) ... Selecting previously unselected package python3-pluggy. Preparing to unpack .../113-python3-pluggy_1.6.0-1_all.deb ... Unpacking python3-pluggy (1.6.0-1) ... Selecting previously unselected package python3-poetry-core. Preparing to unpack .../114-python3-poetry-core_2.2.1-2_all.deb ... Unpacking python3-poetry-core (2.2.1-2) ... Selecting previously unselected package python3-psycopg. Preparing to unpack .../115-python3-psycopg_3.2.10-2_all.deb ... Unpacking python3-psycopg (3.2.10-2) ... Selecting previously unselected package python3-psycopg-pool. Preparing to unpack .../116-python3-psycopg-pool_3.2.10-2_all.deb ... Unpacking python3-psycopg-pool (3.2.10-2) ... Selecting previously unselected package python3-pytest. Preparing to unpack .../117-python3-pytest_8.4.2-1_all.deb ... Unpacking python3-pytest (8.4.2-1) ... Selecting previously unselected package python3-pytest-asyncio. Preparing to unpack .../118-python3-pytest-asyncio_1.2.0-1_all.deb ... Unpacking python3-pytest-asyncio (1.2.0-1) ... Selecting previously unselected package python3-pytest-cov. Preparing to unpack .../119-python3-pytest-cov_5.0.0-1_all.deb ... Unpacking python3-pytest-cov (5.0.0-1) ... Selecting previously unselected package python3-redis. Preparing to unpack .../120-python3-redis_6.4.0-1_all.deb ... Unpacking python3-redis (6.4.0-1) ... Selecting previously unselected package python3-sphinx-autodoc-typehints. Preparing to unpack .../121-python3-sphinx-autodoc-typehints_3.2.0-2_all.deb ... Unpacking python3-sphinx-autodoc-typehints (3.2.0-2) ... Selecting previously unselected package python3-sphinx-copybutton. Preparing to unpack .../122-python3-sphinx-copybutton_0.5.2-3_all.deb ... Unpacking python3-sphinx-copybutton (0.5.2-3) ... Selecting previously unselected package python3-sphinxcontrib.apidoc. Preparing to unpack .../123-python3-sphinxcontrib.apidoc_0.6.0-2_all.deb ... Unpacking python3-sphinxcontrib.apidoc (0.6.0-2) ... Selecting previously unselected package redis. Preparing to unpack .../124-redis_5%3a8.0.4-1_all.deb ... Unpacking redis (5:8.0.4-1) ... Setting up media-types (14.0.0) ... Setting up libpipeline1:arm64 (1.5.8-1) ... Setting up libkeyutils1:arm64 (1.6.3-6) ... Setting up bsdextrautils (2.41.2-4) ... Setting up libmagic-mgc (1:5.46-5) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up libyaml-0-2:arm64 (0.2.5-2) ... Setting up libxml2-16:arm64 (2.14.6+dfsg-0.1) ... Setting up libdebhelper-perl (13.28) ... Setting up libmagic1t64:arm64 (1:5.46-5) ... Setting up gettext-base (0.23.1-2+b1) ... Setting up m4 (1.4.20-2) ... Setting up libcom-err2:arm64 (1.47.2-3+b3) ... Setting up file (1:5.46-5) ... Setting up libjemalloc2:arm64 (5.3.0-3) ... Setting up libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... Setting up libelf1t64:arm64 (0.193-3) ... Setting up python-babel-localedata (2.17.0-1) ... Setting up libkrb5support0:arm64 (1.21.3-5) ... Setting up libsasl2-modules-db:arm64 (2.1.28+dfsg1-10) ... Setting up tzdata (2025b-5) ... Current default time zone: 'Etc/UTC' Local time is now: Thu Oct 30 07:07:57 UTC 2025. Universal Time is now: Thu Oct 30 07:07:57 UTC 2025. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up autotools-dev (20240727.1) ... Setting up liblzf1:arm64 (3.6-4+b3) ... Setting up libunistring5:arm64 (1.3-2) ... Setting up autopoint (0.23.1-2) ... Setting up libk5crypto3:arm64 (1.21.3-5) ... Setting up libjs-sphinxdoc (8.2.3-8) ... Setting up libsasl2-2:arm64 (2.1.28+dfsg1-10) ... Setting up autoconf (2.72-3.1) ... Setting up libffi8:arm64 (3.5.2-2) ... Setting up dwz (0.16-2) ... Setting up sensible-utils (0.0.26) ... Setting up libuchardet0:arm64 (0.0.8-2) ... Setting up libjson-perl (4.10000-1) ... Setting up netbase (6.5) ... Setting up sgml-base (1.31+nmu1) ... Setting up libkrb5-3:arm64 (1.21.3-5) ... Setting up libjs-jquery (3.7.1+dfsg+~3.5.33-1) ... Setting up libjs-jquery-hotkeys (0.2.0-1) ... Setting up openssl (3.5.4-1) ... Setting up readline-common (8.3-3) ... Setting up libldap2:arm64 (2.6.10+dfsg-1) ... Setting up automake (1:1.18.1-2) ... update-alternatives: using /usr/bin/automake-1.18 to provide /usr/bin/automake (automake) in auto mode Setting up libfile-stripnondeterminism-perl (1.15.0-1) ... Setting up gettext (0.23.1-2+b1) ... Setting up libtool (2.5.4-7) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (21) ... Setting up ca-certificates (20250419) ... Updating certificates in /etc/ssl/certs... 150 added, 0 removed; done. Setting up redis-tools (5:8.0.4-1) ... Setting up libjs-jquery-metadata (12-4) ... Setting up sphinx-common (8.2.3-8) ... Setting up libjs-jquery-isonscreen (1.2.0-1.1) ... Setting up libgssapi-krb5-2:arm64 (1.21.3-5) ... Setting up libreadline8t64:arm64 (8.3-3) ... Setting up dh-strip-nondeterminism (1.15.0-1) ... Setting up libjs-jquery-tablesorter (1:2.31.3+dfsg1-4) ... Setting up groff-base (1.23.0-9) ... Setting up xml-core (0.19) ... Setting up libpython3.13-stdlib:arm64 (3.13.9-1) ... Setting up libpython3-stdlib:arm64 (3.13.7-1) ... Setting up python3.13 (3.13.9-1) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up libpq5:arm64 (18.0-1) ... Setting up python3 (3.13.7-1) ... Setting up python3-zipp (3.23.0-1) ... Setting up python3-autocommand (2.2.2-3) ... Setting up man-db (2.13.1-1) ... Not building database; man-db/auto-update is not 'true'. Setting up python3-markupsafe (3.0.3-1) ... Setting up redis-server (5:8.0.4-1) ... invoke-rc.d: could not determine current runlevel invoke-rc.d: policy-rc.d denied execution of start. Setting up python3-uc-micro (1.0.3-1) ... Setting up python3-jinja2 (3.1.6-1) ... Setting up python3-pygments (2.18.0+dfsg-2) ... Setting up python3-packaging (25.0-1) ... Setting up python3-chardet (5.2.0+dfsg-2) ... Setting up python3-pyproject-hooks (1.2.0-1) ... Setting up python3-accessible-pygments (0.0.5-2) ... Setting up python3-certifi (2025.1.31+ds-1) ... Setting up python3-snowballstemmer (3.0.1-1) ... Setting up python3-poetry-core (2.2.1-2) ... Setting up python3-mdurl (0.1.2-1) ... Setting up python3-psycopg (3.2.10-2) ... Setting up python3-idna (3.10-1) ... Setting up python3-typing-extensions (4.15.0-1) ... Setting up python3-redis (6.4.0-1) ... Setting up python3-installer (0.7.0+dfsg1-3) ... Setting up python3-urllib3 (2.5.0-1) ... Setting up python3-pluggy (1.6.0-1) ... Setting up python3-linkify-it (2.0.3-1) ... Setting up python3-roman-numerals (3.1.0-2) ... Setting up python3-psycopg-pool (3.2.10-2) ... Setting up python3-soupsieve (2.7-2) ... Setting up python3-imagesize (1.4.1-1) ... Setting up dh-python (6.20250414) ... Setting up python3-more-itertools (10.8.0-1) ... Setting up python3-iniconfig (2.1.0-1) ... Setting up python3-filelock (3.20.0-1) ... Setting up python3-jaraco.functools (4.1.0-1) ... Setting up python3-async-generator (1.10-6) ... Setting up python3-jaraco.context (6.0.1-1) ... Setting up python3-babel (2.17.0-1) ... update-alternatives: using /usr/bin/pybabel-python3 to provide /usr/bin/pybabel (pybabel) in auto mode Setting up python3-defusedxml (0.7.1-3) ... Setting up redis (5:8.0.4-1) ... Setting up python3-charset-normalizer (3.4.3-1) ... Setting up python3-pytest (8.4.2-1) ... Setting up python3-alabaster (0.7.16-0.1) ... Setting up python3-typeguard (4.4.4-1) ... Setting up python3-all (3.13.7-1) ... Setting up python3-coverage (7.8.2+dfsg1-1) ... Setting up python3-yaml (6.0.2-2) ... Setting up debhelper (13.28) ... Setting up python3-pytest-cov (5.0.0-1) ... Setting up python3-wheel (0.46.1-2) ... Setting up python3-bs4 (4.14.2-1) ... Setting up python3-inflect (7.5.0-1) ... Setting up python3-jaraco.text (4.0.0-1) ... Setting up python3-requests (2.32.5+dfsg-1) ... Setting up python3-markdown-it (3.0.0-3) ... Setting up python3-pytest-asyncio (1.2.0-1) ... Setting up python3-build (1.2.2-4) ... Setting up python3-pkg-resources (78.1.1-0.1) ... Setting up python3-setuptools (78.1.1-0.1) ... Setting up python3-pbr (7.0.1-3) ... Setting up pybuild-plugin-pyproject (6.20250414) ... Setting up python3-mdit-py-plugins (0.5.0-1) ... Processing triggers for libc-bin (2.41-12) ... Processing triggers for sgml-base (1.31+nmu1) ... Setting up docutils-common (0.22.2+dfsg-2) ... Processing triggers for sgml-base (1.31+nmu1) ... Setting up python3-docutils (0.22.2+dfsg-2) ... Setting up python3-sphinx (8.2.3-8) ... Setting up python3-myst-parser (4.0.1-1) ... Setting up python3-sphinx-copybutton (0.5.2-3) ... Setting up python3-sphinx-autodoc-typehints (3.2.0-2) ... Setting up python3-sphinxcontrib.apidoc (0.6.0-2) ... Setting up sphinx-basic-ng (1.0.0~beta2-1) ... Setting up furo (2025.09.25+dfsg-1) ... Processing triggers for ca-certificates (20250419) ... Updating certificates in /etc/ssl/certs... 0 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done. Reading package lists... Building dependency tree... Reading state information... Reading extended state information... Initializing package states... Writing extended state information... Building tag database... -> Finished parsing the build-deps Reading package lists... Building dependency tree... Reading state information... fakeroot is already the newest version (1.37.1.2-1). Solving dependencies... 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. I: Building the package I: Running cd /build/reproducible-path/pyrate-limiter-3.9.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../pyrate-limiter_3.9.0-4_source.changes dpkg-buildpackage: info: source package pyrate-limiter dpkg-buildpackage: info: source version 3.9.0-4 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Edward Betts dpkg-source --before-build . dpkg-buildpackage: info: host architecture arm64 debian/rules clean dh clean --buildsystem=pybuild dh_auto_clean -O--buildsystem=pybuild dh_autoreconf_clean -O--buildsystem=pybuild dh_clean -O--buildsystem=pybuild debian/rules binary dh binary --buildsystem=pybuild dh_update_autotools_config -O--buildsystem=pybuild dh_autoreconf -O--buildsystem=pybuild dh_auto_configure -O--buildsystem=pybuild debian/rules override_dh_auto_build make[1]: Entering directory '/build/reproducible-path/pyrate-limiter-3.9.0' dh_auto_build override_dh_auto_build --buildsystem=pybuild I: pybuild plugin_pyproject:129: Building wheel for python3.13 with "build" module I: pybuild base:311: python3.13 -m build --skip-dependency-check --no-isolation --wheel --outdir /build/reproducible-path/pyrate-limiter-3.9.0/.pybuild/cpython3_3.13 * Building wheel... Successfully built pyrate_limiter-3.9.0-py3-none-any.whl I: pybuild plugin_pyproject:144: Unpacking wheel built for python3.13 with "installer" module cd docs; PYTHONPATH=/build/reproducible-path/pyrate-limiter-3.9.0 LC_ALL=C.UTF-8 LANGUAGE=C.UTF-8 sphinx-build -bhtml -d _build/doctrees . _build/html Running Sphinx v8.2.3 loading translations [en]... done making output directory... done Converting `source_suffix = ['.rst', '.md']` to `source_suffix = {'.rst': 'restructuredtext', '.md': 'restructuredtext'}`. [autosummary] generating autosummary for: changelog.md, contributing.md, index.md, reference.md loading intersphinx inventory 'python' from https://docs.python.org/3/objects.inv ... WARNING: failed to reach any of the inventories with the following issues: intersphinx inventory 'https://docs.python.org/3/objects.inv' not fetchable due to : HTTPSConnectionPool(host='docs.python.org', port=443): Max retries exceeded with url: /3/objects.inv (Caused by NameResolutionError(": Failed to resolve 'docs.python.org' ([Errno -3] Temporary failure in name resolution)")) Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.clocks.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.exceptions.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.limiter.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.limiter_factory.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.utils.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.bucket.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.clock.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.rate.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.wrappers.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.in_memory_bucket.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.mp_bucket.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.postgres.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.redis_bucket.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.sqlite_bucket.rst. myst v4.0.1: MdParserConfig(commonmark_only=False, gfm_only=False, enable_extensions={'html_image'}, disable_syntax=[], all_links_external=False, links_external_new_tab=False, url_schemes=('http', 'https', 'mailto', 'ftp'), ref_domains=None, fence_as_directive=set(), number_code_blocks=[], title_to_header=False, heading_anchors=0, heading_slug_func=None, html_meta={}, footnote_sort=True, footnote_transition=True, words_per_minute=200, substitutions={}, linkify_fuzzy_links=True, dmath_allow_labels=True, dmath_allow_space=True, dmath_allow_digits=True, dmath_double_inline=False, update_mathjax=True, mathjax_classes='tex2jax_process|mathjax_process|math|output_area', enable_checkboxes=False, suppress_warnings=[], highlight_code_blocks=True) building [mo]: targets for 0 po files that are out of date writing output... building [html]: targets for 4 source files that are out of date updating environment: [new config] 21 added, 0 changed, 0 removed reading sources... [ 5%] changelog reading sources... [ 10%] contributing reading sources... [ 14%] index reading sources... [ 19%] modules/pyrate_limiter reading sources... [ 24%] modules/pyrate_limiter.abstracts reading sources... [ 29%] modules/pyrate_limiter.abstracts.bucket reading sources... [ 33%] modules/pyrate_limiter.abstracts.clock reading sources... [ 38%] modules/pyrate_limiter.abstracts.rate reading sources... [ 43%] modules/pyrate_limiter.abstracts.wrappers reading sources... [ 48%] modules/pyrate_limiter.buckets reading sources... [ 52%] modules/pyrate_limiter.buckets.in_memory_bucket reading sources... [ 57%] modules/pyrate_limiter.buckets.mp_bucket reading sources... [ 62%] modules/pyrate_limiter.buckets.postgres reading sources... [ 67%] modules/pyrate_limiter.buckets.redis_bucket reading sources... [ 71%] modules/pyrate_limiter.buckets.sqlite_bucket reading sources... [ 76%] modules/pyrate_limiter.clocks reading sources... [ 81%] modules/pyrate_limiter.exceptions reading sources... [ 86%] modules/pyrate_limiter.limiter reading sources... [ 90%] modules/pyrate_limiter.limiter_factory reading sources... [ 95%] modules/pyrate_limiter.utils reading sources... [100%] reference looking for now-outdated files... none found pickling environment... done checking consistency... /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.rst: WARNING: document isn't included in any toctree [toc.not_included] /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter', 'reference'], selecting: reference <- modules/pyrate_limiter.abstracts /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.bucket.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.abstracts', 'reference'], selecting: reference <- modules/pyrate_limiter.abstracts.bucket /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.clock.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.abstracts', 'reference'], selecting: reference <- modules/pyrate_limiter.abstracts.clock /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.rate.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.abstracts', 'reference'], selecting: reference <- modules/pyrate_limiter.abstracts.rate /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.wrappers.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.abstracts', 'reference'], selecting: reference <- modules/pyrate_limiter.abstracts.wrappers /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter', 'reference'], selecting: reference <- modules/pyrate_limiter.buckets /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.in_memory_bucket.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.buckets', 'reference'], selecting: reference <- modules/pyrate_limiter.buckets.in_memory_bucket /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.mp_bucket.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.buckets', 'reference'], selecting: reference <- modules/pyrate_limiter.buckets.mp_bucket /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.postgres.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.buckets', 'reference'], selecting: reference <- modules/pyrate_limiter.buckets.postgres /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.redis_bucket.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.buckets', 'reference'], selecting: reference <- modules/pyrate_limiter.buckets.redis_bucket /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.sqlite_bucket.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.buckets', 'reference'], selecting: reference <- modules/pyrate_limiter.buckets.sqlite_bucket /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.clocks.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter', 'reference'], selecting: reference <- modules/pyrate_limiter.clocks /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.exceptions.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter', 'reference'], selecting: reference <- modules/pyrate_limiter.exceptions /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.limiter.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter', 'reference'], selecting: reference <- modules/pyrate_limiter.limiter /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.limiter_factory.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter', 'reference'], selecting: reference <- modules/pyrate_limiter.limiter_factory /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.utils.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter', 'reference'], selecting: reference <- modules/pyrate_limiter.utils done preparing documents... done copying assets... copying static files... Writing evaluated template result to /build/reproducible-path/pyrate-limiter-3.9.0/docs/_build/html/_static/language_data.js Writing evaluated template result to /build/reproducible-path/pyrate-limiter-3.9.0/docs/_build/html/_static/documentation_options.js Writing evaluated template result to /build/reproducible-path/pyrate-limiter-3.9.0/docs/_build/html/_static/basic.css Writing evaluated template result to /build/reproducible-path/pyrate-limiter-3.9.0/docs/_build/html/_static/copybutton.js copying static files: done copying extra files... copying extra files: done copying assets: done writing output... [ 5%] changelog writing output... [ 10%] contributing writing output... [ 14%] index writing output... [ 19%] modules/pyrate_limiter writing output... [ 24%] modules/pyrate_limiter.abstracts writing output... [ 29%] modules/pyrate_limiter.abstracts.bucket writing output... [ 33%] modules/pyrate_limiter.abstracts.clock writing output... [ 38%] modules/pyrate_limiter.abstracts.rate writing output... [ 43%] modules/pyrate_limiter.abstracts.wrappers writing output... [ 48%] modules/pyrate_limiter.buckets writing output... [ 52%] modules/pyrate_limiter.buckets.in_memory_bucket writing output... [ 57%] modules/pyrate_limiter.buckets.mp_bucket writing output... [ 62%] modules/pyrate_limiter.buckets.postgres writing output... [ 67%] modules/pyrate_limiter.buckets.redis_bucket writing output... [ 71%] modules/pyrate_limiter.buckets.sqlite_bucket writing output... [ 76%] modules/pyrate_limiter.clocks writing output... [ 81%] modules/pyrate_limiter.exceptions writing output... [ 86%] modules/pyrate_limiter.limiter writing output... [ 90%] modules/pyrate_limiter.limiter_factory writing output... [ 95%] modules/pyrate_limiter.utils writing output... [100%] reference /build/reproducible-path/pyrate-limiter-3.9.0/README.md:1801: WARNING: 'myst' cross-reference target not found: 'pyrate_limiter.limiter_factory.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:1807: WARNING: 'myst' cross-reference target not found: 'examples/asyncio_ratelimit.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:1808: WARNING: 'myst' cross-reference target not found: 'examples/asyncio_decorator.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:1809: WARNING: 'myst' cross-reference target not found: 'examples/httpx_ratelimiter.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:1810: WARNING: 'myst' cross-reference target not found: 'examples/in_memory_multiprocess.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:1811: WARNING: 'myst' cross-reference target not found: 'examples/sql_filelock_multiprocess.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:2020: WARNING: 'myst' cross-reference target not found: 'examples/asyncio_ratelimit.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:2062: WARNING: 'myst' cross-reference target not found: 'examples/asyncio_decorator.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:2114: WARNING: 'myst' cross-reference target not found: 'advanced-usage' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:2243: WARNING: 'myst' cross-reference target not found: 'examples/in_memory_multiprocess.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:2321: WARNING: 'myst' cross-reference target not found: 'pyrate_limiter/limiter_factory.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:2345: WARNING: 'myst' cross-reference target not found: 'pyrate_limiter/limiter_factory.py' [myst.xref_missing] generating indices... genindex py-modindex done writing additional pages... search done dumping search index in English (code: en)... done dumping object inventory... done build succeeded, 14 warnings. The HTML pages are in _build/html. make[1]: Leaving directory '/build/reproducible-path/pyrate-limiter-3.9.0' dh_auto_test -O--buildsystem=pybuild I: pybuild pybuild:308: redis-server --daemonize yes 2098761:C 29 Oct 2025 19:09:44.149 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. I: pybuild base:311: cd /build/reproducible-path/pyrate-limiter-3.9.0/.pybuild/cpython3_3.13/build; python3.13 -m pytest -vv --durations=10 --ignore=tests/test_multiprocessing.py -k " not postgres and not test_limiter_constructor_02 and not test_bucket_leak and not test_factory_leak and not test_limiter_async_factory_get and not test_mp_bucket_async and not test_bucket_full and not test_limiter_concurrency" ============================= test session starts ============================== platform linux -- Python 3.13.9, pytest-8.4.2, pluggy-1.6.0 -- /usr/bin/python3.13 cachedir: .pytest_cache rootdir: /build/reproducible-path/pyrate-limiter-3.9.0/.pybuild/cpython3_3.13/build configfile: pyproject.toml plugins: cov-5.0.0, asyncio-1.2.0, typeguard-4.4.4 asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=function, asyncio_default_test_loop_scope=function collecting ... collected 870 items / 467 deselected / 403 selected tests/test_bucket_all.py::test_bucket_01[clock0-create_in_memory_bucket] PASSED [ 0%] tests/test_bucket_all.py::test_bucket_01[clock0-create_redis_bucket] PASSED [ 0%] tests/test_bucket_all.py::test_bucket_01[clock0-create_sqlite_bucket] PASSED [ 0%] tests/test_bucket_all.py::test_bucket_01[clock0-create_async_redis_bucket] PASSED [ 0%] tests/test_bucket_all.py::test_bucket_01[clock0-create_filelocksqlite_bucket] PASSED [ 1%] tests/test_bucket_all.py::test_bucket_01[clock0-create_mp_bucket] PASSED [ 1%] tests/test_bucket_all.py::test_bucket_01[clock1-create_in_memory_bucket] PASSED [ 1%] tests/test_bucket_all.py::test_bucket_01[clock1-create_redis_bucket] PASSED [ 1%] tests/test_bucket_all.py::test_bucket_01[clock1-create_sqlite_bucket] PASSED [ 2%] tests/test_bucket_all.py::test_bucket_01[clock1-create_async_redis_bucket] PASSED [ 2%] tests/test_bucket_all.py::test_bucket_01[clock1-create_filelocksqlite_bucket] PASSED [ 2%] tests/test_bucket_all.py::test_bucket_01[clock1-create_mp_bucket] PASSED [ 2%] tests/test_bucket_all.py::test_bucket_01[clock2-create_in_memory_bucket] PASSED [ 3%] tests/test_bucket_all.py::test_bucket_01[clock2-create_redis_bucket] PASSED [ 3%] tests/test_bucket_all.py::test_bucket_01[clock2-create_sqlite_bucket] PASSED [ 3%] tests/test_bucket_all.py::test_bucket_01[clock2-create_async_redis_bucket] PASSED [ 3%] tests/test_bucket_all.py::test_bucket_01[clock2-create_filelocksqlite_bucket] PASSED [ 4%] tests/test_bucket_all.py::test_bucket_01[clock2-create_mp_bucket] PASSED [ 4%] tests/test_bucket_all.py::test_bucket_02[clock0-create_in_memory_bucket] PASSED [ 4%] tests/test_bucket_all.py::test_bucket_02[clock0-create_redis_bucket] PASSED [ 4%] tests/test_bucket_all.py::test_bucket_02[clock0-create_sqlite_bucket] PASSED [ 5%] tests/test_bucket_all.py::test_bucket_02[clock0-create_async_redis_bucket] PASSED [ 5%] tests/test_bucket_all.py::test_bucket_02[clock0-create_filelocksqlite_bucket] PASSED [ 5%] tests/test_bucket_all.py::test_bucket_02[clock0-create_mp_bucket] PASSED [ 5%] tests/test_bucket_all.py::test_bucket_02[clock1-create_in_memory_bucket] PASSED [ 6%] tests/test_bucket_all.py::test_bucket_02[clock1-create_redis_bucket] PASSED [ 6%] tests/test_bucket_all.py::test_bucket_02[clock1-create_sqlite_bucket] PASSED [ 6%] tests/test_bucket_all.py::test_bucket_02[clock1-create_async_redis_bucket] PASSED [ 6%] tests/test_bucket_all.py::test_bucket_02[clock1-create_filelocksqlite_bucket] PASSED [ 7%] tests/test_bucket_all.py::test_bucket_02[clock1-create_mp_bucket] PASSED [ 7%] tests/test_bucket_all.py::test_bucket_02[clock2-create_in_memory_bucket] PASSED [ 7%] tests/test_bucket_all.py::test_bucket_02[clock2-create_redis_bucket] PASSED [ 7%] tests/test_bucket_all.py::test_bucket_02[clock2-create_sqlite_bucket] PASSED [ 8%] tests/test_bucket_all.py::test_bucket_02[clock2-create_async_redis_bucket] PASSED [ 8%] tests/test_bucket_all.py::test_bucket_02[clock2-create_filelocksqlite_bucket] PASSED [ 8%] tests/test_bucket_all.py::test_bucket_02[clock2-create_mp_bucket] PASSED [ 8%] tests/test_bucket_all.py::test_bucket_03[clock0-create_in_memory_bucket] PASSED [ 9%] tests/test_bucket_all.py::test_bucket_03[clock0-create_redis_bucket] PASSED [ 9%] tests/test_bucket_all.py::test_bucket_03[clock0-create_sqlite_bucket] PASSED [ 9%] tests/test_bucket_all.py::test_bucket_03[clock0-create_async_redis_bucket] PASSED [ 9%] tests/test_bucket_all.py::test_bucket_03[clock0-create_filelocksqlite_bucket] PASSED [ 10%] tests/test_bucket_all.py::test_bucket_03[clock0-create_mp_bucket] PASSED [ 10%] tests/test_bucket_all.py::test_bucket_03[clock1-create_in_memory_bucket] PASSED [ 10%] tests/test_bucket_all.py::test_bucket_03[clock1-create_redis_bucket] PASSED [ 10%] tests/test_bucket_all.py::test_bucket_03[clock1-create_sqlite_bucket] PASSED [ 11%] tests/test_bucket_all.py::test_bucket_03[clock1-create_async_redis_bucket] PASSED [ 11%] tests/test_bucket_all.py::test_bucket_03[clock1-create_filelocksqlite_bucket] PASSED [ 11%] tests/test_bucket_all.py::test_bucket_03[clock1-create_mp_bucket] PASSED [ 11%] tests/test_bucket_all.py::test_bucket_03[clock2-create_in_memory_bucket] PASSED [ 12%] tests/test_bucket_all.py::test_bucket_03[clock2-create_redis_bucket] PASSED [ 12%] tests/test_bucket_all.py::test_bucket_03[clock2-create_sqlite_bucket] PASSED [ 12%] tests/test_bucket_all.py::test_bucket_03[clock2-create_async_redis_bucket] PASSED [ 12%] tests/test_bucket_all.py::test_bucket_03[clock2-create_filelocksqlite_bucket] PASSED [ 13%] tests/test_bucket_all.py::test_bucket_03[clock2-create_mp_bucket] PASSED [ 13%] tests/test_bucket_all.py::test_bucket_waiting[clock0-create_in_memory_bucket] PASSED [ 13%] tests/test_bucket_all.py::test_bucket_waiting[clock0-create_redis_bucket] PASSED [ 13%] tests/test_bucket_all.py::test_bucket_waiting[clock0-create_sqlite_bucket] PASSED [ 14%] tests/test_bucket_all.py::test_bucket_waiting[clock0-create_async_redis_bucket] PASSED [ 14%] tests/test_bucket_all.py::test_bucket_waiting[clock0-create_filelocksqlite_bucket] PASSED [ 14%] tests/test_bucket_all.py::test_bucket_waiting[clock0-create_mp_bucket] PASSED [ 14%] tests/test_bucket_all.py::test_bucket_waiting[clock1-create_in_memory_bucket] PASSED [ 15%] tests/test_bucket_all.py::test_bucket_waiting[clock1-create_redis_bucket] PASSED [ 15%] tests/test_bucket_all.py::test_bucket_waiting[clock1-create_sqlite_bucket] PASSED [ 15%] tests/test_bucket_all.py::test_bucket_waiting[clock1-create_async_redis_bucket] PASSED [ 15%] tests/test_bucket_all.py::test_bucket_waiting[clock1-create_filelocksqlite_bucket] PASSED [ 16%] tests/test_bucket_all.py::test_bucket_waiting[clock1-create_mp_bucket] PASSED [ 16%] tests/test_bucket_all.py::test_bucket_waiting[clock2-create_in_memory_bucket] PASSED [ 16%] tests/test_bucket_all.py::test_bucket_waiting[clock2-create_redis_bucket] PASSED [ 16%] tests/test_bucket_all.py::test_bucket_waiting[clock2-create_sqlite_bucket] PASSED [ 17%] tests/test_bucket_all.py::test_bucket_waiting[clock2-create_async_redis_bucket] PASSED [ 17%] tests/test_bucket_all.py::test_bucket_waiting[clock2-create_filelocksqlite_bucket] PASSED [ 17%] tests/test_bucket_all.py::test_bucket_waiting[clock2-create_mp_bucket] PASSED [ 17%] tests/test_bucket_all.py::test_bucket_flush[create_in_memory_bucket] PASSED [ 18%] tests/test_bucket_all.py::test_bucket_flush[create_redis_bucket] PASSED [ 18%] tests/test_bucket_all.py::test_bucket_flush[create_sqlite_bucket] PASSED [ 18%] tests/test_bucket_all.py::test_bucket_flush[create_async_redis_bucket] PASSED [ 18%] tests/test_bucket_all.py::test_bucket_flush[create_filelocksqlite_bucket] PASSED [ 19%] tests/test_bucket_all.py::test_bucket_flush[create_mp_bucket] PASSED [ 19%] tests/test_bucket_all.py::test_bucket_performance[create_in_memory_bucket] PASSED [ 19%] tests/test_bucket_all.py::test_bucket_performance[create_redis_bucket] PASSED [ 19%] tests/test_bucket_all.py::test_bucket_performance[create_sqlite_bucket] PASSED [ 20%] tests/test_bucket_all.py::test_bucket_performance[create_async_redis_bucket] PASSED [ 20%] tests/test_bucket_all.py::test_bucket_performance[create_filelocksqlite_bucket] PASSED [ 20%] tests/test_bucket_all.py::test_bucket_performance[create_mp_bucket] PASSED [ 20%] tests/test_bucket_factory.py::test_factory_01[clock0-create_in_memory_bucket] PASSED [ 21%] tests/test_bucket_factory.py::test_factory_01[clock0-create_redis_bucket] PASSED [ 21%] tests/test_bucket_factory.py::test_factory_01[clock0-create_sqlite_bucket] PASSED [ 21%] tests/test_bucket_factory.py::test_factory_01[clock0-create_async_redis_bucket] PASSED [ 21%] tests/test_bucket_factory.py::test_factory_01[clock0-create_filelocksqlite_bucket] PASSED [ 22%] tests/test_bucket_factory.py::test_factory_01[clock0-create_mp_bucket] PASSED [ 22%] tests/test_bucket_factory.py::test_factory_01[clock1-create_in_memory_bucket] PASSED [ 22%] tests/test_bucket_factory.py::test_factory_01[clock1-create_redis_bucket] PASSED [ 22%] tests/test_bucket_factory.py::test_factory_01[clock1-create_sqlite_bucket] PASSED [ 23%] tests/test_bucket_factory.py::test_factory_01[clock1-create_async_redis_bucket] PASSED [ 23%] tests/test_bucket_factory.py::test_factory_01[clock1-create_filelocksqlite_bucket] PASSED [ 23%] tests/test_bucket_factory.py::test_factory_01[clock1-create_mp_bucket] PASSED [ 23%] tests/test_bucket_factory.py::test_factory_01[clock2-create_in_memory_bucket] PASSED [ 24%] tests/test_bucket_factory.py::test_factory_01[clock2-create_redis_bucket] PASSED [ 24%] tests/test_bucket_factory.py::test_factory_01[clock2-create_sqlite_bucket] PASSED [ 24%] tests/test_bucket_factory.py::test_factory_01[clock2-create_async_redis_bucket] PASSED [ 24%] tests/test_bucket_factory.py::test_factory_01[clock2-create_filelocksqlite_bucket] PASSED [ 25%] tests/test_bucket_factory.py::test_factory_01[clock2-create_mp_bucket] PASSED [ 25%] tests/test_limiter.py::test_limiter_constructor_01[clock0] PASSED [ 25%] tests/test_limiter.py::test_limiter_constructor_01[clock1] PASSED [ 25%] tests/test_limiter.py::test_limiter_constructor_01[clock2] PASSED [ 26%] tests/test_limiter.py::test_limiter_01[clock0-create_in_memory_bucket-True-None] PASSED [ 26%] tests/test_limiter.py::test_limiter_01[clock0-create_in_memory_bucket-True-500] PASSED [ 26%] tests/test_limiter.py::test_limiter_01[clock0-create_in_memory_bucket-True-2000] PASSED [ 26%] tests/test_limiter.py::test_limiter_01[clock0-create_in_memory_bucket-True-Duration.MINUTE] PASSED [ 27%] tests/test_limiter.py::test_limiter_01[clock0-create_in_memory_bucket-False-None] PASSED [ 27%] tests/test_limiter.py::test_limiter_01[clock0-create_in_memory_bucket-False-500] PASSED [ 27%] tests/test_limiter.py::test_limiter_01[clock0-create_in_memory_bucket-False-2000] PASSED [ 27%] tests/test_limiter.py::test_limiter_01[clock0-create_in_memory_bucket-False-Duration.MINUTE] PASSED [ 28%] tests/test_limiter.py::test_limiter_01[clock0-create_redis_bucket-True-None] PASSED [ 28%] tests/test_limiter.py::test_limiter_01[clock0-create_redis_bucket-True-500] PASSED [ 28%] tests/test_limiter.py::test_limiter_01[clock0-create_redis_bucket-True-2000] PASSED [ 28%] tests/test_limiter.py::test_limiter_01[clock0-create_redis_bucket-True-Duration.MINUTE] PASSED [ 29%] tests/test_limiter.py::test_limiter_01[clock0-create_redis_bucket-False-None] PASSED [ 29%] tests/test_limiter.py::test_limiter_01[clock0-create_redis_bucket-False-500] PASSED [ 29%] tests/test_limiter.py::test_limiter_01[clock0-create_redis_bucket-False-2000] PASSED [ 29%] tests/test_limiter.py::test_limiter_01[clock0-create_redis_bucket-False-Duration.MINUTE] PASSED [ 30%] tests/test_limiter.py::test_limiter_01[clock0-create_sqlite_bucket-True-None] PASSED [ 30%] tests/test_limiter.py::test_limiter_01[clock0-create_sqlite_bucket-True-500] PASSED [ 30%] tests/test_limiter.py::test_limiter_01[clock0-create_sqlite_bucket-True-2000] PASSED [ 30%] tests/test_limiter.py::test_limiter_01[clock0-create_sqlite_bucket-True-Duration.MINUTE] PASSED [ 31%] tests/test_limiter.py::test_limiter_01[clock0-create_sqlite_bucket-False-None] PASSED [ 31%] tests/test_limiter.py::test_limiter_01[clock0-create_sqlite_bucket-False-500] PASSED [ 31%] tests/test_limiter.py::test_limiter_01[clock0-create_sqlite_bucket-False-2000] PASSED [ 31%] tests/test_limiter.py::test_limiter_01[clock0-create_sqlite_bucket-False-Duration.MINUTE] PASSED [ 32%] tests/test_limiter.py::test_limiter_01[clock0-create_async_redis_bucket-True-None] PASSED [ 32%] tests/test_limiter.py::test_limiter_01[clock0-create_async_redis_bucket-True-500] PASSED [ 32%] tests/test_limiter.py::test_limiter_01[clock0-create_async_redis_bucket-True-2000] PASSED [ 32%] tests/test_limiter.py::test_limiter_01[clock0-create_async_redis_bucket-True-Duration.MINUTE] PASSED [ 33%] tests/test_limiter.py::test_limiter_01[clock0-create_async_redis_bucket-False-None] PASSED [ 33%] tests/test_limiter.py::test_limiter_01[clock0-create_async_redis_bucket-False-500] PASSED [ 33%] tests/test_limiter.py::test_limiter_01[clock0-create_async_redis_bucket-False-2000] PASSED [ 33%] tests/test_limiter.py::test_limiter_01[clock0-create_async_redis_bucket-False-Duration.MINUTE] PASSED [ 33%] tests/test_limiter.py::test_limiter_01[clock0-create_filelocksqlite_bucket-True-None] PASSED [ 34%] tests/test_limiter.py::test_limiter_01[clock0-create_filelocksqlite_bucket-True-500] PASSED [ 34%] tests/test_limiter.py::test_limiter_01[clock0-create_filelocksqlite_bucket-True-2000] PASSED [ 34%] tests/test_limiter.py::test_limiter_01[clock0-create_filelocksqlite_bucket-True-Duration.MINUTE] PASSED [ 34%] tests/test_limiter.py::test_limiter_01[clock0-create_filelocksqlite_bucket-False-None] PASSED [ 35%] tests/test_limiter.py::test_limiter_01[clock0-create_filelocksqlite_bucket-False-500] PASSED [ 35%] tests/test_limiter.py::test_limiter_01[clock0-create_filelocksqlite_bucket-False-2000] PASSED [ 35%] tests/test_limiter.py::test_limiter_01[clock0-create_filelocksqlite_bucket-False-Duration.MINUTE] PASSED [ 35%] tests/test_limiter.py::test_limiter_01[clock0-create_mp_bucket-True-None] PASSED [ 36%] tests/test_limiter.py::test_limiter_01[clock0-create_mp_bucket-True-500] PASSED [ 36%] tests/test_limiter.py::test_limiter_01[clock0-create_mp_bucket-True-2000] PASSED [ 36%] tests/test_limiter.py::test_limiter_01[clock0-create_mp_bucket-True-Duration.MINUTE] PASSED [ 36%] tests/test_limiter.py::test_limiter_01[clock0-create_mp_bucket-False-None] PASSED [ 37%] tests/test_limiter.py::test_limiter_01[clock0-create_mp_bucket-False-500] PASSED [ 37%] tests/test_limiter.py::test_limiter_01[clock0-create_mp_bucket-False-2000] PASSED [ 37%] tests/test_limiter.py::test_limiter_01[clock0-create_mp_bucket-False-Duration.MINUTE] PASSED [ 37%] tests/test_limiter.py::test_limiter_01[clock1-create_in_memory_bucket-True-None] PASSED [ 38%] tests/test_limiter.py::test_limiter_01[clock1-create_in_memory_bucket-True-500] PASSED [ 38%] tests/test_limiter.py::test_limiter_01[clock1-create_in_memory_bucket-True-2000] PASSED [ 38%] tests/test_limiter.py::test_limiter_01[clock1-create_in_memory_bucket-True-Duration.MINUTE] PASSED [ 38%] tests/test_limiter.py::test_limiter_01[clock1-create_in_memory_bucket-False-None] PASSED [ 39%] tests/test_limiter.py::test_limiter_01[clock1-create_in_memory_bucket-False-500] PASSED [ 39%] tests/test_limiter.py::test_limiter_01[clock1-create_in_memory_bucket-False-2000] PASSED [ 39%] tests/test_limiter.py::test_limiter_01[clock1-create_in_memory_bucket-False-Duration.MINUTE] PASSED [ 39%] tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-True-None] PASSED [ 40%] tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-True-500] FAILED [ 40%] tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-True-2000] PASSED [ 40%] tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-True-Duration.MINUTE] PASSED [ 40%] tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-False-None] PASSED [ 41%] tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-False-500] PASSED [ 41%] tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-False-2000] PASSED [ 41%] tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-False-Duration.MINUTE] PASSED [ 41%] tests/test_limiter.py::test_limiter_01[clock1-create_sqlite_bucket-True-None] PASSED [ 42%] tests/test_limiter.py::test_limiter_01[clock1-create_sqlite_bucket-True-500] PASSED [ 42%] tests/test_limiter.py::test_limiter_01[clock1-create_sqlite_bucket-True-2000] PASSED [ 42%] tests/test_limiter.py::test_limiter_01[clock1-create_sqlite_bucket-True-Duration.MINUTE] PASSED [ 42%] tests/test_limiter.py::test_limiter_01[clock1-create_sqlite_bucket-False-None] PASSED [ 43%] tests/test_limiter.py::test_limiter_01[clock1-create_sqlite_bucket-False-500] PASSED [ 43%] tests/test_limiter.py::test_limiter_01[clock1-create_sqlite_bucket-False-2000] PASSED [ 43%] tests/test_limiter.py::test_limiter_01[clock1-create_sqlite_bucket-False-Duration.MINUTE] PASSED [ 43%] tests/test_limiter.py::test_limiter_01[clock1-create_async_redis_bucket-True-None] PASSED [ 44%] tests/test_limiter.py::test_limiter_01[clock1-create_async_redis_bucket-True-500] PASSED [ 44%] tests/test_limiter.py::test_limiter_01[clock1-create_async_redis_bucket-True-2000] PASSED [ 44%] tests/test_limiter.py::test_limiter_01[clock1-create_async_redis_bucket-True-Duration.MINUTE] PASSED [ 44%] tests/test_limiter.py::test_limiter_01[clock1-create_async_redis_bucket-False-None] PASSED [ 45%] tests/test_limiter.py::test_limiter_01[clock1-create_async_redis_bucket-False-500] PASSED [ 45%] tests/test_limiter.py::test_limiter_01[clock1-create_async_redis_bucket-False-2000] PASSED [ 45%] tests/test_limiter.py::test_limiter_01[clock1-create_async_redis_bucket-False-Duration.MINUTE] PASSED [ 45%] tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-True-None] PASSED [ 46%] tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-True-500] PASSED [ 46%] tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-True-2000] PASSED [ 46%] tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-True-Duration.MINUTE] PASSED [ 46%] tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-False-None] FAILED [ 47%] tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-False-500] FAILED [ 47%] tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-False-2000] FAILED [ 47%] tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-False-Duration.MINUTE] FAILED [ 47%] tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-True-None] PASSED [ 48%] tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-True-500] FAILED [ 48%] tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-True-2000] PASSED [ 48%] tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-True-Duration.MINUTE] PASSED [ 48%] tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-False-None] PASSED [ 49%] tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-False-500] FAILED [ 49%] tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-False-2000] FAILED [ 49%] tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-False-Duration.MINUTE] PASSED [ 49%] tests/test_limiter.py::test_limiter_01[clock2-create_in_memory_bucket-True-None] PASSED [ 50%] tests/test_limiter.py::test_limiter_01[clock2-create_in_memory_bucket-True-500] PASSED [ 50%] tests/test_limiter.py::test_limiter_01[clock2-create_in_memory_bucket-True-2000] PASSED [ 50%] tests/test_limiter.py::test_limiter_01[clock2-create_in_memory_bucket-True-Duration.MINUTE] PASSED [ 50%] tests/test_limiter.py::test_limiter_01[clock2-create_in_memory_bucket-False-None] PASSED [ 51%] tests/test_limiter.py::test_limiter_01[clock2-create_in_memory_bucket-False-500] PASSED [ 51%] tests/test_limiter.py::test_limiter_01[clock2-create_in_memory_bucket-False-2000] PASSED [ 51%] tests/test_limiter.py::test_limiter_01[clock2-create_in_memory_bucket-False-Duration.MINUTE] PASSED [ 51%] tests/test_limiter.py::test_limiter_01[clock2-create_redis_bucket-True-None] PASSED [ 52%] tests/test_limiter.py::test_limiter_01[clock2-create_redis_bucket-True-500] PASSED [ 52%] tests/test_limiter.py::test_limiter_01[clock2-create_redis_bucket-True-2000] PASSED [ 52%] tests/test_limiter.py::test_limiter_01[clock2-create_redis_bucket-True-Duration.MINUTE] PASSED [ 52%] tests/test_limiter.py::test_limiter_01[clock2-create_redis_bucket-False-None] PASSED [ 53%] tests/test_limiter.py::test_limiter_01[clock2-create_redis_bucket-False-500] PASSED [ 53%] tests/test_limiter.py::test_limiter_01[clock2-create_redis_bucket-False-2000] PASSED [ 53%] tests/test_limiter.py::test_limiter_01[clock2-create_redis_bucket-False-Duration.MINUTE] PASSED [ 53%] tests/test_limiter.py::test_limiter_01[clock2-create_sqlite_bucket-True-None] PASSED [ 54%] tests/test_limiter.py::test_limiter_01[clock2-create_sqlite_bucket-True-500] PASSED [ 54%] tests/test_limiter.py::test_limiter_01[clock2-create_sqlite_bucket-True-2000] PASSED [ 54%] tests/test_limiter.py::test_limiter_01[clock2-create_sqlite_bucket-True-Duration.MINUTE] PASSED [ 54%] tests/test_limiter.py::test_limiter_01[clock2-create_sqlite_bucket-False-None] PASSED [ 55%] tests/test_limiter.py::test_limiter_01[clock2-create_sqlite_bucket-False-500] PASSED [ 55%] tests/test_limiter.py::test_limiter_01[clock2-create_sqlite_bucket-False-2000] PASSED [ 55%] tests/test_limiter.py::test_limiter_01[clock2-create_sqlite_bucket-False-Duration.MINUTE] PASSED [ 55%] tests/test_limiter.py::test_limiter_01[clock2-create_async_redis_bucket-True-None] PASSED [ 56%] tests/test_limiter.py::test_limiter_01[clock2-create_async_redis_bucket-True-500] PASSED [ 56%] tests/test_limiter.py::test_limiter_01[clock2-create_async_redis_bucket-True-2000] PASSED [ 56%] tests/test_limiter.py::test_limiter_01[clock2-create_async_redis_bucket-True-Duration.MINUTE] PASSED [ 56%] tests/test_limiter.py::test_limiter_01[clock2-create_async_redis_bucket-False-None] PASSED [ 57%] tests/test_limiter.py::test_limiter_01[clock2-create_async_redis_bucket-False-500] PASSED [ 57%] tests/test_limiter.py::test_limiter_01[clock2-create_async_redis_bucket-False-2000] PASSED [ 57%] tests/test_limiter.py::test_limiter_01[clock2-create_async_redis_bucket-False-Duration.MINUTE] PASSED [ 57%] tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-True-None] FAILED [ 58%] tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-True-500] FAILED [ 58%] tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-True-2000] FAILED [ 58%] tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-True-Duration.MINUTE] FAILED [ 58%] tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-False-None] FAILED [ 59%] tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-False-500] FAILED [ 59%] tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-False-2000] FAILED [ 59%] tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-False-Duration.MINUTE] FAILED [ 59%] tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-None] FAILED [ 60%] tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-500] FAILED [ 60%] tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-2000] PASSED [ 60%] tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-Duration.MINUTE] FAILED [ 60%] tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-False-None] FAILED [ 61%] tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-False-500] PASSED [ 61%] tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-False-2000] PASSED [ 61%] tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-False-Duration.MINUTE] PASSED [ 61%] tests/test_limiter.py::test_limiter_decorator[clock0-create_in_memory_bucket-True-None] PASSED [ 62%] tests/test_limiter.py::test_limiter_decorator[clock0-create_in_memory_bucket-True-500] PASSED [ 62%] tests/test_limiter.py::test_limiter_decorator[clock0-create_in_memory_bucket-True-2000] PASSED [ 62%] tests/test_limiter.py::test_limiter_decorator[clock0-create_in_memory_bucket-True-Duration.MINUTE] PASSED [ 62%] tests/test_limiter.py::test_limiter_decorator[clock0-create_in_memory_bucket-False-None] PASSED [ 63%] tests/test_limiter.py::test_limiter_decorator[clock0-create_in_memory_bucket-False-500] PASSED [ 63%] tests/test_limiter.py::test_limiter_decorator[clock0-create_in_memory_bucket-False-2000] PASSED [ 63%] tests/test_limiter.py::test_limiter_decorator[clock0-create_in_memory_bucket-False-Duration.MINUTE] PASSED [ 63%] tests/test_limiter.py::test_limiter_decorator[clock0-create_redis_bucket-True-None] PASSED [ 64%] tests/test_limiter.py::test_limiter_decorator[clock0-create_redis_bucket-True-500] PASSED [ 64%] tests/test_limiter.py::test_limiter_decorator[clock0-create_redis_bucket-True-2000] PASSED [ 64%] tests/test_limiter.py::test_limiter_decorator[clock0-create_redis_bucket-True-Duration.MINUTE] PASSED [ 64%] tests/test_limiter.py::test_limiter_decorator[clock0-create_redis_bucket-False-None] PASSED [ 65%] tests/test_limiter.py::test_limiter_decorator[clock0-create_redis_bucket-False-500] PASSED [ 65%] tests/test_limiter.py::test_limiter_decorator[clock0-create_redis_bucket-False-2000] PASSED [ 65%] tests/test_limiter.py::test_limiter_decorator[clock0-create_redis_bucket-False-Duration.MINUTE] PASSED [ 65%] tests/test_limiter.py::test_limiter_decorator[clock0-create_sqlite_bucket-True-None] PASSED [ 66%] tests/test_limiter.py::test_limiter_decorator[clock0-create_sqlite_bucket-True-500] PASSED [ 66%] tests/test_limiter.py::test_limiter_decorator[clock0-create_sqlite_bucket-True-2000] PASSED [ 66%] tests/test_limiter.py::test_limiter_decorator[clock0-create_sqlite_bucket-True-Duration.MINUTE] PASSED [ 66%] tests/test_limiter.py::test_limiter_decorator[clock0-create_sqlite_bucket-False-None] PASSED [ 66%] tests/test_limiter.py::test_limiter_decorator[clock0-create_sqlite_bucket-False-500] PASSED [ 67%] tests/test_limiter.py::test_limiter_decorator[clock0-create_sqlite_bucket-False-2000] PASSED [ 67%] tests/test_limiter.py::test_limiter_decorator[clock0-create_sqlite_bucket-False-Duration.MINUTE] PASSED [ 67%] tests/test_limiter.py::test_limiter_decorator[clock0-create_async_redis_bucket-True-None] PASSED [ 67%] tests/test_limiter.py::test_limiter_decorator[clock0-create_async_redis_bucket-True-500] PASSED [ 68%] tests/test_limiter.py::test_limiter_decorator[clock0-create_async_redis_bucket-True-2000] PASSED [ 68%] tests/test_limiter.py::test_limiter_decorator[clock0-create_async_redis_bucket-True-Duration.MINUTE] PASSED [ 68%] tests/test_limiter.py::test_limiter_decorator[clock0-create_async_redis_bucket-False-None] PASSED [ 68%] tests/test_limiter.py::test_limiter_decorator[clock0-create_async_redis_bucket-False-500] PASSED [ 69%] tests/test_limiter.py::test_limiter_decorator[clock0-create_async_redis_bucket-False-2000] PASSED [ 69%] tests/test_limiter.py::test_limiter_decorator[clock0-create_async_redis_bucket-False-Duration.MINUTE] PASSED [ 69%] tests/test_limiter.py::test_limiter_decorator[clock0-create_filelocksqlite_bucket-True-None] PASSED [ 69%] tests/test_limiter.py::test_limiter_decorator[clock0-create_filelocksqlite_bucket-True-500] PASSED [ 70%] tests/test_limiter.py::test_limiter_decorator[clock0-create_filelocksqlite_bucket-True-2000] PASSED [ 70%] tests/test_limiter.py::test_limiter_decorator[clock0-create_filelocksqlite_bucket-True-Duration.MINUTE] PASSED [ 70%] tests/test_limiter.py::test_limiter_decorator[clock0-create_filelocksqlite_bucket-False-None] PASSED [ 70%] tests/test_limiter.py::test_limiter_decorator[clock0-create_filelocksqlite_bucket-False-500] PASSED [ 71%] tests/test_limiter.py::test_limiter_decorator[clock0-create_filelocksqlite_bucket-False-2000] PASSED [ 71%] tests/test_limiter.py::test_limiter_decorator[clock0-create_filelocksqlite_bucket-False-Duration.MINUTE] PASSED [ 71%] tests/test_limiter.py::test_limiter_decorator[clock0-create_mp_bucket-True-None] PASSED [ 71%] tests/test_limiter.py::test_limiter_decorator[clock0-create_mp_bucket-True-500] PASSED [ 72%] tests/test_limiter.py::test_limiter_decorator[clock0-create_mp_bucket-True-2000] PASSED [ 72%] tests/test_limiter.py::test_limiter_decorator[clock0-create_mp_bucket-True-Duration.MINUTE] PASSED [ 72%] tests/test_limiter.py::test_limiter_decorator[clock0-create_mp_bucket-False-None] PASSED [ 72%] tests/test_limiter.py::test_limiter_decorator[clock0-create_mp_bucket-False-500] PASSED [ 73%] tests/test_limiter.py::test_limiter_decorator[clock0-create_mp_bucket-False-2000] PASSED [ 73%] tests/test_limiter.py::test_limiter_decorator[clock0-create_mp_bucket-False-Duration.MINUTE] PASSED [ 73%] tests/test_limiter.py::test_limiter_decorator[clock1-create_in_memory_bucket-True-None] PASSED [ 73%] tests/test_limiter.py::test_limiter_decorator[clock1-create_in_memory_bucket-True-500] PASSED [ 74%] tests/test_limiter.py::test_limiter_decorator[clock1-create_in_memory_bucket-True-2000] PASSED [ 74%] tests/test_limiter.py::test_limiter_decorator[clock1-create_in_memory_bucket-True-Duration.MINUTE] PASSED [ 74%] tests/test_limiter.py::test_limiter_decorator[clock1-create_in_memory_bucket-False-None] PASSED [ 74%] tests/test_limiter.py::test_limiter_decorator[clock1-create_in_memory_bucket-False-500] PASSED [ 75%] tests/test_limiter.py::test_limiter_decorator[clock1-create_in_memory_bucket-False-2000] PASSED [ 75%] tests/test_limiter.py::test_limiter_decorator[clock1-create_in_memory_bucket-False-Duration.MINUTE] PASSED [ 75%] tests/test_limiter.py::test_limiter_decorator[clock1-create_redis_bucket-True-None] PASSED [ 75%] tests/test_limiter.py::test_limiter_decorator[clock1-create_redis_bucket-True-500] PASSED [ 76%] tests/test_limiter.py::test_limiter_decorator[clock1-create_redis_bucket-True-2000] PASSED [ 76%] tests/test_limiter.py::test_limiter_decorator[clock1-create_redis_bucket-True-Duration.MINUTE] PASSED [ 76%] tests/test_limiter.py::test_limiter_decorator[clock1-create_redis_bucket-False-None] PASSED [ 76%] tests/test_limiter.py::test_limiter_decorator[clock1-create_redis_bucket-False-500] PASSED [ 77%] tests/test_limiter.py::test_limiter_decorator[clock1-create_redis_bucket-False-2000] PASSED [ 77%] tests/test_limiter.py::test_limiter_decorator[clock1-create_redis_bucket-False-Duration.MINUTE] PASSED [ 77%] tests/test_limiter.py::test_limiter_decorator[clock1-create_sqlite_bucket-True-None] PASSED [ 77%] tests/test_limiter.py::test_limiter_decorator[clock1-create_sqlite_bucket-True-500] PASSED [ 78%] tests/test_limiter.py::test_limiter_decorator[clock1-create_sqlite_bucket-True-2000] PASSED [ 78%] tests/test_limiter.py::test_limiter_decorator[clock1-create_sqlite_bucket-True-Duration.MINUTE] PASSED [ 78%] tests/test_limiter.py::test_limiter_decorator[clock1-create_sqlite_bucket-False-None] PASSED [ 78%] tests/test_limiter.py::test_limiter_decorator[clock1-create_sqlite_bucket-False-500] PASSED [ 79%] tests/test_limiter.py::test_limiter_decorator[clock1-create_sqlite_bucket-False-2000] PASSED [ 79%] tests/test_limiter.py::test_limiter_decorator[clock1-create_sqlite_bucket-False-Duration.MINUTE] PASSED [ 79%] tests/test_limiter.py::test_limiter_decorator[clock1-create_async_redis_bucket-True-None] PASSED [ 79%] tests/test_limiter.py::test_limiter_decorator[clock1-create_async_redis_bucket-True-500] PASSED [ 80%] tests/test_limiter.py::test_limiter_decorator[clock1-create_async_redis_bucket-True-2000] PASSED [ 80%] tests/test_limiter.py::test_limiter_decorator[clock1-create_async_redis_bucket-True-Duration.MINUTE] PASSED [ 80%] tests/test_limiter.py::test_limiter_decorator[clock1-create_async_redis_bucket-False-None] PASSED [ 80%] tests/test_limiter.py::test_limiter_decorator[clock1-create_async_redis_bucket-False-500] PASSED [ 81%] tests/test_limiter.py::test_limiter_decorator[clock1-create_async_redis_bucket-False-2000] PASSED [ 81%] tests/test_limiter.py::test_limiter_decorator[clock1-create_async_redis_bucket-False-Duration.MINUTE] PASSED [ 81%] tests/test_limiter.py::test_limiter_decorator[clock1-create_filelocksqlite_bucket-True-None] PASSED [ 81%] tests/test_limiter.py::test_limiter_decorator[clock1-create_filelocksqlite_bucket-True-500] PASSED [ 82%] tests/test_limiter.py::test_limiter_decorator[clock1-create_filelocksqlite_bucket-True-2000] PASSED [ 82%] tests/test_limiter.py::test_limiter_decorator[clock1-create_filelocksqlite_bucket-True-Duration.MINUTE] PASSED [ 82%] tests/test_limiter.py::test_limiter_decorator[clock1-create_filelocksqlite_bucket-False-None] PASSED [ 82%] tests/test_limiter.py::test_limiter_decorator[clock1-create_filelocksqlite_bucket-False-500] PASSED [ 83%] tests/test_limiter.py::test_limiter_decorator[clock1-create_filelocksqlite_bucket-False-2000] PASSED [ 83%] tests/test_limiter.py::test_limiter_decorator[clock1-create_filelocksqlite_bucket-False-Duration.MINUTE] PASSED [ 83%] tests/test_limiter.py::test_limiter_decorator[clock1-create_mp_bucket-True-None] PASSED [ 83%] tests/test_limiter.py::test_limiter_decorator[clock1-create_mp_bucket-True-500] PASSED [ 84%] tests/test_limiter.py::test_limiter_decorator[clock1-create_mp_bucket-True-2000] PASSED [ 84%] tests/test_limiter.py::test_limiter_decorator[clock1-create_mp_bucket-True-Duration.MINUTE] PASSED [ 84%] tests/test_limiter.py::test_limiter_decorator[clock1-create_mp_bucket-False-None] PASSED [ 84%] tests/test_limiter.py::test_limiter_decorator[clock1-create_mp_bucket-False-500] PASSED [ 85%] tests/test_limiter.py::test_limiter_decorator[clock1-create_mp_bucket-False-2000] PASSED [ 85%] tests/test_limiter.py::test_limiter_decorator[clock1-create_mp_bucket-False-Duration.MINUTE] PASSED [ 85%] tests/test_limiter.py::test_limiter_decorator[clock2-create_in_memory_bucket-True-None] PASSED [ 85%] tests/test_limiter.py::test_limiter_decorator[clock2-create_in_memory_bucket-True-500] PASSED [ 86%] tests/test_limiter.py::test_limiter_decorator[clock2-create_in_memory_bucket-True-2000] PASSED [ 86%] tests/test_limiter.py::test_limiter_decorator[clock2-create_in_memory_bucket-True-Duration.MINUTE] PASSED [ 86%] tests/test_limiter.py::test_limiter_decorator[clock2-create_in_memory_bucket-False-None] PASSED [ 86%] tests/test_limiter.py::test_limiter_decorator[clock2-create_in_memory_bucket-False-500] PASSED [ 87%] tests/test_limiter.py::test_limiter_decorator[clock2-create_in_memory_bucket-False-2000] PASSED [ 87%] tests/test_limiter.py::test_limiter_decorator[clock2-create_in_memory_bucket-False-Duration.MINUTE] PASSED [ 87%] tests/test_limiter.py::test_limiter_decorator[clock2-create_redis_bucket-True-None] PASSED [ 87%] tests/test_limiter.py::test_limiter_decorator[clock2-create_redis_bucket-True-500] PASSED [ 88%] tests/test_limiter.py::test_limiter_decorator[clock2-create_redis_bucket-True-2000] PASSED [ 88%] tests/test_limiter.py::test_limiter_decorator[clock2-create_redis_bucket-True-Duration.MINUTE] PASSED [ 88%] tests/test_limiter.py::test_limiter_decorator[clock2-create_redis_bucket-False-None] PASSED [ 88%] tests/test_limiter.py::test_limiter_decorator[clock2-create_redis_bucket-False-500] PASSED [ 89%] tests/test_limiter.py::test_limiter_decorator[clock2-create_redis_bucket-False-2000] PASSED [ 89%] tests/test_limiter.py::test_limiter_decorator[clock2-create_redis_bucket-False-Duration.MINUTE] PASSED [ 89%] tests/test_limiter.py::test_limiter_decorator[clock2-create_sqlite_bucket-True-None] PASSED [ 89%] tests/test_limiter.py::test_limiter_decorator[clock2-create_sqlite_bucket-True-500] PASSED [ 90%] tests/test_limiter.py::test_limiter_decorator[clock2-create_sqlite_bucket-True-2000] PASSED [ 90%] tests/test_limiter.py::test_limiter_decorator[clock2-create_sqlite_bucket-True-Duration.MINUTE] PASSED [ 90%] tests/test_limiter.py::test_limiter_decorator[clock2-create_sqlite_bucket-False-None] PASSED [ 90%] tests/test_limiter.py::test_limiter_decorator[clock2-create_sqlite_bucket-False-500] PASSED [ 91%] tests/test_limiter.py::test_limiter_decorator[clock2-create_sqlite_bucket-False-2000] PASSED [ 91%] tests/test_limiter.py::test_limiter_decorator[clock2-create_sqlite_bucket-False-Duration.MINUTE] PASSED [ 91%] tests/test_limiter.py::test_limiter_decorator[clock2-create_async_redis_bucket-True-None] PASSED [ 91%] tests/test_limiter.py::test_limiter_decorator[clock2-create_async_redis_bucket-True-500] PASSED [ 92%] tests/test_limiter.py::test_limiter_decorator[clock2-create_async_redis_bucket-True-2000] PASSED [ 92%] tests/test_limiter.py::test_limiter_decorator[clock2-create_async_redis_bucket-True-Duration.MINUTE] PASSED [ 92%] tests/test_limiter.py::test_limiter_decorator[clock2-create_async_redis_bucket-False-None] PASSED [ 92%] tests/test_limiter.py::test_limiter_decorator[clock2-create_async_redis_bucket-False-500] PASSED [ 93%] tests/test_limiter.py::test_limiter_decorator[clock2-create_async_redis_bucket-False-2000] PASSED [ 93%] tests/test_limiter.py::test_limiter_decorator[clock2-create_async_redis_bucket-False-Duration.MINUTE] PASSED [ 93%] tests/test_limiter.py::test_limiter_decorator[clock2-create_filelocksqlite_bucket-True-None] PASSED [ 93%] tests/test_limiter.py::test_limiter_decorator[clock2-create_filelocksqlite_bucket-True-500] PASSED [ 94%] tests/test_limiter.py::test_limiter_decorator[clock2-create_filelocksqlite_bucket-True-2000] PASSED [ 94%] tests/test_limiter.py::test_limiter_decorator[clock2-create_filelocksqlite_bucket-True-Duration.MINUTE] PASSED [ 94%] tests/test_limiter.py::test_limiter_decorator[clock2-create_filelocksqlite_bucket-False-None] PASSED [ 94%] tests/test_limiter.py::test_limiter_decorator[clock2-create_filelocksqlite_bucket-False-500] PASSED [ 95%] tests/test_limiter.py::test_limiter_decorator[clock2-create_filelocksqlite_bucket-False-2000] PASSED [ 95%] tests/test_limiter.py::test_limiter_decorator[clock2-create_filelocksqlite_bucket-False-Duration.MINUTE] PASSED [ 95%] tests/test_limiter.py::test_limiter_decorator[clock2-create_mp_bucket-True-None] PASSED [ 95%] tests/test_limiter.py::test_limiter_decorator[clock2-create_mp_bucket-True-500] PASSED [ 96%] tests/test_limiter.py::test_limiter_decorator[clock2-create_mp_bucket-True-2000] PASSED [ 96%] tests/test_limiter.py::test_limiter_decorator[clock2-create_mp_bucket-True-Duration.MINUTE] PASSED [ 96%] tests/test_limiter.py::test_limiter_decorator[clock2-create_mp_bucket-False-None] PASSED [ 96%] tests/test_limiter.py::test_limiter_decorator[clock2-create_mp_bucket-False-500] PASSED [ 97%] tests/test_limiter.py::test_limiter_decorator[clock2-create_mp_bucket-False-2000] PASSED [ 97%] tests/test_limiter.py::test_limiter_decorator[clock2-create_mp_bucket-False-Duration.MINUTE] PASSED [ 97%] tests/test_limiter.py::test_wait_too_long PASSED [ 97%] tests/test_others.py::test_duration PASSED [ 98%] tests/test_others.py::test_readable_duration PASSED [ 98%] tests/test_others.py::test_rate PASSED [ 98%] tests/test_others.py::test_binary_search PASSED [ 98%] tests/test_others.py::test_rate_validator PASSED [ 99%] tests/test_others.py::test_clock[clock0] PASSED [ 99%] tests/test_others.py::test_clock[clock1] PASSED [ 99%] tests/test_others.py::test_clock[clock2] PASSED [ 99%] tests/test_others.py::test_sqlite_clock PASSED [100%] =================================== FAILURES =================================== _____________ test_limiter_01[clock1-create_redis_bucket-True-500] _____________ clock = create_bucket = limiter_should_raise = True, limiter_delay = 500 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:86: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 100 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:85 cost = 100 _______ test_limiter_01[clock1-create_filelocksqlite_bucket-False-None] ________ clock = create_bucket = limiter_should_raise = False, limiter_delay = None @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") await prefilling_bucket(limiter, 0.3, item) if not limiter_should_raise: acquire_ok, cost = await async_acquire(limiter, item) if limiter_delay is None: assert cost <= 50 assert not acquire_ok else: assert acquire_ok else: if limiter_delay is None: with pytest.raises(BucketFullException): acquire_ok, cost = await async_acquire(limiter, item) else: acquire_ok, cost = await async_acquire(limiter, item) assert cost > 350 assert acquire_ok # # Flush before testing again await flushing_bucket(bucket) logger.info("Limiter Test #2") > await prefilling_bucket(limiter, 0, item) tests/test_limiter.py:137: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:80: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_vt64z.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-ICv4D1LgxS' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 12 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #2 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 254 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_vt64z.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-ICv4D1LgxS' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 12 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:85 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:91 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:136 Limiter Test #2 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 254 ________ test_limiter_01[clock1-create_filelocksqlite_bucket-False-500] ________ clock = create_bucket = limiter_should_raise = False, limiter_delay = 500 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:86: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_Txbz3.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-Cw36DQWKDc' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 70 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_Txbz3.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-Cw36DQWKDc' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:85 cost = 70 _______ test_limiter_01[clock1-create_filelocksqlite_bucket-False-2000] ________ clock = create_bucket = limiter_should_raise = False, limiter_delay = 2000 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_DUjdW.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-8guNHGVTjG' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 100 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_DUjdW.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-8guNHGVTjG' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:85 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:91 cost = 100 __ test_limiter_01[clock1-create_filelocksqlite_bucket-False-Duration.MINUTE] __ clock = create_bucket = limiter_should_raise = False, limiter_delay = @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:80: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_c2knX.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-NzzM8KBpgv' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 83 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_c2knX.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-NzzM8KBpgv' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 83 ______________ test_limiter_01[clock1-create_mp_bucket-True-500] _______________ clock = create_bucket = limiter_should_raise = True, limiter_delay = 500 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 132 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:85 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:91 cost = 132 ______________ test_limiter_01[clock1-create_mp_bucket-False-500] ______________ clock = create_bucket = limiter_should_raise = False, limiter_delay = 500 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 68 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:85 cost = 1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:91 cost = 68 _____________ test_limiter_01[clock1-create_mp_bucket-False-2000] ______________ clock = create_bucket = limiter_should_raise = False, limiter_delay = 2000 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 98 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:85 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:91 cost = 98 ________ test_limiter_01[clock2-create_filelocksqlite_bucket-True-None] ________ clock = create_bucket = limiter_should_raise = True, limiter_delay = None @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_7oBnd.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-BD3GUMhAwh' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 8 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 192 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_7oBnd.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-BD3GUMhAwh' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 8 INFO pyrate_limiter:helpers.py:85 cost = 0 INFO pyrate_limiter:helpers.py:91 cost = 192 ________ test_limiter_01[clock2-create_filelocksqlite_bucket-True-500] _________ clock = create_bucket = limiter_should_raise = True, limiter_delay = 500 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:86: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_36X6B.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-UvM6fkeFWA' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 395 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_36X6B.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-UvM6fkeFWA' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 395 ________ test_limiter_01[clock2-create_filelocksqlite_bucket-True-2000] ________ clock = create_bucket = limiter_should_raise = True, limiter_delay = 2000 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_3YTKG.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-Gxz9TSHHbW' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 160 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_3YTKG.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-Gxz9TSHHbW' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 0 INFO pyrate_limiter:helpers.py:91 cost = 160 __ test_limiter_01[clock2-create_filelocksqlite_bucket-True-Duration.MINUTE] ___ clock = create_bucket = limiter_should_raise = True, limiter_delay = @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:80: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_TAAft.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-PeupXcRAO4' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 305 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_TAAft.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-PeupXcRAO4' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 305 _______ test_limiter_01[clock2-create_filelocksqlite_bucket-False-None] ________ clock = create_bucket = limiter_should_raise = False, limiter_delay = None @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:86: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_P8Uuf.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-fN1fUZu50B' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 302 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_P8Uuf.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-fN1fUZu50B' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 302 ________ test_limiter_01[clock2-create_filelocksqlite_bucket-False-500] ________ clock = create_bucket = limiter_should_raise = False, limiter_delay = 500 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:86: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_C7pB4.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-0LOZ1TnOG9' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 405 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_C7pB4.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-0LOZ1TnOG9' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 405 _______ test_limiter_01[clock2-create_filelocksqlite_bucket-False-2000] ________ clock = create_bucket = limiter_should_raise = False, limiter_delay = 2000 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_sbi4I.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-STWYb8WQY5' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 758 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_sbi4I.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-STWYb8WQY5' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 0 INFO pyrate_limiter:helpers.py:91 cost = 758 __ test_limiter_01[clock2-create_filelocksqlite_bucket-False-Duration.MINUTE] __ clock = create_bucket = limiter_should_raise = False, limiter_delay = @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:86: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_7m3Nd.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-7YHmedGId0' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 328 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_7m3Nd.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-7YHmedGId0' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 328 ______________ test_limiter_01[clock2-create_mp_bucket-True-None] ______________ clock = create_bucket = limiter_should_raise = True, limiter_delay = None @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 308 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 0 INFO pyrate_limiter:helpers.py:91 cost = 308 ______________ test_limiter_01[clock2-create_mp_bucket-True-500] _______________ clock = create_bucket = limiter_should_raise = True, limiter_delay = 500 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 1 INFO:pyrate_limiter:cost = 130 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 1 INFO pyrate_limiter:helpers.py:91 cost = 130 ________ test_limiter_01[clock2-create_mp_bucket-True-Duration.MINUTE] _________ clock = create_bucket = limiter_should_raise = True, limiter_delay = @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 370 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 0 INFO pyrate_limiter:helpers.py:91 cost = 370 _____________ test_limiter_01[clock2-create_mp_bucket-False-None] ______________ clock = create_bucket = limiter_should_raise = False, limiter_delay = None @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") await prefilling_bucket(limiter, 0.3, item) if not limiter_should_raise: acquire_ok, cost = await async_acquire(limiter, item) if limiter_delay is None: assert cost <= 50 assert not acquire_ok else: assert acquire_ok else: if limiter_delay is None: with pytest.raises(BucketFullException): acquire_ok, cost = await async_acquire(limiter, item) else: acquire_ok, cost = await async_acquire(limiter, item) assert cost > 350 assert acquire_ok # # Flush before testing again await flushing_bucket(bucket) logger.info("Limiter Test #2") > await prefilling_bucket(limiter, 0, item) tests/test_limiter.py:137: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 3 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 1 INFO:pyrate_limiter:Limiter Test #2 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 77 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 3 INFO pyrate_limiter:helpers.py:85 cost = 0 INFO pyrate_limiter:helpers.py:91 cost = 1 INFO pyrate_limiter:test_limiter.py:136 Limiter Test #2 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 0 INFO pyrate_limiter:helpers.py:91 cost = 77 =============================== warnings summary =============================== tests/test_limiter.py: 48 warnings /usr/lib/python3.13/multiprocessing/popen_fork.py:67: DeprecationWarning: This process (pid=2098901) is multi-threaded, use of fork() may lead to deadlocks in the child. self.pid = os.fork() -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ============================= slowest 10 durations ============================= 5.69s call tests/test_bucket_all.py::test_bucket_01[clock0-create_redis_bucket] 5.59s call tests/test_bucket_all.py::test_bucket_performance[create_filelocksqlite_bucket] 5.38s call tests/test_bucket_all.py::test_bucket_01[clock0-create_async_redis_bucket] 5.29s call tests/test_bucket_all.py::test_bucket_02[clock2-create_mp_bucket] 5.28s call tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-2000] 5.27s call tests/test_bucket_all.py::test_bucket_02[clock1-create_mp_bucket] 5.22s call tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-None] 5.15s call tests/test_bucket_all.py::test_bucket_02[clock0-create_mp_bucket] 5.13s call tests/test_bucket_all.py::test_bucket_02[clock2-create_async_redis_bucket] 5.08s call tests/test_bucket_all.py::test_bucket_02[clock1-create_async_redis_bucket] =========================== short test summary info ============================ FAILED tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-True-500] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-False-None] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-False-500] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-False-2000] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-False-Duration.MINUTE] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-True-500] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-False-500] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-False-2000] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-True-None] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-True-500] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-True-2000] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-True-Duration.MINUTE] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-False-None] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-False-500] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-False-2000] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-False-Duration.MINUTE] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-None] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-500] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-Duration.MINUTE] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-False-None] - AssertionError === 20 failed, 383 passed, 467 deselected, 48 warnings in 446.50s (0:07:26) ==== E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /build/reproducible-path/pyrate-limiter-3.9.0/.pybuild/cpython3_3.13/build; python3.13 -m pytest -vv --durations=10 --ignore=tests/test_multiprocessing.py -k " not postgres and not test_limiter_constructor_02 and not test_bucket_leak and not test_factory_leak and not test_limiter_async_factory_get and not test_mp_bucket_async and not test_bucket_full and not test_limiter_concurrency" dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 returned exit code 13 make: *** [debian/rules:16: binary] Error 25 dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2 I: copying local configuration E: Failed autobuilding of package I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem W: Stray processes left from build: * system-pbuilder-build-pyrate\x2dlimiter_3.9.0\x2d4-2056616.slice - Slice /system/pbuilder/build/pyrate-limiter_3.9.0-4/2056616 Loaded: loaded Active: active since Wed 2025-10-29 19:07:13 -12; 10min ago Invocation: 48ed70fa62f1498bbe931a9fadb62d3e Tasks: 6 Memory: 61.1M (peak: 543.5M, swap: 317.2M, swap peak: 317.2M) CPU: 1min 39.097s CGroup: /system.slice/system-pbuilder.slice/system-pbuilder-build.slice/system-pbuilder-build-pyrate\x2dlimiter_3.9.0\x2d4.slice/system-pbuilder-build-pyrate\x2dlimiter_3.9.0\x2d4-2056616.slice `-run-p2081142-i115317972.scope `-2098885 "redis-server *:6379" Oct 29 19:07:13 codethink04-arm64 systemd[1]: Created slice system-pbuilder-build-pyrate\x2dlimiter_3.9.0\x2d4-2056616.slice - Slice /system/pbuilder/build/pyrate-limiter_3.9.0-4/2056616. I: cleaning the build env I: removing directory /srv/workspace/pbuilder/2056616 and its subdirectories Starting cleanup. All cleanup done. Thu Oct 30 07:17:15 UTC 2025 - reproducible_build.sh stopped running as /tmp/jenkins-script-OtuBSwAS, removing. /srv/reproducible-results/rbuild-debian/r-b-build.3thU9jMr: total 16 drwxrwxr-x 2 jenkins jenkins 4096 Oct 30 07:17 b1 drwxrwxr-x 2 jenkins jenkins 4096 Oct 30 07:07 b2 -rw-rw-r-- 1 jenkins jenkins 2575 Oct 28 09:02 pyrate-limiter_3.9.0-4.dsc -rw------- 1 jenkins jenkins 3729 Oct 30 07:07 rbuildlog.ccnPZi0 /srv/reproducible-results/rbuild-debian/r-b-build.3thU9jMr/b1: total 184 -rw-r--r-- 1 jenkins jenkins 185019 Oct 30 07:17 build.log /srv/reproducible-results/rbuild-debian/r-b-build.3thU9jMr/b2: total 0 Thu Oct 30 07:17:16 UTC 2025 I: Deleting $TMPDIR on codethink04-arm64.debian.net. I: pbuilder: network access will be disabled during build I: Current time: Wed Oct 29 19:07:06 -12 2025 I: pbuilder-time-stamp: 1761808026 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/forky-reproducible-base.tgz] I: copying local configuration W: --override-config is not set; not updating apt.conf Read the manpage for details. I: mounting /proc filesystem I: mounting /sys filesystem I: creating /{dev,run}/shm I: mounting /dev/pts filesystem I: redirecting /dev/ptmx to /dev/pts/ptmx I: policy-rc.d already exists I: Copying source file I: copying [pyrate-limiter_3.9.0-4.dsc] I: copying [./pyrate-limiter_3.9.0.orig.tar.gz] I: copying [./pyrate-limiter_3.9.0-4.debian.tar.xz] I: Extracting source dpkg-source: warning: cannot verify inline signature for ./pyrate-limiter_3.9.0-4.dsc: no acceptable signature found dpkg-source: info: extracting pyrate-limiter in pyrate-limiter-3.9.0 dpkg-source: info: unpacking pyrate-limiter_3.9.0.orig.tar.gz dpkg-source: info: unpacking pyrate-limiter_3.9.0-4.debian.tar.xz dpkg-source: info: using patch list from debian/patches/series dpkg-source: info: applying 0001-read-version-from-pyproject.toml.patch dpkg-source: info: applying 0002-remove-privacy-breach-images.patch I: using fakeroot in build. I: Installing the build-deps I: user script /srv/workspace/pbuilder/2056616/tmp/hooks/D02_print_environment starting I: set BUILDDIR='/build/reproducible-path' BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' BUILDUSERNAME='pbuilder1' BUILD_ARCH='arm64' DEBIAN_FRONTEND='noninteractive' DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 ' DISTRIBUTION='forky' HOME='/root' HOST_ARCH='arm64' IFS=' ' INVOCATION_ID='a3d86fa39cc94a49b4aa60ffd974c0de' LANG='C' LANGUAGE='en_US:en' LC_ALL='C' MAIL='/var/mail/root' OPTIND='1' PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' PBCURRENTCOMMANDLINEOPERATION='build' PBUILDER_OPERATION='build' PBUILDER_PKGDATADIR='/usr/share/pbuilder' PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' PBUILDER_SYSCONFDIR='/etc' PPID='2056616' PS1='# ' PS2='> ' PS4='+ ' PWD='/' SHELL='/bin/bash' SHLVL='2' SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.3thU9jMr/pbuilderrc_y1tg --distribution forky --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/forky-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.3thU9jMr/b1 --logfile b1/build.log pyrate-limiter_3.9.0-4.dsc' SUDO_GID='109' SUDO_HOME='/var/lib/jenkins' SUDO_UID='104' SUDO_USER='jenkins' TERM='unknown' TZ='/usr/share/zoneinfo/Etc/GMT+12' USER='root' _='/usr/bin/systemd-run' http_proxy='http://192.168.101.4:3128' I: uname -a Linux codethink04-arm64 6.12.48+deb13-cloud-arm64 #1 SMP Debian 6.12.48-1 (2025-09-20) aarch64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 Aug 10 12:30 /bin -> usr/bin I: user script /srv/workspace/pbuilder/2056616/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy Version: 0.invalid.0 Architecture: arm64 Maintainer: Debian Pbuilder Team Description: Dummy package to satisfy dependencies with aptitude - created by pbuilder This package was created automatically by pbuilder to satisfy the build-dependencies of the package being currently built. Depends: debhelper-compat (= 13), dh-sequence-python3, dh-sequence-sphinxdoc, pybuild-plugin-pyproject, python3-poetry-core, furo, python3-all, python3-filelock, python3-myst-parser, python3-psycopg-pool, python3-pytest, python3-pytest-asyncio, python3-pytest-cov, python3-redis, python3-sphinx, python3-sphinx-autodoc-typehints, python3-sphinx-copybutton, python3-sphinxcontrib.apidoc, redis dpkg-deb: building package 'pbuilder-satisfydepends-dummy' in '/tmp/satisfydepends-aptitude/pbuilder-satisfydepends-dummy.deb'. Selecting previously unselected package pbuilder-satisfydepends-dummy. (Reading database ... 19971 files and directories currently installed.) Preparing to unpack .../pbuilder-satisfydepends-dummy.deb ... Unpacking pbuilder-satisfydepends-dummy (0.invalid.0) ... dpkg: pbuilder-satisfydepends-dummy: dependency problems, but configuring anyway as you requested: pbuilder-satisfydepends-dummy depends on debhelper-compat (= 13); however: Package debhelper-compat is not installed. pbuilder-satisfydepends-dummy depends on dh-sequence-python3; however: Package dh-sequence-python3 is not installed. pbuilder-satisfydepends-dummy depends on dh-sequence-sphinxdoc; however: Package dh-sequence-sphinxdoc is not installed. pbuilder-satisfydepends-dummy depends on pybuild-plugin-pyproject; however: Package pybuild-plugin-pyproject is not installed. pbuilder-satisfydepends-dummy depends on python3-poetry-core; however: Package python3-poetry-core is not installed. pbuilder-satisfydepends-dummy depends on furo; however: Package furo is not installed. pbuilder-satisfydepends-dummy depends on python3-all; however: Package python3-all is not installed. pbuilder-satisfydepends-dummy depends on python3-filelock; however: Package python3-filelock is not installed. pbuilder-satisfydepends-dummy depends on python3-myst-parser; however: Package python3-myst-parser is not installed. pbuilder-satisfydepends-dummy depends on python3-psycopg-pool; however: Package python3-psycopg-pool is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest; however: Package python3-pytest is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest-asyncio; however: Package python3-pytest-asyncio is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest-cov; however: Package python3-pytest-cov is not installed. pbuilder-satisfydepends-dummy depends on python3-redis; however: Package python3-redis is not installed. pbuilder-satisfydepends-dummy depends on python3-sphinx; however: Package python3-sphinx is not installed. pbuilder-satisfydepends-dummy depends on python3-sphinx-autodoc-typehints; however: Package python3-sphinx-autodoc-typehints is not installed. pbuilder-satisfydepends-dummy depends on python3-sphinx-copybutton; however: Package python3-sphinx-copybutton is not installed. pbuilder-satisfydepends-dummy depends on python3-sphinxcontrib.apidoc; however: Package python3-sphinxcontrib.apidoc is not installed. pbuilder-satisfydepends-dummy depends on redis; however: Package redis is not installed. Setting up pbuilder-satisfydepends-dummy (0.invalid.0) ... Reading package lists... Building dependency tree... Reading state information... Initializing package states... Writing extended state information... Building tag database... pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) pbuilder-satisfydepends-dummy is already installed at the requested version (0.invalid.0) The following NEW packages will be installed: autoconf{a} automake{a} autopoint{a} autotools-dev{a} bsdextrautils{a} ca-certificates{a} debhelper{a} dh-autoreconf{a} dh-python{a} dh-strip-nondeterminism{a} docutils-common{a} dwz{a} file{a} furo{a} gettext{a} gettext-base{a} groff-base{a} intltool-debian{a} libarchive-zip-perl{a} libcom-err2{a} libdebhelper-perl{a} libelf1t64{a} libexpat1{a} libffi8{a} libfile-stripnondeterminism-perl{a} libgssapi-krb5-2{a} libjemalloc2{a} libjs-jquery{a} libjs-jquery-hotkeys{a} libjs-jquery-isonscreen{a} libjs-jquery-metadata{a} libjs-jquery-tablesorter{a} libjs-jquery-throttle-debounce{a} libjs-sphinxdoc{a} libjson-perl{a} libk5crypto3{a} libkeyutils1{a} libkrb5-3{a} libkrb5support0{a} libldap2{a} liblzf1{a} libmagic-mgc{a} libmagic1t64{a} libpipeline1{a} libpq5{a} libpython3-stdlib{a} libpython3.13-minimal{a} libpython3.13-stdlib{a} libreadline8t64{a} libsasl2-2{a} libsasl2-modules-db{a} libtool{a} libuchardet0{a} libunistring5{a} libxml2-16{a} libyaml-0-2{a} m4{a} man-db{a} media-types{a} netbase{a} openssl{a} po-debconf{a} pybuild-plugin-pyproject{a} python-babel-localedata{a} python3{a} python3-accessible-pygments{a} python3-alabaster{a} python3-all{a} python3-async-generator{a} python3-autocommand{a} python3-babel{a} python3-bs4{a} python3-build{a} python3-certifi{a} python3-chardet{a} python3-charset-normalizer{a} python3-coverage{a} python3-defusedxml{a} python3-docutils{a} python3-filelock{a} python3-idna{a} python3-imagesize{a} python3-inflect{a} python3-iniconfig{a} python3-installer{a} python3-jaraco.context{a} python3-jaraco.functools{a} python3-jaraco.text{a} python3-jinja2{a} python3-linkify-it{a} python3-markdown-it{a} python3-markupsafe{a} python3-mdit-py-plugins{a} python3-mdurl{a} python3-minimal{a} python3-more-itertools{a} python3-myst-parser{a} python3-packaging{a} python3-pbr{a} python3-pkg-resources{a} python3-pluggy{a} python3-poetry-core{a} python3-psycopg{a} python3-psycopg-pool{a} python3-pygments{a} python3-pyproject-hooks{a} python3-pytest{a} python3-pytest-asyncio{a} python3-pytest-cov{a} python3-redis{a} python3-requests{a} python3-roman-numerals{a} python3-setuptools{a} python3-snowballstemmer{a} python3-soupsieve{a} python3-sphinx{a} python3-sphinx-autodoc-typehints{a} python3-sphinx-copybutton{a} python3-sphinxcontrib.apidoc{a} python3-typeguard{a} python3-typing-extensions{a} python3-uc-micro{a} python3-urllib3{a} python3-wheel{a} python3-yaml{a} python3-zipp{a} python3.13{a} python3.13-minimal{a} readline-common{a} redis{a} redis-server{a} redis-tools{a} sensible-utils{a} sgml-base{a} sphinx-basic-ng{a} sphinx-common{a} tzdata{a} xml-core{a} The following packages are RECOMMENDED but will NOT be installed: curl javascript-common krb5-locales libarchive-cpio-perl libjson-xs-perl libldap-common libltdl-dev libmail-sendmail-perl libpaper-utils libsasl2-modules lynx python3-lxml python3-pil python3-psycopg-c wget 0 packages upgraded, 138 newly installed, 0 to remove and 0 not upgraded. Need to get 36.3 MB of archives. After unpacking 159 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian forky/main arm64 libexpat1 arm64 2.7.3-1 [96.5 kB] Get: 2 http://deb.debian.org/debian forky/main arm64 libpython3.13-minimal arm64 3.13.9-1 [858 kB] Get: 3 http://deb.debian.org/debian forky/main arm64 python3.13-minimal arm64 3.13.9-1 [2061 kB] Get: 4 http://deb.debian.org/debian forky/main arm64 python3-minimal arm64 3.13.7-1 [27.2 kB] Get: 5 http://deb.debian.org/debian forky/main arm64 media-types all 14.0.0 [30.8 kB] Get: 6 http://deb.debian.org/debian forky/main arm64 netbase all 6.5 [12.4 kB] Get: 7 http://deb.debian.org/debian forky/main arm64 tzdata all 2025b-5 [260 kB] Get: 8 http://deb.debian.org/debian forky/main arm64 libffi8 arm64 3.5.2-2 [21.5 kB] Get: 9 http://deb.debian.org/debian forky/main arm64 readline-common all 8.3-3 [74.8 kB] Get: 10 http://deb.debian.org/debian forky/main arm64 libreadline8t64 arm64 8.3-3 [169 kB] Get: 11 http://deb.debian.org/debian forky/main arm64 libpython3.13-stdlib arm64 3.13.9-1 [1900 kB] Get: 12 http://deb.debian.org/debian forky/main arm64 python3.13 arm64 3.13.9-1 [764 kB] Get: 13 http://deb.debian.org/debian forky/main arm64 libpython3-stdlib arm64 3.13.7-1 [10.2 kB] Get: 14 http://deb.debian.org/debian forky/main arm64 python3 arm64 3.13.7-1 [28.3 kB] Get: 15 http://deb.debian.org/debian forky/main arm64 libjemalloc2 arm64 5.3.0-3 [216 kB] Get: 16 http://deb.debian.org/debian forky/main arm64 liblzf1 arm64 3.6-4+b3 [10.1 kB] Get: 17 http://deb.debian.org/debian forky/main arm64 redis-tools arm64 5:8.0.4-1 [1142 kB] Get: 18 http://deb.debian.org/debian forky/main arm64 redis-server arm64 5:8.0.4-1 [66.9 kB] Get: 19 http://deb.debian.org/debian forky/main arm64 sensible-utils all 0.0.26 [27.0 kB] Get: 20 http://deb.debian.org/debian forky/main arm64 openssl arm64 3.5.4-1 [1457 kB] Get: 21 http://deb.debian.org/debian forky/main arm64 ca-certificates all 20250419 [162 kB] Get: 22 http://deb.debian.org/debian forky/main arm64 libmagic-mgc arm64 1:5.46-5 [338 kB] Get: 23 http://deb.debian.org/debian forky/main arm64 libmagic1t64 arm64 1:5.46-5 [103 kB] Get: 24 http://deb.debian.org/debian forky/main arm64 file arm64 1:5.46-5 [43.7 kB] Get: 25 http://deb.debian.org/debian forky/main arm64 gettext-base arm64 0.23.1-2+b1 [241 kB] Get: 26 http://deb.debian.org/debian forky/main arm64 libuchardet0 arm64 0.0.8-2 [69.0 kB] Get: 27 http://deb.debian.org/debian forky/main arm64 groff-base arm64 1.23.0-9 [1130 kB] Get: 28 http://deb.debian.org/debian forky/main arm64 bsdextrautils arm64 2.41.2-4 [97.3 kB] Get: 29 http://deb.debian.org/debian forky/main arm64 libpipeline1 arm64 1.5.8-1 [40.2 kB] Get: 30 http://deb.debian.org/debian forky/main arm64 man-db arm64 2.13.1-1 [1453 kB] Get: 31 http://deb.debian.org/debian forky/main arm64 m4 arm64 1.4.20-2 [315 kB] Get: 32 http://deb.debian.org/debian forky/main arm64 autoconf all 2.72-3.1 [494 kB] Get: 33 http://deb.debian.org/debian forky/main arm64 autotools-dev all 20240727.1 [60.2 kB] Get: 34 http://deb.debian.org/debian forky/main arm64 automake all 1:1.18.1-2 [877 kB] Get: 35 http://deb.debian.org/debian forky/main arm64 autopoint all 0.23.1-2 [770 kB] Get: 36 http://deb.debian.org/debian forky/main arm64 libdebhelper-perl all 13.28 [92.4 kB] Get: 37 http://deb.debian.org/debian forky/main arm64 libtool all 2.5.4-7 [540 kB] Get: 38 http://deb.debian.org/debian forky/main arm64 dh-autoreconf all 21 [12.2 kB] Get: 39 http://deb.debian.org/debian forky/main arm64 libarchive-zip-perl all 1.68-1 [104 kB] Get: 40 http://deb.debian.org/debian forky/main arm64 libfile-stripnondeterminism-perl all 1.15.0-1 [19.9 kB] Get: 41 http://deb.debian.org/debian forky/main arm64 dh-strip-nondeterminism all 1.15.0-1 [8812 B] Get: 42 http://deb.debian.org/debian forky/main arm64 libelf1t64 arm64 0.193-3 [189 kB] Get: 43 http://deb.debian.org/debian forky/main arm64 dwz arm64 0.16-2 [100 kB] Get: 44 http://deb.debian.org/debian forky/main arm64 libunistring5 arm64 1.3-2 [453 kB] Get: 45 http://deb.debian.org/debian forky/main arm64 libxml2-16 arm64 2.14.6+dfsg-0.1 [601 kB] Get: 46 http://deb.debian.org/debian forky/main arm64 gettext arm64 0.23.1-2+b1 [1612 kB] Get: 47 http://deb.debian.org/debian forky/main arm64 intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get: 48 http://deb.debian.org/debian forky/main arm64 po-debconf all 1.0.21+nmu1 [248 kB] Get: 49 http://deb.debian.org/debian forky/main arm64 debhelper all 13.28 [941 kB] Get: 50 http://deb.debian.org/debian forky/main arm64 dh-python all 6.20250414 [116 kB] Get: 51 http://deb.debian.org/debian forky/main arm64 sgml-base all 1.31+nmu1 [10.9 kB] Get: 52 http://deb.debian.org/debian forky/main arm64 xml-core all 0.19 [20.1 kB] Get: 53 http://deb.debian.org/debian forky/main arm64 docutils-common all 0.22.2+dfsg-2 [128 kB] Get: 54 http://deb.debian.org/debian forky/main arm64 python3-pygments all 2.18.0+dfsg-2 [836 kB] Get: 55 http://deb.debian.org/debian forky/main arm64 python3-accessible-pygments all 0.0.5-2 [1306 kB] Get: 56 http://deb.debian.org/debian forky/main arm64 python3-soupsieve all 2.7-2 [39.0 kB] Get: 57 http://deb.debian.org/debian forky/main arm64 python3-typing-extensions all 4.15.0-1 [92.4 kB] Get: 58 http://deb.debian.org/debian forky/main arm64 python3-bs4 all 4.14.2-1 [116 kB] Get: 59 http://deb.debian.org/debian forky/main arm64 python3-defusedxml all 0.7.1-3 [43.4 kB] Get: 60 http://deb.debian.org/debian forky/main arm64 libjs-sphinxdoc all 8.2.3-8 [27.6 kB] Get: 61 http://deb.debian.org/debian forky/main arm64 libjson-perl all 4.10000-1 [87.5 kB] Get: 62 http://deb.debian.org/debian forky/main arm64 sphinx-common all 8.2.3-8 [619 kB] Get: 63 http://deb.debian.org/debian forky/main arm64 python3-alabaster all 0.7.16-0.1 [27.9 kB] Get: 64 http://deb.debian.org/debian forky/main arm64 python-babel-localedata all 2.17.0-1 [6050 kB] Get: 65 http://deb.debian.org/debian forky/main arm64 python3-babel all 2.17.0-1 [117 kB] Get: 66 http://deb.debian.org/debian forky/main arm64 python3-roman-numerals all 3.1.0-2 [8740 B] Get: 67 http://deb.debian.org/debian forky/main arm64 python3-docutils all 0.22.2+dfsg-2 [432 kB] Get: 68 http://deb.debian.org/debian forky/main arm64 python3-imagesize all 1.4.1-1 [6688 B] Get: 69 http://deb.debian.org/debian forky/main arm64 python3-markupsafe arm64 3.0.3-1 [13.6 kB] Get: 70 http://deb.debian.org/debian forky/main arm64 python3-jinja2 all 3.1.6-1 [107 kB] Get: 71 http://deb.debian.org/debian forky/main arm64 python3-packaging all 25.0-1 [56.6 kB] Get: 72 http://deb.debian.org/debian forky/main arm64 python3-certifi all 2025.1.31+ds-1 [9652 B] Get: 73 http://deb.debian.org/debian forky/main arm64 python3-charset-normalizer arm64 3.4.3-1 [123 kB] Get: 74 http://deb.debian.org/debian forky/main arm64 python3-idna all 3.10-1 [42.0 kB] Get: 75 http://deb.debian.org/debian forky/main arm64 python3-urllib3 all 2.5.0-1 [116 kB] Get: 76 http://deb.debian.org/debian forky/main arm64 python3-chardet all 5.2.0+dfsg-2 [108 kB] Get: 77 http://deb.debian.org/debian forky/main arm64 python3-requests all 2.32.5+dfsg-1 [72.4 kB] Get: 78 http://deb.debian.org/debian forky/main arm64 python3-snowballstemmer all 3.0.1-1 [63.5 kB] Get: 79 http://deb.debian.org/debian forky/main arm64 python3-sphinx all 8.2.3-8 [477 kB] Get: 80 http://deb.debian.org/debian forky/main arm64 sphinx-basic-ng all 1.0.0~beta2-1 [13.0 kB] Get: 81 http://deb.debian.org/debian forky/main arm64 furo all 2025.09.25+dfsg-1 [62.0 kB] Get: 82 http://deb.debian.org/debian forky/main arm64 libcom-err2 arm64 1.47.2-3+b3 [24.9 kB] Get: 83 http://deb.debian.org/debian forky/main arm64 libkrb5support0 arm64 1.21.3-5 [32.4 kB] Get: 84 http://deb.debian.org/debian forky/main arm64 libk5crypto3 arm64 1.21.3-5 [81.2 kB] Get: 85 http://deb.debian.org/debian forky/main arm64 libkeyutils1 arm64 1.6.3-6 [9716 B] Get: 86 http://deb.debian.org/debian forky/main arm64 libkrb5-3 arm64 1.21.3-5 [308 kB] Get: 87 http://deb.debian.org/debian forky/main arm64 libgssapi-krb5-2 arm64 1.21.3-5 [127 kB] Get: 88 http://deb.debian.org/debian forky/main arm64 libjs-jquery all 3.7.1+dfsg+~3.5.33-1 [319 kB] Get: 89 http://deb.debian.org/debian forky/main arm64 libjs-jquery-hotkeys all 0.2.0-1 [12.6 kB] Get: 90 http://deb.debian.org/debian forky/main arm64 libjs-jquery-isonscreen all 1.2.0-1.1 [3196 B] Get: 91 http://deb.debian.org/debian forky/main arm64 libjs-jquery-metadata all 12-4 [6532 B] Get: 92 http://deb.debian.org/debian forky/main arm64 libjs-jquery-tablesorter all 1:2.31.3+dfsg1-4 [184 kB] Get: 93 http://deb.debian.org/debian forky/main arm64 libjs-jquery-throttle-debounce all 1.1+dfsg.1-2 [12.2 kB] Get: 94 http://deb.debian.org/debian forky/main arm64 libsasl2-modules-db arm64 2.1.28+dfsg1-10 [19.8 kB] Get: 95 http://deb.debian.org/debian forky/main arm64 libsasl2-2 arm64 2.1.28+dfsg1-10 [55.0 kB] Get: 96 http://deb.debian.org/debian forky/main arm64 libldap2 arm64 2.6.10+dfsg-1 [179 kB] Get: 97 http://deb.debian.org/debian forky/main arm64 libpq5 arm64 18.0-1 [240 kB] Get: 98 http://deb.debian.org/debian forky/main arm64 libyaml-0-2 arm64 0.2.5-2 [49.2 kB] Get: 99 http://deb.debian.org/debian forky/main arm64 python3-pyproject-hooks all 1.2.0-1 [11.7 kB] Get: 100 http://deb.debian.org/debian forky/main arm64 python3-wheel all 0.46.1-2 [21.7 kB] Get: 101 http://deb.debian.org/debian forky/main arm64 python3-build all 1.2.2-4 [36.2 kB] Get: 102 http://deb.debian.org/debian forky/main arm64 python3-installer all 0.7.0+dfsg1-3 [18.6 kB] Get: 103 http://deb.debian.org/debian forky/main arm64 pybuild-plugin-pyproject all 6.20250414 [11.8 kB] Get: 104 http://deb.debian.org/debian forky/main arm64 python3-all arm64 3.13.7-1 [1044 B] Get: 105 http://deb.debian.org/debian forky/main arm64 python3-async-generator all 1.10-6 [17.6 kB] Get: 106 http://deb.debian.org/debian forky/main arm64 python3-autocommand all 2.2.2-3 [13.6 kB] Get: 107 http://deb.debian.org/debian forky/main arm64 python3-coverage arm64 7.8.2+dfsg1-1 [182 kB] Get: 108 http://deb.debian.org/debian forky/main arm64 python3-filelock all 3.20.0-1 [12.6 kB] Get: 109 http://deb.debian.org/debian forky/main arm64 python3-more-itertools all 10.8.0-1 [71.7 kB] Get: 110 http://deb.debian.org/debian forky/main arm64 python3-typeguard all 4.4.4-1 [37.1 kB] Get: 111 http://deb.debian.org/debian forky/main arm64 python3-inflect all 7.5.0-1 [33.0 kB] Get: 112 http://deb.debian.org/debian forky/main arm64 python3-iniconfig all 2.1.0-1 [7432 B] Get: 113 http://deb.debian.org/debian forky/main arm64 python3-jaraco.functools all 4.1.0-1 [12.0 kB] Get: 114 http://deb.debian.org/debian forky/main arm64 python3-pkg-resources all 78.1.1-0.1 [224 kB] Get: 115 http://deb.debian.org/debian forky/main arm64 python3-jaraco.text all 4.0.0-1 [11.4 kB] Get: 116 http://deb.debian.org/debian forky/main arm64 python3-zipp all 3.23.0-1 [11.0 kB] Get: 117 http://deb.debian.org/debian forky/main arm64 python3-setuptools all 78.1.1-0.1 [738 kB] Get: 118 http://deb.debian.org/debian forky/main arm64 python3-jaraco.context all 6.0.1-1 [8276 B] Get: 119 http://deb.debian.org/debian forky/main arm64 python3-uc-micro all 1.0.3-1 [5744 B] Get: 120 http://deb.debian.org/debian forky/main arm64 python3-linkify-it all 2.0.3-1 [18.7 kB] Get: 121 http://deb.debian.org/debian forky/main arm64 python3-mdurl all 0.1.2-1 [9444 B] Get: 122 http://deb.debian.org/debian forky/main arm64 python3-markdown-it all 3.0.0-3 [59.5 kB] Get: 123 http://deb.debian.org/debian forky/main arm64 python3-mdit-py-plugins all 0.5.0-1 [33.4 kB] Get: 124 http://deb.debian.org/debian forky/main arm64 python3-yaml arm64 6.0.2-2 [122 kB] Get: 125 http://deb.debian.org/debian forky/main arm64 python3-myst-parser all 4.0.1-1 [78.8 kB] Get: 126 http://deb.debian.org/debian forky/main arm64 python3-pbr all 7.0.1-3 [59.1 kB] Get: 127 http://deb.debian.org/debian forky/main arm64 python3-pluggy all 1.6.0-1 [27.1 kB] Get: 128 http://deb.debian.org/debian forky/main arm64 python3-poetry-core all 2.2.1-2 [234 kB] Get: 129 http://deb.debian.org/debian forky/main arm64 python3-psycopg all 3.2.10-2 [127 kB] Get: 130 http://deb.debian.org/debian forky/main arm64 python3-psycopg-pool all 3.2.10-2 [23.9 kB] Get: 131 http://deb.debian.org/debian forky/main arm64 python3-pytest all 8.4.2-1 [266 kB] Get: 132 http://deb.debian.org/debian forky/main arm64 python3-pytest-asyncio all 1.2.0-1 [13.3 kB] Get: 133 http://deb.debian.org/debian forky/main arm64 python3-pytest-cov all 5.0.0-1 [26.8 kB] Get: 134 http://deb.debian.org/debian forky/main arm64 python3-redis all 6.4.0-1 [244 kB] Get: 135 http://deb.debian.org/debian forky/main arm64 python3-sphinx-autodoc-typehints all 3.2.0-2 [22.0 kB] Get: 136 http://deb.debian.org/debian forky/main arm64 python3-sphinx-copybutton all 0.5.2-3 [18.1 kB] Get: 137 http://deb.debian.org/debian forky/main arm64 python3-sphinxcontrib.apidoc all 0.6.0-2 [7980 B] Get: 138 http://deb.debian.org/debian forky/main arm64 redis all 5:8.0.4-1 [17.6 kB] Fetched 36.3 MB in 1s (49.2 MB/s) Preconfiguring packages ... Selecting previously unselected package libexpat1:arm64. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19971 files and directories currently installed.) Preparing to unpack .../libexpat1_2.7.3-1_arm64.deb ... Unpacking libexpat1:arm64 (2.7.3-1) ... Selecting previously unselected package libpython3.13-minimal:arm64. Preparing to unpack .../libpython3.13-minimal_3.13.9-1_arm64.deb ... Unpacking libpython3.13-minimal:arm64 (3.13.9-1) ... Selecting previously unselected package python3.13-minimal. Preparing to unpack .../python3.13-minimal_3.13.9-1_arm64.deb ... Unpacking python3.13-minimal (3.13.9-1) ... Setting up libpython3.13-minimal:arm64 (3.13.9-1) ... Setting up libexpat1:arm64 (2.7.3-1) ... Setting up python3.13-minimal (3.13.9-1) ... Selecting previously unselected package python3-minimal. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 20305 files and directories currently installed.) Preparing to unpack .../0-python3-minimal_3.13.7-1_arm64.deb ... Unpacking python3-minimal (3.13.7-1) ... Selecting previously unselected package media-types. Preparing to unpack .../1-media-types_14.0.0_all.deb ... Unpacking media-types (14.0.0) ... Selecting previously unselected package netbase. Preparing to unpack .../2-netbase_6.5_all.deb ... Unpacking netbase (6.5) ... Selecting previously unselected package tzdata. Preparing to unpack .../3-tzdata_2025b-5_all.deb ... Unpacking tzdata (2025b-5) ... Selecting previously unselected package libffi8:arm64. Preparing to unpack .../4-libffi8_3.5.2-2_arm64.deb ... Unpacking libffi8:arm64 (3.5.2-2) ... Selecting previously unselected package readline-common. Preparing to unpack .../5-readline-common_8.3-3_all.deb ... Unpacking readline-common (8.3-3) ... Selecting previously unselected package libreadline8t64:arm64. Preparing to unpack .../6-libreadline8t64_8.3-3_arm64.deb ... Adding 'diversion of /lib/aarch64-linux-gnu/libhistory.so.8 to /lib/aarch64-linux-gnu/libhistory.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/aarch64-linux-gnu/libhistory.so.8.2 to /lib/aarch64-linux-gnu/libhistory.so.8.2.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/aarch64-linux-gnu/libreadline.so.8 to /lib/aarch64-linux-gnu/libreadline.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/aarch64-linux-gnu/libreadline.so.8.2 to /lib/aarch64-linux-gnu/libreadline.so.8.2.usr-is-merged by libreadline8t64' Unpacking libreadline8t64:arm64 (8.3-3) ... Selecting previously unselected package libpython3.13-stdlib:arm64. Preparing to unpack .../7-libpython3.13-stdlib_3.13.9-1_arm64.deb ... Unpacking libpython3.13-stdlib:arm64 (3.13.9-1) ... Selecting previously unselected package python3.13. Preparing to unpack .../8-python3.13_3.13.9-1_arm64.deb ... Unpacking python3.13 (3.13.9-1) ... Selecting previously unselected package libpython3-stdlib:arm64. Preparing to unpack .../9-libpython3-stdlib_3.13.7-1_arm64.deb ... Unpacking libpython3-stdlib:arm64 (3.13.7-1) ... Setting up python3-minimal (3.13.7-1) ... Selecting previously unselected package python3. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 21320 files and directories currently installed.) Preparing to unpack .../000-python3_3.13.7-1_arm64.deb ... Unpacking python3 (3.13.7-1) ... Selecting previously unselected package libjemalloc2:arm64. Preparing to unpack .../001-libjemalloc2_5.3.0-3_arm64.deb ... Unpacking libjemalloc2:arm64 (5.3.0-3) ... Selecting previously unselected package liblzf1:arm64. Preparing to unpack .../002-liblzf1_3.6-4+b3_arm64.deb ... Unpacking liblzf1:arm64 (3.6-4+b3) ... Selecting previously unselected package redis-tools. Preparing to unpack .../003-redis-tools_5%3a8.0.4-1_arm64.deb ... Unpacking redis-tools (5:8.0.4-1) ... Selecting previously unselected package redis-server. Preparing to unpack .../004-redis-server_5%3a8.0.4-1_arm64.deb ... Unpacking redis-server (5:8.0.4-1) ... Selecting previously unselected package sensible-utils. Preparing to unpack .../005-sensible-utils_0.0.26_all.deb ... Unpacking sensible-utils (0.0.26) ... Selecting previously unselected package openssl. Preparing to unpack .../006-openssl_3.5.4-1_arm64.deb ... Unpacking openssl (3.5.4-1) ... Selecting previously unselected package ca-certificates. Preparing to unpack .../007-ca-certificates_20250419_all.deb ... Unpacking ca-certificates (20250419) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../008-libmagic-mgc_1%3a5.46-5_arm64.deb ... Unpacking libmagic-mgc (1:5.46-5) ... Selecting previously unselected package libmagic1t64:arm64. Preparing to unpack .../009-libmagic1t64_1%3a5.46-5_arm64.deb ... Unpacking libmagic1t64:arm64 (1:5.46-5) ... Selecting previously unselected package file. Preparing to unpack .../010-file_1%3a5.46-5_arm64.deb ... Unpacking file (1:5.46-5) ... Selecting previously unselected package gettext-base. Preparing to unpack .../011-gettext-base_0.23.1-2+b1_arm64.deb ... Unpacking gettext-base (0.23.1-2+b1) ... Selecting previously unselected package libuchardet0:arm64. Preparing to unpack .../012-libuchardet0_0.0.8-2_arm64.deb ... Unpacking libuchardet0:arm64 (0.0.8-2) ... Selecting previously unselected package groff-base. Preparing to unpack .../013-groff-base_1.23.0-9_arm64.deb ... Unpacking groff-base (1.23.0-9) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../014-bsdextrautils_2.41.2-4_arm64.deb ... Unpacking bsdextrautils (2.41.2-4) ... Selecting previously unselected package libpipeline1:arm64. Preparing to unpack .../015-libpipeline1_1.5.8-1_arm64.deb ... Unpacking libpipeline1:arm64 (1.5.8-1) ... Selecting previously unselected package man-db. Preparing to unpack .../016-man-db_2.13.1-1_arm64.deb ... Unpacking man-db (2.13.1-1) ... Selecting previously unselected package m4. Preparing to unpack .../017-m4_1.4.20-2_arm64.deb ... Unpacking m4 (1.4.20-2) ... Selecting previously unselected package autoconf. Preparing to unpack .../018-autoconf_2.72-3.1_all.deb ... Unpacking autoconf (2.72-3.1) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../019-autotools-dev_20240727.1_all.deb ... Unpacking autotools-dev (20240727.1) ... Selecting previously unselected package automake. Preparing to unpack .../020-automake_1%3a1.18.1-2_all.deb ... Unpacking automake (1:1.18.1-2) ... Selecting previously unselected package autopoint. Preparing to unpack .../021-autopoint_0.23.1-2_all.deb ... Unpacking autopoint (0.23.1-2) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../022-libdebhelper-perl_13.28_all.deb ... Unpacking libdebhelper-perl (13.28) ... Selecting previously unselected package libtool. Preparing to unpack .../023-libtool_2.5.4-7_all.deb ... Unpacking libtool (2.5.4-7) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../024-dh-autoreconf_21_all.deb ... Unpacking dh-autoreconf (21) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../025-libarchive-zip-perl_1.68-1_all.deb ... Unpacking libarchive-zip-perl (1.68-1) ... Selecting previously unselected package libfile-stripnondeterminism-perl. Preparing to unpack .../026-libfile-stripnondeterminism-perl_1.15.0-1_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.15.0-1) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../027-dh-strip-nondeterminism_1.15.0-1_all.deb ... Unpacking dh-strip-nondeterminism (1.15.0-1) ... Selecting previously unselected package libelf1t64:arm64. Preparing to unpack .../028-libelf1t64_0.193-3_arm64.deb ... Unpacking libelf1t64:arm64 (0.193-3) ... Selecting previously unselected package dwz. Preparing to unpack .../029-dwz_0.16-2_arm64.deb ... Unpacking dwz (0.16-2) ... Selecting previously unselected package libunistring5:arm64. Preparing to unpack .../030-libunistring5_1.3-2_arm64.deb ... Unpacking libunistring5:arm64 (1.3-2) ... Selecting previously unselected package libxml2-16:arm64. Preparing to unpack .../031-libxml2-16_2.14.6+dfsg-0.1_arm64.deb ... Unpacking libxml2-16:arm64 (2.14.6+dfsg-0.1) ... Selecting previously unselected package gettext. Preparing to unpack .../032-gettext_0.23.1-2+b1_arm64.deb ... Unpacking gettext (0.23.1-2+b1) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../033-intltool-debian_0.35.0+20060710.6_all.deb ... Unpacking intltool-debian (0.35.0+20060710.6) ... Selecting previously unselected package po-debconf. Preparing to unpack .../034-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../035-debhelper_13.28_all.deb ... Unpacking debhelper (13.28) ... Selecting previously unselected package dh-python. Preparing to unpack .../036-dh-python_6.20250414_all.deb ... Unpacking dh-python (6.20250414) ... Selecting previously unselected package sgml-base. Preparing to unpack .../037-sgml-base_1.31+nmu1_all.deb ... Unpacking sgml-base (1.31+nmu1) ... Selecting previously unselected package xml-core. Preparing to unpack .../038-xml-core_0.19_all.deb ... Unpacking xml-core (0.19) ... Selecting previously unselected package docutils-common. Preparing to unpack .../039-docutils-common_0.22.2+dfsg-2_all.deb ... Unpacking docutils-common (0.22.2+dfsg-2) ... Selecting previously unselected package python3-pygments. Preparing to unpack .../040-python3-pygments_2.18.0+dfsg-2_all.deb ... Unpacking python3-pygments (2.18.0+dfsg-2) ... Selecting previously unselected package python3-accessible-pygments. Preparing to unpack .../041-python3-accessible-pygments_0.0.5-2_all.deb ... Unpacking python3-accessible-pygments (0.0.5-2) ... Selecting previously unselected package python3-soupsieve. Preparing to unpack .../042-python3-soupsieve_2.7-2_all.deb ... Unpacking python3-soupsieve (2.7-2) ... Selecting previously unselected package python3-typing-extensions. Preparing to unpack .../043-python3-typing-extensions_4.15.0-1_all.deb ... Unpacking python3-typing-extensions (4.15.0-1) ... Selecting previously unselected package python3-bs4. Preparing to unpack .../044-python3-bs4_4.14.2-1_all.deb ... Unpacking python3-bs4 (4.14.2-1) ... Selecting previously unselected package python3-defusedxml. Preparing to unpack .../045-python3-defusedxml_0.7.1-3_all.deb ... Unpacking python3-defusedxml (0.7.1-3) ... Selecting previously unselected package libjs-sphinxdoc. Preparing to unpack .../046-libjs-sphinxdoc_8.2.3-8_all.deb ... Unpacking libjs-sphinxdoc (8.2.3-8) ... Selecting previously unselected package libjson-perl. Preparing to unpack .../047-libjson-perl_4.10000-1_all.deb ... Unpacking libjson-perl (4.10000-1) ... Selecting previously unselected package sphinx-common. Preparing to unpack .../048-sphinx-common_8.2.3-8_all.deb ... Unpacking sphinx-common (8.2.3-8) ... Selecting previously unselected package python3-alabaster. Preparing to unpack .../049-python3-alabaster_0.7.16-0.1_all.deb ... Unpacking python3-alabaster (0.7.16-0.1) ... Selecting previously unselected package python-babel-localedata. Preparing to unpack .../050-python-babel-localedata_2.17.0-1_all.deb ... Unpacking python-babel-localedata (2.17.0-1) ... Selecting previously unselected package python3-babel. Preparing to unpack .../051-python3-babel_2.17.0-1_all.deb ... Unpacking python3-babel (2.17.0-1) ... Selecting previously unselected package python3-roman-numerals. Preparing to unpack .../052-python3-roman-numerals_3.1.0-2_all.deb ... Unpacking python3-roman-numerals (3.1.0-2) ... Selecting previously unselected package python3-docutils. Preparing to unpack .../053-python3-docutils_0.22.2+dfsg-2_all.deb ... Unpacking python3-docutils (0.22.2+dfsg-2) ... Selecting previously unselected package python3-imagesize. Preparing to unpack .../054-python3-imagesize_1.4.1-1_all.deb ... Unpacking python3-imagesize (1.4.1-1) ... Selecting previously unselected package python3-markupsafe. Preparing to unpack .../055-python3-markupsafe_3.0.3-1_arm64.deb ... Unpacking python3-markupsafe (3.0.3-1) ... Selecting previously unselected package python3-jinja2. Preparing to unpack .../056-python3-jinja2_3.1.6-1_all.deb ... Unpacking python3-jinja2 (3.1.6-1) ... Selecting previously unselected package python3-packaging. Preparing to unpack .../057-python3-packaging_25.0-1_all.deb ... Unpacking python3-packaging (25.0-1) ... Selecting previously unselected package python3-certifi. Preparing to unpack .../058-python3-certifi_2025.1.31+ds-1_all.deb ... Unpacking python3-certifi (2025.1.31+ds-1) ... Selecting previously unselected package python3-charset-normalizer. Preparing to unpack .../059-python3-charset-normalizer_3.4.3-1_arm64.deb ... Unpacking python3-charset-normalizer (3.4.3-1) ... Selecting previously unselected package python3-idna. Preparing to unpack .../060-python3-idna_3.10-1_all.deb ... Unpacking python3-idna (3.10-1) ... Selecting previously unselected package python3-urllib3. Preparing to unpack .../061-python3-urllib3_2.5.0-1_all.deb ... Unpacking python3-urllib3 (2.5.0-1) ... Selecting previously unselected package python3-chardet. Preparing to unpack .../062-python3-chardet_5.2.0+dfsg-2_all.deb ... Unpacking python3-chardet (5.2.0+dfsg-2) ... Selecting previously unselected package python3-requests. Preparing to unpack .../063-python3-requests_2.32.5+dfsg-1_all.deb ... Unpacking python3-requests (2.32.5+dfsg-1) ... Selecting previously unselected package python3-snowballstemmer. Preparing to unpack .../064-python3-snowballstemmer_3.0.1-1_all.deb ... Unpacking python3-snowballstemmer (3.0.1-1) ... Selecting previously unselected package python3-sphinx. Preparing to unpack .../065-python3-sphinx_8.2.3-8_all.deb ... Unpacking python3-sphinx (8.2.3-8) ... Selecting previously unselected package sphinx-basic-ng. Preparing to unpack .../066-sphinx-basic-ng_1.0.0~beta2-1_all.deb ... Unpacking sphinx-basic-ng (1.0.0~beta2-1) ... Selecting previously unselected package furo. Preparing to unpack .../067-furo_2025.09.25+dfsg-1_all.deb ... Unpacking furo (2025.09.25+dfsg-1) ... Selecting previously unselected package libcom-err2:arm64. Preparing to unpack .../068-libcom-err2_1.47.2-3+b3_arm64.deb ... Unpacking libcom-err2:arm64 (1.47.2-3+b3) ... Selecting previously unselected package libkrb5support0:arm64. Preparing to unpack .../069-libkrb5support0_1.21.3-5_arm64.deb ... Unpacking libkrb5support0:arm64 (1.21.3-5) ... Selecting previously unselected package libk5crypto3:arm64. Preparing to unpack .../070-libk5crypto3_1.21.3-5_arm64.deb ... Unpacking libk5crypto3:arm64 (1.21.3-5) ... Selecting previously unselected package libkeyutils1:arm64. Preparing to unpack .../071-libkeyutils1_1.6.3-6_arm64.deb ... Unpacking libkeyutils1:arm64 (1.6.3-6) ... Selecting previously unselected package libkrb5-3:arm64. Preparing to unpack .../072-libkrb5-3_1.21.3-5_arm64.deb ... Unpacking libkrb5-3:arm64 (1.21.3-5) ... Selecting previously unselected package libgssapi-krb5-2:arm64. Preparing to unpack .../073-libgssapi-krb5-2_1.21.3-5_arm64.deb ... Unpacking libgssapi-krb5-2:arm64 (1.21.3-5) ... Selecting previously unselected package libjs-jquery. Preparing to unpack .../074-libjs-jquery_3.7.1+dfsg+~3.5.33-1_all.deb ... Unpacking libjs-jquery (3.7.1+dfsg+~3.5.33-1) ... Selecting previously unselected package libjs-jquery-hotkeys. Preparing to unpack .../075-libjs-jquery-hotkeys_0.2.0-1_all.deb ... Unpacking libjs-jquery-hotkeys (0.2.0-1) ... Selecting previously unselected package libjs-jquery-isonscreen. Preparing to unpack .../076-libjs-jquery-isonscreen_1.2.0-1.1_all.deb ... Unpacking libjs-jquery-isonscreen (1.2.0-1.1) ... Selecting previously unselected package libjs-jquery-metadata. Preparing to unpack .../077-libjs-jquery-metadata_12-4_all.deb ... Unpacking libjs-jquery-metadata (12-4) ... Selecting previously unselected package libjs-jquery-tablesorter. Preparing to unpack .../078-libjs-jquery-tablesorter_1%3a2.31.3+dfsg1-4_all.deb ... Unpacking libjs-jquery-tablesorter (1:2.31.3+dfsg1-4) ... Selecting previously unselected package libjs-jquery-throttle-debounce. Preparing to unpack .../079-libjs-jquery-throttle-debounce_1.1+dfsg.1-2_all.deb ... Unpacking libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... Selecting previously unselected package libsasl2-modules-db:arm64. Preparing to unpack .../080-libsasl2-modules-db_2.1.28+dfsg1-10_arm64.deb ... Unpacking libsasl2-modules-db:arm64 (2.1.28+dfsg1-10) ... Selecting previously unselected package libsasl2-2:arm64. Preparing to unpack .../081-libsasl2-2_2.1.28+dfsg1-10_arm64.deb ... Unpacking libsasl2-2:arm64 (2.1.28+dfsg1-10) ... Selecting previously unselected package libldap2:arm64. Preparing to unpack .../082-libldap2_2.6.10+dfsg-1_arm64.deb ... Unpacking libldap2:arm64 (2.6.10+dfsg-1) ... Selecting previously unselected package libpq5:arm64. Preparing to unpack .../083-libpq5_18.0-1_arm64.deb ... Unpacking libpq5:arm64 (18.0-1) ... Selecting previously unselected package libyaml-0-2:arm64. Preparing to unpack .../084-libyaml-0-2_0.2.5-2_arm64.deb ... Unpacking libyaml-0-2:arm64 (0.2.5-2) ... Selecting previously unselected package python3-pyproject-hooks. Preparing to unpack .../085-python3-pyproject-hooks_1.2.0-1_all.deb ... Unpacking python3-pyproject-hooks (1.2.0-1) ... Selecting previously unselected package python3-wheel. Preparing to unpack .../086-python3-wheel_0.46.1-2_all.deb ... Unpacking python3-wheel (0.46.1-2) ... Selecting previously unselected package python3-build. Preparing to unpack .../087-python3-build_1.2.2-4_all.deb ... Unpacking python3-build (1.2.2-4) ... Selecting previously unselected package python3-installer. Preparing to unpack .../088-python3-installer_0.7.0+dfsg1-3_all.deb ... Unpacking python3-installer (0.7.0+dfsg1-3) ... Selecting previously unselected package pybuild-plugin-pyproject. Preparing to unpack .../089-pybuild-plugin-pyproject_6.20250414_all.deb ... Unpacking pybuild-plugin-pyproject (6.20250414) ... Selecting previously unselected package python3-all. Preparing to unpack .../090-python3-all_3.13.7-1_arm64.deb ... Unpacking python3-all (3.13.7-1) ... Selecting previously unselected package python3-async-generator. Preparing to unpack .../091-python3-async-generator_1.10-6_all.deb ... Unpacking python3-async-generator (1.10-6) ... Selecting previously unselected package python3-autocommand. Preparing to unpack .../092-python3-autocommand_2.2.2-3_all.deb ... Unpacking python3-autocommand (2.2.2-3) ... Selecting previously unselected package python3-coverage. Preparing to unpack .../093-python3-coverage_7.8.2+dfsg1-1_arm64.deb ... Unpacking python3-coverage (7.8.2+dfsg1-1) ... Selecting previously unselected package python3-filelock. Preparing to unpack .../094-python3-filelock_3.20.0-1_all.deb ... Unpacking python3-filelock (3.20.0-1) ... Selecting previously unselected package python3-more-itertools. Preparing to unpack .../095-python3-more-itertools_10.8.0-1_all.deb ... Unpacking python3-more-itertools (10.8.0-1) ... Selecting previously unselected package python3-typeguard. Preparing to unpack .../096-python3-typeguard_4.4.4-1_all.deb ... Unpacking python3-typeguard (4.4.4-1) ... Selecting previously unselected package python3-inflect. Preparing to unpack .../097-python3-inflect_7.5.0-1_all.deb ... Unpacking python3-inflect (7.5.0-1) ... Selecting previously unselected package python3-iniconfig. Preparing to unpack .../098-python3-iniconfig_2.1.0-1_all.deb ... Unpacking python3-iniconfig (2.1.0-1) ... Selecting previously unselected package python3-jaraco.functools. Preparing to unpack .../099-python3-jaraco.functools_4.1.0-1_all.deb ... Unpacking python3-jaraco.functools (4.1.0-1) ... Selecting previously unselected package python3-pkg-resources. Preparing to unpack .../100-python3-pkg-resources_78.1.1-0.1_all.deb ... Unpacking python3-pkg-resources (78.1.1-0.1) ... Selecting previously unselected package python3-jaraco.text. Preparing to unpack .../101-python3-jaraco.text_4.0.0-1_all.deb ... Unpacking python3-jaraco.text (4.0.0-1) ... Selecting previously unselected package python3-zipp. Preparing to unpack .../102-python3-zipp_3.23.0-1_all.deb ... Unpacking python3-zipp (3.23.0-1) ... Selecting previously unselected package python3-setuptools. Preparing to unpack .../103-python3-setuptools_78.1.1-0.1_all.deb ... Unpacking python3-setuptools (78.1.1-0.1) ... Selecting previously unselected package python3-jaraco.context. Preparing to unpack .../104-python3-jaraco.context_6.0.1-1_all.deb ... Unpacking python3-jaraco.context (6.0.1-1) ... Selecting previously unselected package python3-uc-micro. Preparing to unpack .../105-python3-uc-micro_1.0.3-1_all.deb ... Unpacking python3-uc-micro (1.0.3-1) ... Selecting previously unselected package python3-linkify-it. Preparing to unpack .../106-python3-linkify-it_2.0.3-1_all.deb ... Unpacking python3-linkify-it (2.0.3-1) ... Selecting previously unselected package python3-mdurl. Preparing to unpack .../107-python3-mdurl_0.1.2-1_all.deb ... Unpacking python3-mdurl (0.1.2-1) ... Selecting previously unselected package python3-markdown-it. Preparing to unpack .../108-python3-markdown-it_3.0.0-3_all.deb ... Unpacking python3-markdown-it (3.0.0-3) ... Selecting previously unselected package python3-mdit-py-plugins. Preparing to unpack .../109-python3-mdit-py-plugins_0.5.0-1_all.deb ... Unpacking python3-mdit-py-plugins (0.5.0-1) ... Selecting previously unselected package python3-yaml. Preparing to unpack .../110-python3-yaml_6.0.2-2_arm64.deb ... Unpacking python3-yaml (6.0.2-2) ... Selecting previously unselected package python3-myst-parser. Preparing to unpack .../111-python3-myst-parser_4.0.1-1_all.deb ... Unpacking python3-myst-parser (4.0.1-1) ... Selecting previously unselected package python3-pbr. Preparing to unpack .../112-python3-pbr_7.0.1-3_all.deb ... Unpacking python3-pbr (7.0.1-3) ... Selecting previously unselected package python3-pluggy. Preparing to unpack .../113-python3-pluggy_1.6.0-1_all.deb ... Unpacking python3-pluggy (1.6.0-1) ... Selecting previously unselected package python3-poetry-core. Preparing to unpack .../114-python3-poetry-core_2.2.1-2_all.deb ... Unpacking python3-poetry-core (2.2.1-2) ... Selecting previously unselected package python3-psycopg. Preparing to unpack .../115-python3-psycopg_3.2.10-2_all.deb ... Unpacking python3-psycopg (3.2.10-2) ... Selecting previously unselected package python3-psycopg-pool. Preparing to unpack .../116-python3-psycopg-pool_3.2.10-2_all.deb ... Unpacking python3-psycopg-pool (3.2.10-2) ... Selecting previously unselected package python3-pytest. Preparing to unpack .../117-python3-pytest_8.4.2-1_all.deb ... Unpacking python3-pytest (8.4.2-1) ... Selecting previously unselected package python3-pytest-asyncio. Preparing to unpack .../118-python3-pytest-asyncio_1.2.0-1_all.deb ... Unpacking python3-pytest-asyncio (1.2.0-1) ... Selecting previously unselected package python3-pytest-cov. Preparing to unpack .../119-python3-pytest-cov_5.0.0-1_all.deb ... Unpacking python3-pytest-cov (5.0.0-1) ... Selecting previously unselected package python3-redis. Preparing to unpack .../120-python3-redis_6.4.0-1_all.deb ... Unpacking python3-redis (6.4.0-1) ... Selecting previously unselected package python3-sphinx-autodoc-typehints. Preparing to unpack .../121-python3-sphinx-autodoc-typehints_3.2.0-2_all.deb ... Unpacking python3-sphinx-autodoc-typehints (3.2.0-2) ... Selecting previously unselected package python3-sphinx-copybutton. Preparing to unpack .../122-python3-sphinx-copybutton_0.5.2-3_all.deb ... Unpacking python3-sphinx-copybutton (0.5.2-3) ... Selecting previously unselected package python3-sphinxcontrib.apidoc. Preparing to unpack .../123-python3-sphinxcontrib.apidoc_0.6.0-2_all.deb ... Unpacking python3-sphinxcontrib.apidoc (0.6.0-2) ... Selecting previously unselected package redis. Preparing to unpack .../124-redis_5%3a8.0.4-1_all.deb ... Unpacking redis (5:8.0.4-1) ... Setting up media-types (14.0.0) ... Setting up libpipeline1:arm64 (1.5.8-1) ... Setting up libkeyutils1:arm64 (1.6.3-6) ... Setting up bsdextrautils (2.41.2-4) ... Setting up libmagic-mgc (1:5.46-5) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up libyaml-0-2:arm64 (0.2.5-2) ... Setting up libxml2-16:arm64 (2.14.6+dfsg-0.1) ... Setting up libdebhelper-perl (13.28) ... Setting up libmagic1t64:arm64 (1:5.46-5) ... Setting up gettext-base (0.23.1-2+b1) ... Setting up m4 (1.4.20-2) ... Setting up libcom-err2:arm64 (1.47.2-3+b3) ... Setting up file (1:5.46-5) ... Setting up libjemalloc2:arm64 (5.3.0-3) ... Setting up libjs-jquery-throttle-debounce (1.1+dfsg.1-2) ... Setting up libelf1t64:arm64 (0.193-3) ... Setting up python-babel-localedata (2.17.0-1) ... Setting up libkrb5support0:arm64 (1.21.3-5) ... Setting up libsasl2-modules-db:arm64 (2.1.28+dfsg1-10) ... Setting up tzdata (2025b-5) ... Current default time zone: 'Etc/UTC' Local time is now: Thu Oct 30 07:07:57 UTC 2025. Universal Time is now: Thu Oct 30 07:07:57 UTC 2025. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up autotools-dev (20240727.1) ... Setting up liblzf1:arm64 (3.6-4+b3) ... Setting up libunistring5:arm64 (1.3-2) ... Setting up autopoint (0.23.1-2) ... Setting up libk5crypto3:arm64 (1.21.3-5) ... Setting up libjs-sphinxdoc (8.2.3-8) ... Setting up libsasl2-2:arm64 (2.1.28+dfsg1-10) ... Setting up autoconf (2.72-3.1) ... Setting up libffi8:arm64 (3.5.2-2) ... Setting up dwz (0.16-2) ... Setting up sensible-utils (0.0.26) ... Setting up libuchardet0:arm64 (0.0.8-2) ... Setting up libjson-perl (4.10000-1) ... Setting up netbase (6.5) ... Setting up sgml-base (1.31+nmu1) ... Setting up libkrb5-3:arm64 (1.21.3-5) ... Setting up libjs-jquery (3.7.1+dfsg+~3.5.33-1) ... Setting up libjs-jquery-hotkeys (0.2.0-1) ... Setting up openssl (3.5.4-1) ... Setting up readline-common (8.3-3) ... Setting up libldap2:arm64 (2.6.10+dfsg-1) ... Setting up automake (1:1.18.1-2) ... update-alternatives: using /usr/bin/automake-1.18 to provide /usr/bin/automake (automake) in auto mode Setting up libfile-stripnondeterminism-perl (1.15.0-1) ... Setting up gettext (0.23.1-2+b1) ... Setting up libtool (2.5.4-7) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (21) ... Setting up ca-certificates (20250419) ... Updating certificates in /etc/ssl/certs... 150 added, 0 removed; done. Setting up redis-tools (5:8.0.4-1) ... Setting up libjs-jquery-metadata (12-4) ... Setting up sphinx-common (8.2.3-8) ... Setting up libjs-jquery-isonscreen (1.2.0-1.1) ... Setting up libgssapi-krb5-2:arm64 (1.21.3-5) ... Setting up libreadline8t64:arm64 (8.3-3) ... Setting up dh-strip-nondeterminism (1.15.0-1) ... Setting up libjs-jquery-tablesorter (1:2.31.3+dfsg1-4) ... Setting up groff-base (1.23.0-9) ... Setting up xml-core (0.19) ... Setting up libpython3.13-stdlib:arm64 (3.13.9-1) ... Setting up libpython3-stdlib:arm64 (3.13.7-1) ... Setting up python3.13 (3.13.9-1) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up libpq5:arm64 (18.0-1) ... Setting up python3 (3.13.7-1) ... Setting up python3-zipp (3.23.0-1) ... Setting up python3-autocommand (2.2.2-3) ... Setting up man-db (2.13.1-1) ... Not building database; man-db/auto-update is not 'true'. Setting up python3-markupsafe (3.0.3-1) ... Setting up redis-server (5:8.0.4-1) ... invoke-rc.d: could not determine current runlevel invoke-rc.d: policy-rc.d denied execution of start. Setting up python3-uc-micro (1.0.3-1) ... Setting up python3-jinja2 (3.1.6-1) ... Setting up python3-pygments (2.18.0+dfsg-2) ... Setting up python3-packaging (25.0-1) ... Setting up python3-chardet (5.2.0+dfsg-2) ... Setting up python3-pyproject-hooks (1.2.0-1) ... Setting up python3-accessible-pygments (0.0.5-2) ... Setting up python3-certifi (2025.1.31+ds-1) ... Setting up python3-snowballstemmer (3.0.1-1) ... Setting up python3-poetry-core (2.2.1-2) ... Setting up python3-mdurl (0.1.2-1) ... Setting up python3-psycopg (3.2.10-2) ... Setting up python3-idna (3.10-1) ... Setting up python3-typing-extensions (4.15.0-1) ... Setting up python3-redis (6.4.0-1) ... Setting up python3-installer (0.7.0+dfsg1-3) ... Setting up python3-urllib3 (2.5.0-1) ... Setting up python3-pluggy (1.6.0-1) ... Setting up python3-linkify-it (2.0.3-1) ... Setting up python3-roman-numerals (3.1.0-2) ... Setting up python3-psycopg-pool (3.2.10-2) ... Setting up python3-soupsieve (2.7-2) ... Setting up python3-imagesize (1.4.1-1) ... Setting up dh-python (6.20250414) ... Setting up python3-more-itertools (10.8.0-1) ... Setting up python3-iniconfig (2.1.0-1) ... Setting up python3-filelock (3.20.0-1) ... Setting up python3-jaraco.functools (4.1.0-1) ... Setting up python3-async-generator (1.10-6) ... Setting up python3-jaraco.context (6.0.1-1) ... Setting up python3-babel (2.17.0-1) ... update-alternatives: using /usr/bin/pybabel-python3 to provide /usr/bin/pybabel (pybabel) in auto mode Setting up python3-defusedxml (0.7.1-3) ... Setting up redis (5:8.0.4-1) ... Setting up python3-charset-normalizer (3.4.3-1) ... Setting up python3-pytest (8.4.2-1) ... Setting up python3-alabaster (0.7.16-0.1) ... Setting up python3-typeguard (4.4.4-1) ... Setting up python3-all (3.13.7-1) ... Setting up python3-coverage (7.8.2+dfsg1-1) ... Setting up python3-yaml (6.0.2-2) ... Setting up debhelper (13.28) ... Setting up python3-pytest-cov (5.0.0-1) ... Setting up python3-wheel (0.46.1-2) ... Setting up python3-bs4 (4.14.2-1) ... Setting up python3-inflect (7.5.0-1) ... Setting up python3-jaraco.text (4.0.0-1) ... Setting up python3-requests (2.32.5+dfsg-1) ... Setting up python3-markdown-it (3.0.0-3) ... Setting up python3-pytest-asyncio (1.2.0-1) ... Setting up python3-build (1.2.2-4) ... Setting up python3-pkg-resources (78.1.1-0.1) ... Setting up python3-setuptools (78.1.1-0.1) ... Setting up python3-pbr (7.0.1-3) ... Setting up pybuild-plugin-pyproject (6.20250414) ... Setting up python3-mdit-py-plugins (0.5.0-1) ... Processing triggers for libc-bin (2.41-12) ... Processing triggers for sgml-base (1.31+nmu1) ... Setting up docutils-common (0.22.2+dfsg-2) ... Processing triggers for sgml-base (1.31+nmu1) ... Setting up python3-docutils (0.22.2+dfsg-2) ... Setting up python3-sphinx (8.2.3-8) ... Setting up python3-myst-parser (4.0.1-1) ... Setting up python3-sphinx-copybutton (0.5.2-3) ... Setting up python3-sphinx-autodoc-typehints (3.2.0-2) ... Setting up python3-sphinxcontrib.apidoc (0.6.0-2) ... Setting up sphinx-basic-ng (1.0.0~beta2-1) ... Setting up furo (2025.09.25+dfsg-1) ... Processing triggers for ca-certificates (20250419) ... Updating certificates in /etc/ssl/certs... 0 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done. Reading package lists... Building dependency tree... Reading state information... Reading extended state information... Initializing package states... Writing extended state information... Building tag database... -> Finished parsing the build-deps Reading package lists... Building dependency tree... Reading state information... fakeroot is already the newest version (1.37.1.2-1). Solving dependencies... 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. I: Building the package I: Running cd /build/reproducible-path/pyrate-limiter-3.9.0/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../pyrate-limiter_3.9.0-4_source.changes dpkg-buildpackage: info: source package pyrate-limiter dpkg-buildpackage: info: source version 3.9.0-4 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Edward Betts dpkg-source --before-build . dpkg-buildpackage: info: host architecture arm64 debian/rules clean dh clean --buildsystem=pybuild dh_auto_clean -O--buildsystem=pybuild dh_autoreconf_clean -O--buildsystem=pybuild dh_clean -O--buildsystem=pybuild debian/rules binary dh binary --buildsystem=pybuild dh_update_autotools_config -O--buildsystem=pybuild dh_autoreconf -O--buildsystem=pybuild dh_auto_configure -O--buildsystem=pybuild debian/rules override_dh_auto_build make[1]: Entering directory '/build/reproducible-path/pyrate-limiter-3.9.0' dh_auto_build override_dh_auto_build --buildsystem=pybuild I: pybuild plugin_pyproject:129: Building wheel for python3.13 with "build" module I: pybuild base:311: python3.13 -m build --skip-dependency-check --no-isolation --wheel --outdir /build/reproducible-path/pyrate-limiter-3.9.0/.pybuild/cpython3_3.13 * Building wheel... Successfully built pyrate_limiter-3.9.0-py3-none-any.whl I: pybuild plugin_pyproject:144: Unpacking wheel built for python3.13 with "installer" module cd docs; PYTHONPATH=/build/reproducible-path/pyrate-limiter-3.9.0 LC_ALL=C.UTF-8 LANGUAGE=C.UTF-8 sphinx-build -bhtml -d _build/doctrees . _build/html Running Sphinx v8.2.3 loading translations [en]... done making output directory... done Converting `source_suffix = ['.rst', '.md']` to `source_suffix = {'.rst': 'restructuredtext', '.md': 'restructuredtext'}`. [autosummary] generating autosummary for: changelog.md, contributing.md, index.md, reference.md loading intersphinx inventory 'python' from https://docs.python.org/3/objects.inv ... WARNING: failed to reach any of the inventories with the following issues: intersphinx inventory 'https://docs.python.org/3/objects.inv' not fetchable due to : HTTPSConnectionPool(host='docs.python.org', port=443): Max retries exceeded with url: /3/objects.inv (Caused by NameResolutionError(": Failed to resolve 'docs.python.org' ([Errno -3] Temporary failure in name resolution)")) Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.clocks.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.exceptions.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.limiter.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.limiter_factory.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.utils.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.bucket.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.clock.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.rate.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.wrappers.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.in_memory_bucket.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.mp_bucket.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.postgres.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.redis_bucket.rst. Creating file /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.sqlite_bucket.rst. myst v4.0.1: MdParserConfig(commonmark_only=False, gfm_only=False, enable_extensions={'html_image'}, disable_syntax=[], all_links_external=False, links_external_new_tab=False, url_schemes=('http', 'https', 'mailto', 'ftp'), ref_domains=None, fence_as_directive=set(), number_code_blocks=[], title_to_header=False, heading_anchors=0, heading_slug_func=None, html_meta={}, footnote_sort=True, footnote_transition=True, words_per_minute=200, substitutions={}, linkify_fuzzy_links=True, dmath_allow_labels=True, dmath_allow_space=True, dmath_allow_digits=True, dmath_double_inline=False, update_mathjax=True, mathjax_classes='tex2jax_process|mathjax_process|math|output_area', enable_checkboxes=False, suppress_warnings=[], highlight_code_blocks=True) building [mo]: targets for 0 po files that are out of date writing output... building [html]: targets for 4 source files that are out of date updating environment: [new config] 21 added, 0 changed, 0 removed reading sources... [ 5%] changelog reading sources... [ 10%] contributing reading sources... [ 14%] index reading sources... [ 19%] modules/pyrate_limiter reading sources... [ 24%] modules/pyrate_limiter.abstracts reading sources... [ 29%] modules/pyrate_limiter.abstracts.bucket reading sources... [ 33%] modules/pyrate_limiter.abstracts.clock reading sources... [ 38%] modules/pyrate_limiter.abstracts.rate reading sources... [ 43%] modules/pyrate_limiter.abstracts.wrappers reading sources... [ 48%] modules/pyrate_limiter.buckets reading sources... [ 52%] modules/pyrate_limiter.buckets.in_memory_bucket reading sources... [ 57%] modules/pyrate_limiter.buckets.mp_bucket reading sources... [ 62%] modules/pyrate_limiter.buckets.postgres reading sources... [ 67%] modules/pyrate_limiter.buckets.redis_bucket reading sources... [ 71%] modules/pyrate_limiter.buckets.sqlite_bucket reading sources... [ 76%] modules/pyrate_limiter.clocks reading sources... [ 81%] modules/pyrate_limiter.exceptions reading sources... [ 86%] modules/pyrate_limiter.limiter reading sources... [ 90%] modules/pyrate_limiter.limiter_factory reading sources... [ 95%] modules/pyrate_limiter.utils reading sources... [100%] reference looking for now-outdated files... none found pickling environment... done checking consistency... /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.rst: WARNING: document isn't included in any toctree [toc.not_included] /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter', 'reference'], selecting: reference <- modules/pyrate_limiter.abstracts /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.bucket.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.abstracts', 'reference'], selecting: reference <- modules/pyrate_limiter.abstracts.bucket /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.clock.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.abstracts', 'reference'], selecting: reference <- modules/pyrate_limiter.abstracts.clock /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.rate.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.abstracts', 'reference'], selecting: reference <- modules/pyrate_limiter.abstracts.rate /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.abstracts.wrappers.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.abstracts', 'reference'], selecting: reference <- modules/pyrate_limiter.abstracts.wrappers /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter', 'reference'], selecting: reference <- modules/pyrate_limiter.buckets /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.in_memory_bucket.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.buckets', 'reference'], selecting: reference <- modules/pyrate_limiter.buckets.in_memory_bucket /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.mp_bucket.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.buckets', 'reference'], selecting: reference <- modules/pyrate_limiter.buckets.mp_bucket /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.postgres.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.buckets', 'reference'], selecting: reference <- modules/pyrate_limiter.buckets.postgres /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.redis_bucket.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.buckets', 'reference'], selecting: reference <- modules/pyrate_limiter.buckets.redis_bucket /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.buckets.sqlite_bucket.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter.buckets', 'reference'], selecting: reference <- modules/pyrate_limiter.buckets.sqlite_bucket /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.clocks.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter', 'reference'], selecting: reference <- modules/pyrate_limiter.clocks /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.exceptions.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter', 'reference'], selecting: reference <- modules/pyrate_limiter.exceptions /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.limiter.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter', 'reference'], selecting: reference <- modules/pyrate_limiter.limiter /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.limiter_factory.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter', 'reference'], selecting: reference <- modules/pyrate_limiter.limiter_factory /build/reproducible-path/pyrate-limiter-3.9.0/docs/modules/pyrate_limiter.utils.rst: document is referenced in multiple toctrees: ['modules/pyrate_limiter', 'reference'], selecting: reference <- modules/pyrate_limiter.utils done preparing documents... done copying assets... copying static files... Writing evaluated template result to /build/reproducible-path/pyrate-limiter-3.9.0/docs/_build/html/_static/language_data.js Writing evaluated template result to /build/reproducible-path/pyrate-limiter-3.9.0/docs/_build/html/_static/documentation_options.js Writing evaluated template result to /build/reproducible-path/pyrate-limiter-3.9.0/docs/_build/html/_static/basic.css Writing evaluated template result to /build/reproducible-path/pyrate-limiter-3.9.0/docs/_build/html/_static/copybutton.js copying static files: done copying extra files... copying extra files: done copying assets: done writing output... [ 5%] changelog writing output... [ 10%] contributing writing output... [ 14%] index writing output... [ 19%] modules/pyrate_limiter writing output... [ 24%] modules/pyrate_limiter.abstracts writing output... [ 29%] modules/pyrate_limiter.abstracts.bucket writing output... [ 33%] modules/pyrate_limiter.abstracts.clock writing output... [ 38%] modules/pyrate_limiter.abstracts.rate writing output... [ 43%] modules/pyrate_limiter.abstracts.wrappers writing output... [ 48%] modules/pyrate_limiter.buckets writing output... [ 52%] modules/pyrate_limiter.buckets.in_memory_bucket writing output... [ 57%] modules/pyrate_limiter.buckets.mp_bucket writing output... [ 62%] modules/pyrate_limiter.buckets.postgres writing output... [ 67%] modules/pyrate_limiter.buckets.redis_bucket writing output... [ 71%] modules/pyrate_limiter.buckets.sqlite_bucket writing output... [ 76%] modules/pyrate_limiter.clocks writing output... [ 81%] modules/pyrate_limiter.exceptions writing output... [ 86%] modules/pyrate_limiter.limiter writing output... [ 90%] modules/pyrate_limiter.limiter_factory writing output... [ 95%] modules/pyrate_limiter.utils writing output... [100%] reference /build/reproducible-path/pyrate-limiter-3.9.0/README.md:1801: WARNING: 'myst' cross-reference target not found: 'pyrate_limiter.limiter_factory.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:1807: WARNING: 'myst' cross-reference target not found: 'examples/asyncio_ratelimit.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:1808: WARNING: 'myst' cross-reference target not found: 'examples/asyncio_decorator.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:1809: WARNING: 'myst' cross-reference target not found: 'examples/httpx_ratelimiter.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:1810: WARNING: 'myst' cross-reference target not found: 'examples/in_memory_multiprocess.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:1811: WARNING: 'myst' cross-reference target not found: 'examples/sql_filelock_multiprocess.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:2020: WARNING: 'myst' cross-reference target not found: 'examples/asyncio_ratelimit.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:2062: WARNING: 'myst' cross-reference target not found: 'examples/asyncio_decorator.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:2114: WARNING: 'myst' cross-reference target not found: 'advanced-usage' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:2243: WARNING: 'myst' cross-reference target not found: 'examples/in_memory_multiprocess.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:2321: WARNING: 'myst' cross-reference target not found: 'pyrate_limiter/limiter_factory.py' [myst.xref_missing] /build/reproducible-path/pyrate-limiter-3.9.0/README.md:2345: WARNING: 'myst' cross-reference target not found: 'pyrate_limiter/limiter_factory.py' [myst.xref_missing] generating indices... genindex py-modindex done writing additional pages... search done dumping search index in English (code: en)... done dumping object inventory... done build succeeded, 14 warnings. The HTML pages are in _build/html. make[1]: Leaving directory '/build/reproducible-path/pyrate-limiter-3.9.0' dh_auto_test -O--buildsystem=pybuild I: pybuild pybuild:308: redis-server --daemonize yes 2098761:C 29 Oct 2025 19:09:44.149 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect. I: pybuild base:311: cd /build/reproducible-path/pyrate-limiter-3.9.0/.pybuild/cpython3_3.13/build; python3.13 -m pytest -vv --durations=10 --ignore=tests/test_multiprocessing.py -k " not postgres and not test_limiter_constructor_02 and not test_bucket_leak and not test_factory_leak and not test_limiter_async_factory_get and not test_mp_bucket_async and not test_bucket_full and not test_limiter_concurrency" ============================= test session starts ============================== platform linux -- Python 3.13.9, pytest-8.4.2, pluggy-1.6.0 -- /usr/bin/python3.13 cachedir: .pytest_cache rootdir: /build/reproducible-path/pyrate-limiter-3.9.0/.pybuild/cpython3_3.13/build configfile: pyproject.toml plugins: cov-5.0.0, asyncio-1.2.0, typeguard-4.4.4 asyncio: mode=Mode.AUTO, debug=False, asyncio_default_fixture_loop_scope=function, asyncio_default_test_loop_scope=function collecting ... collected 870 items / 467 deselected / 403 selected tests/test_bucket_all.py::test_bucket_01[clock0-create_in_memory_bucket] PASSED [ 0%] tests/test_bucket_all.py::test_bucket_01[clock0-create_redis_bucket] PASSED [ 0%] tests/test_bucket_all.py::test_bucket_01[clock0-create_sqlite_bucket] PASSED [ 0%] tests/test_bucket_all.py::test_bucket_01[clock0-create_async_redis_bucket] PASSED [ 0%] tests/test_bucket_all.py::test_bucket_01[clock0-create_filelocksqlite_bucket] PASSED [ 1%] tests/test_bucket_all.py::test_bucket_01[clock0-create_mp_bucket] PASSED [ 1%] tests/test_bucket_all.py::test_bucket_01[clock1-create_in_memory_bucket] PASSED [ 1%] tests/test_bucket_all.py::test_bucket_01[clock1-create_redis_bucket] PASSED [ 1%] tests/test_bucket_all.py::test_bucket_01[clock1-create_sqlite_bucket] PASSED [ 2%] tests/test_bucket_all.py::test_bucket_01[clock1-create_async_redis_bucket] PASSED [ 2%] tests/test_bucket_all.py::test_bucket_01[clock1-create_filelocksqlite_bucket] PASSED [ 2%] tests/test_bucket_all.py::test_bucket_01[clock1-create_mp_bucket] PASSED [ 2%] tests/test_bucket_all.py::test_bucket_01[clock2-create_in_memory_bucket] PASSED [ 3%] tests/test_bucket_all.py::test_bucket_01[clock2-create_redis_bucket] PASSED [ 3%] tests/test_bucket_all.py::test_bucket_01[clock2-create_sqlite_bucket] PASSED [ 3%] tests/test_bucket_all.py::test_bucket_01[clock2-create_async_redis_bucket] PASSED [ 3%] tests/test_bucket_all.py::test_bucket_01[clock2-create_filelocksqlite_bucket] PASSED [ 4%] tests/test_bucket_all.py::test_bucket_01[clock2-create_mp_bucket] PASSED [ 4%] tests/test_bucket_all.py::test_bucket_02[clock0-create_in_memory_bucket] PASSED [ 4%] tests/test_bucket_all.py::test_bucket_02[clock0-create_redis_bucket] PASSED [ 4%] tests/test_bucket_all.py::test_bucket_02[clock0-create_sqlite_bucket] PASSED [ 5%] tests/test_bucket_all.py::test_bucket_02[clock0-create_async_redis_bucket] PASSED [ 5%] tests/test_bucket_all.py::test_bucket_02[clock0-create_filelocksqlite_bucket] PASSED [ 5%] tests/test_bucket_all.py::test_bucket_02[clock0-create_mp_bucket] PASSED [ 5%] tests/test_bucket_all.py::test_bucket_02[clock1-create_in_memory_bucket] PASSED [ 6%] tests/test_bucket_all.py::test_bucket_02[clock1-create_redis_bucket] PASSED [ 6%] tests/test_bucket_all.py::test_bucket_02[clock1-create_sqlite_bucket] PASSED [ 6%] tests/test_bucket_all.py::test_bucket_02[clock1-create_async_redis_bucket] PASSED [ 6%] tests/test_bucket_all.py::test_bucket_02[clock1-create_filelocksqlite_bucket] PASSED [ 7%] tests/test_bucket_all.py::test_bucket_02[clock1-create_mp_bucket] PASSED [ 7%] tests/test_bucket_all.py::test_bucket_02[clock2-create_in_memory_bucket] PASSED [ 7%] tests/test_bucket_all.py::test_bucket_02[clock2-create_redis_bucket] PASSED [ 7%] tests/test_bucket_all.py::test_bucket_02[clock2-create_sqlite_bucket] PASSED [ 8%] tests/test_bucket_all.py::test_bucket_02[clock2-create_async_redis_bucket] PASSED [ 8%] tests/test_bucket_all.py::test_bucket_02[clock2-create_filelocksqlite_bucket] PASSED [ 8%] tests/test_bucket_all.py::test_bucket_02[clock2-create_mp_bucket] PASSED [ 8%] tests/test_bucket_all.py::test_bucket_03[clock0-create_in_memory_bucket] PASSED [ 9%] tests/test_bucket_all.py::test_bucket_03[clock0-create_redis_bucket] PASSED [ 9%] tests/test_bucket_all.py::test_bucket_03[clock0-create_sqlite_bucket] PASSED [ 9%] tests/test_bucket_all.py::test_bucket_03[clock0-create_async_redis_bucket] PASSED [ 9%] tests/test_bucket_all.py::test_bucket_03[clock0-create_filelocksqlite_bucket] PASSED [ 10%] tests/test_bucket_all.py::test_bucket_03[clock0-create_mp_bucket] PASSED [ 10%] tests/test_bucket_all.py::test_bucket_03[clock1-create_in_memory_bucket] PASSED [ 10%] tests/test_bucket_all.py::test_bucket_03[clock1-create_redis_bucket] PASSED [ 10%] tests/test_bucket_all.py::test_bucket_03[clock1-create_sqlite_bucket] PASSED [ 11%] tests/test_bucket_all.py::test_bucket_03[clock1-create_async_redis_bucket] PASSED [ 11%] tests/test_bucket_all.py::test_bucket_03[clock1-create_filelocksqlite_bucket] PASSED [ 11%] tests/test_bucket_all.py::test_bucket_03[clock1-create_mp_bucket] PASSED [ 11%] tests/test_bucket_all.py::test_bucket_03[clock2-create_in_memory_bucket] PASSED [ 12%] tests/test_bucket_all.py::test_bucket_03[clock2-create_redis_bucket] PASSED [ 12%] tests/test_bucket_all.py::test_bucket_03[clock2-create_sqlite_bucket] PASSED [ 12%] tests/test_bucket_all.py::test_bucket_03[clock2-create_async_redis_bucket] PASSED [ 12%] tests/test_bucket_all.py::test_bucket_03[clock2-create_filelocksqlite_bucket] PASSED [ 13%] tests/test_bucket_all.py::test_bucket_03[clock2-create_mp_bucket] PASSED [ 13%] tests/test_bucket_all.py::test_bucket_waiting[clock0-create_in_memory_bucket] PASSED [ 13%] tests/test_bucket_all.py::test_bucket_waiting[clock0-create_redis_bucket] PASSED [ 13%] tests/test_bucket_all.py::test_bucket_waiting[clock0-create_sqlite_bucket] PASSED [ 14%] tests/test_bucket_all.py::test_bucket_waiting[clock0-create_async_redis_bucket] PASSED [ 14%] tests/test_bucket_all.py::test_bucket_waiting[clock0-create_filelocksqlite_bucket] PASSED [ 14%] tests/test_bucket_all.py::test_bucket_waiting[clock0-create_mp_bucket] PASSED [ 14%] tests/test_bucket_all.py::test_bucket_waiting[clock1-create_in_memory_bucket] PASSED [ 15%] tests/test_bucket_all.py::test_bucket_waiting[clock1-create_redis_bucket] PASSED [ 15%] tests/test_bucket_all.py::test_bucket_waiting[clock1-create_sqlite_bucket] PASSED [ 15%] tests/test_bucket_all.py::test_bucket_waiting[clock1-create_async_redis_bucket] PASSED [ 15%] tests/test_bucket_all.py::test_bucket_waiting[clock1-create_filelocksqlite_bucket] PASSED [ 16%] tests/test_bucket_all.py::test_bucket_waiting[clock1-create_mp_bucket] PASSED [ 16%] tests/test_bucket_all.py::test_bucket_waiting[clock2-create_in_memory_bucket] PASSED [ 16%] tests/test_bucket_all.py::test_bucket_waiting[clock2-create_redis_bucket] PASSED [ 16%] tests/test_bucket_all.py::test_bucket_waiting[clock2-create_sqlite_bucket] PASSED [ 17%] tests/test_bucket_all.py::test_bucket_waiting[clock2-create_async_redis_bucket] PASSED [ 17%] tests/test_bucket_all.py::test_bucket_waiting[clock2-create_filelocksqlite_bucket] PASSED [ 17%] tests/test_bucket_all.py::test_bucket_waiting[clock2-create_mp_bucket] PASSED [ 17%] tests/test_bucket_all.py::test_bucket_flush[create_in_memory_bucket] PASSED [ 18%] tests/test_bucket_all.py::test_bucket_flush[create_redis_bucket] PASSED [ 18%] tests/test_bucket_all.py::test_bucket_flush[create_sqlite_bucket] PASSED [ 18%] tests/test_bucket_all.py::test_bucket_flush[create_async_redis_bucket] PASSED [ 18%] tests/test_bucket_all.py::test_bucket_flush[create_filelocksqlite_bucket] PASSED [ 19%] tests/test_bucket_all.py::test_bucket_flush[create_mp_bucket] PASSED [ 19%] tests/test_bucket_all.py::test_bucket_performance[create_in_memory_bucket] PASSED [ 19%] tests/test_bucket_all.py::test_bucket_performance[create_redis_bucket] PASSED [ 19%] tests/test_bucket_all.py::test_bucket_performance[create_sqlite_bucket] PASSED [ 20%] tests/test_bucket_all.py::test_bucket_performance[create_async_redis_bucket] PASSED [ 20%] tests/test_bucket_all.py::test_bucket_performance[create_filelocksqlite_bucket] PASSED [ 20%] tests/test_bucket_all.py::test_bucket_performance[create_mp_bucket] PASSED [ 20%] tests/test_bucket_factory.py::test_factory_01[clock0-create_in_memory_bucket] PASSED [ 21%] tests/test_bucket_factory.py::test_factory_01[clock0-create_redis_bucket] PASSED [ 21%] tests/test_bucket_factory.py::test_factory_01[clock0-create_sqlite_bucket] PASSED [ 21%] tests/test_bucket_factory.py::test_factory_01[clock0-create_async_redis_bucket] PASSED [ 21%] tests/test_bucket_factory.py::test_factory_01[clock0-create_filelocksqlite_bucket] PASSED [ 22%] tests/test_bucket_factory.py::test_factory_01[clock0-create_mp_bucket] PASSED [ 22%] tests/test_bucket_factory.py::test_factory_01[clock1-create_in_memory_bucket] PASSED [ 22%] tests/test_bucket_factory.py::test_factory_01[clock1-create_redis_bucket] PASSED [ 22%] tests/test_bucket_factory.py::test_factory_01[clock1-create_sqlite_bucket] PASSED [ 23%] tests/test_bucket_factory.py::test_factory_01[clock1-create_async_redis_bucket] PASSED [ 23%] tests/test_bucket_factory.py::test_factory_01[clock1-create_filelocksqlite_bucket] PASSED [ 23%] tests/test_bucket_factory.py::test_factory_01[clock1-create_mp_bucket] PASSED [ 23%] tests/test_bucket_factory.py::test_factory_01[clock2-create_in_memory_bucket] PASSED [ 24%] tests/test_bucket_factory.py::test_factory_01[clock2-create_redis_bucket] PASSED [ 24%] tests/test_bucket_factory.py::test_factory_01[clock2-create_sqlite_bucket] PASSED [ 24%] tests/test_bucket_factory.py::test_factory_01[clock2-create_async_redis_bucket] PASSED [ 24%] tests/test_bucket_factory.py::test_factory_01[clock2-create_filelocksqlite_bucket] PASSED [ 25%] tests/test_bucket_factory.py::test_factory_01[clock2-create_mp_bucket] PASSED [ 25%] tests/test_limiter.py::test_limiter_constructor_01[clock0] PASSED [ 25%] tests/test_limiter.py::test_limiter_constructor_01[clock1] PASSED [ 25%] tests/test_limiter.py::test_limiter_constructor_01[clock2] PASSED [ 26%] tests/test_limiter.py::test_limiter_01[clock0-create_in_memory_bucket-True-None] PASSED [ 26%] tests/test_limiter.py::test_limiter_01[clock0-create_in_memory_bucket-True-500] PASSED [ 26%] tests/test_limiter.py::test_limiter_01[clock0-create_in_memory_bucket-True-2000] PASSED [ 26%] tests/test_limiter.py::test_limiter_01[clock0-create_in_memory_bucket-True-Duration.MINUTE] PASSED [ 27%] tests/test_limiter.py::test_limiter_01[clock0-create_in_memory_bucket-False-None] PASSED [ 27%] tests/test_limiter.py::test_limiter_01[clock0-create_in_memory_bucket-False-500] PASSED [ 27%] tests/test_limiter.py::test_limiter_01[clock0-create_in_memory_bucket-False-2000] PASSED [ 27%] tests/test_limiter.py::test_limiter_01[clock0-create_in_memory_bucket-False-Duration.MINUTE] PASSED [ 28%] tests/test_limiter.py::test_limiter_01[clock0-create_redis_bucket-True-None] PASSED [ 28%] tests/test_limiter.py::test_limiter_01[clock0-create_redis_bucket-True-500] PASSED [ 28%] tests/test_limiter.py::test_limiter_01[clock0-create_redis_bucket-True-2000] PASSED [ 28%] tests/test_limiter.py::test_limiter_01[clock0-create_redis_bucket-True-Duration.MINUTE] PASSED [ 29%] tests/test_limiter.py::test_limiter_01[clock0-create_redis_bucket-False-None] PASSED [ 29%] tests/test_limiter.py::test_limiter_01[clock0-create_redis_bucket-False-500] PASSED [ 29%] tests/test_limiter.py::test_limiter_01[clock0-create_redis_bucket-False-2000] PASSED [ 29%] tests/test_limiter.py::test_limiter_01[clock0-create_redis_bucket-False-Duration.MINUTE] PASSED [ 30%] tests/test_limiter.py::test_limiter_01[clock0-create_sqlite_bucket-True-None] PASSED [ 30%] tests/test_limiter.py::test_limiter_01[clock0-create_sqlite_bucket-True-500] PASSED [ 30%] tests/test_limiter.py::test_limiter_01[clock0-create_sqlite_bucket-True-2000] PASSED [ 30%] tests/test_limiter.py::test_limiter_01[clock0-create_sqlite_bucket-True-Duration.MINUTE] PASSED [ 31%] tests/test_limiter.py::test_limiter_01[clock0-create_sqlite_bucket-False-None] PASSED [ 31%] tests/test_limiter.py::test_limiter_01[clock0-create_sqlite_bucket-False-500] PASSED [ 31%] tests/test_limiter.py::test_limiter_01[clock0-create_sqlite_bucket-False-2000] PASSED [ 31%] tests/test_limiter.py::test_limiter_01[clock0-create_sqlite_bucket-False-Duration.MINUTE] PASSED [ 32%] tests/test_limiter.py::test_limiter_01[clock0-create_async_redis_bucket-True-None] PASSED [ 32%] tests/test_limiter.py::test_limiter_01[clock0-create_async_redis_bucket-True-500] PASSED [ 32%] tests/test_limiter.py::test_limiter_01[clock0-create_async_redis_bucket-True-2000] PASSED [ 32%] tests/test_limiter.py::test_limiter_01[clock0-create_async_redis_bucket-True-Duration.MINUTE] PASSED [ 33%] tests/test_limiter.py::test_limiter_01[clock0-create_async_redis_bucket-False-None] PASSED [ 33%] tests/test_limiter.py::test_limiter_01[clock0-create_async_redis_bucket-False-500] PASSED [ 33%] tests/test_limiter.py::test_limiter_01[clock0-create_async_redis_bucket-False-2000] PASSED [ 33%] tests/test_limiter.py::test_limiter_01[clock0-create_async_redis_bucket-False-Duration.MINUTE] PASSED [ 33%] tests/test_limiter.py::test_limiter_01[clock0-create_filelocksqlite_bucket-True-None] PASSED [ 34%] tests/test_limiter.py::test_limiter_01[clock0-create_filelocksqlite_bucket-True-500] PASSED [ 34%] tests/test_limiter.py::test_limiter_01[clock0-create_filelocksqlite_bucket-True-2000] PASSED [ 34%] tests/test_limiter.py::test_limiter_01[clock0-create_filelocksqlite_bucket-True-Duration.MINUTE] PASSED [ 34%] tests/test_limiter.py::test_limiter_01[clock0-create_filelocksqlite_bucket-False-None] PASSED [ 35%] tests/test_limiter.py::test_limiter_01[clock0-create_filelocksqlite_bucket-False-500] PASSED [ 35%] tests/test_limiter.py::test_limiter_01[clock0-create_filelocksqlite_bucket-False-2000] PASSED [ 35%] tests/test_limiter.py::test_limiter_01[clock0-create_filelocksqlite_bucket-False-Duration.MINUTE] PASSED [ 35%] tests/test_limiter.py::test_limiter_01[clock0-create_mp_bucket-True-None] PASSED [ 36%] tests/test_limiter.py::test_limiter_01[clock0-create_mp_bucket-True-500] PASSED [ 36%] tests/test_limiter.py::test_limiter_01[clock0-create_mp_bucket-True-2000] PASSED [ 36%] tests/test_limiter.py::test_limiter_01[clock0-create_mp_bucket-True-Duration.MINUTE] PASSED [ 36%] tests/test_limiter.py::test_limiter_01[clock0-create_mp_bucket-False-None] PASSED [ 37%] tests/test_limiter.py::test_limiter_01[clock0-create_mp_bucket-False-500] PASSED [ 37%] tests/test_limiter.py::test_limiter_01[clock0-create_mp_bucket-False-2000] PASSED [ 37%] tests/test_limiter.py::test_limiter_01[clock0-create_mp_bucket-False-Duration.MINUTE] PASSED [ 37%] tests/test_limiter.py::test_limiter_01[clock1-create_in_memory_bucket-True-None] PASSED [ 38%] tests/test_limiter.py::test_limiter_01[clock1-create_in_memory_bucket-True-500] PASSED [ 38%] tests/test_limiter.py::test_limiter_01[clock1-create_in_memory_bucket-True-2000] PASSED [ 38%] tests/test_limiter.py::test_limiter_01[clock1-create_in_memory_bucket-True-Duration.MINUTE] PASSED [ 38%] tests/test_limiter.py::test_limiter_01[clock1-create_in_memory_bucket-False-None] PASSED [ 39%] tests/test_limiter.py::test_limiter_01[clock1-create_in_memory_bucket-False-500] PASSED [ 39%] tests/test_limiter.py::test_limiter_01[clock1-create_in_memory_bucket-False-2000] PASSED [ 39%] tests/test_limiter.py::test_limiter_01[clock1-create_in_memory_bucket-False-Duration.MINUTE] PASSED [ 39%] tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-True-None] PASSED [ 40%] tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-True-500] FAILED [ 40%] tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-True-2000] PASSED [ 40%] tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-True-Duration.MINUTE] PASSED [ 40%] tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-False-None] PASSED [ 41%] tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-False-500] PASSED [ 41%] tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-False-2000] PASSED [ 41%] tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-False-Duration.MINUTE] PASSED [ 41%] tests/test_limiter.py::test_limiter_01[clock1-create_sqlite_bucket-True-None] PASSED [ 42%] tests/test_limiter.py::test_limiter_01[clock1-create_sqlite_bucket-True-500] PASSED [ 42%] tests/test_limiter.py::test_limiter_01[clock1-create_sqlite_bucket-True-2000] PASSED [ 42%] tests/test_limiter.py::test_limiter_01[clock1-create_sqlite_bucket-True-Duration.MINUTE] PASSED [ 42%] tests/test_limiter.py::test_limiter_01[clock1-create_sqlite_bucket-False-None] PASSED [ 43%] tests/test_limiter.py::test_limiter_01[clock1-create_sqlite_bucket-False-500] PASSED [ 43%] tests/test_limiter.py::test_limiter_01[clock1-create_sqlite_bucket-False-2000] PASSED [ 43%] tests/test_limiter.py::test_limiter_01[clock1-create_sqlite_bucket-False-Duration.MINUTE] PASSED [ 43%] tests/test_limiter.py::test_limiter_01[clock1-create_async_redis_bucket-True-None] PASSED [ 44%] tests/test_limiter.py::test_limiter_01[clock1-create_async_redis_bucket-True-500] PASSED [ 44%] tests/test_limiter.py::test_limiter_01[clock1-create_async_redis_bucket-True-2000] PASSED [ 44%] tests/test_limiter.py::test_limiter_01[clock1-create_async_redis_bucket-True-Duration.MINUTE] PASSED [ 44%] tests/test_limiter.py::test_limiter_01[clock1-create_async_redis_bucket-False-None] PASSED [ 45%] tests/test_limiter.py::test_limiter_01[clock1-create_async_redis_bucket-False-500] PASSED [ 45%] tests/test_limiter.py::test_limiter_01[clock1-create_async_redis_bucket-False-2000] PASSED [ 45%] tests/test_limiter.py::test_limiter_01[clock1-create_async_redis_bucket-False-Duration.MINUTE] PASSED [ 45%] tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-True-None] PASSED [ 46%] tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-True-500] PASSED [ 46%] tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-True-2000] PASSED [ 46%] tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-True-Duration.MINUTE] PASSED [ 46%] tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-False-None] FAILED [ 47%] tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-False-500] FAILED [ 47%] tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-False-2000] FAILED [ 47%] tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-False-Duration.MINUTE] FAILED [ 47%] tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-True-None] PASSED [ 48%] tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-True-500] FAILED [ 48%] tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-True-2000] PASSED [ 48%] tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-True-Duration.MINUTE] PASSED [ 48%] tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-False-None] PASSED [ 49%] tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-False-500] FAILED [ 49%] tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-False-2000] FAILED [ 49%] tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-False-Duration.MINUTE] PASSED [ 49%] tests/test_limiter.py::test_limiter_01[clock2-create_in_memory_bucket-True-None] PASSED [ 50%] tests/test_limiter.py::test_limiter_01[clock2-create_in_memory_bucket-True-500] PASSED [ 50%] tests/test_limiter.py::test_limiter_01[clock2-create_in_memory_bucket-True-2000] PASSED [ 50%] tests/test_limiter.py::test_limiter_01[clock2-create_in_memory_bucket-True-Duration.MINUTE] PASSED [ 50%] tests/test_limiter.py::test_limiter_01[clock2-create_in_memory_bucket-False-None] PASSED [ 51%] tests/test_limiter.py::test_limiter_01[clock2-create_in_memory_bucket-False-500] PASSED [ 51%] tests/test_limiter.py::test_limiter_01[clock2-create_in_memory_bucket-False-2000] PASSED [ 51%] tests/test_limiter.py::test_limiter_01[clock2-create_in_memory_bucket-False-Duration.MINUTE] PASSED [ 51%] tests/test_limiter.py::test_limiter_01[clock2-create_redis_bucket-True-None] PASSED [ 52%] tests/test_limiter.py::test_limiter_01[clock2-create_redis_bucket-True-500] PASSED [ 52%] tests/test_limiter.py::test_limiter_01[clock2-create_redis_bucket-True-2000] PASSED [ 52%] tests/test_limiter.py::test_limiter_01[clock2-create_redis_bucket-True-Duration.MINUTE] PASSED [ 52%] tests/test_limiter.py::test_limiter_01[clock2-create_redis_bucket-False-None] PASSED [ 53%] tests/test_limiter.py::test_limiter_01[clock2-create_redis_bucket-False-500] PASSED [ 53%] tests/test_limiter.py::test_limiter_01[clock2-create_redis_bucket-False-2000] PASSED [ 53%] tests/test_limiter.py::test_limiter_01[clock2-create_redis_bucket-False-Duration.MINUTE] PASSED [ 53%] tests/test_limiter.py::test_limiter_01[clock2-create_sqlite_bucket-True-None] PASSED [ 54%] tests/test_limiter.py::test_limiter_01[clock2-create_sqlite_bucket-True-500] PASSED [ 54%] tests/test_limiter.py::test_limiter_01[clock2-create_sqlite_bucket-True-2000] PASSED [ 54%] tests/test_limiter.py::test_limiter_01[clock2-create_sqlite_bucket-True-Duration.MINUTE] PASSED [ 54%] tests/test_limiter.py::test_limiter_01[clock2-create_sqlite_bucket-False-None] PASSED [ 55%] tests/test_limiter.py::test_limiter_01[clock2-create_sqlite_bucket-False-500] PASSED [ 55%] tests/test_limiter.py::test_limiter_01[clock2-create_sqlite_bucket-False-2000] PASSED [ 55%] tests/test_limiter.py::test_limiter_01[clock2-create_sqlite_bucket-False-Duration.MINUTE] PASSED [ 55%] tests/test_limiter.py::test_limiter_01[clock2-create_async_redis_bucket-True-None] PASSED [ 56%] tests/test_limiter.py::test_limiter_01[clock2-create_async_redis_bucket-True-500] PASSED [ 56%] tests/test_limiter.py::test_limiter_01[clock2-create_async_redis_bucket-True-2000] PASSED [ 56%] tests/test_limiter.py::test_limiter_01[clock2-create_async_redis_bucket-True-Duration.MINUTE] PASSED [ 56%] tests/test_limiter.py::test_limiter_01[clock2-create_async_redis_bucket-False-None] PASSED [ 57%] tests/test_limiter.py::test_limiter_01[clock2-create_async_redis_bucket-False-500] PASSED [ 57%] tests/test_limiter.py::test_limiter_01[clock2-create_async_redis_bucket-False-2000] PASSED [ 57%] tests/test_limiter.py::test_limiter_01[clock2-create_async_redis_bucket-False-Duration.MINUTE] PASSED [ 57%] tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-True-None] FAILED [ 58%] tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-True-500] FAILED [ 58%] tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-True-2000] FAILED [ 58%] tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-True-Duration.MINUTE] FAILED [ 58%] tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-False-None] FAILED [ 59%] tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-False-500] FAILED [ 59%] tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-False-2000] FAILED [ 59%] tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-False-Duration.MINUTE] FAILED [ 59%] tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-None] FAILED [ 60%] tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-500] FAILED [ 60%] tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-2000] PASSED [ 60%] tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-Duration.MINUTE] FAILED [ 60%] tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-False-None] FAILED [ 61%] tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-False-500] PASSED [ 61%] tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-False-2000] PASSED [ 61%] tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-False-Duration.MINUTE] PASSED [ 61%] tests/test_limiter.py::test_limiter_decorator[clock0-create_in_memory_bucket-True-None] PASSED [ 62%] tests/test_limiter.py::test_limiter_decorator[clock0-create_in_memory_bucket-True-500] PASSED [ 62%] tests/test_limiter.py::test_limiter_decorator[clock0-create_in_memory_bucket-True-2000] PASSED [ 62%] tests/test_limiter.py::test_limiter_decorator[clock0-create_in_memory_bucket-True-Duration.MINUTE] PASSED [ 62%] tests/test_limiter.py::test_limiter_decorator[clock0-create_in_memory_bucket-False-None] PASSED [ 63%] tests/test_limiter.py::test_limiter_decorator[clock0-create_in_memory_bucket-False-500] PASSED [ 63%] tests/test_limiter.py::test_limiter_decorator[clock0-create_in_memory_bucket-False-2000] PASSED [ 63%] tests/test_limiter.py::test_limiter_decorator[clock0-create_in_memory_bucket-False-Duration.MINUTE] PASSED [ 63%] tests/test_limiter.py::test_limiter_decorator[clock0-create_redis_bucket-True-None] PASSED [ 64%] tests/test_limiter.py::test_limiter_decorator[clock0-create_redis_bucket-True-500] PASSED [ 64%] tests/test_limiter.py::test_limiter_decorator[clock0-create_redis_bucket-True-2000] PASSED [ 64%] tests/test_limiter.py::test_limiter_decorator[clock0-create_redis_bucket-True-Duration.MINUTE] PASSED [ 64%] tests/test_limiter.py::test_limiter_decorator[clock0-create_redis_bucket-False-None] PASSED [ 65%] tests/test_limiter.py::test_limiter_decorator[clock0-create_redis_bucket-False-500] PASSED [ 65%] tests/test_limiter.py::test_limiter_decorator[clock0-create_redis_bucket-False-2000] PASSED [ 65%] tests/test_limiter.py::test_limiter_decorator[clock0-create_redis_bucket-False-Duration.MINUTE] PASSED [ 65%] tests/test_limiter.py::test_limiter_decorator[clock0-create_sqlite_bucket-True-None] PASSED [ 66%] tests/test_limiter.py::test_limiter_decorator[clock0-create_sqlite_bucket-True-500] PASSED [ 66%] tests/test_limiter.py::test_limiter_decorator[clock0-create_sqlite_bucket-True-2000] PASSED [ 66%] tests/test_limiter.py::test_limiter_decorator[clock0-create_sqlite_bucket-True-Duration.MINUTE] PASSED [ 66%] tests/test_limiter.py::test_limiter_decorator[clock0-create_sqlite_bucket-False-None] PASSED [ 66%] tests/test_limiter.py::test_limiter_decorator[clock0-create_sqlite_bucket-False-500] PASSED [ 67%] tests/test_limiter.py::test_limiter_decorator[clock0-create_sqlite_bucket-False-2000] PASSED [ 67%] tests/test_limiter.py::test_limiter_decorator[clock0-create_sqlite_bucket-False-Duration.MINUTE] PASSED [ 67%] tests/test_limiter.py::test_limiter_decorator[clock0-create_async_redis_bucket-True-None] PASSED [ 67%] tests/test_limiter.py::test_limiter_decorator[clock0-create_async_redis_bucket-True-500] PASSED [ 68%] tests/test_limiter.py::test_limiter_decorator[clock0-create_async_redis_bucket-True-2000] PASSED [ 68%] tests/test_limiter.py::test_limiter_decorator[clock0-create_async_redis_bucket-True-Duration.MINUTE] PASSED [ 68%] tests/test_limiter.py::test_limiter_decorator[clock0-create_async_redis_bucket-False-None] PASSED [ 68%] tests/test_limiter.py::test_limiter_decorator[clock0-create_async_redis_bucket-False-500] PASSED [ 69%] tests/test_limiter.py::test_limiter_decorator[clock0-create_async_redis_bucket-False-2000] PASSED [ 69%] tests/test_limiter.py::test_limiter_decorator[clock0-create_async_redis_bucket-False-Duration.MINUTE] PASSED [ 69%] tests/test_limiter.py::test_limiter_decorator[clock0-create_filelocksqlite_bucket-True-None] PASSED [ 69%] tests/test_limiter.py::test_limiter_decorator[clock0-create_filelocksqlite_bucket-True-500] PASSED [ 70%] tests/test_limiter.py::test_limiter_decorator[clock0-create_filelocksqlite_bucket-True-2000] PASSED [ 70%] tests/test_limiter.py::test_limiter_decorator[clock0-create_filelocksqlite_bucket-True-Duration.MINUTE] PASSED [ 70%] tests/test_limiter.py::test_limiter_decorator[clock0-create_filelocksqlite_bucket-False-None] PASSED [ 70%] tests/test_limiter.py::test_limiter_decorator[clock0-create_filelocksqlite_bucket-False-500] PASSED [ 71%] tests/test_limiter.py::test_limiter_decorator[clock0-create_filelocksqlite_bucket-False-2000] PASSED [ 71%] tests/test_limiter.py::test_limiter_decorator[clock0-create_filelocksqlite_bucket-False-Duration.MINUTE] PASSED [ 71%] tests/test_limiter.py::test_limiter_decorator[clock0-create_mp_bucket-True-None] PASSED [ 71%] tests/test_limiter.py::test_limiter_decorator[clock0-create_mp_bucket-True-500] PASSED [ 72%] tests/test_limiter.py::test_limiter_decorator[clock0-create_mp_bucket-True-2000] PASSED [ 72%] tests/test_limiter.py::test_limiter_decorator[clock0-create_mp_bucket-True-Duration.MINUTE] PASSED [ 72%] tests/test_limiter.py::test_limiter_decorator[clock0-create_mp_bucket-False-None] PASSED [ 72%] tests/test_limiter.py::test_limiter_decorator[clock0-create_mp_bucket-False-500] PASSED [ 73%] tests/test_limiter.py::test_limiter_decorator[clock0-create_mp_bucket-False-2000] PASSED [ 73%] tests/test_limiter.py::test_limiter_decorator[clock0-create_mp_bucket-False-Duration.MINUTE] PASSED [ 73%] tests/test_limiter.py::test_limiter_decorator[clock1-create_in_memory_bucket-True-None] PASSED [ 73%] tests/test_limiter.py::test_limiter_decorator[clock1-create_in_memory_bucket-True-500] PASSED [ 74%] tests/test_limiter.py::test_limiter_decorator[clock1-create_in_memory_bucket-True-2000] PASSED [ 74%] tests/test_limiter.py::test_limiter_decorator[clock1-create_in_memory_bucket-True-Duration.MINUTE] PASSED [ 74%] tests/test_limiter.py::test_limiter_decorator[clock1-create_in_memory_bucket-False-None] PASSED [ 74%] tests/test_limiter.py::test_limiter_decorator[clock1-create_in_memory_bucket-False-500] PASSED [ 75%] tests/test_limiter.py::test_limiter_decorator[clock1-create_in_memory_bucket-False-2000] PASSED [ 75%] tests/test_limiter.py::test_limiter_decorator[clock1-create_in_memory_bucket-False-Duration.MINUTE] PASSED [ 75%] tests/test_limiter.py::test_limiter_decorator[clock1-create_redis_bucket-True-None] PASSED [ 75%] tests/test_limiter.py::test_limiter_decorator[clock1-create_redis_bucket-True-500] PASSED [ 76%] tests/test_limiter.py::test_limiter_decorator[clock1-create_redis_bucket-True-2000] PASSED [ 76%] tests/test_limiter.py::test_limiter_decorator[clock1-create_redis_bucket-True-Duration.MINUTE] PASSED [ 76%] tests/test_limiter.py::test_limiter_decorator[clock1-create_redis_bucket-False-None] PASSED [ 76%] tests/test_limiter.py::test_limiter_decorator[clock1-create_redis_bucket-False-500] PASSED [ 77%] tests/test_limiter.py::test_limiter_decorator[clock1-create_redis_bucket-False-2000] PASSED [ 77%] tests/test_limiter.py::test_limiter_decorator[clock1-create_redis_bucket-False-Duration.MINUTE] PASSED [ 77%] tests/test_limiter.py::test_limiter_decorator[clock1-create_sqlite_bucket-True-None] PASSED [ 77%] tests/test_limiter.py::test_limiter_decorator[clock1-create_sqlite_bucket-True-500] PASSED [ 78%] tests/test_limiter.py::test_limiter_decorator[clock1-create_sqlite_bucket-True-2000] PASSED [ 78%] tests/test_limiter.py::test_limiter_decorator[clock1-create_sqlite_bucket-True-Duration.MINUTE] PASSED [ 78%] tests/test_limiter.py::test_limiter_decorator[clock1-create_sqlite_bucket-False-None] PASSED [ 78%] tests/test_limiter.py::test_limiter_decorator[clock1-create_sqlite_bucket-False-500] PASSED [ 79%] tests/test_limiter.py::test_limiter_decorator[clock1-create_sqlite_bucket-False-2000] PASSED [ 79%] tests/test_limiter.py::test_limiter_decorator[clock1-create_sqlite_bucket-False-Duration.MINUTE] PASSED [ 79%] tests/test_limiter.py::test_limiter_decorator[clock1-create_async_redis_bucket-True-None] PASSED [ 79%] tests/test_limiter.py::test_limiter_decorator[clock1-create_async_redis_bucket-True-500] PASSED [ 80%] tests/test_limiter.py::test_limiter_decorator[clock1-create_async_redis_bucket-True-2000] PASSED [ 80%] tests/test_limiter.py::test_limiter_decorator[clock1-create_async_redis_bucket-True-Duration.MINUTE] PASSED [ 80%] tests/test_limiter.py::test_limiter_decorator[clock1-create_async_redis_bucket-False-None] PASSED [ 80%] tests/test_limiter.py::test_limiter_decorator[clock1-create_async_redis_bucket-False-500] PASSED [ 81%] tests/test_limiter.py::test_limiter_decorator[clock1-create_async_redis_bucket-False-2000] PASSED [ 81%] tests/test_limiter.py::test_limiter_decorator[clock1-create_async_redis_bucket-False-Duration.MINUTE] PASSED [ 81%] tests/test_limiter.py::test_limiter_decorator[clock1-create_filelocksqlite_bucket-True-None] PASSED [ 81%] tests/test_limiter.py::test_limiter_decorator[clock1-create_filelocksqlite_bucket-True-500] PASSED [ 82%] tests/test_limiter.py::test_limiter_decorator[clock1-create_filelocksqlite_bucket-True-2000] PASSED [ 82%] tests/test_limiter.py::test_limiter_decorator[clock1-create_filelocksqlite_bucket-True-Duration.MINUTE] PASSED [ 82%] tests/test_limiter.py::test_limiter_decorator[clock1-create_filelocksqlite_bucket-False-None] PASSED [ 82%] tests/test_limiter.py::test_limiter_decorator[clock1-create_filelocksqlite_bucket-False-500] PASSED [ 83%] tests/test_limiter.py::test_limiter_decorator[clock1-create_filelocksqlite_bucket-False-2000] PASSED [ 83%] tests/test_limiter.py::test_limiter_decorator[clock1-create_filelocksqlite_bucket-False-Duration.MINUTE] PASSED [ 83%] tests/test_limiter.py::test_limiter_decorator[clock1-create_mp_bucket-True-None] PASSED [ 83%] tests/test_limiter.py::test_limiter_decorator[clock1-create_mp_bucket-True-500] PASSED [ 84%] tests/test_limiter.py::test_limiter_decorator[clock1-create_mp_bucket-True-2000] PASSED [ 84%] tests/test_limiter.py::test_limiter_decorator[clock1-create_mp_bucket-True-Duration.MINUTE] PASSED [ 84%] tests/test_limiter.py::test_limiter_decorator[clock1-create_mp_bucket-False-None] PASSED [ 84%] tests/test_limiter.py::test_limiter_decorator[clock1-create_mp_bucket-False-500] PASSED [ 85%] tests/test_limiter.py::test_limiter_decorator[clock1-create_mp_bucket-False-2000] PASSED [ 85%] tests/test_limiter.py::test_limiter_decorator[clock1-create_mp_bucket-False-Duration.MINUTE] PASSED [ 85%] tests/test_limiter.py::test_limiter_decorator[clock2-create_in_memory_bucket-True-None] PASSED [ 85%] tests/test_limiter.py::test_limiter_decorator[clock2-create_in_memory_bucket-True-500] PASSED [ 86%] tests/test_limiter.py::test_limiter_decorator[clock2-create_in_memory_bucket-True-2000] PASSED [ 86%] tests/test_limiter.py::test_limiter_decorator[clock2-create_in_memory_bucket-True-Duration.MINUTE] PASSED [ 86%] tests/test_limiter.py::test_limiter_decorator[clock2-create_in_memory_bucket-False-None] PASSED [ 86%] tests/test_limiter.py::test_limiter_decorator[clock2-create_in_memory_bucket-False-500] PASSED [ 87%] tests/test_limiter.py::test_limiter_decorator[clock2-create_in_memory_bucket-False-2000] PASSED [ 87%] tests/test_limiter.py::test_limiter_decorator[clock2-create_in_memory_bucket-False-Duration.MINUTE] PASSED [ 87%] tests/test_limiter.py::test_limiter_decorator[clock2-create_redis_bucket-True-None] PASSED [ 87%] tests/test_limiter.py::test_limiter_decorator[clock2-create_redis_bucket-True-500] PASSED [ 88%] tests/test_limiter.py::test_limiter_decorator[clock2-create_redis_bucket-True-2000] PASSED [ 88%] tests/test_limiter.py::test_limiter_decorator[clock2-create_redis_bucket-True-Duration.MINUTE] PASSED [ 88%] tests/test_limiter.py::test_limiter_decorator[clock2-create_redis_bucket-False-None] PASSED [ 88%] tests/test_limiter.py::test_limiter_decorator[clock2-create_redis_bucket-False-500] PASSED [ 89%] tests/test_limiter.py::test_limiter_decorator[clock2-create_redis_bucket-False-2000] PASSED [ 89%] tests/test_limiter.py::test_limiter_decorator[clock2-create_redis_bucket-False-Duration.MINUTE] PASSED [ 89%] tests/test_limiter.py::test_limiter_decorator[clock2-create_sqlite_bucket-True-None] PASSED [ 89%] tests/test_limiter.py::test_limiter_decorator[clock2-create_sqlite_bucket-True-500] PASSED [ 90%] tests/test_limiter.py::test_limiter_decorator[clock2-create_sqlite_bucket-True-2000] PASSED [ 90%] tests/test_limiter.py::test_limiter_decorator[clock2-create_sqlite_bucket-True-Duration.MINUTE] PASSED [ 90%] tests/test_limiter.py::test_limiter_decorator[clock2-create_sqlite_bucket-False-None] PASSED [ 90%] tests/test_limiter.py::test_limiter_decorator[clock2-create_sqlite_bucket-False-500] PASSED [ 91%] tests/test_limiter.py::test_limiter_decorator[clock2-create_sqlite_bucket-False-2000] PASSED [ 91%] tests/test_limiter.py::test_limiter_decorator[clock2-create_sqlite_bucket-False-Duration.MINUTE] PASSED [ 91%] tests/test_limiter.py::test_limiter_decorator[clock2-create_async_redis_bucket-True-None] PASSED [ 91%] tests/test_limiter.py::test_limiter_decorator[clock2-create_async_redis_bucket-True-500] PASSED [ 92%] tests/test_limiter.py::test_limiter_decorator[clock2-create_async_redis_bucket-True-2000] PASSED [ 92%] tests/test_limiter.py::test_limiter_decorator[clock2-create_async_redis_bucket-True-Duration.MINUTE] PASSED [ 92%] tests/test_limiter.py::test_limiter_decorator[clock2-create_async_redis_bucket-False-None] PASSED [ 92%] tests/test_limiter.py::test_limiter_decorator[clock2-create_async_redis_bucket-False-500] PASSED [ 93%] tests/test_limiter.py::test_limiter_decorator[clock2-create_async_redis_bucket-False-2000] PASSED [ 93%] tests/test_limiter.py::test_limiter_decorator[clock2-create_async_redis_bucket-False-Duration.MINUTE] PASSED [ 93%] tests/test_limiter.py::test_limiter_decorator[clock2-create_filelocksqlite_bucket-True-None] PASSED [ 93%] tests/test_limiter.py::test_limiter_decorator[clock2-create_filelocksqlite_bucket-True-500] PASSED [ 94%] tests/test_limiter.py::test_limiter_decorator[clock2-create_filelocksqlite_bucket-True-2000] PASSED [ 94%] tests/test_limiter.py::test_limiter_decorator[clock2-create_filelocksqlite_bucket-True-Duration.MINUTE] PASSED [ 94%] tests/test_limiter.py::test_limiter_decorator[clock2-create_filelocksqlite_bucket-False-None] PASSED [ 94%] tests/test_limiter.py::test_limiter_decorator[clock2-create_filelocksqlite_bucket-False-500] PASSED [ 95%] tests/test_limiter.py::test_limiter_decorator[clock2-create_filelocksqlite_bucket-False-2000] PASSED [ 95%] tests/test_limiter.py::test_limiter_decorator[clock2-create_filelocksqlite_bucket-False-Duration.MINUTE] PASSED [ 95%] tests/test_limiter.py::test_limiter_decorator[clock2-create_mp_bucket-True-None] PASSED [ 95%] tests/test_limiter.py::test_limiter_decorator[clock2-create_mp_bucket-True-500] PASSED [ 96%] tests/test_limiter.py::test_limiter_decorator[clock2-create_mp_bucket-True-2000] PASSED [ 96%] tests/test_limiter.py::test_limiter_decorator[clock2-create_mp_bucket-True-Duration.MINUTE] PASSED [ 96%] tests/test_limiter.py::test_limiter_decorator[clock2-create_mp_bucket-False-None] PASSED [ 96%] tests/test_limiter.py::test_limiter_decorator[clock2-create_mp_bucket-False-500] PASSED [ 97%] tests/test_limiter.py::test_limiter_decorator[clock2-create_mp_bucket-False-2000] PASSED [ 97%] tests/test_limiter.py::test_limiter_decorator[clock2-create_mp_bucket-False-Duration.MINUTE] PASSED [ 97%] tests/test_limiter.py::test_wait_too_long PASSED [ 97%] tests/test_others.py::test_duration PASSED [ 98%] tests/test_others.py::test_readable_duration PASSED [ 98%] tests/test_others.py::test_rate PASSED [ 98%] tests/test_others.py::test_binary_search PASSED [ 98%] tests/test_others.py::test_rate_validator PASSED [ 99%] tests/test_others.py::test_clock[clock0] PASSED [ 99%] tests/test_others.py::test_clock[clock1] PASSED [ 99%] tests/test_others.py::test_clock[clock2] PASSED [ 99%] tests/test_others.py::test_sqlite_clock PASSED [100%] =================================== FAILURES =================================== _____________ test_limiter_01[clock1-create_redis_bucket-True-500] _____________ clock = create_bucket = limiter_should_raise = True, limiter_delay = 500 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:86: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 100 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:85 cost = 100 _______ test_limiter_01[clock1-create_filelocksqlite_bucket-False-None] ________ clock = create_bucket = limiter_should_raise = False, limiter_delay = None @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") await prefilling_bucket(limiter, 0.3, item) if not limiter_should_raise: acquire_ok, cost = await async_acquire(limiter, item) if limiter_delay is None: assert cost <= 50 assert not acquire_ok else: assert acquire_ok else: if limiter_delay is None: with pytest.raises(BucketFullException): acquire_ok, cost = await async_acquire(limiter, item) else: acquire_ok, cost = await async_acquire(limiter, item) assert cost > 350 assert acquire_ok # # Flush before testing again await flushing_bucket(bucket) logger.info("Limiter Test #2") > await prefilling_bucket(limiter, 0, item) tests/test_limiter.py:137: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:80: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_vt64z.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-ICv4D1LgxS' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 12 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #2 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 254 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_vt64z.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-ICv4D1LgxS' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 12 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:85 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:91 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:136 Limiter Test #2 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 254 ________ test_limiter_01[clock1-create_filelocksqlite_bucket-False-500] ________ clock = create_bucket = limiter_should_raise = False, limiter_delay = 500 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:86: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_Txbz3.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-Cw36DQWKDc' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 70 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_Txbz3.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-Cw36DQWKDc' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:85 cost = 70 _______ test_limiter_01[clock1-create_filelocksqlite_bucket-False-2000] ________ clock = create_bucket = limiter_should_raise = False, limiter_delay = 2000 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_DUjdW.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-8guNHGVTjG' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 100 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_DUjdW.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-8guNHGVTjG' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:85 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:91 cost = 100 __ test_limiter_01[clock1-create_filelocksqlite_bucket-False-Duration.MINUTE] __ clock = create_bucket = limiter_should_raise = False, limiter_delay = @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:80: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_c2knX.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-NzzM8KBpgv' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 83 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_c2knX.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-NzzM8KBpgv' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 83 ______________ test_limiter_01[clock1-create_mp_bucket-True-500] _______________ clock = create_bucket = limiter_should_raise = True, limiter_delay = 500 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 132 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:85 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:91 cost = 132 ______________ test_limiter_01[clock1-create_mp_bucket-False-500] ______________ clock = create_bucket = limiter_should_raise = False, limiter_delay = 500 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 68 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:85 cost = 1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:91 cost = 68 _____________ test_limiter_01[clock1-create_mp_bucket-False-2000] ______________ clock = create_bucket = limiter_should_raise = False, limiter_delay = 2000 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 0 WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:cost = 98 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:79 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:85 cost = 0 WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:helpers.py:91 cost = 98 ________ test_limiter_01[clock2-create_filelocksqlite_bucket-True-None] ________ clock = create_bucket = limiter_should_raise = True, limiter_delay = None @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_7oBnd.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-BD3GUMhAwh' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 8 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 192 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_7oBnd.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-BD3GUMhAwh' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 8 INFO pyrate_limiter:helpers.py:85 cost = 0 INFO pyrate_limiter:helpers.py:91 cost = 192 ________ test_limiter_01[clock2-create_filelocksqlite_bucket-True-500] _________ clock = create_bucket = limiter_should_raise = True, limiter_delay = 500 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:86: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_36X6B.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-UvM6fkeFWA' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 395 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_36X6B.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-UvM6fkeFWA' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 395 ________ test_limiter_01[clock2-create_filelocksqlite_bucket-True-2000] ________ clock = create_bucket = limiter_should_raise = True, limiter_delay = 2000 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_3YTKG.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-Gxz9TSHHbW' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 160 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_3YTKG.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-Gxz9TSHHbW' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 0 INFO pyrate_limiter:helpers.py:91 cost = 160 __ test_limiter_01[clock2-create_filelocksqlite_bucket-True-Duration.MINUTE] ___ clock = create_bucket = limiter_should_raise = True, limiter_delay = @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:80: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_TAAft.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-PeupXcRAO4' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 305 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_TAAft.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-PeupXcRAO4' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 305 _______ test_limiter_01[clock2-create_filelocksqlite_bucket-False-None] ________ clock = create_bucket = limiter_should_raise = False, limiter_delay = None @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:86: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_P8Uuf.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-fN1fUZu50B' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 302 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_P8Uuf.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-fN1fUZu50B' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 302 ________ test_limiter_01[clock2-create_filelocksqlite_bucket-False-500] ________ clock = create_bucket = limiter_should_raise = False, limiter_delay = 500 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:86: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_C7pB4.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-0LOZ1TnOG9' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 405 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_C7pB4.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-0LOZ1TnOG9' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 405 _______ test_limiter_01[clock2-create_filelocksqlite_bucket-False-2000] ________ clock = create_bucket = limiter_should_raise = False, limiter_delay = 2000 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_sbi4I.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-STWYb8WQY5' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 758 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_sbi4I.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-STWYb8WQY5' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 0 INFO pyrate_limiter:helpers.py:91 cost = 758 __ test_limiter_01[clock2-create_filelocksqlite_bucket-False-Duration.MINUTE] __ clock = create_bucket = limiter_should_raise = False, limiter_delay = @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:86: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:SQLite db path: /tmp/pyrate_limiter_7m3Nd.sqlite INFO:pyrate_limiter.limiter_factory:table_name='pyrate-test-bucket-7YHmedGId0' INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 328 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:conftest.py:96 SQLite db path: /tmp/pyrate_limiter_7m3Nd.sqlite INFO pyrate_limiter.limiter_factory:limiter_factory.py:43 table_name='pyrate-test-bucket-7YHmedGId0' INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 328 ______________ test_limiter_01[clock2-create_mp_bucket-True-None] ______________ clock = create_bucket = limiter_should_raise = True, limiter_delay = None @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 308 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 0 INFO pyrate_limiter:helpers.py:91 cost = 308 ______________ test_limiter_01[clock2-create_mp_bucket-True-500] _______________ clock = create_bucket = limiter_should_raise = True, limiter_delay = 500 @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 1 INFO:pyrate_limiter:cost = 130 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 1 INFO pyrate_limiter:helpers.py:91 cost = 130 ________ test_limiter_01[clock2-create_mp_bucket-True-Duration.MINUTE] _________ clock = create_bucket = limiter_should_raise = True, limiter_delay = @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") > await prefilling_bucket(limiter, 0.3, item) tests/test_limiter.py:116: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0.3, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 370 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 0 INFO pyrate_limiter:helpers.py:91 cost = 370 _____________ test_limiter_01[clock2-create_mp_bucket-False-None] ______________ clock = create_bucket = limiter_should_raise = False, limiter_delay = None @pytest.mark.asyncio async def test_limiter_01( clock, create_bucket, limiter_should_raise, limiter_delay, ): bucket = await create_bucket(DEFAULT_RATES) factory = DemoBucketFactory(clock, demo=bucket) limiter = Limiter( factory, raise_when_fail=limiter_should_raise, max_delay=limiter_delay, buffer_ms=1 ) bucket = BucketAsyncWrapper(bucket) item = "demo" logger.info("If weight = 0, it just passes thru") acquire_ok, cost = await async_acquire(limiter, item, weight=0) assert acquire_ok assert cost <= 10 assert await bucket.count() == 0 logger.info("Limiter Test #1") await prefilling_bucket(limiter, 0.3, item) if not limiter_should_raise: acquire_ok, cost = await async_acquire(limiter, item) if limiter_delay is None: assert cost <= 50 assert not acquire_ok else: assert acquire_ok else: if limiter_delay is None: with pytest.raises(BucketFullException): acquire_ok, cost = await async_acquire(limiter, item) else: acquire_ok, cost = await async_acquire(limiter, item) assert cost > 350 assert acquire_ok # # Flush before testing again await flushing_bucket(bucket) logger.info("Limiter Test #2") > await prefilling_bucket(limiter, 0, item) tests/test_limiter.py:137: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ limiter = sleep_interval = 0, item = 'demo' async def prefilling_bucket(limiter: Limiter, sleep_interval: float, item: str): """Pre-filling bucket to the limit before testing the time cost might vary depending on the bucket's backend - For in-memory bucket, this should be less than a 1ms - For external bucket's source ie Redis, this mostly depends on the network latency """ acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) assert cost <= 50 assert acquire_ok await sleep(sleep_interval) acquire_ok, cost = await async_acquire(limiter, item) logger.info("cost = %s", cost) > assert cost <= 50 ^^^^^^^^^^ E AssertionError tests/helpers.py:92: AssertionError ----------------------------- Captured stderr call ----------------------------- INFO:pyrate_limiter:If weight = 0, it just passes thru WARNING:pyrate_limiter:async call made without an async bucket. INFO:pyrate_limiter:Limiter Test #1 INFO:pyrate_limiter:cost = 3 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 1 INFO:pyrate_limiter:Limiter Test #2 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 0 INFO:pyrate_limiter:cost = 77 ------------------------------ Captured log call ------------------------------- INFO pyrate_limiter:test_limiter.py:109 If weight = 0, it just passes thru WARNING pyrate_limiter:limiter.py:363 async call made without an async bucket. INFO pyrate_limiter:test_limiter.py:115 Limiter Test #1 INFO pyrate_limiter:helpers.py:79 cost = 3 INFO pyrate_limiter:helpers.py:85 cost = 0 INFO pyrate_limiter:helpers.py:91 cost = 1 INFO pyrate_limiter:test_limiter.py:136 Limiter Test #2 INFO pyrate_limiter:helpers.py:79 cost = 0 INFO pyrate_limiter:helpers.py:85 cost = 0 INFO pyrate_limiter:helpers.py:91 cost = 77 =============================== warnings summary =============================== tests/test_limiter.py: 48 warnings /usr/lib/python3.13/multiprocessing/popen_fork.py:67: DeprecationWarning: This process (pid=2098901) is multi-threaded, use of fork() may lead to deadlocks in the child. self.pid = os.fork() -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ============================= slowest 10 durations ============================= 5.69s call tests/test_bucket_all.py::test_bucket_01[clock0-create_redis_bucket] 5.59s call tests/test_bucket_all.py::test_bucket_performance[create_filelocksqlite_bucket] 5.38s call tests/test_bucket_all.py::test_bucket_01[clock0-create_async_redis_bucket] 5.29s call tests/test_bucket_all.py::test_bucket_02[clock2-create_mp_bucket] 5.28s call tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-2000] 5.27s call tests/test_bucket_all.py::test_bucket_02[clock1-create_mp_bucket] 5.22s call tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-None] 5.15s call tests/test_bucket_all.py::test_bucket_02[clock0-create_mp_bucket] 5.13s call tests/test_bucket_all.py::test_bucket_02[clock2-create_async_redis_bucket] 5.08s call tests/test_bucket_all.py::test_bucket_02[clock1-create_async_redis_bucket] =========================== short test summary info ============================ FAILED tests/test_limiter.py::test_limiter_01[clock1-create_redis_bucket-True-500] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-False-None] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-False-500] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-False-2000] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock1-create_filelocksqlite_bucket-False-Duration.MINUTE] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-True-500] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-False-500] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock1-create_mp_bucket-False-2000] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-True-None] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-True-500] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-True-2000] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-True-Duration.MINUTE] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-False-None] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-False-500] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-False-2000] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_filelocksqlite_bucket-False-Duration.MINUTE] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-None] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-500] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-True-Duration.MINUTE] - AssertionError FAILED tests/test_limiter.py::test_limiter_01[clock2-create_mp_bucket-False-None] - AssertionError === 20 failed, 383 passed, 467 deselected, 48 warnings in 446.50s (0:07:26) ==== E: pybuild pybuild:389: test: plugin pyproject failed with: exit code=1: cd /build/reproducible-path/pyrate-limiter-3.9.0/.pybuild/cpython3_3.13/build; python3.13 -m pytest -vv --durations=10 --ignore=tests/test_multiprocessing.py -k " not postgres and not test_limiter_constructor_02 and not test_bucket_leak and not test_factory_leak and not test_limiter_async_factory_get and not test_mp_bucket_async and not test_bucket_full and not test_limiter_concurrency" dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p 3.13 returned exit code 13 make: *** [debian/rules:16: binary] Error 25 dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2 I: copying local configuration E: Failed autobuilding of package I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem W: Stray processes left from build: * system-pbuilder-build-pyrate\x2dlimiter_3.9.0\x2d4-2056616.slice - Slice /system/pbuilder/build/pyrate-limiter_3.9.0-4/2056616 Loaded: loaded Active: active since Wed 2025-10-29 19:07:13 -12; 10min ago Invocation: 48ed70fa62f1498bbe931a9fadb62d3e Tasks: 6 Memory: 61.1M (peak: 543.5M, swap: 317.2M, swap peak: 317.2M) CPU: 1min 39.097s CGroup: /system.slice/system-pbuilder.slice/system-pbuilder-build.slice/system-pbuilder-build-pyrate\x2dlimiter_3.9.0\x2d4.slice/system-pbuilder-build-pyrate\x2dlimiter_3.9.0\x2d4-2056616.slice `-run-p2081142-i115317972.scope `-2098885 "redis-server *:6379" Oct 29 19:07:13 codethink04-arm64 systemd[1]: Created slice system-pbuilder-build-pyrate\x2dlimiter_3.9.0\x2d4-2056616.slice - Slice /system/pbuilder/build/pyrate-limiter_3.9.0-4/2056616. I: cleaning the build env I: removing directory /srv/workspace/pbuilder/2056616 and its subdirectories pyrate-limiter failed to build from source. removed '/var/lib/jenkins/userContent/reproducible/debian/rbuild/forky/arm64/pyrate-limiter_3.9.0-2.rbuild.log' removed '/var/lib/jenkins/userContent/reproducible/debian/rbuild/forky/arm64/pyrate-limiter_3.9.0-2.rbuild.log.gz' removed '/var/lib/jenkins/userContent/reproducible/debian/logs/forky/arm64/pyrate-limiter_3.9.0-2.build1.log.gz' Thu Oct 30 07:17:16 UTC 2025 W: No second build log, what happened? Compressing the 1st log... b1/build.log: 89.5% -- replaced with stdout INSERT 0 1 INSERT 0 1 DELETE 1 [2025-10-30 07:17:17] INFO: Starting at 2025-10-30 07:17:17.351530 [2025-10-30 07:17:17] INFO: Generating the pages of 1 package(s) [2025-10-30 07:17:17] ERROR: Either /var/lib/jenkins/userContent/reproducible/debian/logs/unstable/amd64/pyrate-limiter_3.9.0-4.build2.log.gz or /var/lib/jenkins/userContent/reproducible/debian/logdiffs/unstable/amd64/pyrate-limiter_3.9.0-4.diff.gz is missing [2025-10-30 07:17:17] ERROR: Either /var/lib/jenkins/userContent/reproducible/debian/logs/forky/amd64/pyrate-limiter_3.9.0-4.build2.log.gz or /var/lib/jenkins/userContent/reproducible/debian/logdiffs/forky/amd64/pyrate-limiter_3.9.0-4.diff.gz is missing [2025-10-30 07:17:17] CRITICAL: https://tests.reproducible-builds.org/debian/forky/arm64/pyrate-limiter didn't produce a buildlog, even though it has been built. [2025-10-30 07:17:17] INFO: Finished at 2025-10-30 07:17:17.513763, took: 0:00:00.162236 Thu Oct 30 07:17:17 UTC 2025 - successfully updated the database and updated https://tests.reproducible-builds.org/debian/rb-pkg/forky/arm64/pyrate-limiter.html Starting cleanup. /var/lib/jenkins/userContent/reproducible/debian/rbuild/forky/arm64/pyrate-limiter_3.9.0-4.rbuild.log: 88.7% -- replaced with /var/lib/jenkins/userContent/reproducible/debian/rbuild/forky/arm64/pyrate-limiter_3.9.0-4.rbuild.log.gz [2025-10-30 07:17:17] INFO: Starting at 2025-10-30 07:17:17.816506 [2025-10-30 07:17:17] INFO: Generating the pages of 1 package(s) [2025-10-30 07:17:17] ERROR: Either /var/lib/jenkins/userContent/reproducible/debian/logs/unstable/amd64/pyrate-limiter_3.9.0-4.build2.log.gz or /var/lib/jenkins/userContent/reproducible/debian/logdiffs/unstable/amd64/pyrate-limiter_3.9.0-4.diff.gz is missing [2025-10-30 07:17:17] ERROR: Either /var/lib/jenkins/userContent/reproducible/debian/logs/forky/amd64/pyrate-limiter_3.9.0-4.build2.log.gz or /var/lib/jenkins/userContent/reproducible/debian/logdiffs/forky/amd64/pyrate-limiter_3.9.0-4.diff.gz is missing [2025-10-30 07:17:17] ERROR: Either /var/lib/jenkins/userContent/reproducible/debian/logs/forky/arm64/pyrate-limiter_3.9.0-4.build2.log.gz or /var/lib/jenkins/userContent/reproducible/debian/logdiffs/forky/arm64/pyrate-limiter_3.9.0-4.diff.gz is missing [2025-10-30 07:17:17] INFO: Finished at 2025-10-30 07:17:17.979322, took: 0:00:00.162819 All cleanup done. Thu Oct 30 07:17:18 UTC 2025 - total duration: 0h 10m 36s. Thu Oct 30 07:17:18 UTC 2025 - reproducible_build.sh stopped running as /tmp/jenkins-script-ys6yjIrR, removing. Finished with result: success Main processes terminated with: code=exited, status=0/SUCCESS Service runtime: 10min 37.357s CPU time consumed: 2.298s Memory peak: 35.2M (swap: 0B)