Mon Jan 13 11:29:52 UTC 2025 I: starting to build python-passlib/trixie/armhf on jenkins on '2025-01-13 11:29' Mon Jan 13 11:29:52 UTC 2025 I: The jenkins build log is/was available at https://jenkins.debian.net/userContent/reproducible/debian/build_service/armhf_32/23730/console.log Mon Jan 13 11:29:52 UTC 2025 I: Downloading source for trixie/python-passlib=1.7.4-4 --2025-01-13 11:29:52-- http://deb.debian.org/debian/pool/main/p/python-passlib/python-passlib_1.7.4-4.dsc Connecting to 46.16.76.132:3128... connected. Proxy request sent, awaiting response... 200 OK Length: 2057 (2.0K) [text/prs.lines.tag] Saving to: ‘python-passlib_1.7.4-4.dsc’ 0K .. 100% 293M=0s 2025-01-13 11:29:52 (293 MB/s) - ‘python-passlib_1.7.4-4.dsc’ saved [2057/2057] Mon Jan 13 11:29:52 UTC 2025 I: python-passlib_1.7.4-4.dsc -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA256 Format: 3.0 (quilt) Source: python-passlib Binary: python3-passlib Architecture: all Version: 1.7.4-4 Maintainer: Debian Python Team Uploaders: Brian May Homepage: https://passlib.readthedocs.io Standards-Version: 4.6.1 Vcs-Browser: https://salsa.debian.org/python-team/packages/python-passlib Vcs-Git: https://salsa.debian.org/python-team/packages/python-passlib.git Testsuite: autopkgtest Build-Depends: debhelper-compat (= 13), dh-python, python3-all, python3-setuptools, python3-pytest Package-List: python3-passlib deb python optional arch=all Checksums-Sha1: c10ea1bbefb0cab805738f0373c57244ddce0c4f 532384 python-passlib_1.7.4.orig.tar.xz 5806dfd7a5b8fdeaf946c9dd797173cd873e5303 10664 python-passlib_1.7.4-4.debian.tar.xz Checksums-Sha256: 83e253fa2925b4247c92d0c7632a069777d16136c7664d0e022f77ce9bda7ef5 532384 python-passlib_1.7.4.orig.tar.xz e81d25e8bda027d383c91ee62bfe750ca12f5cd1ef1a681846f051ca39f4ae6d 10664 python-passlib_1.7.4-4.debian.tar.xz Files: 3ef7cc35cfd92bc41c54a6666b31fda5 532384 python-passlib_1.7.4.orig.tar.xz 8f060a90512607351c9122e8e3c54b39 10664 python-passlib_1.7.4-4.debian.tar.xz -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEoLGp81CJVhMOekJc1BatFaxrQ/4FAmWG8ZoACgkQ1BatFaxr Q/4qkw/9FpSqFuHyYDg5taXBfcmqBwPNAySd/X2eI6K8bGvW4OaNMzy7VRBkrNVV euZOjquJqVnjlmIsOtMp8KTuV2q/6APMZcnnsaESf+3WNvnvw+BiUcZvG+aI5TfM IkCOfZWTq8btGdXUM8clYq+KwXw9KriPY5SvnNmhIRU6Y5N4BiyWi1NcjJRyPJCX pmCsMj5CKv+KlRaR1VJIUm8NKwN7Fnjhe5BlQrQP074yT5TA9VxMnKLruXYbZT/n OPNU4fQuyrpr2MuzOyFHPLQysI5UWh8pLokvz3ZAyyqYV85yzABDy5BEUu6AipJo t5n/PDKczEpw9KkvSykHUCKAYCzJKKEQXN1QXCP33KrYBZfuFk3WKBtUKTXqrMF0 y1WKBcbU6J8bvDMVnQfYAONu/yWSHefTVEMZRcaG++Nrj1JzMppCGXzO/iXxQpjg z/X+Cgf+4rU6FoPg98v74xnMFlT5VAjQjVFOLnPkozYyuD+h7bBiSYTeDs+tmNdb orjizhEXxwp0s/bSWYzhkztVX0HPuAvhatEKHe3XJ9t8dSB6wwVARBbnhYjK5Qk6 teA8xOY8dJdq2mZwf0b1JFHHUNJEFoAEUIWZVnCmioiCiBp+5iLCQAL/PqzWUTah l4D2PYFN3PEyzrQsm9RvmdMjaHTO/sltHn0xHQL4erhnxY/oy+c= =rO31 -----END PGP SIGNATURE----- Mon Jan 13 11:29:52 UTC 2025 I: Checking whether the package is not for us Mon Jan 13 11:29:52 UTC 2025 I: Starting 1st build on remote node virt64c-armhf-rb.debian.net. Mon Jan 13 11:29:52 UTC 2025 I: Preparing to do remote build '1' on virt64c-armhf-rb.debian.net. Mon Jan 13 11:43:07 UTC 2025 I: Deleting $TMPDIR on virt64c-armhf-rb.debian.net. I: pbuilder: network access will be disabled during build I: Current time: Sun Jan 12 23:29:58 -12 2025 I: pbuilder-time-stamp: 1736767798 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/trixie-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 [python-passlib_1.7.4-4.dsc] I: copying [./python-passlib_1.7.4.orig.tar.xz] I: copying [./python-passlib_1.7.4-4.debian.tar.xz] I: Extracting source dpkg-source: warning: cannot verify inline signature for ./python-passlib_1.7.4-4.dsc: unsupported subcommand dpkg-source: info: extracting python-passlib in python-passlib-1.7.4 dpkg-source: info: unpacking python-passlib_1.7.4.orig.tar.xz dpkg-source: info: unpacking python-passlib_1.7.4-4.debian.tar.xz dpkg-source: info: using patch list from debian/patches/series dpkg-source: info: applying 0001-no-nose.patch dpkg-source: info: applying py3.12-use-raw-strings-to-avoid-warning.patch dpkg-source: info: applying py3.12-avoid-utcfromtimestamp.patch dpkg-source: info: applying py3.12-do-not-use-__future__.patch I: using fakeroot in build. I: Installing the build-deps I: user script /srv/workspace/pbuilder/12988/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='armhf' DEBIAN_FRONTEND='noninteractive' DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=3 ' DISTRIBUTION='trixie' HOME='/root' HOST_ARCH='armhf' IFS=' ' INVOCATION_ID='e59615a2749f42e88c878c921471d169' 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='12988' 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.r2kiF4BM/pbuilderrc_s22r --distribution trixie --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.r2kiF4BM/b1 --logfile b1/build.log python-passlib_1.7.4-4.dsc' SUDO_GID='113' SUDO_UID='107' SUDO_USER='jenkins' TERM='unknown' TZ='/usr/share/zoneinfo/Etc/GMT+12' USER='root' _='/usr/bin/systemd-run' http_proxy='http://10.0.0.15:3142/' I: uname -a Linux virt64c 6.1.0-29-arm64 #1 SMP Debian 6.1.123-1 (2025-01-02) aarch64 GNU/Linux I: ls -l /bin lrwxrwxrwx 1 root root 7 Nov 22 14:40 /bin -> usr/bin I: user script /srv/workspace/pbuilder/12988/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: armhf 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-python, python3-all, python3-setuptools, python3-pytest dpkg-deb: building package 'pbuilder-satisfydepends-dummy' in '/tmp/satisfydepends-aptitude/pbuilder-satisfydepends-dummy.deb'. Selecting previously unselected package pbuilder-satisfydepends-dummy. (Reading database ... 19567 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-python; however: Package dh-python is not installed. pbuilder-satisfydepends-dummy depends on python3-all; however: Package python3-all is not installed. pbuilder-satisfydepends-dummy depends on python3-setuptools; however: Package python3-setuptools is not installed. pbuilder-satisfydepends-dummy depends on python3-pytest; however: Package python3-pytest 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} debhelper{a} dh-autoreconf{a} dh-python{a} dh-strip-nondeterminism{a} dwz{a} file{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} libicu72{a} libk5crypto3{a} libkeyutils1{a} libkrb5-3{a} libkrb5support0{a} libmagic-mgc{a} libmagic1t64{a} libnsl2{a} libpipeline1{a} libpython3-stdlib{a} libpython3.12-minimal{a} libpython3.12-stdlib{a} libpython3.13-minimal{a} libpython3.13-stdlib{a} libreadline8t64{a} libtirpc-common{a} libtirpc3t64{a} libtool{a} libuchardet0{a} libunistring5{a} libxml2{a} m4{a} man-db{a} media-types{a} netbase{a} po-debconf{a} python3{a} python3-all{a} python3-autocommand{a} python3-inflect{a} python3-iniconfig{a} python3-jaraco.context{a} python3-jaraco.functools{a} python3-jaraco.text{a} python3-minimal{a} python3-more-itertools{a} python3-packaging{a} python3-pkg-resources{a} python3-pluggy{a} python3-pytest{a} python3-setuptools{a} python3-typeguard{a} python3-typing-extensions{a} python3-zipp{a} python3.12{a} python3.12-minimal{a} python3.13{a} python3.13-minimal{a} readline-common{a} sensible-utils{a} tzdata{a} The following packages are RECOMMENDED but will NOT be installed: ca-certificates curl krb5-locales libarchive-cpio-perl libltdl-dev libmail-sendmail-perl lynx python3-pygments wget 0 packages upgraded, 74 newly installed, 0 to remove and 0 not upgraded. Need to get 32.9 MB of archives. After unpacking 126 MB will be used. Writing extended state information... Get: 1 http://deb.debian.org/debian trixie/main armhf libpython3.12-minimal armhf 3.12.8-3 [802 kB] Get: 2 http://deb.debian.org/debian trixie/main armhf libexpat1 armhf 2.6.4-1 [83.5 kB] Get: 3 http://deb.debian.org/debian trixie/main armhf python3.12-minimal armhf 3.12.8-3 [1794 kB] Get: 4 http://deb.debian.org/debian trixie/main armhf python3-minimal armhf 3.12.8-1 [26.9 kB] Get: 5 http://deb.debian.org/debian trixie/main armhf media-types all 10.1.0 [26.9 kB] Get: 6 http://deb.debian.org/debian trixie/main armhf netbase all 6.4 [12.8 kB] Get: 7 http://deb.debian.org/debian trixie/main armhf tzdata all 2024b-4 [256 kB] Get: 8 http://deb.debian.org/debian trixie/main armhf libffi8 armhf 3.4.6-1 [20.0 kB] Get: 9 http://deb.debian.org/debian trixie/main armhf libkrb5support0 armhf 1.21.3-3 [30.0 kB] Get: 10 http://deb.debian.org/debian trixie/main armhf libcom-err2 armhf 1.47.2-1 [23.3 kB] Get: 11 http://deb.debian.org/debian trixie/main armhf libk5crypto3 armhf 1.21.3-3 [75.8 kB] Get: 12 http://deb.debian.org/debian trixie/main armhf libkeyutils1 armhf 1.6.3-4 [8096 B] Get: 13 http://deb.debian.org/debian trixie/main armhf libkrb5-3 armhf 1.21.3-3 [283 kB] Get: 14 http://deb.debian.org/debian trixie/main armhf libgssapi-krb5-2 armhf 1.21.3-3 [114 kB] Get: 15 http://deb.debian.org/debian trixie/main armhf libtirpc-common all 1.3.4+ds-1.3 [10.9 kB] Get: 16 http://deb.debian.org/debian trixie/main armhf libtirpc3t64 armhf 1.3.4+ds-1.3+b1 [71.3 kB] Get: 17 http://deb.debian.org/debian trixie/main armhf libnsl2 armhf 1.3.0-3+b3 [35.0 kB] Get: 18 http://deb.debian.org/debian trixie/main armhf readline-common all 8.2-6 [69.4 kB] Get: 19 http://deb.debian.org/debian trixie/main armhf libreadline8t64 armhf 8.2-6 [146 kB] Get: 20 http://deb.debian.org/debian trixie/main armhf libpython3.12-stdlib armhf 3.12.8-3 [1824 kB] Get: 21 http://deb.debian.org/debian trixie/main armhf python3.12 armhf 3.12.8-3 [677 kB] Get: 22 http://deb.debian.org/debian trixie/main armhf libpython3-stdlib armhf 3.12.8-1 [9792 B] Get: 23 http://deb.debian.org/debian trixie/main armhf python3 armhf 3.12.8-1 [27.9 kB] Get: 24 http://deb.debian.org/debian trixie/main armhf libpython3.13-minimal armhf 3.13.1-2 [844 kB] Get: 25 http://deb.debian.org/debian trixie/main armhf python3.13-minimal armhf 3.13.1-2 [1838 kB] Get: 26 http://deb.debian.org/debian trixie/main armhf sensible-utils all 0.0.24 [24.8 kB] Get: 27 http://deb.debian.org/debian trixie/main armhf libmagic-mgc armhf 1:5.45-3+b1 [314 kB] Get: 28 http://deb.debian.org/debian trixie/main armhf libmagic1t64 armhf 1:5.45-3+b1 [98.5 kB] Get: 29 http://deb.debian.org/debian trixie/main armhf file armhf 1:5.45-3+b1 [42.3 kB] Get: 30 http://deb.debian.org/debian trixie/main armhf gettext-base armhf 0.22.5-4 [196 kB] Get: 31 http://deb.debian.org/debian trixie/main armhf libuchardet0 armhf 0.0.8-1+b2 [65.6 kB] Get: 32 http://deb.debian.org/debian trixie/main armhf groff-base armhf 1.23.0-7 [1095 kB] Get: 33 http://deb.debian.org/debian trixie/main armhf bsdextrautils armhf 2.40.2-13 [84.7 kB] Get: 34 http://deb.debian.org/debian trixie/main armhf libpipeline1 armhf 1.5.8-1 [35.0 kB] Get: 35 http://deb.debian.org/debian trixie/main armhf man-db armhf 2.13.0-1 [1382 kB] Get: 36 http://deb.debian.org/debian trixie/main armhf m4 armhf 1.4.19-5 [272 kB] Get: 37 http://deb.debian.org/debian trixie/main armhf autoconf all 2.72-3 [493 kB] Get: 38 http://deb.debian.org/debian trixie/main armhf autotools-dev all 20220109.1 [51.6 kB] Get: 39 http://deb.debian.org/debian trixie/main armhf automake all 1:1.16.5-1.3 [823 kB] Get: 40 http://deb.debian.org/debian trixie/main armhf autopoint all 0.22.5-4 [723 kB] Get: 41 http://deb.debian.org/debian trixie/main armhf libdebhelper-perl all 13.23 [90.6 kB] Get: 42 http://deb.debian.org/debian trixie/main armhf libtool all 2.5.4-2 [539 kB] Get: 43 http://deb.debian.org/debian trixie/main armhf dh-autoreconf all 20 [17.1 kB] Get: 44 http://deb.debian.org/debian trixie/main armhf libarchive-zip-perl all 1.68-1 [104 kB] Get: 45 http://deb.debian.org/debian trixie/main armhf libfile-stripnondeterminism-perl all 1.14.0-1 [19.5 kB] Get: 46 http://deb.debian.org/debian trixie/main armhf dh-strip-nondeterminism all 1.14.0-1 [8448 B] Get: 47 http://deb.debian.org/debian trixie/main armhf libelf1t64 armhf 0.192-4 [184 kB] Get: 48 http://deb.debian.org/debian trixie/main armhf dwz armhf 0.15-1+b2 [106 kB] Get: 49 http://deb.debian.org/debian trixie/main armhf libunistring5 armhf 1.3-1 [444 kB] Get: 50 http://deb.debian.org/debian trixie/main armhf libicu72 armhf 72.1-5+b1 [9088 kB] Get: 51 http://deb.debian.org/debian trixie/main armhf libxml2 armhf 2.12.7+dfsg+really2.9.14-0.2+b1 [605 kB] Get: 52 http://deb.debian.org/debian trixie/main armhf gettext armhf 0.22.5-4 [1489 kB] Get: 53 http://deb.debian.org/debian trixie/main armhf intltool-debian all 0.35.0+20060710.6 [22.9 kB] Get: 54 http://deb.debian.org/debian trixie/main armhf po-debconf all 1.0.21+nmu1 [248 kB] Get: 55 http://deb.debian.org/debian trixie/main armhf debhelper all 13.23 [919 kB] Get: 56 http://deb.debian.org/debian trixie/main armhf python3-autocommand all 2.2.2-3 [13.6 kB] Get: 57 http://deb.debian.org/debian trixie/main armhf python3-more-itertools all 10.5.0-1 [63.8 kB] Get: 58 http://deb.debian.org/debian trixie/main armhf python3-typing-extensions all 4.12.2-2 [73.0 kB] Get: 59 http://deb.debian.org/debian trixie/main armhf python3-typeguard all 4.4.1-1 [37.0 kB] Get: 60 http://deb.debian.org/debian trixie/main armhf python3-inflect all 7.3.1-2 [32.4 kB] Get: 61 http://deb.debian.org/debian trixie/main armhf python3-jaraco.context all 6.0.0-1 [7984 B] Get: 62 http://deb.debian.org/debian trixie/main armhf python3-jaraco.functools all 4.1.0-1 [12.0 kB] Get: 63 http://deb.debian.org/debian trixie/main armhf python3-pkg-resources all 75.6.0-1 [222 kB] Get: 64 http://deb.debian.org/debian trixie/main armhf python3-jaraco.text all 4.0.0-1 [11.4 kB] Get: 65 http://deb.debian.org/debian trixie/main armhf python3-zipp all 3.21.0-1 [10.6 kB] Get: 66 http://deb.debian.org/debian trixie/main armhf python3-setuptools all 75.6.0-1 [720 kB] Get: 67 http://deb.debian.org/debian trixie/main armhf dh-python all 6.20250108 [113 kB] Get: 68 http://deb.debian.org/debian trixie/main armhf libpython3.13-stdlib armhf 3.13.1-2 [1846 kB] Get: 69 http://deb.debian.org/debian trixie/main armhf python3.13 armhf 3.13.1-2 [740 kB] Get: 70 http://deb.debian.org/debian trixie/main armhf python3-all armhf 3.12.8-1 [1048 B] Get: 71 http://deb.debian.org/debian trixie/main armhf python3-iniconfig all 1.1.1-2 [6396 B] Get: 72 http://deb.debian.org/debian trixie/main armhf python3-packaging all 24.2-1 [55.3 kB] Get: 73 http://deb.debian.org/debian trixie/main armhf python3-pluggy all 1.5.0-1 [26.9 kB] Get: 74 http://deb.debian.org/debian trixie/main armhf python3-pytest all 8.3.4-1 [250 kB] Fetched 32.9 MB in 1s (29.2 MB/s) Preconfiguring packages ... Selecting previously unselected package libpython3.12-minimal:armhf. (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 ... 19567 files and directories currently installed.) Preparing to unpack .../libpython3.12-minimal_3.12.8-3_armhf.deb ... Unpacking libpython3.12-minimal:armhf (3.12.8-3) ... Selecting previously unselected package libexpat1:armhf. Preparing to unpack .../libexpat1_2.6.4-1_armhf.deb ... Unpacking libexpat1:armhf (2.6.4-1) ... Selecting previously unselected package python3.12-minimal. Preparing to unpack .../python3.12-minimal_3.12.8-3_armhf.deb ... Unpacking python3.12-minimal (3.12.8-3) ... Setting up libpython3.12-minimal:armhf (3.12.8-3) ... Setting up libexpat1:armhf (2.6.4-1) ... Setting up python3.12-minimal (3.12.8-3) ... 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 ... 19887 files and directories currently installed.) Preparing to unpack .../00-python3-minimal_3.12.8-1_armhf.deb ... Unpacking python3-minimal (3.12.8-1) ... Selecting previously unselected package media-types. Preparing to unpack .../01-media-types_10.1.0_all.deb ... Unpacking media-types (10.1.0) ... Selecting previously unselected package netbase. Preparing to unpack .../02-netbase_6.4_all.deb ... Unpacking netbase (6.4) ... Selecting previously unselected package tzdata. Preparing to unpack .../03-tzdata_2024b-4_all.deb ... Unpacking tzdata (2024b-4) ... Selecting previously unselected package libffi8:armhf. Preparing to unpack .../04-libffi8_3.4.6-1_armhf.deb ... Unpacking libffi8:armhf (3.4.6-1) ... Selecting previously unselected package libkrb5support0:armhf. Preparing to unpack .../05-libkrb5support0_1.21.3-3_armhf.deb ... Unpacking libkrb5support0:armhf (1.21.3-3) ... Selecting previously unselected package libcom-err2:armhf. Preparing to unpack .../06-libcom-err2_1.47.2-1_armhf.deb ... Unpacking libcom-err2:armhf (1.47.2-1) ... Selecting previously unselected package libk5crypto3:armhf. Preparing to unpack .../07-libk5crypto3_1.21.3-3_armhf.deb ... Unpacking libk5crypto3:armhf (1.21.3-3) ... Selecting previously unselected package libkeyutils1:armhf. Preparing to unpack .../08-libkeyutils1_1.6.3-4_armhf.deb ... Unpacking libkeyutils1:armhf (1.6.3-4) ... Selecting previously unselected package libkrb5-3:armhf. Preparing to unpack .../09-libkrb5-3_1.21.3-3_armhf.deb ... Unpacking libkrb5-3:armhf (1.21.3-3) ... Selecting previously unselected package libgssapi-krb5-2:armhf. Preparing to unpack .../10-libgssapi-krb5-2_1.21.3-3_armhf.deb ... Unpacking libgssapi-krb5-2:armhf (1.21.3-3) ... Selecting previously unselected package libtirpc-common. Preparing to unpack .../11-libtirpc-common_1.3.4+ds-1.3_all.deb ... Unpacking libtirpc-common (1.3.4+ds-1.3) ... Selecting previously unselected package libtirpc3t64:armhf. Preparing to unpack .../12-libtirpc3t64_1.3.4+ds-1.3+b1_armhf.deb ... Adding 'diversion of /lib/arm-linux-gnueabihf/libtirpc.so.3 to /lib/arm-linux-gnueabihf/libtirpc.so.3.usr-is-merged by libtirpc3t64' Adding 'diversion of /lib/arm-linux-gnueabihf/libtirpc.so.3.0.0 to /lib/arm-linux-gnueabihf/libtirpc.so.3.0.0.usr-is-merged by libtirpc3t64' Unpacking libtirpc3t64:armhf (1.3.4+ds-1.3+b1) ... Selecting previously unselected package libnsl2:armhf. Preparing to unpack .../13-libnsl2_1.3.0-3+b3_armhf.deb ... Unpacking libnsl2:armhf (1.3.0-3+b3) ... Selecting previously unselected package readline-common. Preparing to unpack .../14-readline-common_8.2-6_all.deb ... Unpacking readline-common (8.2-6) ... Selecting previously unselected package libreadline8t64:armhf. Preparing to unpack .../15-libreadline8t64_8.2-6_armhf.deb ... Adding 'diversion of /lib/arm-linux-gnueabihf/libhistory.so.8 to /lib/arm-linux-gnueabihf/libhistory.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/arm-linux-gnueabihf/libhistory.so.8.2 to /lib/arm-linux-gnueabihf/libhistory.so.8.2.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/arm-linux-gnueabihf/libreadline.so.8 to /lib/arm-linux-gnueabihf/libreadline.so.8.usr-is-merged by libreadline8t64' Adding 'diversion of /lib/arm-linux-gnueabihf/libreadline.so.8.2 to /lib/arm-linux-gnueabihf/libreadline.so.8.2.usr-is-merged by libreadline8t64' Unpacking libreadline8t64:armhf (8.2-6) ... Selecting previously unselected package libpython3.12-stdlib:armhf. Preparing to unpack .../16-libpython3.12-stdlib_3.12.8-3_armhf.deb ... Unpacking libpython3.12-stdlib:armhf (3.12.8-3) ... Selecting previously unselected package python3.12. Preparing to unpack .../17-python3.12_3.12.8-3_armhf.deb ... Unpacking python3.12 (3.12.8-3) ... Selecting previously unselected package libpython3-stdlib:armhf. Preparing to unpack .../18-libpython3-stdlib_3.12.8-1_armhf.deb ... Unpacking libpython3-stdlib:armhf (3.12.8-1) ... Setting up python3-minimal (3.12.8-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 ... 20955 files and directories currently installed.) Preparing to unpack .../00-python3_3.12.8-1_armhf.deb ... Unpacking python3 (3.12.8-1) ... Selecting previously unselected package libpython3.13-minimal:armhf. Preparing to unpack .../01-libpython3.13-minimal_3.13.1-2_armhf.deb ... Unpacking libpython3.13-minimal:armhf (3.13.1-2) ... Selecting previously unselected package python3.13-minimal. Preparing to unpack .../02-python3.13-minimal_3.13.1-2_armhf.deb ... Unpacking python3.13-minimal (3.13.1-2) ... Selecting previously unselected package sensible-utils. Preparing to unpack .../03-sensible-utils_0.0.24_all.deb ... Unpacking sensible-utils (0.0.24) ... Selecting previously unselected package libmagic-mgc. Preparing to unpack .../04-libmagic-mgc_1%3a5.45-3+b1_armhf.deb ... Unpacking libmagic-mgc (1:5.45-3+b1) ... Selecting previously unselected package libmagic1t64:armhf. Preparing to unpack .../05-libmagic1t64_1%3a5.45-3+b1_armhf.deb ... Unpacking libmagic1t64:armhf (1:5.45-3+b1) ... Selecting previously unselected package file. Preparing to unpack .../06-file_1%3a5.45-3+b1_armhf.deb ... Unpacking file (1:5.45-3+b1) ... Selecting previously unselected package gettext-base. Preparing to unpack .../07-gettext-base_0.22.5-4_armhf.deb ... Unpacking gettext-base (0.22.5-4) ... Selecting previously unselected package libuchardet0:armhf. Preparing to unpack .../08-libuchardet0_0.0.8-1+b2_armhf.deb ... Unpacking libuchardet0:armhf (0.0.8-1+b2) ... Selecting previously unselected package groff-base. Preparing to unpack .../09-groff-base_1.23.0-7_armhf.deb ... Unpacking groff-base (1.23.0-7) ... Selecting previously unselected package bsdextrautils. Preparing to unpack .../10-bsdextrautils_2.40.2-13_armhf.deb ... Unpacking bsdextrautils (2.40.2-13) ... Selecting previously unselected package libpipeline1:armhf. Preparing to unpack .../11-libpipeline1_1.5.8-1_armhf.deb ... Unpacking libpipeline1:armhf (1.5.8-1) ... Selecting previously unselected package man-db. Preparing to unpack .../12-man-db_2.13.0-1_armhf.deb ... Unpacking man-db (2.13.0-1) ... Selecting previously unselected package m4. Preparing to unpack .../13-m4_1.4.19-5_armhf.deb ... Unpacking m4 (1.4.19-5) ... Selecting previously unselected package autoconf. Preparing to unpack .../14-autoconf_2.72-3_all.deb ... Unpacking autoconf (2.72-3) ... Selecting previously unselected package autotools-dev. Preparing to unpack .../15-autotools-dev_20220109.1_all.deb ... Unpacking autotools-dev (20220109.1) ... Selecting previously unselected package automake. Preparing to unpack .../16-automake_1%3a1.16.5-1.3_all.deb ... Unpacking automake (1:1.16.5-1.3) ... Selecting previously unselected package autopoint. Preparing to unpack .../17-autopoint_0.22.5-4_all.deb ... Unpacking autopoint (0.22.5-4) ... Selecting previously unselected package libdebhelper-perl. Preparing to unpack .../18-libdebhelper-perl_13.23_all.deb ... Unpacking libdebhelper-perl (13.23) ... Selecting previously unselected package libtool. Preparing to unpack .../19-libtool_2.5.4-2_all.deb ... Unpacking libtool (2.5.4-2) ... Selecting previously unselected package dh-autoreconf. Preparing to unpack .../20-dh-autoreconf_20_all.deb ... Unpacking dh-autoreconf (20) ... Selecting previously unselected package libarchive-zip-perl. Preparing to unpack .../21-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 .../22-libfile-stripnondeterminism-perl_1.14.0-1_all.deb ... Unpacking libfile-stripnondeterminism-perl (1.14.0-1) ... Selecting previously unselected package dh-strip-nondeterminism. Preparing to unpack .../23-dh-strip-nondeterminism_1.14.0-1_all.deb ... Unpacking dh-strip-nondeterminism (1.14.0-1) ... Selecting previously unselected package libelf1t64:armhf. Preparing to unpack .../24-libelf1t64_0.192-4_armhf.deb ... Unpacking libelf1t64:armhf (0.192-4) ... Selecting previously unselected package dwz. Preparing to unpack .../25-dwz_0.15-1+b2_armhf.deb ... Unpacking dwz (0.15-1+b2) ... Selecting previously unselected package libunistring5:armhf. Preparing to unpack .../26-libunistring5_1.3-1_armhf.deb ... Unpacking libunistring5:armhf (1.3-1) ... Selecting previously unselected package libicu72:armhf. Preparing to unpack .../27-libicu72_72.1-5+b1_armhf.deb ... Unpacking libicu72:armhf (72.1-5+b1) ... Selecting previously unselected package libxml2:armhf. Preparing to unpack .../28-libxml2_2.12.7+dfsg+really2.9.14-0.2+b1_armhf.deb ... Unpacking libxml2:armhf (2.12.7+dfsg+really2.9.14-0.2+b1) ... Selecting previously unselected package gettext. Preparing to unpack .../29-gettext_0.22.5-4_armhf.deb ... Unpacking gettext (0.22.5-4) ... Selecting previously unselected package intltool-debian. Preparing to unpack .../30-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 .../31-po-debconf_1.0.21+nmu1_all.deb ... Unpacking po-debconf (1.0.21+nmu1) ... Selecting previously unselected package debhelper. Preparing to unpack .../32-debhelper_13.23_all.deb ... Unpacking debhelper (13.23) ... Selecting previously unselected package python3-autocommand. Preparing to unpack .../33-python3-autocommand_2.2.2-3_all.deb ... Unpacking python3-autocommand (2.2.2-3) ... Selecting previously unselected package python3-more-itertools. Preparing to unpack .../34-python3-more-itertools_10.5.0-1_all.deb ... Unpacking python3-more-itertools (10.5.0-1) ... Selecting previously unselected package python3-typing-extensions. Preparing to unpack .../35-python3-typing-extensions_4.12.2-2_all.deb ... Unpacking python3-typing-extensions (4.12.2-2) ... Selecting previously unselected package python3-typeguard. Preparing to unpack .../36-python3-typeguard_4.4.1-1_all.deb ... Unpacking python3-typeguard (4.4.1-1) ... Selecting previously unselected package python3-inflect. Preparing to unpack .../37-python3-inflect_7.3.1-2_all.deb ... Unpacking python3-inflect (7.3.1-2) ... Selecting previously unselected package python3-jaraco.context. Preparing to unpack .../38-python3-jaraco.context_6.0.0-1_all.deb ... Unpacking python3-jaraco.context (6.0.0-1) ... Selecting previously unselected package python3-jaraco.functools. Preparing to unpack .../39-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 .../40-python3-pkg-resources_75.6.0-1_all.deb ... Unpacking python3-pkg-resources (75.6.0-1) ... Selecting previously unselected package python3-jaraco.text. Preparing to unpack .../41-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 .../42-python3-zipp_3.21.0-1_all.deb ... Unpacking python3-zipp (3.21.0-1) ... Selecting previously unselected package python3-setuptools. Preparing to unpack .../43-python3-setuptools_75.6.0-1_all.deb ... Unpacking python3-setuptools (75.6.0-1) ... Selecting previously unselected package dh-python. Preparing to unpack .../44-dh-python_6.20250108_all.deb ... Unpacking dh-python (6.20250108) ... Selecting previously unselected package libpython3.13-stdlib:armhf. Preparing to unpack .../45-libpython3.13-stdlib_3.13.1-2_armhf.deb ... Unpacking libpython3.13-stdlib:armhf (3.13.1-2) ... Selecting previously unselected package python3.13. Preparing to unpack .../46-python3.13_3.13.1-2_armhf.deb ... Unpacking python3.13 (3.13.1-2) ... Selecting previously unselected package python3-all. Preparing to unpack .../47-python3-all_3.12.8-1_armhf.deb ... Unpacking python3-all (3.12.8-1) ... Selecting previously unselected package python3-iniconfig. Preparing to unpack .../48-python3-iniconfig_1.1.1-2_all.deb ... Unpacking python3-iniconfig (1.1.1-2) ... Selecting previously unselected package python3-packaging. Preparing to unpack .../49-python3-packaging_24.2-1_all.deb ... Unpacking python3-packaging (24.2-1) ... Selecting previously unselected package python3-pluggy. Preparing to unpack .../50-python3-pluggy_1.5.0-1_all.deb ... Unpacking python3-pluggy (1.5.0-1) ... Selecting previously unselected package python3-pytest. Preparing to unpack .../51-python3-pytest_8.3.4-1_all.deb ... Unpacking python3-pytest (8.3.4-1) ... Setting up media-types (10.1.0) ... Setting up libpipeline1:armhf (1.5.8-1) ... Setting up libkeyutils1:armhf (1.6.3-4) ... Setting up libicu72:armhf (72.1-5+b1) ... Setting up bsdextrautils (2.40.2-13) ... Setting up libmagic-mgc (1:5.45-3+b1) ... Setting up libarchive-zip-perl (1.68-1) ... Setting up libtirpc-common (1.3.4+ds-1.3) ... Setting up libdebhelper-perl (13.23) ... Setting up libmagic1t64:armhf (1:5.45-3+b1) ... Setting up gettext-base (0.22.5-4) ... Setting up m4 (1.4.19-5) ... Setting up libcom-err2:armhf (1.47.2-1) ... Setting up file (1:5.45-3+b1) ... Setting up libelf1t64:armhf (0.192-4) ... Setting up libkrb5support0:armhf (1.21.3-3) ... Setting up tzdata (2024b-4) ... Current default time zone: 'Etc/UTC' Local time is now: Mon Jan 13 11:30:47 UTC 2025. Universal Time is now: Mon Jan 13 11:30:47 UTC 2025. Run 'dpkg-reconfigure tzdata' if you wish to change it. Setting up libpython3.13-minimal:armhf (3.13.1-2) ... Setting up autotools-dev (20220109.1) ... Setting up libunistring5:armhf (1.3-1) ... Setting up autopoint (0.22.5-4) ... Setting up libk5crypto3:armhf (1.21.3-3) ... Setting up autoconf (2.72-3) ... Setting up libffi8:armhf (3.4.6-1) ... Setting up dwz (0.15-1+b2) ... Setting up sensible-utils (0.0.24) ... Setting up libuchardet0:armhf (0.0.8-1+b2) ... Setting up python3.13-minimal (3.13.1-2) ... Setting up netbase (6.4) ... Setting up libkrb5-3:armhf (1.21.3-3) ... Setting up readline-common (8.2-6) ... Setting up libxml2:armhf (2.12.7+dfsg+really2.9.14-0.2+b1) ... Setting up automake (1:1.16.5-1.3) ... update-alternatives: using /usr/bin/automake-1.16 to provide /usr/bin/automake (automake) in auto mode Setting up libfile-stripnondeterminism-perl (1.14.0-1) ... Setting up gettext (0.22.5-4) ... Setting up libtool (2.5.4-2) ... Setting up intltool-debian (0.35.0+20060710.6) ... Setting up dh-autoreconf (20) ... Setting up libgssapi-krb5-2:armhf (1.21.3-3) ... Setting up libreadline8t64:armhf (8.2-6) ... Setting up dh-strip-nondeterminism (1.14.0-1) ... Setting up groff-base (1.23.0-7) ... Setting up libpython3.13-stdlib:armhf (3.13.1-2) ... Setting up libtirpc3t64:armhf (1.3.4+ds-1.3+b1) ... Setting up python3.13 (3.13.1-2) ... Setting up po-debconf (1.0.21+nmu1) ... Setting up man-db (2.13.0-1) ... Not building database; man-db/auto-update is not 'true'. Setting up libnsl2:armhf (1.3.0-3+b3) ... Setting up libpython3.12-stdlib:armhf (3.12.8-3) ... Setting up python3.12 (3.12.8-3) ... Setting up debhelper (13.23) ... Setting up libpython3-stdlib:armhf (3.12.8-1) ... Setting up python3 (3.12.8-1) ... Setting up python3-zipp (3.21.0-1) ... Setting up python3-autocommand (2.2.2-3) ... Setting up python3-packaging (24.2-1) ... Setting up python3-typing-extensions (4.12.2-2) ... Setting up python3-pluggy (1.5.0-1) ... Setting up python3-more-itertools (10.5.0-1) ... Setting up python3-iniconfig (1.1.1-2) ... Setting up python3-jaraco.functools (4.1.0-1) ... Setting up python3-jaraco.context (6.0.0-1) ... Setting up python3-pytest (8.3.4-1) ... Setting up python3-typeguard (4.4.1-1) ... Setting up python3-all (3.12.8-1) ... Setting up python3-inflect (7.3.1-2) ... Setting up python3-jaraco.text (4.0.0-1) ... Setting up python3-pkg-resources (75.6.0-1) ... Setting up python3-setuptools (75.6.0-1) ... Setting up dh-python (6.20250108) ... Processing triggers for libc-bin (2.40-5) ... 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.36.2-1). 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. I: Building the package I: Running cd /build/reproducible-path/python-passlib-1.7.4/ && 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 > ../python-passlib_1.7.4-4_source.changes dpkg-buildpackage: info: source package python-passlib dpkg-buildpackage: info: source version 1.7.4-4 dpkg-buildpackage: info: source distribution unstable dpkg-buildpackage: info: source changed by Thomas Goirand dpkg-source --before-build . dpkg-buildpackage: info: host architecture armhf fakeroot debian/rules clean dh clean --with python3 --buildsystem=pybuild dh_auto_clean -O--buildsystem=pybuild I: pybuild base:311: python3.13 setup.py clean running clean removing '/build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build' (and everything under it) 'build/bdist.linux-armv7l' does not exist -- can't clean it 'build/scripts-3.13' does not exist -- can't clean it I: pybuild base:311: python3.12 setup.py clean running clean removing '/build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build' (and everything under it) 'build/bdist.linux-armv7l' does not exist -- can't clean it 'build/scripts-3.12' does not exist -- can't clean it dh_autoreconf_clean -O--buildsystem=pybuild dh_clean -O--buildsystem=pybuild debian/rules build dh build --with python3 --buildsystem=pybuild dh_update_autotools_config -O--buildsystem=pybuild dh_autoreconf -O--buildsystem=pybuild dh_auto_configure -O--buildsystem=pybuild I: pybuild base:311: python3.13 setup.py config running config I: pybuild base:311: python3.12 setup.py config running config dh_auto_build -O--buildsystem=pybuild I: pybuild base:311: /usr/bin/python3.13 setup.py build running build running build_py creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib copying passlib/totp.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib copying passlib/pwd.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib copying passlib/context.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib copying passlib/hosts.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib copying passlib/apache.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib copying passlib/registry.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib copying passlib/apps.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib copying passlib/win32.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib copying passlib/hash.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib copying passlib/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib copying passlib/ifc.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib copying passlib/exc.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/mysql.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/sha2_crypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/django.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/sun_md5_crypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/windows.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/ldap_digests.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/argon2.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/digests.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/cisco.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/bcrypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/scram.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/sha1_crypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/misc.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/roundup.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/postgres.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/scrypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/md5_crypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/oracle.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/phpass.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/fshp.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/des_crypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/mssql.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers copying passlib/handlers/pbkdf2.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/handlers creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/crypto copying passlib/crypto/des.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/crypto copying passlib/crypto/digest.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/crypto copying passlib/crypto/_md4.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/crypto copying passlib/crypto/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/crypto creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_utils.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_ext_django.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_handlers_scrypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_context_deprecated.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_utils_handlers.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_handlers_bcrypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_crypto_builtin_md4.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_win32.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_pwd.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_handlers_pbkdf2.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/tox_support.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_crypto_des.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_crypto_digest.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/_test_bad_register.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_registry.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_apps.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_utils_md4.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_handlers.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_ext_django_source.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_crypto_scrypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_apache.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/__main__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_hosts.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_utils_pbkdf2.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_handlers_cisco.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_totp.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_handlers_django.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/backports.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/utils.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_context.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/test_handlers_argon2.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/utils copying passlib/utils/des.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/utils copying passlib/utils/decor.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/utils copying passlib/utils/md4.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/utils copying passlib/utils/binary.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/utils copying passlib/utils/handlers.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/utils copying passlib/utils/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/utils copying passlib/utils/pbkdf2.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/utils creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/ext copying passlib/ext/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/ext creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/_setup copying passlib/_setup/stamp.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/_setup copying passlib/_setup/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/_setup creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/crypto/_blowfish copying passlib/crypto/_blowfish/_gen_files.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/crypto/_blowfish copying passlib/crypto/_blowfish/base.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/crypto/_blowfish copying passlib/crypto/_blowfish/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/crypto/_blowfish copying passlib/crypto/_blowfish/unrolled.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/crypto/_blowfish creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/crypto/scrypt copying passlib/crypto/scrypt/_gen_files.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/crypto/scrypt copying passlib/crypto/scrypt/_salsa.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/crypto/scrypt copying passlib/crypto/scrypt/_builtin.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/crypto/scrypt copying passlib/crypto/scrypt/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/crypto/scrypt creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/utils/compat copying passlib/utils/compat/_ordered_dict.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/utils/compat copying passlib/utils/compat/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/utils/compat creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/ext/django copying passlib/ext/django/models.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/ext/django copying passlib/ext/django/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/ext/django copying passlib/ext/django/utils.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/ext/django creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/_data/wordsets copying passlib/_data/wordsets/eff_short.txt -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/_data/wordsets copying passlib/_data/wordsets/eff_prefixed.txt -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/_data/wordsets copying passlib/_data/wordsets/bip39.txt -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/_data/wordsets copying passlib/_data/wordsets/eff_long.txt -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/_data/wordsets copying passlib/tests/sample_config_1s.cfg -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/sample1c.cfg -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/sample1.cfg -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests copying passlib/tests/sample1b.cfg -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests I: pybuild base:311: /usr/bin/python3 setup.py build running build running build_py creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib copying passlib/totp.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib copying passlib/pwd.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib copying passlib/context.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib copying passlib/hosts.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib copying passlib/apache.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib copying passlib/registry.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib copying passlib/apps.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib copying passlib/win32.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib copying passlib/hash.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib copying passlib/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib copying passlib/ifc.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib copying passlib/exc.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/mysql.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/sha2_crypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/django.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/sun_md5_crypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/windows.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/ldap_digests.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/argon2.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/digests.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/cisco.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/bcrypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/scram.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/sha1_crypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/misc.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/roundup.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/postgres.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/scrypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/md5_crypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/oracle.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/phpass.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/fshp.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/des_crypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/mssql.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers copying passlib/handlers/pbkdf2.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/handlers creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/crypto copying passlib/crypto/des.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/crypto copying passlib/crypto/digest.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/crypto copying passlib/crypto/_md4.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/crypto copying passlib/crypto/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/crypto creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_utils.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_ext_django.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_handlers_scrypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_context_deprecated.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_utils_handlers.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_handlers_bcrypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_crypto_builtin_md4.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_win32.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_pwd.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_handlers_pbkdf2.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/tox_support.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_crypto_des.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_crypto_digest.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/_test_bad_register.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_registry.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_apps.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_utils_md4.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_handlers.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_ext_django_source.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_crypto_scrypt.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_apache.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/__main__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_hosts.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_utils_pbkdf2.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_handlers_cisco.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_totp.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_handlers_django.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/backports.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/utils.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_context.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/test_handlers_argon2.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/utils copying passlib/utils/des.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/utils copying passlib/utils/decor.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/utils copying passlib/utils/md4.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/utils copying passlib/utils/binary.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/utils copying passlib/utils/handlers.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/utils copying passlib/utils/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/utils copying passlib/utils/pbkdf2.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/utils creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/ext copying passlib/ext/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/ext creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/_setup copying passlib/_setup/stamp.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/_setup copying passlib/_setup/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/_setup creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/crypto/_blowfish copying passlib/crypto/_blowfish/_gen_files.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/crypto/_blowfish copying passlib/crypto/_blowfish/base.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/crypto/_blowfish copying passlib/crypto/_blowfish/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/crypto/_blowfish copying passlib/crypto/_blowfish/unrolled.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/crypto/_blowfish creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/crypto/scrypt copying passlib/crypto/scrypt/_gen_files.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/crypto/scrypt copying passlib/crypto/scrypt/_salsa.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/crypto/scrypt copying passlib/crypto/scrypt/_builtin.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/crypto/scrypt copying passlib/crypto/scrypt/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/crypto/scrypt creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/utils/compat copying passlib/utils/compat/_ordered_dict.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/utils/compat copying passlib/utils/compat/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/utils/compat creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/ext/django copying passlib/ext/django/models.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/ext/django copying passlib/ext/django/__init__.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/ext/django copying passlib/ext/django/utils.py -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/ext/django creating /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/_data/wordsets copying passlib/_data/wordsets/eff_short.txt -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/_data/wordsets copying passlib/_data/wordsets/eff_prefixed.txt -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/_data/wordsets copying passlib/_data/wordsets/bip39.txt -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/_data/wordsets copying passlib/_data/wordsets/eff_long.txt -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/_data/wordsets copying passlib/tests/sample_config_1s.cfg -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/sample1c.cfg -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/sample1.cfg -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests copying passlib/tests/sample1b.cfg -> /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests dh_auto_test -O--buildsystem=pybuild I: pybuild base:311: cd /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build; python3.13 -m pytest ============================= test session starts ============================== platform linux -- Python 3.13.1, pytest-8.3.4, pluggy-1.5.0 rootdir: /build/reproducible-path/python-passlib-1.7.4 plugins: typeguard-4.4.1 collected 4270 items passlib/tests/test_apache.py ..................ss............. [ 0%] passlib/tests/test_apps.py ........... [ 1%] passlib/tests/test_context.py ...................................... [ 1%] passlib/tests/test_context_deprecated.py ........................ [ 2%] passlib/tests/test_crypto_builtin_md4.py ..... [ 2%] passlib/tests/test_crypto_des.py .... [ 2%] passlib/tests/test_crypto_digest.py ............ [ 2%] passlib/tests/test_crypto_scrypt.py .....s................. [ 3%] passlib/tests/test_ext_django.py ssssssssssssssssssssssss [ 4%] passlib/tests/test_ext_django_source.py s [ 4%] passlib/tests/test_handlers.py ......s......ssss...s..ssss....ssssssssss [ 5%] ss.........s......ssss...s..sss.s...s.sssssssssss...ssssssssssssssssssss [ 6%] ssssssssssssssssssssssssssssss................s......sss.s...sss........ [ 8%] .s.........s......ssss...s..sssss...sssssssssss.s..sssssssssssssssssssss [ 10%] sssssssssssssFssssssssssssss.............ssss......sss.s...sssssssssss.s [ 11%] ........s.........s...s..sss.....s.ss........s.........sssssssssss...s.. [ 13%] sssss...ssssssssssss..s......sssssssssss...s..sssss...sssssssssss.s..s.. [ 15%] ....sssssssssss...s..sssss...ssssssssssss..s......sssssssssss...s..sssss [ 16%] ...ssssssssssss..s......sssssssssss...s..sssss...ssssssssssss..s......ss [ 18%] sssssssss...s.ssss.s...ss..sssssssssss..s......sssssssssss...s..sssss... [ 20%] ssssssssssss..s......sssssssssss...s..sssss...ssssssssssss..s......s.... [ 21%] ..ssss...s..ssss....ssssssssssss.........s......ssss...s..ssss....ssssss [ 23%] ssssss.........s......ssss...s..ssss....ssssssssssss.........s......ssss [ 25%] ...s..ssss....ssssssssssss.........sssssssssss...s.ssss.s...ssssssssssss [ 26%] ..ssssssssssssssssssssssssssssssssssssssssssssssssss.............ssss... [ 28%] ..sssss....ssssssssssss...ssssssssssssssssssssssssssssssssssssssssssssss [ 30%] sss......sssssssssss...s..sss.s...s.ssssssssss.s.sssssssssssssssssssssss [ 32%] ssssssssssssFssssssssssssss.............ssss......ssss....ssssssssssss.. [ 33%] .......sssssssssss...s...ssss...s...sssssssssss..s......sssssssssss...s. [ 35%] .sssss...s...sssssssssss..s......s......ssss...s...ss.....ssssssssssss.. [ 37%] .......s......ssss...s...ss.....ssssssssssss.........sssssssssss...s..ss [ 38%] s.s...s.sssssssssss..s......sssssssssss...s..sss.s...ssssssssssss..s.... [ 40%] ..sssssssssss...s..sss.s...ssssssssssss..s......sssssssssss...s.ssss.s.. [ 42%] .ssssssssssss..s......sssssssssss...s..sss.s...s...sssssssssss..s......s [ 43%] ......ssss...s..sssss...ssssssssssss.........s.............s..ssss....ss [ 45%] .........s.........sssssssssss...s.sssssss..ssssssssssss..s......sssssss [ 47%] ssss...s..sss.s...s...sssssssssss..sssssssssssssssssssssssssssssssssssss [ 48%] sssssssssssss................s......ssss....sss........s....ssssssssssss [ 50%] ssssssssssssssssssssssFssssssssssssss................s......ss.s....sss. [ 52%] .......s...ssssssssssssssssssssssssssssssssssFssssssssssssss............ [ 53%] ....s......ss.s....sss........s.........s.........s...s..ss.s....sss.... [ 55%] ....s.........sssssssssss...s.ssss.s..ss..ssssssssss..s......sssssssssss [ 57%] ...s..ssssss.ss...ssssssssss..s [ 58%] passlib/tests/test_handlers_argon2.py ssssssssssssssssssssssssssssssssss [ 58%] ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 60%] ss [ 60%] passlib/tests/test_handlers_bcrypt.py ssssssssssssssssssssssssssssssssss [ 61%] ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 63%] ssssssssssssssssssssssssssssssssssssssFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF [ 64%] FFFFFFFFFFFFFFFFFsssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 66%] ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 68%] ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssFFFF [ 69%] FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFssssssssssssssssssssssss [ 71%] sssssssssssssssssssssssss [ 72%] passlib/tests/test_handlers_cisco.py ......sssssssssss...s..sssss...s... [ 72%] .ssssssssss.s.s......sssssssssss...s..sssss...s....ssssssssss.s.s......s [ 74%] s.sss.ssss...s..sss.s...s..sssssssssss..s [ 75%] passlib/tests/test_handlers_django.py ......sssssssssss...s...ssss..ss.s [ 76%] sssssssss..s......s......ssss...s...ss.....sssssssssssss.s........s..... [ 78%] .ssss...s..sss.....ssssssssssssss.........s......ssss...s..sss.....sssss [ 79%] sssssssss.........s.........s...s..sssss...sssss........s.........s..... [ 81%] ....s...s..sssss...sssss........s... [ 82%] passlib/tests/test_handlers_pbkdf2.py .......s......ssss...s..ssss....ss [ 83%] ssssssssss.........s.........s...s..ssss....sss........s.........s...... [ 84%] ...s...s..sssss...sss........s.........s.........s...s..sssss...sss..... [ 86%] ...s.........s.........s...s..sssss...sss........s.........s.........s.. [ 88%] .s..sssss...sss........s.........s.........s...s..sssss...sss........s.. [ 89%] .......s.........s...s..ssss....s...........ss........s... [ 91%] passlib/tests/test_handlers_scrypt.py ....................s..ssss....ss. [ 91%] ........s...ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 93%] ssssssssssssssssssssssssssssssss [ 94%] passlib/tests/test_hosts.py .s. [ 94%] passlib/tests/test_pwd.py ........ [ 94%] passlib/tests/test_registry.py ...... [ 94%] passlib/tests/test_totp.py ss.ss................................... [ 95%] passlib/tests/test_utils.py ...s........................................ [ 96%] ........... [ 97%] passlib/tests/test_utils_handlers.py ..........................sssssssss [ 97%] ss...s..sssss...s.sssssssssss..s......s......ssss...s..sssss...s.sssssss [ 99%] ssss... [ 99%] passlib/tests/test_utils_md4.py ..... [ 99%] passlib/tests/test_utils_pbkdf2.py ....... [ 99%] passlib/tests/test_win32.py .. [100%] =================================== FAILURES =================================== ________________ des_crypt_os_crypt_test.test_82_crypt_support _________________ self = @doesnt_require_backend def test_82_crypt_support(self): """ test platform-specific crypt() support detection NOTE: this is mainly just a sanity check to ensure the runtime detection is functioning correctly on some known platforms, so that we can feel more confident it'll work right on unknown ones. """ # skip wrapper handlers, won't ever have crypt support if hasattr(self.handler, "orig_prefix"): raise self.skipTest("not applicable to wrappers") # look for first entry that matches current system # XXX: append "/" + platform.release() to string? # XXX: probably should rework to support rows being dicts w/ "minver" / "maxver" keys, # instead of hack where we add major # as part of platform regex. using_backend = not self.using_patched_crypt name = self.handler.name platform = sys.platform for pattern, expected in self.platform_crypt_support: if re.match(pattern, platform): break else: raise self.skipTest("no data for %r platform (current host support = %r)" % (platform, using_backend)) # rules can use "state=None" to signal varied support; # e.g. platform='freebsd8' ... sha256_crypt not added until 8.3 if expected is None: raise self.skipTest("varied support on %r platform (current host support = %r)" % (platform, using_backend)) # compare expectation vs reality if expected == using_backend: pass elif expected: > self.fail("expected %r platform would have native support for %r" % (platform, name)) E AssertionError: expected 'linux' platform would have native support for 'des_crypt' passlib/tests/utils.py:3386: AssertionError ________________ md5_crypt_os_crypt_test.test_82_crypt_support _________________ self = @doesnt_require_backend def test_82_crypt_support(self): """ test platform-specific crypt() support detection NOTE: this is mainly just a sanity check to ensure the runtime detection is functioning correctly on some known platforms, so that we can feel more confident it'll work right on unknown ones. """ # skip wrapper handlers, won't ever have crypt support if hasattr(self.handler, "orig_prefix"): raise self.skipTest("not applicable to wrappers") # look for first entry that matches current system # XXX: append "/" + platform.release() to string? # XXX: probably should rework to support rows being dicts w/ "minver" / "maxver" keys, # instead of hack where we add major # as part of platform regex. using_backend = not self.using_patched_crypt name = self.handler.name platform = sys.platform for pattern, expected in self.platform_crypt_support: if re.match(pattern, platform): break else: raise self.skipTest("no data for %r platform (current host support = %r)" % (platform, using_backend)) # rules can use "state=None" to signal varied support; # e.g. platform='freebsd8' ... sha256_crypt not added until 8.3 if expected is None: raise self.skipTest("varied support on %r platform (current host support = %r)" % (platform, using_backend)) # compare expectation vs reality if expected == using_backend: pass elif expected: > self.fail("expected %r platform would have native support for %r" % (platform, name)) E AssertionError: expected 'linux' platform would have native support for 'md5_crypt' passlib/tests/utils.py:3386: AssertionError _______________ sha256_crypt_os_crypt_test.test_82_crypt_support _______________ self = @doesnt_require_backend def test_82_crypt_support(self): """ test platform-specific crypt() support detection NOTE: this is mainly just a sanity check to ensure the runtime detection is functioning correctly on some known platforms, so that we can feel more confident it'll work right on unknown ones. """ # skip wrapper handlers, won't ever have crypt support if hasattr(self.handler, "orig_prefix"): raise self.skipTest("not applicable to wrappers") # look for first entry that matches current system # XXX: append "/" + platform.release() to string? # XXX: probably should rework to support rows being dicts w/ "minver" / "maxver" keys, # instead of hack where we add major # as part of platform regex. using_backend = not self.using_patched_crypt name = self.handler.name platform = sys.platform for pattern, expected in self.platform_crypt_support: if re.match(pattern, platform): break else: raise self.skipTest("no data for %r platform (current host support = %r)" % (platform, using_backend)) # rules can use "state=None" to signal varied support; # e.g. platform='freebsd8' ... sha256_crypt not added until 8.3 if expected is None: raise self.skipTest("varied support on %r platform (current host support = %r)" % (platform, using_backend)) # compare expectation vs reality if expected == using_backend: pass elif expected: > self.fail("expected %r platform would have native support for %r" % (platform, name)) E AssertionError: expected 'linux' platform would have native support for 'sha256_crypt' passlib/tests/utils.py:3386: AssertionError _______________ sha512_crypt_os_crypt_test.test_82_crypt_support _______________ self = @doesnt_require_backend def test_82_crypt_support(self): """ test platform-specific crypt() support detection NOTE: this is mainly just a sanity check to ensure the runtime detection is functioning correctly on some known platforms, so that we can feel more confident it'll work right on unknown ones. """ # skip wrapper handlers, won't ever have crypt support if hasattr(self.handler, "orig_prefix"): raise self.skipTest("not applicable to wrappers") # look for first entry that matches current system # XXX: append "/" + platform.release() to string? # XXX: probably should rework to support rows being dicts w/ "minver" / "maxver" keys, # instead of hack where we add major # as part of platform regex. using_backend = not self.using_patched_crypt name = self.handler.name platform = sys.platform for pattern, expected in self.platform_crypt_support: if re.match(pattern, platform): break else: raise self.skipTest("no data for %r platform (current host support = %r)" % (platform, using_backend)) # rules can use "state=None" to signal varied support; # e.g. platform='freebsd8' ... sha256_crypt not added until 8.3 if expected is None: raise self.skipTest("varied support on %r platform (current host support = %r)" % (platform, using_backend)) # compare expectation vs reality if expected == using_backend: pass elif expected: > self.fail("expected %r platform would have native support for %r" % (platform, name)) E AssertionError: expected 'linux' platform would have native support for 'sha512_crypt' passlib/tests/utils.py:3386: AssertionError _______________ bcrypt_os_crypt_test.test_01_required_attributes _______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _________________ bcrypt_os_crypt_test.test_02_config_workflow _________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _________________ bcrypt_os_crypt_test.test_02_using_workflow __________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError __________________ bcrypt_os_crypt_test.test_03_hash_workflow __________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ______________ bcrypt_os_crypt_test.test_03_legacy_hash_workflow _______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ___________________ bcrypt_os_crypt_test.test_04_hash_types ____________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ____________________ bcrypt_os_crypt_test.test_05_backends _____________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ____________ bcrypt_os_crypt_test.test_10_optional_salt_attributes _____________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ___________________ bcrypt_os_crypt_test.test_11_unique_salt ___________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError __________________ bcrypt_os_crypt_test.test_12_min_salt_size __________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError __________________ bcrypt_os_crypt_test.test_13_max_salt_size __________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ___________________ bcrypt_os_crypt_test.test_14_salt_chars ____________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ____________________ bcrypt_os_crypt_test.test_15_salt_type ____________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ___________ bcrypt_os_crypt_test.test_20_optional_rounds_attributes ____________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ___________________ bcrypt_os_crypt_test.test_21_min_rounds ____________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ___________________ bcrypt_os_crypt_test.test_21b_max_rounds ___________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError __________________ bcrypt_os_crypt_test.test_30_HasManyIdents __________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ______________ bcrypt_os_crypt_test.test_61_secret_case_sensitive ______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError __________________ bcrypt_os_crypt_test.test_62_secret_border __________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError __________________ bcrypt_os_crypt_test.test_63_large_secret ___________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _________________ bcrypt_os_crypt_test.test_64_forbidden_chars _________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _____________________ bcrypt_os_crypt_test.test_70_hashes ______________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ____________________ bcrypt_os_crypt_test.test_70_parsehash ____________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ___________________ bcrypt_os_crypt_test.test_71_alternates ____________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ________________ bcrypt_os_crypt_test.test_71_parsehash_results ________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _____________________ bcrypt_os_crypt_test.test_72_configs _____________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError __________________ bcrypt_os_crypt_test.test_73_unidentified ___________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ____________________ bcrypt_os_crypt_test.test_74_malformed ____________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _____________________ bcrypt_os_crypt_test.test_75_foreign _____________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ___________________ bcrypt_os_crypt_test.test_76_hash_border ___________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ___________________ bcrypt_os_crypt_test.test_77_fuzz_input ____________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _________________ bcrypt_os_crypt_test.test_78_fuzz_threading __________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError __________________ bcrypt_os_crypt_test.test_80_faulty_crypt ___________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _________________ bcrypt_os_crypt_test.test_81_crypt_fallback __________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError __________________ bcrypt_os_crypt_test.test_82_crypt_support __________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _________________ bcrypt_os_crypt_test.test_90_bcrypt_padding __________________ self = def setUp(self): # ensure builtin is enabled for duration of test. if TEST_MODE("full") and self.backend == "builtin": key = "PASSLIB_BUILTIN_BCRYPT" orig = os.environ.get(key) if orig: self.addCleanup(os.environ.__setitem__, key, orig) else: self.addCleanup(os.environ.__delitem__, key) os.environ[key] = "true" > super(_bcrypt_test, self).setUp() passlib/tests/test_handlers_bcrypt.py:181: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3211: in setUp self._patch_safe_crypt() passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _________________ bcrypt_os_crypt_test.test_disable_and_enable _________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _______________ bcrypt_os_crypt_test.test_has_many_idents_using ________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError __________ bcrypt_os_crypt_test.test_has_rounds_replace_w_max_rounds ___________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _________ bcrypt_os_crypt_test.test_has_rounds_using_and_needs_update __________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ______________ bcrypt_os_crypt_test.test_has_rounds_using_harness ______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _________ bcrypt_os_crypt_test.test_has_rounds_using_w_default_rounds __________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ___________ bcrypt_os_crypt_test.test_has_rounds_using_w_min_rounds ____________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _____________ bcrypt_os_crypt_test.test_has_rounds_using_w_rounds ______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _____ bcrypt_os_crypt_test.test_has_rounds_using_w_vary_rounds_generation ______ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _______ bcrypt_os_crypt_test.test_has_rounds_using_w_vary_rounds_parsing _______ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _______________ bcrypt_os_crypt_test.test_needs_update_w_padding _______________ self = def setUp(self): # ensure builtin is enabled for duration of test. if TEST_MODE("full") and self.backend == "builtin": key = "PASSLIB_BUILTIN_BCRYPT" orig = os.environ.get(key) if orig: self.addCleanup(os.environ.__setitem__, key, orig) else: self.addCleanup(os.environ.__delitem__, key) os.environ[key] = "true" > super(_bcrypt_test, self).setUp() passlib/tests/test_handlers_bcrypt.py:181: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3211: in setUp self._patch_safe_crypt() passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _______________ bcrypt_os_crypt_test.test_secret_w_truncate_size _______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ______________ bcrypt_os_crypt_test.test_secret_wo_truncate_size _______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _______________ bcrypt_os_crypt_test.test_truncate_error_setting _______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError __________________ bcrypt_os_crypt_test.test_using_salt_size ___________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ___________ bcrypt_sha256_os_crypt_test.test_01_required_attributes ____________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _____________ bcrypt_sha256_os_crypt_test.test_02_config_workflow ______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ______________ bcrypt_sha256_os_crypt_test.test_02_using_workflow ______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ______________ bcrypt_sha256_os_crypt_test.test_03_hash_workflow _______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ___________ bcrypt_sha256_os_crypt_test.test_03_legacy_hash_workflow ___________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ________________ bcrypt_sha256_os_crypt_test.test_04_hash_types ________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _________________ bcrypt_sha256_os_crypt_test.test_05_backends _________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _________ bcrypt_sha256_os_crypt_test.test_10_optional_salt_attributes _________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _______________ bcrypt_sha256_os_crypt_test.test_11_unique_salt ________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ______________ bcrypt_sha256_os_crypt_test.test_12_min_salt_size _______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ______________ bcrypt_sha256_os_crypt_test.test_13_max_salt_size _______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ________________ bcrypt_sha256_os_crypt_test.test_14_salt_chars ________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ________________ bcrypt_sha256_os_crypt_test.test_15_salt_type _________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ________ bcrypt_sha256_os_crypt_test.test_20_optional_rounds_attributes ________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ________________ bcrypt_sha256_os_crypt_test.test_21_min_rounds ________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _______________ bcrypt_sha256_os_crypt_test.test_21b_max_rounds ________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ______________ bcrypt_sha256_os_crypt_test.test_30_HasManyIdents _______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _______________ bcrypt_sha256_os_crypt_test.test_30_HasOneIdent ________________ self = def setUp(self): # ensure builtin is enabled for duration of test. if TEST_MODE("full") and self.backend == "builtin": key = "PASSLIB_BUILTIN_BCRYPT" orig = os.environ.get(key) if orig: self.addCleanup(os.environ.__setitem__, key, orig) else: self.addCleanup(os.environ.__delitem__, key) os.environ[key] = "enabled" > super(_bcrypt_sha256_test, self).setUp() passlib/tests/test_handlers_bcrypt.py:585: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3211: in setUp self._patch_safe_crypt() passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError __________ bcrypt_sha256_os_crypt_test.test_61_secret_case_sensitive ___________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ______________ bcrypt_sha256_os_crypt_test.test_62_secret_border _______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _______________ bcrypt_sha256_os_crypt_test.test_63_large_secret _______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _____________ bcrypt_sha256_os_crypt_test.test_64_forbidden_chars ______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError __________________ bcrypt_sha256_os_crypt_test.test_70_hashes __________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ________________ bcrypt_sha256_os_crypt_test.test_70_parsehash _________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ________________ bcrypt_sha256_os_crypt_test.test_71_alternates ________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ____________ bcrypt_sha256_os_crypt_test.test_71_parsehash_results _____________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _________________ bcrypt_sha256_os_crypt_test.test_72_configs __________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _______________ bcrypt_sha256_os_crypt_test.test_73_unidentified _______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ________________ bcrypt_sha256_os_crypt_test.test_74_malformed _________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _________________ bcrypt_sha256_os_crypt_test.test_75_foreign __________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _______________ bcrypt_sha256_os_crypt_test.test_76_hash_border ________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ________________ bcrypt_sha256_os_crypt_test.test_77_fuzz_input ________________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ______________ bcrypt_sha256_os_crypt_test.test_78_fuzz_threading ______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _______________ bcrypt_sha256_os_crypt_test.test_80_faulty_crypt _______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ______________ bcrypt_sha256_os_crypt_test.test_81_crypt_fallback ______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ______________ bcrypt_sha256_os_crypt_test.test_82_crypt_support _______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _______________ bcrypt_sha256_os_crypt_test.test_calc_digest_v2 ________________ self = def setUp(self): # ensure builtin is enabled for duration of test. if TEST_MODE("full") and self.backend == "builtin": key = "PASSLIB_BUILTIN_BCRYPT" orig = os.environ.get(key) if orig: self.addCleanup(os.environ.__setitem__, key, orig) else: self.addCleanup(os.environ.__delitem__, key) os.environ[key] = "enabled" > super(_bcrypt_sha256_test, self).setUp() passlib/tests/test_handlers_bcrypt.py:585: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3211: in setUp self._patch_safe_crypt() passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _____________ bcrypt_sha256_os_crypt_test.test_disable_and_enable ______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ____________ bcrypt_sha256_os_crypt_test.test_has_many_idents_using ____________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _______ bcrypt_sha256_os_crypt_test.test_has_rounds_replace_w_max_rounds _______ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ______ bcrypt_sha256_os_crypt_test.test_has_rounds_using_and_needs_update ______ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError __________ bcrypt_sha256_os_crypt_test.test_has_rounds_using_harness ___________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ______ bcrypt_sha256_os_crypt_test.test_has_rounds_using_w_default_rounds ______ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ________ bcrypt_sha256_os_crypt_test.test_has_rounds_using_w_min_rounds ________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError __________ bcrypt_sha256_os_crypt_test.test_has_rounds_using_w_rounds __________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError __ bcrypt_sha256_os_crypt_test.test_has_rounds_using_w_vary_rounds_generation __ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ___ bcrypt_sha256_os_crypt_test.test_has_rounds_using_w_vary_rounds_parsing ____ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ___________ bcrypt_sha256_os_crypt_test.test_secret_w_truncate_size ____________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ___________ bcrypt_sha256_os_crypt_test.test_secret_wo_truncate_size ___________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ___________ bcrypt_sha256_os_crypt_test.test_truncate_error_setting ____________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError _______________ bcrypt_sha256_os_crypt_test.test_using_salt_size _______________ self = def setUp(self): assert self.backend == "os_crypt" if not self.handler.has_backend("os_crypt"): # XXX: currently, any tests that use this are skipped entirely! (see issue 120) > self._patch_safe_crypt() passlib/tests/utils.py:3211: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError ________________ bcrypt_sha256_os_crypt_test.test_using_version ________________ self = def setUp(self): # ensure builtin is enabled for duration of test. if TEST_MODE("full") and self.backend == "builtin": key = "PASSLIB_BUILTIN_BCRYPT" orig = os.environ.get(key) if orig: self.addCleanup(os.environ.__setitem__, key, orig) else: self.addCleanup(os.environ.__delitem__, key) os.environ[key] = "enabled" > super(_bcrypt_sha256_test, self).setUp() passlib/tests/test_handlers_bcrypt.py:585: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ passlib/tests/utils.py:3211: in setUp self._patch_safe_crypt() passlib/tests/utils.py:3245: in _patch_safe_crypt handler, alt_backend = self._get_safe_crypt_handler_backend() passlib/tests/test_handlers_bcrypt.py:679: in _get_safe_crypt_handler_backend return bcrypt_os_crypt_test._get_safe_crypt_handler_backend() passlib/tests/utils.py:3224: in _get_safe_crypt_handler_backend handler.get_backend() passlib/utils/handlers.py:2087: in get_backend cls.set_backend() _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ cls = , name = 'builtin', dryrun = False @classmethod def set_backend(cls, name="any", dryrun=False): """ Load specified backend. :arg name: name of backend to load, can be any of the following: * ``"any"`` -- use current backend if one is loaded, otherwise load the first available backend. * ``"default"`` -- use the first available backend. * any string in :attr:`backends`, loads specified backend. :param dryrun: If True, this perform all setup actions *except* switching over to the new backend. (this flag is used to implement :meth:`has_backend`). .. versionadded:: 1.7 :raises ValueError: If backend name is unknown. :raises passlib.exc.MissingBackendError: If specific backend is missing; or in the case of ``"any"`` / ``"default"``, if *no* backends are available. :raises passlib.exc.PasslibSecurityError: If ``"any"`` or ``"default"`` was specified, but the only backend available has a PasslibSecurityError. """ # check if active backend is acceptable if (name == "any" and cls.__backend) or (name and name == cls.__backend): return cls.__backend # if this isn't the final subclass, whose bases we can modify, # find that class, and recursively call this method for the proper class. owner = cls._get_backend_owner() if owner is not cls: return owner.set_backend(name, dryrun=dryrun) # pick first available backend if name == "any" or name == "default": default_error = None for name in cls.backends: try: return cls.set_backend(name, dryrun=dryrun) except exc.MissingBackendError: continue except exc.PasslibSecurityError as err: # backend is available, but refuses to load due to security issue. if default_error is None: default_error = err continue if default_error is None: msg = "%s: no backends available" % cls.name if cls._no_backend_suggestion: msg += cls._no_backend_suggestion default_error = exc.MissingBackendError(msg) > raise default_error E passlib.exc.MissingBackendError: bcrypt: no backends available -- recommend you install one (e.g. 'pip install bcrypt') passlib/utils/handlers.py:2175: MissingBackendError =============================== warnings summary =============================== passlib/tests/test_context_deprecated.py:17 /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/tests/test_context_deprecated.py:17: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html from pkg_resources import resource_filename .pybuild/cpython3_3.13_passlib/build/passlib/tests/test_apache.py::HtpasswdFileTest::test_02_set_password_default_scheme /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/apache.py:723: PasslibSecurityWarning: HtpasswdFile: no bcrypt backends available, using fallback for default scheme 'portable' warn("HtpasswdFile: no bcrypt backends available, " .pybuild/cpython3_3.13_passlib/build/passlib/tests/test_crypto_scrypt.py: 11 warnings /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build/passlib/crypto/scrypt/__init__.py:162: PasslibSecurityWarning: Using builtin scrypt backend, which is 100x slower than is required for adequate security. Installing scrypt support (via 'pip install scrypt') is strongly recommended warn("Using builtin scrypt backend, which is %dx slower than is required " -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED passlib/tests/test_handlers.py::des_crypt_os_crypt_test::test_82_crypt_support FAILED passlib/tests/test_handlers.py::md5_crypt_os_crypt_test::test_82_crypt_support FAILED passlib/tests/test_handlers.py::sha256_crypt_os_crypt_test::test_82_crypt_support FAILED passlib/tests/test_handlers.py::sha512_crypt_os_crypt_test::test_82_crypt_support FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_01_required_attributes FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_02_config_workflow FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_02_using_workflow FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_03_hash_workflow FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_03_legacy_hash_workflow FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_04_hash_types FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_05_backends FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_10_optional_salt_attributes FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_11_unique_salt FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_12_min_salt_size FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_13_max_salt_size FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_14_salt_chars FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_15_salt_type FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_20_optional_rounds_attributes FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_21_min_rounds FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_21b_max_rounds FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_30_HasManyIdents FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_61_secret_case_sensitive FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_62_secret_border FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_63_large_secret FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_64_forbidden_chars FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_70_hashes FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_70_parsehash FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_71_alternates FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_71_parsehash_results FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_72_configs FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_73_unidentified FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_74_malformed FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_75_foreign FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_76_hash_border FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_77_fuzz_input FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_78_fuzz_threading FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_80_faulty_crypt FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_81_crypt_fallback FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_82_crypt_support FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_90_bcrypt_padding FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_disable_and_enable FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_has_many_idents_using FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_has_rounds_replace_w_max_rounds FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_has_rounds_using_and_needs_update FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_has_rounds_using_harness FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_has_rounds_using_w_default_rounds FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_has_rounds_using_w_min_rounds FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_has_rounds_using_w_rounds FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_has_rounds_using_w_vary_rounds_generation FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_has_rounds_using_w_vary_rounds_parsing FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_needs_update_w_padding FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_secret_w_truncate_size FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_secret_wo_truncate_size FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_truncate_error_setting FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_os_crypt_test::test_using_salt_size FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_01_required_attributes FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_02_config_workflow FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_02_using_workflow FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_03_hash_workflow FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_03_legacy_hash_workflow FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_04_hash_types FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_05_backends FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_10_optional_salt_attributes FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_11_unique_salt FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_12_min_salt_size FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_13_max_salt_size FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_14_salt_chars FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_15_salt_type FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_20_optional_rounds_attributes FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_21_min_rounds FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_21b_max_rounds FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_30_HasManyIdents FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_30_HasOneIdent FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_61_secret_case_sensitive FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_62_secret_border FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_63_large_secret FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_64_forbidden_chars FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_70_hashes FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_70_parsehash FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_71_alternates FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_71_parsehash_results FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_72_configs FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_73_unidentified FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_74_malformed FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_75_foreign FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_76_hash_border FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_77_fuzz_input FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_78_fuzz_threading FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_80_faulty_crypt FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_81_crypt_fallback FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_82_crypt_support FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_calc_digest_v2 FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_disable_and_enable FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_has_many_idents_using FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_has_rounds_replace_w_max_rounds FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_has_rounds_using_and_needs_update FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_has_rounds_using_harness FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_has_rounds_using_w_default_rounds FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_has_rounds_using_w_min_rounds FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_has_rounds_using_w_rounds FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_has_rounds_using_w_vary_rounds_generation FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_has_rounds_using_w_vary_rounds_parsing FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_secret_w_truncate_size FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_secret_wo_truncate_size FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_truncate_error_setting FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_using_salt_size FAILED passlib/tests/test_handlers_bcrypt.py::bcrypt_sha256_os_crypt_test::test_using_version === 107 failed, 1806 passed, 2357 skipped, 13 warnings in 330.12s (0:05:30) ==== E: pybuild pybuild:389: test: plugin distutils failed with: exit code=1: cd /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.13_passlib/build; python3.13 -m pytest I: pybuild base:311: cd /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build; python3.12 -m pytest ============================= test session starts ============================== platform linux -- Python 3.12.8, pytest-8.3.4, pluggy-1.5.0 rootdir: /build/reproducible-path/python-passlib-1.7.4 plugins: typeguard-4.4.1 collected 4366 items passlib/tests/test_apache.py ..................ss............. [ 0%] passlib/tests/test_apps.py ........... [ 1%] passlib/tests/test_context.py ...................................... [ 1%] passlib/tests/test_context_deprecated.py ........................ [ 2%] passlib/tests/test_crypto_builtin_md4.py ..... [ 2%] passlib/tests/test_crypto_des.py .... [ 2%] passlib/tests/test_crypto_digest.py ............ [ 2%] passlib/tests/test_crypto_scrypt.py .....s................. [ 3%] passlib/tests/test_ext_django.py ssssssssssssssssssssssss [ 3%] passlib/tests/test_ext_django_source.py s [ 4%] passlib/tests/test_handlers.py ......s......ssss...s..ssss....ssssssssss [ 4%] ss.........s......ssss...s..sss.s...s.sssssssssss...................s... [ 6%] ...sss.s...s..sss.........s...ssssssssssssssssssssssssssssssssssssssssss [ 8%] sssss......s......ssss...s..sssss...sssssssssss.s...............ssss.... [ 9%] ..sss.s...s...ssssssssss.s..ssssssssssssssssssssssssssssssssssssssssssss [ 11%] ss......s.........s...s..sss.....s.ss........s.........sssssssssss...s.. [ 13%] sssss...ssssssssssss..s......sssssssssss...s..sssss...sssssssssss.s..s.. [ 14%] ....sssssssssss...s..sssss...ssssssssssss..s......sssssssssss...s..sssss [ 16%] ...ssssssssssss..s......sssssssssss...s..sssss...ssssssssssss..s......ss [ 18%] sssssssss...s.ssss.s...ss..sssssssssss..s......sssssssssss...s..sssss... [ 19%] ssssssssssss..s......sssssssssss...s..sssss...ssssssssssss..s......s.... [ 21%] ..ssss...s..ssss....ssssssssssss.........s......ssss...s..ssss....ssssss [ 23%] ssssss.........s......ssss...s..ssss....ssssssssssss.........s......ssss [ 24%] ...s..ssss....ssssssssssss.........sssssssssss...s.ssss.s...ssssssssssss [ 26%] ..s.............ssss.....sssss....s..ssssssssssss...ssssssssssssssssssss [ 28%] ssssssssssssssssssssssssss................s.....ssssss..ss..sss........s [ 29%] .........sssssssssss...s..sss.s...s.ssssssssss.s.s.............ssss..... [ 31%] .ssss....s...sssssssssss...sssssssssssssssssssssssssssssssssssssssssssss [ 32%] s......sssssssssss...s...ssss...s...sssssssssss..s......sssssssssss...s. [ 34%] .sssss...s...sssssssssss..s......s......ssss...s...ss.....ssssssssssss.. [ 36%] .......s......ssss...s...ss.....ssssssssssss.........sssssssssss...s..ss [ 37%] s.s...s.sssssssssss..s......sssssssssss...s..sss.s...ssssssssssss..s.... [ 39%] ..sssssssssss...s..sss.s...ssssssssssss..s......sssssssssss...s.ssss.s.. [ 41%] .ssssssssssss..s......sssssssssss...s..sss.s...s...sssssssssss..s......s [ 42%] ......ssss...s..sssss...ssssssssssss.........s.............s..ssss....ss [ 44%] .........s.........sssssssssss...s.sssssss..ssssssssssss..s......sssssss [ 46%] ssss...s..sss.s...s...sssssssssss..s................s......ssss....s..ss [ 47%] s........s...ssssssssssssssssssssssssssssssssssssssssssssss............. [ 49%] ....s......ss.s....s...ss........s...sssssssssssssssssssssssssssssssssss [ 51%] sssssssssss................s......ss.s....s...ss........s...ssssssssssss [ 52%] ssssssssssssssssssssssssssssssssss......s.........s...s..ss.s....sss.... [ 54%] ....s.........sssssssssss...s.ssss.s..ss..ssssssssss..s......sssssssssss [ 56%] ...s..ssssss.ss...ssssssssss..s [ 56%] passlib/tests/test_handlers_argon2.py ssssssssssssssssssssssssssssssssss [ 57%] ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 59%] ss [ 59%] passlib/tests/test_handlers_bcrypt.py ssssssssssssssssssssssssssssssssss [ 60%] ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 61%] ssssssssssssssssssssssssssssssssssssss.......................ss......s.. [ 63%] sss...........s..sssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 64%] ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 66%] ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss.... [ 68%] ............s....s..ss.s....s..s.ss........s....ssssssssssssssssssssssss [ 69%] sssssssssssssssssssssssss [ 70%] passlib/tests/test_handlers_cisco.py ......sssssssssss...s..sssss...s... [ 71%] .ssssssssss.s.s......sssssssssss...s..sssss...s....ssssssssss.s.s......s [ 72%] s.sss.ssss...s..sss.s...s..sssssssssss..s [ 73%] passlib/tests/test_handlers_django.py ......sssssssssss...s...ssss..ss.s [ 74%] sssssssss..s......s......ssss...s...ss.....sssssssssssss.s........s..... [ 76%] .ssss...s..sss.....ssssssssssssss.........s......ssss...s..sss.....sssss [ 77%] sssssssss.........s.........s...s..sssss...sssss........s.........s..... [ 79%] ....s...s..sssss...sssss........s...................s.....ssssss...sssss [ 81%] .........s......................s..sssss...ssss.........s... [ 82%] passlib/tests/test_handlers_pbkdf2.py .......s......ssss...s..ssss....ss [ 83%] ssssssssss.........s.........s...s..ssss....sss........s.........s...... [ 85%] ...s...s..sssss...sss........s.........s.........s...s..sssss...sss..... [ 86%] ...s.........s.........s...s..sssss...sss........s.........s.........s.. [ 88%] .s..sssss...sss........s.........s.........s...s..sssss...sss........s.. [ 90%] .......s.........s...s..ssss....s...........ss........s... [ 91%] passlib/tests/test_handlers_scrypt.py ....................s..ssss....ss. [ 92%] ........s...ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss [ 93%] ssssssssssssssssssssssssssssssss [ 94%] passlib/tests/test_hosts.py ... [ 94%] passlib/tests/test_pwd.py ........ [ 94%] passlib/tests/test_registry.py ...... [ 94%] passlib/tests/test_totp.py ss.ss................................... [ 95%] passlib/tests/test_utils.py ............................................ [ 96%] ........... [ 97%] passlib/tests/test_utils_handlers.py ..........................sssssssss [ 97%] ss...s..sssss...s.sssssssssss..s......s......ssss...s..sssss...s.sssssss [ 99%] ssss... [ 99%] passlib/tests/test_utils_md4.py ..... [ 99%] passlib/tests/test_utils_pbkdf2.py ....... [ 99%] passlib/tests/test_win32.py .. [100%] =============================== warnings summary =============================== passlib/utils/__init__.py:854 /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/utils/__init__.py:854: DeprecationWarning: 'crypt' is deprecated and slated for removal in Python 3.13 from crypt import crypt as _crypt passlib/tests/test_context_deprecated.py:17 /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/tests/test_context_deprecated.py:17: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html from pkg_resources import resource_filename .pybuild/cpython3_3.12_passlib/build/passlib/tests/test_crypto_scrypt.py: 11 warnings /build/reproducible-path/python-passlib-1.7.4/.pybuild/cpython3_3.12_passlib/build/passlib/crypto/scrypt/__init__.py:162: PasslibSecurityWarning: Using builtin scrypt backend, which is 100x slower than is required for adequate security. Installing scrypt support (via 'pip install scrypt') is strongly recommended warn("Using builtin scrypt backend, which is %dx slower than is required " -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ========= 2020 passed, 2346 skipped, 13 warnings in 353.05s (0:05:53) ========== dh_auto_test: error: pybuild --test --test-pytest -i python{version} -p "3.13 3.12" returned exit code 13 make: *** [debian/rules:6: build] Error 25 dpkg-buildpackage: error: debian/rules build 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 I: cleaning the build env I: removing directory /srv/workspace/pbuilder/12988 and its subdirectories Mon Jan 13 11:43:10 UTC 2025 W: No second build log, what happened?