0s autopkgtest [13:17:05]: starting date and time: 2026-01-24 13:17:05+0000 0s autopkgtest [13:17:05]: git checkout: 4b346b80 nova: make wait_reboot return success even when a no-op 0s autopkgtest [13:17:05]: host juju-7f2275-prod-proposed-migration-environment-20; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.47o7rro7/out --timeout-copy=6000 --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --apt-pocket=proposed=src:python3-defaults --apt-upgrade pytango --timeout-short=300 --timeout-copy=20000 --timeout-test=20000 --timeout-build=20000 --env=ADT_TEST_TRIGGERS=python3-defaults/3.14.2-1 -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest-cpu4-ram16-disk100-amd64 --security-groups autopkgtest-juju-7f2275-prod-proposed-migration-environment-20@sto01-15.secgroup --name adt-resolute-amd64-pytango-20260124-131705-juju-7f2275-prod-proposed-migration-environment-20-cc6579e9-799e-4eab-9705-23c9038e4f44 --image adt/ubuntu-resolute-amd64-server --keyname testbed-juju-7f2275-prod-proposed-migration-environment-20 --net-id=net_prod-autopkgtest-workers-amd64 -e TERM=linux --mirror=http://ftpmaster.internal/ubuntu/ 4s Creating nova instance adt-resolute-amd64-pytango-20260124-131705-juju-7f2275-prod-proposed-migration-environment-20-cc6579e9-799e-4eab-9705-23c9038e4f44 from image adt/ubuntu-resolute-amd64-server-20260124.img (UUID 46811f22-3700-43f4-953b-ee3c613d71bb)... 87s autopkgtest [13:18:32]: testbed dpkg architecture: amd64 88s autopkgtest [13:18:33]: testbed apt version: 3.1.13 88s autopkgtest [13:18:33]: @@@@@@@@@@@@@@@@@@@@ test bed setup 88s autopkgtest [13:18:33]: testbed release detected to be: None 89s autopkgtest [13:18:34]: updating testbed package index (apt update) 89s Get:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease [124 kB] 89s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 89s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 89s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 89s Get:5 http://ftpmaster.internal/ubuntu resolute-proposed/universe Sources [998 kB] 90s Get:6 http://ftpmaster.internal/ubuntu resolute-proposed/main Sources [92.3 kB] 90s Get:7 http://ftpmaster.internal/ubuntu resolute-proposed/restricted Sources [2820 B] 90s Get:8 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse Sources [24.3 kB] 90s Get:9 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 Packages [115 kB] 90s Get:10 http://ftpmaster.internal/ubuntu resolute-proposed/main i386 Packages [98.2 kB] 90s Get:11 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 c-n-f Metadata [3712 B] 90s Get:12 http://ftpmaster.internal/ubuntu resolute-proposed/restricted i386 Packages [3696 B] 90s Get:13 http://ftpmaster.internal/ubuntu resolute-proposed/restricted amd64 Packages [12.3 kB] 90s Get:14 http://ftpmaster.internal/ubuntu resolute-proposed/restricted amd64 c-n-f Metadata [336 B] 90s Get:15 http://ftpmaster.internal/ubuntu resolute-proposed/universe i386 Packages [385 kB] 90s Get:16 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 Packages [905 kB] 90s Get:17 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 c-n-f Metadata [24.9 kB] 90s Get:18 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse i386 Packages [4704 B] 90s Get:19 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse amd64 Packages [12.4 kB] 90s Get:20 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse amd64 c-n-f Metadata [824 B] 91s Fetched 2806 kB in 1s (2505 kB/s) 92s Reading package lists... 93s Hit:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease 93s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 93s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 93s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 94s Reading package lists... 94s Reading package lists... 94s Building dependency tree... 94s Reading state information... 94s Calculating upgrade... 94s The following packages were automatically installed and are no longer required: 94s python3.13 python3.13-minimal 94s Use 'sudo apt autoremove' to remove them. 94s The following NEW packages will be installed: 94s libpython3.14-minimal libpython3.14-stdlib python3.14 python3.14-minimal 94s The following packages will be upgraded: 94s libpython3-stdlib python3 python3-gdbm python3-minimal rust-coreutils 94s 5 upgraded, 4 newly installed, 0 to remove and 0 not upgraded. 94s Need to get 10.4 MB of archives. 94s After this operation, 25.2 MB of additional disk space will be used. 94s Get:1 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.14-minimal amd64 3.14.2-1 [920 kB] 95s Get:2 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.14-minimal amd64 3.14.2-1 [2563 kB] 95s Get:3 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 python3-minimal amd64 3.14.2-1 [28.2 kB] 95s Get:4 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 python3 amd64 3.14.2-1 [22.9 kB] 95s Get:5 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.14-stdlib amd64 3.14.2-1 [2398 kB] 96s Get:6 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.14 amd64 3.14.2-1 [816 kB] 96s Get:7 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 libpython3-stdlib amd64 3.14.2-1 [10.9 kB] 96s Get:8 http://ftpmaster.internal/ubuntu resolute/main amd64 rust-coreutils amd64 0.5.0-0ubuntu1 [3628 kB] 96s Get:9 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 python3-gdbm amd64 3.14.2-1 [11.1 kB] 96s dpkg-preconfigure: unable to re-open stdin: No such file or directory 96s Fetched 10.4 MB in 2s (6128 kB/s) 96s Selecting previously unselected package libpython3.14-minimal:amd64. 97s (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 ... 124177 files and directories currently installed.) 97s Preparing to unpack .../libpython3.14-minimal_3.14.2-1_amd64.deb ... 97s Unpacking libpython3.14-minimal:amd64 (3.14.2-1) ... 97s Selecting previously unselected package python3.14-minimal. 97s Preparing to unpack .../python3.14-minimal_3.14.2-1_amd64.deb ... 97s Unpacking python3.14-minimal (3.14.2-1) ... 97s Setting up libpython3.14-minimal:amd64 (3.14.2-1) ... 97s Setting up python3.14-minimal (3.14.2-1) ... 98s (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 ... 124519 files and directories currently installed.) 98s Preparing to unpack .../python3-minimal_3.14.2-1_amd64.deb ... 98s Unpacking python3-minimal (3.14.2-1) over (3.13.9-3) ... 98s Setting up python3-minimal (3.14.2-1) ... 98s (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 ... 124519 files and directories currently installed.) 98s Preparing to unpack .../python3_3.14.2-1_amd64.deb ... 99s running python pre-rtupdate hooks for python3.14... 99s Unpacking python3 (3.14.2-1) over (3.13.9-3) ... 99s Selecting previously unselected package libpython3.14-stdlib:amd64. 99s Preparing to unpack .../libpython3.14-stdlib_3.14.2-1_amd64.deb ... 99s Unpacking libpython3.14-stdlib:amd64 (3.14.2-1) ... 99s Selecting previously unselected package python3.14. 99s Preparing to unpack .../python3.14_3.14.2-1_amd64.deb ... 99s Unpacking python3.14 (3.14.2-1) ... 99s Preparing to unpack .../libpython3-stdlib_3.14.2-1_amd64.deb ... 99s Unpacking libpython3-stdlib:amd64 (3.14.2-1) over (3.13.9-3) ... 99s Preparing to unpack .../rust-coreutils_0.5.0-0ubuntu1_amd64.deb ... 99s Unpacking rust-coreutils (0.5.0-0ubuntu1) over (0.2.2-0ubuntu2) ... 99s Setting up rust-coreutils (0.5.0-0ubuntu1) ... 99s (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 ... 124980 files and directories currently installed.) 99s Preparing to unpack .../python3-gdbm_3.14.2-1_amd64.deb ... 99s Unpacking python3-gdbm (3.14.2-1) over (3.13.9-3) ... 99s Setting up libpython3.14-stdlib:amd64 (3.14.2-1) ... 99s Setting up python3.14 (3.14.2-1) ... 100s Setting up libpython3-stdlib:amd64 (3.14.2-1) ... 100s Setting up python3-gdbm (3.14.2-1) ... 100s Setting up python3 (3.14.2-1) ... 100s running python rtupdate hooks for python3.14... 100s running python post-rtupdate hooks for python3.14... 101s Processing triggers for man-db (2.13.1-1) ... 101s Processing triggers for systemd (259-1ubuntu2) ... 102s autopkgtest [13:18:47]: upgrading testbed (apt dist-upgrade and autopurge) 102s Reading package lists... 102s Building dependency tree... 102s Reading state information... 102s Calculating upgrade... 102s The following packages were automatically installed and are no longer required: 102s python3.13 python3.13-minimal 102s Use 'sudo apt autoremove' to remove them. 102s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 102s Reading package lists... 103s Building dependency tree... 103s Reading state information... 103s Solving dependencies... 103s The following packages will be REMOVED: 103s python3.13* python3.13-minimal* 103s 0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded. 103s After this operation, 7860 kB disk space will be freed. 103s (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 ... 124978 files and directories currently installed.) 103s Removing python3.13 (3.13.11-1) ... 103s Removing python3.13-minimal (3.13.11-1) ... 104s Processing triggers for man-db (2.13.1-1) ... 105s Processing triggers for systemd (259-1ubuntu2) ... 105s (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 ... 124951 files and directories currently installed.) 105s Purging configuration files for python3.13-minimal (3.13.11-1) ... 107s autopkgtest [13:18:52]: testbed running kernel: Linux 6.18.0-9-generic #9-Ubuntu SMP PREEMPT_DYNAMIC Mon Jan 12 16:49:02 UTC 2026 107s autopkgtest [13:18:52]: @@@@@@@@@@@@@@@@@@@@ apt-source pytango 110s Get:1 http://ftpmaster.internal/ubuntu resolute/universe pytango 10.0.2-3 (dsc) [3646 B] 110s Get:2 http://ftpmaster.internal/ubuntu resolute/universe pytango 10.0.2-3 (tar) [4854 kB] 110s Get:3 http://ftpmaster.internal/ubuntu resolute/universe pytango 10.0.2-3 (diff) [13.6 kB] 110s gpgv: Signature made Thu Oct 2 15:09:36 2025 UTC 110s gpgv: using RSA key 9B03EBB98300DF97C2B123BFCC8C6BDD1403F4CA 110s gpgv: issuer "roehling@debian.org" 110s gpgv: Can't check signature: No public key 110s dpkg-source: warning: cannot verify inline signature for ./pytango_10.0.2-3.dsc: no acceptable signature found 110s autopkgtest [13:18:55]: testing package pytango version 10.0.2-3 111s autopkgtest [13:18:56]: build not needed 112s autopkgtest [13:18:57]: test command1: preparing testbed 112s Reading package lists... 112s Building dependency tree... 112s Reading state information... 112s Solving dependencies... 113s The following NEW packages will be installed: 113s libabsl20240722 libblas3 libboost-python1.88.0 libcares2 libcos4-3 libev4t64 113s libexpat1-dev libgfortran5 libgrpc++1.51t64 libgrpc29t64 libjpeg-turbo8 113s libjpeg8 liblapack3 libnorm1t64 libomniorb4-3t64 libomnithread4 113s libpgm-5.3-0t64 libprotobuf32t64 libprotoc32t64 libpython3-all-dev 113s libpython3-dev libpython3.13-dev libpython3.14 libpython3.14-dev libre2-11 113s libsodium23 libtango-tools libtango10 libzmq5 opentelemetry-cpp python3-all 113s python3-all-dev python3-dev python3-gevent python3-greenlet 113s python3-iniconfig python3-numpy python3-numpy-dev python3-pluggy 113s python3-psutil python3-py python3-pytest python3-pytest-asyncio 113s python3-pytest-forked python3-pytest-rerunfailures python3-tango 113s python3-zope.event python3-zope.interface python3.13 python3.13-dev 113s python3.13-minimal python3.14-dev tango-common tango-starter tango-test 113s zlib1g-dev 113s 0 upgraded, 56 newly installed, 0 to remove and 0 not upgraded. 113s Need to get 50.6 MB of archives. 113s After this operation, 231 MB of additional disk space will be used. 113s Get:1 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.13-minimal amd64 3.13.11-1 [2408 kB] 113s Get:2 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-numpy-dev amd64 1:2.3.5+ds-3 [147 kB] 113s Get:3 http://ftpmaster.internal/ubuntu resolute/main amd64 libblas3 amd64 3.12.1-7ubuntu1 [260 kB] 113s Get:4 http://ftpmaster.internal/ubuntu resolute/main amd64 libgfortran5 amd64 15.2.0-11ubuntu1 [939 kB] 113s Get:5 http://ftpmaster.internal/ubuntu resolute/main amd64 liblapack3 amd64 3.12.1-7ubuntu1 [2739 kB] 114s Get:6 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-numpy amd64 1:2.3.5+ds-3 [8129 kB] 114s Get:7 http://ftpmaster.internal/ubuntu resolute/universe amd64 libomnithread4 amd64 4.3.3+ds1-1 [13.2 kB] 114s Get:8 http://ftpmaster.internal/ubuntu resolute/universe amd64 libomniorb4-3t64 amd64 4.3.3+ds1-1 [1276 kB] 114s Get:9 http://ftpmaster.internal/ubuntu resolute/main amd64 libabsl20240722 amd64 20240722.0-4ubuntu1 [528 kB] 114s Get:10 http://ftpmaster.internal/ubuntu resolute/main amd64 libcares2 amd64 1.34.6-1 [102 kB] 114s Get:11 http://ftpmaster.internal/ubuntu resolute/main amd64 libprotobuf32t64 amd64 3.21.12-15 [955 kB] 114s Get:12 http://ftpmaster.internal/ubuntu resolute/main amd64 libprotoc32t64 amd64 3.21.12-15 [702 kB] 114s Get:13 http://ftpmaster.internal/ubuntu resolute/main amd64 libre2-11 amd64 20250805-1build1 [175 kB] 114s Get:14 http://ftpmaster.internal/ubuntu resolute/universe amd64 libgrpc29t64 amd64 1.51.1-7 [2926 kB] 114s Get:15 http://ftpmaster.internal/ubuntu resolute/universe amd64 libgrpc++1.51t64 amd64 1.51.1-7 [498 kB] 115s Get:16 http://ftpmaster.internal/ubuntu resolute/universe amd64 opentelemetry-cpp amd64 1.23.0-3 [634 kB] 115s Get:17 http://ftpmaster.internal/ubuntu resolute/universe amd64 tango-common all 10.0.2+dfsg1-4 [8520 B] 115s Get:18 http://ftpmaster.internal/ubuntu resolute/universe amd64 libcos4-3 amd64 4.3.3+ds1-1 [1297 kB] 115s Get:19 http://ftpmaster.internal/ubuntu resolute/main amd64 libjpeg-turbo8 amd64 2.1.5-4ubuntu2 [152 kB] 115s Get:20 http://ftpmaster.internal/ubuntu resolute/main amd64 libjpeg8 amd64 8c-2ubuntu11 [2148 B] 115s Get:21 http://ftpmaster.internal/ubuntu resolute/universe amd64 libnorm1t64 amd64 1.5.9+dfsg-4 [158 kB] 115s Get:22 http://ftpmaster.internal/ubuntu resolute/universe amd64 libpgm-5.3-0t64 amd64 5.3.128~dfsg-2.1build2 [168 kB] 115s Get:23 http://ftpmaster.internal/ubuntu resolute/main amd64 libsodium23 amd64 1.0.18-2 [165 kB] 115s Get:24 http://ftpmaster.internal/ubuntu resolute/universe amd64 libzmq5 amd64 4.3.5-1build3 [262 kB] 115s Get:25 http://ftpmaster.internal/ubuntu resolute/universe amd64 libtango10 amd64 10.0.2+dfsg1-4 [2077 kB] 115s Get:26 http://ftpmaster.internal/ubuntu resolute/universe amd64 libtango-tools amd64 10.0.2+dfsg1-4 [25.9 kB] 115s Get:27 http://ftpmaster.internal/ubuntu resolute/universe amd64 tango-starter amd64 10.0.2+dfsg1-4 [84.4 kB] 115s Get:28 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.13 amd64 3.13.11-1 [758 kB] 115s Get:29 http://ftpmaster.internal/ubuntu resolute/main amd64 libboost-python1.88.0 amd64 1.88.0-1.4ubuntu3 [360 kB] 115s Get:30 http://ftpmaster.internal/ubuntu resolute/universe amd64 libev4t64 amd64 1:4.33-2.1build2 [31.5 kB] 115s Get:31 http://ftpmaster.internal/ubuntu resolute/main amd64 libexpat1-dev amd64 2.7.3-1 [143 kB] 115s Get:32 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.14 amd64 3.14.2-1 [2568 kB] 115s Get:33 http://ftpmaster.internal/ubuntu resolute/main amd64 zlib1g-dev amd64 1:1.3.dfsg+really1.3.1-1ubuntu2 [898 kB] 115s Get:34 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.14-dev amd64 3.14.2-1 [5963 kB] 115s Get:35 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 libpython3-dev amd64 3.14.2-1 [11.2 kB] 115s Get:36 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.13-dev amd64 3.13.11-1 [5798 kB] 115s Get:37 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 libpython3-all-dev amd64 3.14.2-1 [916 B] 115s Get:38 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 python3-all amd64 3.14.2-1 [890 B] 115s Get:39 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.14-dev amd64 3.14.2-1 [510 kB] 115s Get:40 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 python3-dev amd64 3.14.2-1 [26.6 kB] 115s Get:41 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.13-dev amd64 3.13.11-1 [508 kB] 115s Get:42 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 python3-all-dev amd64 3.14.2-1 [914 B] 115s Get:43 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-iniconfig all 2.1.0-2 [6962 B] 115s Get:44 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-pluggy all 1.6.0-2 [21.1 kB] 115s Get:45 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-psutil amd64 7.1.0-1ubuntu1 [191 kB] 115s Get:46 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-py all 1.11.0-6 [72.9 kB] 115s Get:47 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-pytest all 9.0.2-2 [277 kB] 115s Get:48 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-pytest-asyncio all 1.3.0-1 [13.8 kB] 115s Get:49 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-pytest-forked all 1.6.0-5 [7758 B] 115s Get:50 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-pytest-rerunfailures all 16.1-1 [14.9 kB] 115s Get:51 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-zope.event all 6.0-2 [7710 B] 115s Get:52 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-zope.interface amd64 8.2-1 [146 kB] 115s Get:53 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-greenlet amd64 3.2.4-3 [185 kB] 115s Get:54 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-gevent amd64 24.11.1-1build2 [1203 kB] 116s Get:55 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-tango amd64 10.0.2-3 [3945 kB] 116s Get:56 http://ftpmaster.internal/ubuntu resolute/universe amd64 tango-test amd64 10.0.2+dfsg1-4 [114 kB] 116s Preconfiguring packages ... 116s Fetched 50.6 MB in 3s (16.0 MB/s) 116s Selecting previously unselected package python3.13-minimal. 116s (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 ... 124953 files and directories currently installed.) 116s Preparing to unpack .../00-python3.13-minimal_3.13.11-1_amd64.deb ... 116s Unpacking python3.13-minimal (3.13.11-1) ... 116s Selecting previously unselected package python3-numpy-dev:amd64. 116s Preparing to unpack .../01-python3-numpy-dev_1%3a2.3.5+ds-3_amd64.deb ... 116s Unpacking python3-numpy-dev:amd64 (1:2.3.5+ds-3) ... 116s Selecting previously unselected package libblas3:amd64. 116s Preparing to unpack .../02-libblas3_3.12.1-7ubuntu1_amd64.deb ... 116s Unpacking libblas3:amd64 (3.12.1-7ubuntu1) ... 116s Selecting previously unselected package libgfortran5:amd64. 116s Preparing to unpack .../03-libgfortran5_15.2.0-11ubuntu1_amd64.deb ... 116s Unpacking libgfortran5:amd64 (15.2.0-11ubuntu1) ... 116s Selecting previously unselected package liblapack3:amd64. 116s Preparing to unpack .../04-liblapack3_3.12.1-7ubuntu1_amd64.deb ... 116s Unpacking liblapack3:amd64 (3.12.1-7ubuntu1) ... 116s Selecting previously unselected package python3-numpy. 116s Preparing to unpack .../05-python3-numpy_1%3a2.3.5+ds-3_amd64.deb ... 116s Unpacking python3-numpy (1:2.3.5+ds-3) ... 117s Selecting previously unselected package libomnithread4:amd64. 117s Preparing to unpack .../06-libomnithread4_4.3.3+ds1-1_amd64.deb ... 117s Unpacking libomnithread4:amd64 (4.3.3+ds1-1) ... 117s Selecting previously unselected package libomniorb4-3t64:amd64. 117s Preparing to unpack .../07-libomniorb4-3t64_4.3.3+ds1-1_amd64.deb ... 117s Unpacking libomniorb4-3t64:amd64 (4.3.3+ds1-1) ... 117s Selecting previously unselected package libabsl20240722:amd64. 117s Preparing to unpack .../08-libabsl20240722_20240722.0-4ubuntu1_amd64.deb ... 117s Unpacking libabsl20240722:amd64 (20240722.0-4ubuntu1) ... 117s Selecting previously unselected package libcares2:amd64. 117s Preparing to unpack .../09-libcares2_1.34.6-1_amd64.deb ... 117s Unpacking libcares2:amd64 (1.34.6-1) ... 117s Selecting previously unselected package libprotobuf32t64:amd64. 117s Preparing to unpack .../10-libprotobuf32t64_3.21.12-15_amd64.deb ... 117s Unpacking libprotobuf32t64:amd64 (3.21.12-15) ... 117s Selecting previously unselected package libprotoc32t64:amd64. 117s Preparing to unpack .../11-libprotoc32t64_3.21.12-15_amd64.deb ... 117s Unpacking libprotoc32t64:amd64 (3.21.12-15) ... 117s Selecting previously unselected package libre2-11:amd64. 117s Preparing to unpack .../12-libre2-11_20250805-1build1_amd64.deb ... 117s Unpacking libre2-11:amd64 (20250805-1build1) ... 117s Selecting previously unselected package libgrpc29t64:amd64. 117s Preparing to unpack .../13-libgrpc29t64_1.51.1-7_amd64.deb ... 117s Unpacking libgrpc29t64:amd64 (1.51.1-7) ... 117s Selecting previously unselected package libgrpc++1.51t64:amd64. 117s Preparing to unpack .../14-libgrpc++1.51t64_1.51.1-7_amd64.deb ... 117s Unpacking libgrpc++1.51t64:amd64 (1.51.1-7) ... 117s Selecting previously unselected package opentelemetry-cpp:amd64. 117s Preparing to unpack .../15-opentelemetry-cpp_1.23.0-3_amd64.deb ... 117s Unpacking opentelemetry-cpp:amd64 (1.23.0-3) ... 117s Selecting previously unselected package tango-common. 117s Preparing to unpack .../16-tango-common_10.0.2+dfsg1-4_all.deb ... 117s Unpacking tango-common (10.0.2+dfsg1-4) ... 117s Selecting previously unselected package libcos4-3:amd64. 117s Preparing to unpack .../17-libcos4-3_4.3.3+ds1-1_amd64.deb ... 117s Unpacking libcos4-3:amd64 (4.3.3+ds1-1) ... 117s Selecting previously unselected package libjpeg-turbo8:amd64. 117s Preparing to unpack .../18-libjpeg-turbo8_2.1.5-4ubuntu2_amd64.deb ... 117s Unpacking libjpeg-turbo8:amd64 (2.1.5-4ubuntu2) ... 117s Selecting previously unselected package libjpeg8:amd64. 117s Preparing to unpack .../19-libjpeg8_8c-2ubuntu11_amd64.deb ... 117s Unpacking libjpeg8:amd64 (8c-2ubuntu11) ... 117s Selecting previously unselected package libnorm1t64:amd64. 117s Preparing to unpack .../20-libnorm1t64_1.5.9+dfsg-4_amd64.deb ... 117s Unpacking libnorm1t64:amd64 (1.5.9+dfsg-4) ... 117s Selecting previously unselected package libpgm-5.3-0t64:amd64. 117s Preparing to unpack .../21-libpgm-5.3-0t64_5.3.128~dfsg-2.1build2_amd64.deb ... 117s Unpacking libpgm-5.3-0t64:amd64 (5.3.128~dfsg-2.1build2) ... 117s Selecting previously unselected package libsodium23:amd64. 117s Preparing to unpack .../22-libsodium23_1.0.18-2_amd64.deb ... 117s Unpacking libsodium23:amd64 (1.0.18-2) ... 117s Selecting previously unselected package libzmq5:amd64. 117s Preparing to unpack .../23-libzmq5_4.3.5-1build3_amd64.deb ... 117s Unpacking libzmq5:amd64 (4.3.5-1build3) ... 117s Selecting previously unselected package libtango10:amd64. 117s Preparing to unpack .../24-libtango10_10.0.2+dfsg1-4_amd64.deb ... 117s Unpacking libtango10:amd64 (10.0.2+dfsg1-4) ... 117s Selecting previously unselected package libtango-tools. 117s Preparing to unpack .../25-libtango-tools_10.0.2+dfsg1-4_amd64.deb ... 117s Unpacking libtango-tools (10.0.2+dfsg1-4) ... 117s Selecting previously unselected package tango-starter. 117s Preparing to unpack .../26-tango-starter_10.0.2+dfsg1-4_amd64.deb ... 117s Unpacking tango-starter (10.0.2+dfsg1-4) ... 117s Selecting previously unselected package python3.13. 117s Preparing to unpack .../27-python3.13_3.13.11-1_amd64.deb ... 117s Unpacking python3.13 (3.13.11-1) ... 117s Selecting previously unselected package libboost-python1.88.0. 117s Preparing to unpack .../28-libboost-python1.88.0_1.88.0-1.4ubuntu3_amd64.deb ... 117s Unpacking libboost-python1.88.0 (1.88.0-1.4ubuntu3) ... 118s Selecting previously unselected package libev4t64:amd64. 118s Preparing to unpack .../29-libev4t64_1%3a4.33-2.1build2_amd64.deb ... 118s Unpacking libev4t64:amd64 (1:4.33-2.1build2) ... 118s Selecting previously unselected package libexpat1-dev:amd64. 118s Preparing to unpack .../30-libexpat1-dev_2.7.3-1_amd64.deb ... 118s Unpacking libexpat1-dev:amd64 (2.7.3-1) ... 118s Selecting previously unselected package libpython3.14:amd64. 118s Preparing to unpack .../31-libpython3.14_3.14.2-1_amd64.deb ... 118s Unpacking libpython3.14:amd64 (3.14.2-1) ... 118s Selecting previously unselected package zlib1g-dev:amd64. 118s Preparing to unpack .../32-zlib1g-dev_1%3a1.3.dfsg+really1.3.1-1ubuntu2_amd64.deb ... 118s Unpacking zlib1g-dev:amd64 (1:1.3.dfsg+really1.3.1-1ubuntu2) ... 118s Selecting previously unselected package libpython3.14-dev:amd64. 118s Preparing to unpack .../33-libpython3.14-dev_3.14.2-1_amd64.deb ... 118s Unpacking libpython3.14-dev:amd64 (3.14.2-1) ... 118s Selecting previously unselected package libpython3-dev:amd64. 118s Preparing to unpack .../34-libpython3-dev_3.14.2-1_amd64.deb ... 118s Unpacking libpython3-dev:amd64 (3.14.2-1) ... 118s Selecting previously unselected package libpython3.13-dev:amd64. 118s Preparing to unpack .../35-libpython3.13-dev_3.13.11-1_amd64.deb ... 118s Unpacking libpython3.13-dev:amd64 (3.13.11-1) ... 118s Selecting previously unselected package libpython3-all-dev:amd64. 118s Preparing to unpack .../36-libpython3-all-dev_3.14.2-1_amd64.deb ... 118s Unpacking libpython3-all-dev:amd64 (3.14.2-1) ... 118s Selecting previously unselected package python3-all. 118s Preparing to unpack .../37-python3-all_3.14.2-1_amd64.deb ... 118s Unpacking python3-all (3.14.2-1) ... 118s Selecting previously unselected package python3.14-dev. 118s Preparing to unpack .../38-python3.14-dev_3.14.2-1_amd64.deb ... 118s Unpacking python3.14-dev (3.14.2-1) ... 118s Selecting previously unselected package python3-dev. 118s Preparing to unpack .../39-python3-dev_3.14.2-1_amd64.deb ... 118s Unpacking python3-dev (3.14.2-1) ... 118s Selecting previously unselected package python3.13-dev. 118s Preparing to unpack .../40-python3.13-dev_3.13.11-1_amd64.deb ... 118s Unpacking python3.13-dev (3.13.11-1) ... 118s Selecting previously unselected package python3-all-dev. 118s Preparing to unpack .../41-python3-all-dev_3.14.2-1_amd64.deb ... 118s Unpacking python3-all-dev (3.14.2-1) ... 118s Selecting previously unselected package python3-iniconfig. 118s Preparing to unpack .../42-python3-iniconfig_2.1.0-2_all.deb ... 118s Unpacking python3-iniconfig (2.1.0-2) ... 118s Selecting previously unselected package python3-pluggy. 118s Preparing to unpack .../43-python3-pluggy_1.6.0-2_all.deb ... 118s Unpacking python3-pluggy (1.6.0-2) ... 118s Selecting previously unselected package python3-psutil. 118s Preparing to unpack .../44-python3-psutil_7.1.0-1ubuntu1_amd64.deb ... 118s Unpacking python3-psutil (7.1.0-1ubuntu1) ... 118s Selecting previously unselected package python3-py. 118s Preparing to unpack .../45-python3-py_1.11.0-6_all.deb ... 118s Unpacking python3-py (1.11.0-6) ... 118s Selecting previously unselected package python3-pytest. 118s Preparing to unpack .../46-python3-pytest_9.0.2-2_all.deb ... 118s Unpacking python3-pytest (9.0.2-2) ... 118s Selecting previously unselected package python3-pytest-asyncio. 118s Preparing to unpack .../47-python3-pytest-asyncio_1.3.0-1_all.deb ... 118s Unpacking python3-pytest-asyncio (1.3.0-1) ... 118s Selecting previously unselected package python3-pytest-forked. 118s Preparing to unpack .../48-python3-pytest-forked_1.6.0-5_all.deb ... 118s Unpacking python3-pytest-forked (1.6.0-5) ... 118s Selecting previously unselected package python3-pytest-rerunfailures. 118s Preparing to unpack .../49-python3-pytest-rerunfailures_16.1-1_all.deb ... 118s Unpacking python3-pytest-rerunfailures (16.1-1) ... 118s Selecting previously unselected package python3-zope.event. 118s Preparing to unpack .../50-python3-zope.event_6.0-2_all.deb ... 118s Unpacking python3-zope.event (6.0-2) ... 118s Selecting previously unselected package python3-zope.interface. 118s Preparing to unpack .../51-python3-zope.interface_8.2-1_amd64.deb ... 118s Unpacking python3-zope.interface (8.2-1) ... 118s Selecting previously unselected package python3-greenlet. 118s Preparing to unpack .../52-python3-greenlet_3.2.4-3_amd64.deb ... 118s Unpacking python3-greenlet (3.2.4-3) ... 119s Selecting previously unselected package python3-gevent. 119s Preparing to unpack .../53-python3-gevent_24.11.1-1build2_amd64.deb ... 119s Unpacking python3-gevent (24.11.1-1build2) ... 119s Selecting previously unselected package python3-tango. 119s Preparing to unpack .../54-python3-tango_10.0.2-3_amd64.deb ... 119s Unpacking python3-tango (10.0.2-3) ... 119s Selecting previously unselected package tango-test. 119s Preparing to unpack .../55-tango-test_10.0.2+dfsg1-4_amd64.deb ... 119s Unpacking tango-test (10.0.2+dfsg1-4) ... 119s Setting up python3-iniconfig (2.1.0-2) ... 119s Setting up libev4t64:amd64 (1:4.33-2.1build2) ... 119s Setting up libnorm1t64:amd64 (1.5.9+dfsg-4) ... 119s Setting up libprotobuf32t64:amd64 (3.21.12-15) ... 119s Setting up libboost-python1.88.0 (1.88.0-1.4ubuntu3) ... 119s Setting up libsodium23:amd64 (1.0.18-2) ... 119s Setting up python3-py (1.11.0-6) ... 119s Setting up python3-zope.event (6.0-2) ... 119s Setting up python3-zope.interface (8.2-1) ... 120s Setting up libabsl20240722:amd64 (20240722.0-4ubuntu1) ... 120s Setting up python3-psutil (7.1.0-1ubuntu1) ... 121s Setting up libpgm-5.3-0t64:amd64 (5.3.128~dfsg-2.1build2) ... 121s Setting up libblas3:amd64 (3.12.1-7ubuntu1) ... 121s update-alternatives: using /usr/lib/x86_64-linux-gnu/blas/libblas.so.3 to provide /usr/lib/x86_64-linux-gnu/libblas.so.3 (libblas.so.3-x86_64-linux-gnu) in auto mode 121s Setting up libexpat1-dev:amd64 (2.7.3-1) ... 121s Setting up python3-greenlet (3.2.4-3) ... 121s Setting up libcares2:amd64 (1.34.6-1) ... 121s Setting up python3-numpy-dev:amd64 (1:2.3.5+ds-3) ... 121s Setting up libjpeg-turbo8:amd64 (2.1.5-4ubuntu2) ... 121s Setting up libomnithread4:amd64 (4.3.3+ds1-1) ... 121s Setting up libgfortran5:amd64 (15.2.0-11ubuntu1) ... 121s Setting up python3-pluggy (1.6.0-2) ... 121s Setting up zlib1g-dev:amd64 (1:1.3.dfsg+really1.3.1-1ubuntu2) ... 121s Setting up libpython3.14:amd64 (3.14.2-1) ... 121s Setting up python3.13-minimal (3.13.11-1) ... 122s Setting up libpython3.14-dev:amd64 (3.14.2-1) ... 122s Setting up libprotoc32t64:amd64 (3.21.12-15) ... 122s Setting up libjpeg8:amd64 (8c-2ubuntu11) ... 122s Setting up libre2-11:amd64 (20250805-1build1) ... 122s Setting up liblapack3:amd64 (3.12.1-7ubuntu1) ... 122s update-alternatives: using /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3 to provide /usr/lib/x86_64-linux-gnu/liblapack.so.3 (liblapack.so.3-x86_64-linux-gnu) in auto mode 122s Setting up libpython3-dev:amd64 (3.14.2-1) ... 122s Setting up libzmq5:amd64 (4.3.5-1build3) ... 122s Setting up libomniorb4-3t64:amd64 (4.3.3+ds1-1) ... 122s Setting up python3.14-dev (3.14.2-1) ... 122s Setting up python3.13 (3.13.11-1) ... 123s Setting up python3-pytest (9.0.2-2) ... 124s Setting up python3-all (3.14.2-1) ... 124s Setting up python3-gevent (24.11.1-1build2) ... 124s /usr/lib/python3/dist-packages/gevent/_ffi/loop.py:226: SyntaxWarning: 'return' in a 'finally' block 124s return # pylint:disable=lost-exception,return-in-finally 124s Setting up python3-pytest-forked (1.6.0-5) ... 125s Setting up libpython3.13-dev:amd64 (3.13.11-1) ... 125s Setting up python3-dev (3.14.2-1) ... 125s Setting up libgrpc29t64:amd64 (1.51.1-7) ... 125s Setting up python3-numpy (1:2.3.5+ds-3) ... 129s Setting up python3-pytest-asyncio (1.3.0-1) ... 129s Setting up libcos4-3:amd64 (4.3.3+ds1-1) ... 129s Setting up python3-pytest-rerunfailures (16.1-1) ... 129s Setting up python3.13-dev (3.13.11-1) ... 129s Setting up libgrpc++1.51t64:amd64 (1.51.1-7) ... 129s Setting up libpython3-all-dev:amd64 (3.14.2-1) ... 129s Setting up opentelemetry-cpp:amd64 (1.23.0-3) ... 129s Setting up tango-common (10.0.2+dfsg1-4) ... 129s Adding group tango....done 129s Adding system user tango....done 129s Setting up python3-all-dev (3.14.2-1) ... 129s Setting up libtango10:amd64 (10.0.2+dfsg1-4) ... 129s Setting up libtango-tools (10.0.2+dfsg1-4) ... 129s Setting up python3-tango (10.0.2-3) ... 130s Setting up tango-starter (10.0.2+dfsg1-4) ... 130s Created symlink '/etc/systemd/system/multi-user.target.wants/tango-starter.service' → '/usr/lib/systemd/system/tango-starter.service'. 131s Failed to start tango-starter.service: Unit tango-db.service not found. 131s Could not execute systemctl: at /usr/bin/deb-systemd-invoke line 148. 131s Setting up tango-test (10.0.2+dfsg1-4) ... 131s Processing triggers for systemd (259-1ubuntu2) ... 131s Processing triggers for man-db (2.13.1-1) ... 131s Processing triggers for libc-bin (2.42-2ubuntu4) ... 132s autopkgtest [13:19:17]: test command1: set -efu ; cp -r tests "$AUTOPKGTEST_TMP" ; for py in $(py3versions -r 2>/dev/null) ; do cd "$AUTOPKGTEST_TMP" ; echo "Testing with $py:" ; PATH=/usr/lib/tango/:$PATH $py -m pytest tests -v --forked --ignore tests/test_event.py --reruns 5 ; done 132s autopkgtest [13:19:17]: test command1: [----------------------- 132s Testing with python3.13: 133s ============================= test session starts ============================== 133s platform linux -- Python 3.13.11, pytest-9.0.2, pluggy-1.6.0 -- /usr/bin/python3.13 133s cachedir: .pytest_cache 133s rootdir: /tmp/autopkgtest.vbPr85/autopkgtest_tmp 133s plugins: typeguard-4.4.4, rerunfailures-16.1, forked-1.6.0, asyncio-1.3.0 133s asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function 133s collecting ... collected 1170 items 133s 133s tests/test_api_util.py::test_get_env_var PASSED [ 0%] 134s tests/test_async.py::test_green_mode_kwarg_for_proxy_methods PASSED [ 0%] 135s tests/test_async.py::test_async_attribute_polled PASSED [ 0%] 135s tests/test_async.py::test_async_attribute_with_callback[poll] SKIPPED [ 0%] 135s tests/test_async.py::test_async_attribute_with_callback[push] SKIPPED [ 0%] 135s tests/test_async.py::test_async_command_polled PASSED [ 0%] 135s tests/test_async.py::test_async_command_with_polled_callback[cmd_ok-123-123-False] PASSED [ 0%] 135s tests/test_async.py::test_async_command_with_polled_callback[cmd_timeout-123-None-True] PASSED [ 0%] 136s tests/test_async.py::test_async_command_with_polled_callback[cmd_exception-123-None-True] PASSED [ 0%] 136s tests/test_async.py::test_async_attribute_read_with_polled_callback[attr_ok-argout0-False] PASSED [ 0%] 136s tests/test_async.py::test_async_attribute_read_with_polled_callback[attr_timeout-None-True] PASSED [ 0%] 136s tests/test_async.py::test_async_attribute_read_with_polled_callback[attr_exception-argout2-False] PASSED [ 1%] 136s tests/test_async.py::test_async_attribute_write_with_polled_callback[attr_ok-False] PASSED [ 1%] 137s tests/test_async.py::test_async_attribute_write_with_polled_callback[attr_timeout-True] PASSED [ 1%] 137s tests/test_async.py::test_async_attribute_write_with_polled_callback[attr_exception-False] PASSED [ 1%] 137s tests/test_async.py::test_async_command_with_pushed_callback[cmd_ok-123-123-False] PASSED [ 1%] 137s tests/test_async.py::test_async_command_with_pushed_callback[cmd_timeout-123-None-True] PASSED [ 1%] 138s tests/test_async.py::test_async_command_with_pushed_callback[cmd_exception-123-None-True] PASSED [ 1%] 138s tests/test_async.py::test_async_attribute_read_with_pushed_callback[attr_ok-argout0-False] PASSED [ 1%] 138s tests/test_async.py::test_async_attribute_read_with_pushed_callback[attr_timeout-None-True] PASSED [ 1%] 138s tests/test_async.py::test_async_attribute_read_with_pushed_callback[attr_exception-argout2-False] PASSED [ 1%] 138s tests/test_async.py::test_async_attribute_write_with_pushed_callback[attr_ok-False] PASSED [ 1%] 139s tests/test_async.py::test_async_attribute_write_with_pushed_callback[attr_timeout-True] PASSED [ 1%] 139s tests/test_async.py::test_async_attribute_write_with_pushed_callback[attr_exception-False] PASSED [ 2%] 139s tests/test_async.py::test_async_exception_in_callback PASSED [ 2%] 140s tests/test_attrconfeventdata.py::test_attribute_configuration_event PASSED [ 2%] 140s tests/test_attrconfeventdata.py::test_attribute_configuration_event_set_errors PASSED [ 2%] 140s tests/test_attribute_proxy.py::test_ping[scalar_int] PASSED [ 2%] 140s tests/test_attribute_proxy.py::test_ping[spectrum_str] PASSED [ 2%] 140s tests/test_attribute_proxy.py::test_ping[image_float] PASSED [ 2%] 141s tests/test_attribute_proxy.py::test_state_status[scalar_int] PASSED [ 2%] 141s tests/test_attribute_proxy.py::test_state_status[spectrum_str] PASSED [ 2%] 141s tests/test_attribute_proxy.py::test_state_status[image_float] PASSED [ 2%] 141s tests/test_attribute_proxy.py::test_read_write_attribute[scalar_int] PASSED [ 2%] 141s tests/test_attribute_proxy.py::test_read_write_attribute[spectrum_str] PASSED [ 2%] 141s tests/test_attribute_proxy.py::test_read_write_attribute[image_float] PASSED [ 3%] 141s tests/test_attribute_proxy.py::test_attribute_poll[scalar_int] PASSED [ 3%] 142s tests/test_attribute_proxy.py::test_attribute_poll[spectrum_str] PASSED [ 3%] 143s tests/test_attribute_proxy.py::test_attribute_poll[image_float] PASSED [ 3%] 143s tests/test_attribute_proxy.py::test_read_write_attribute_async[scalar_int] PASSED [ 3%] 143s tests/test_attribute_proxy.py::test_read_write_attribute_async[spectrum_str] PASSED [ 3%] 144s tests/test_attribute_proxy.py::test_read_write_attribute_async[image_float] PASSED [ 3%] 144s tests/test_attribute_proxy.py::test_event[Synchronous] SKIPPED (This...) [ 3%] 144s tests/test_attribute_proxy.py::test_event[Futures] SKIPPED (This tes...) [ 3%] 144s tests/test_attribute_proxy.py::test_event[Gevent] SKIPPED (This test...) [ 3%] 144s tests/test_attribute_proxy.py::test_event[Asyncio] SKIPPED (This tes...) [ 3%] 144s tests/test_attributes.py::test_read_write_attribute[int-Synchronous] PASSED [ 4%] 144s tests/test_attributes.py::test_read_write_attribute[int-Asyncio] PASSED [ 4%] 144s tests/test_attributes.py::test_read_write_attribute[int-Gevent] PASSED [ 4%] 144s tests/test_attributes.py::test_read_write_attribute[float-Synchronous] PASSED [ 4%] 144s tests/test_attributes.py::test_read_write_attribute[float-Asyncio] PASSED [ 4%] 144s tests/test_attributes.py::test_read_write_attribute[float-Gevent] PASSED [ 4%] 144s tests/test_attributes.py::test_read_write_attribute[str-Synchronous] PASSED [ 4%] 144s tests/test_attributes.py::test_read_write_attribute[str-Asyncio] PASSED [ 4%] 144s tests/test_attributes.py::test_read_write_attribute[str-Gevent] PASSED [ 4%] 144s tests/test_attributes.py::test_read_write_attribute[bool-Synchronous] PASSED [ 4%] 144s tests/test_attributes.py::test_read_write_attribute[bool-Asyncio] PASSED [ 4%] 144s tests/test_attributes.py::test_read_write_attribute[bool-Gevent] PASSED [ 4%] 144s tests/test_attributes.py::test_read_write_attribute[(int,)-Synchronous] PASSED [ 5%] 144s tests/test_attributes.py::test_read_write_attribute[(int,)-Asyncio] PASSED [ 5%] 144s tests/test_attributes.py::test_read_write_attribute[(int,)-Gevent] PASSED [ 5%] 144s tests/test_attributes.py::test_read_write_attribute[(float,)-Synchronous] PASSED [ 5%] 144s tests/test_attributes.py::test_read_write_attribute[(float,)-Asyncio] PASSED [ 5%] 144s tests/test_attributes.py::test_read_write_attribute[(float,)-Gevent] PASSED [ 5%] 144s tests/test_attributes.py::test_read_write_attribute[(str,)-Synchronous] PASSED [ 5%] 145s tests/test_attributes.py::test_read_write_attribute[(str,)-Asyncio] PASSED [ 5%] 145s tests/test_attributes.py::test_read_write_attribute[(str,)-Gevent] PASSED [ 5%] 145s tests/test_attributes.py::test_read_write_attribute[(bool,)-Synchronous] PASSED [ 5%] 145s tests/test_attributes.py::test_read_write_attribute[(bool,)-Asyncio] PASSED [ 5%] 145s tests/test_attributes.py::test_read_write_attribute[(bool,)-Gevent] PASSED [ 5%] 145s tests/test_attributes.py::test_read_write_attribute[((int,),)-Synchronous] PASSED [ 6%] 145s tests/test_attributes.py::test_read_write_attribute[((int,),)-Asyncio] PASSED [ 6%] 145s tests/test_attributes.py::test_read_write_attribute[((int,),)-Gevent] PASSED [ 6%] 145s tests/test_attributes.py::test_read_write_attribute[((float,),)-Synchronous] PASSED [ 6%] 145s tests/test_attributes.py::test_read_write_attribute[((float,),)-Asyncio] PASSED [ 6%] 145s tests/test_attributes.py::test_read_write_attribute[((float,),)-Gevent] PASSED [ 6%] 145s tests/test_attributes.py::test_read_write_attribute[((str,),)-Synchronous] PASSED [ 6%] 145s tests/test_attributes.py::test_read_write_attribute[((str,),)-Asyncio] PASSED [ 6%] 145s tests/test_attributes.py::test_read_write_attribute[((str,),)-Gevent] PASSED [ 6%] 145s tests/test_attributes.py::test_read_write_attribute[((bool,),)-Synchronous] PASSED [ 6%] 145s tests/test_attributes.py::test_read_write_attribute[((bool,),)-Asyncio] PASSED [ 6%] 145s tests/test_attributes.py::test_read_write_attribute[((bool,),)-Gevent] PASSED [ 7%] 145s tests/test_attributes.py::test_wrong_encoding_string PASSED [ 7%] 145s tests/test_attributes.py::test_attribute_declared_with_typing[int-True] PASSED [ 7%] 145s tests/test_attributes.py::test_attribute_declared_with_typing[int-False] PASSED [ 7%] 145s tests/test_attributes.py::test_attribute_declared_with_typing[float-True] PASSED [ 7%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[float-False] PASSED [ 7%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[str-True] PASSED [ 7%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[str-False] PASSED [ 7%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[bool-True] PASSED [ 7%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[bool-False] PASSED [ 7%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[(int,)-True] PASSED [ 7%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[(int,)-False] PASSED [ 7%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[(float,)-True] PASSED [ 8%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[(float,)-False] PASSED [ 8%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[(str,)-True] PASSED [ 8%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[(str,)-False] PASSED [ 8%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[(bool,)-True] PASSED [ 8%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[(bool,)-False] PASSED [ 8%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[((int,),)-True] PASSED [ 8%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[((int,),)-False] PASSED [ 8%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[((float,),)-True] PASSED [ 8%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[((float,),)-False] PASSED [ 8%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[((str,),)-True] PASSED [ 8%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[((str,),)-False] PASSED [ 8%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[((bool,),)-True] PASSED [ 9%] 146s tests/test_attributes.py::test_attribute_declared_with_typing[((bool,),)-False] PASSED [ 9%] 147s tests/test_attributes.py::test_attribute_self_typed_with_not_defined_name PASSED [ 9%] 147s tests/test_attributes.py::test_read_write_attribute_with_unbound_functions PASSED [ 9%] 147s tests/test_attributes.py::test_read_write_attribute_decorated_methods[Synchronous] PASSED [ 9%] 147s tests/test_attributes.py::test_read_write_attribute_decorated_methods[Asyncio] PASSED [ 9%] 147s tests/test_attributes.py::test_read_write_attribute_decorated_methods[Gevent] PASSED [ 9%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[int-True] PASSED [ 9%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[int-False] PASSED [ 9%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[float-True] PASSED [ 9%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[float-False] PASSED [ 9%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[str-True] PASSED [ 10%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[str-False] PASSED [ 10%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[bool-True] PASSED [ 10%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[bool-False] PASSED [ 10%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[(int,)-True] PASSED [ 10%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[(int,)-False] PASSED [ 10%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[(float,)-True] PASSED [ 10%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[(float,)-False] PASSED [ 10%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[(str,)-True] PASSED [ 10%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[(str,)-False] PASSED [ 10%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[(bool,)-True] PASSED [ 10%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[(bool,)-False] PASSED [ 10%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[((int,),)-True] PASSED [ 11%] 147s tests/test_attributes.py::test_read_write_wvalue_attribute[((int,),)-False] PASSED [ 11%] 148s tests/test_attributes.py::test_read_write_wvalue_attribute[((float,),)-True] PASSED [ 11%] 148s tests/test_attributes.py::test_read_write_wvalue_attribute[((float,),)-False] PASSED [ 11%] 148s tests/test_attributes.py::test_read_write_wvalue_attribute[((str,),)-True] PASSED [ 11%] 148s tests/test_attributes.py::test_read_write_wvalue_attribute[((str,),)-False] PASSED [ 11%] 148s tests/test_attributes.py::test_read_write_wvalue_attribute[((bool,),)-True] PASSED [ 11%] 148s tests/test_attributes.py::test_read_write_wvalue_attribute[((bool,),)-False] PASSED [ 11%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Numpy-float] PASSED [ 11%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Numpy-int] PASSED [ 11%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Numpy-str] PASSED [ 11%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Numpy-bool] PASSED [ 11%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Tuple-float] PASSED [ 12%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Tuple-int] PASSED [ 12%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Tuple-str] PASSED [ 12%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Tuple-bool] PASSED [ 12%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.List-float] PASSED [ 12%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.List-int] PASSED [ 12%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.List-str] PASSED [ 12%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.List-bool] PASSED [ 12%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Bytes-float] PASSED [ 12%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Bytes-int] PASSED [ 12%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Bytes-str] XFAIL [ 12%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Bytes-bool] PASSED [ 12%] 148s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.ByteArray-float] PASSED [ 13%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.ByteArray-int] PASSED [ 13%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.ByteArray-str] XFAIL [ 13%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.ByteArray-bool] PASSED [ 13%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.String-float] PASSED [ 13%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.String-int] PASSED [ 13%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.String-str] XFAIL [ 13%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.String-bool] PASSED [ 13%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-float-Device_4Impl] PASSED [ 13%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-float-Device_5Impl] PASSED [ 13%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-float-Device_6Impl] PASSED [ 13%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-float-LatestDeviceImpl] PASSED [ 14%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-int-Device_4Impl] PASSED [ 14%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-int-Device_5Impl] PASSED [ 14%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-int-Device_6Impl] PASSED [ 14%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-int-LatestDeviceImpl] PASSED [ 14%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-str-Device_4Impl] PASSED [ 14%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-str-Device_5Impl] PASSED [ 14%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-str-Device_6Impl] PASSED [ 14%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-str-LatestDeviceImpl] PASSED [ 14%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-bool-Device_4Impl] PASSED [ 14%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-bool-Device_5Impl] PASSED [ 14%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-bool-Device_6Impl] PASSED [ 14%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-bool-LatestDeviceImpl] PASSED [ 15%] 149s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-float-Device_4Impl] PASSED [ 15%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-float-Device_5Impl] PASSED [ 15%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-float-Device_6Impl] PASSED [ 15%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-float-LatestDeviceImpl] PASSED [ 15%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-int-Device_4Impl] PASSED [ 15%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-int-Device_5Impl] PASSED [ 15%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-int-Device_6Impl] PASSED [ 15%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-int-LatestDeviceImpl] PASSED [ 15%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-str-Device_4Impl] PASSED [ 15%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-str-Device_5Impl] PASSED [ 15%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-str-Device_6Impl] PASSED [ 15%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-str-LatestDeviceImpl] PASSED [ 16%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-bool-Device_4Impl] PASSED [ 16%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-bool-Device_5Impl] PASSED [ 16%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-bool-Device_6Impl] PASSED [ 16%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-bool-LatestDeviceImpl] PASSED [ 16%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-float-Device_4Impl] PASSED [ 16%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-float-Device_5Impl] PASSED [ 16%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-float-Device_6Impl] PASSED [ 16%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-float-LatestDeviceImpl] PASSED [ 16%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-int-Device_4Impl] PASSED [ 16%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-int-Device_5Impl] PASSED [ 16%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-int-Device_6Impl] PASSED [ 17%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-int-LatestDeviceImpl] PASSED [ 17%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-str-Device_4Impl] PASSED [ 17%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-str-Device_5Impl] PASSED [ 17%] 150s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-str-Device_6Impl] PASSED [ 17%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-str-LatestDeviceImpl] PASSED [ 17%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-bool-Device_4Impl] PASSED [ 17%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-bool-Device_5Impl] PASSED [ 17%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-bool-Device_6Impl] PASSED [ 17%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-bool-LatestDeviceImpl] PASSED [ 17%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-float-Device_4Impl] PASSED [ 17%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-float-Device_5Impl] PASSED [ 17%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-float-Device_6Impl] PASSED [ 18%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-float-LatestDeviceImpl] PASSED [ 18%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-int-Device_4Impl] PASSED [ 18%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-int-Device_5Impl] PASSED [ 18%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-int-Device_6Impl] PASSED [ 18%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-int-LatestDeviceImpl] PASSED [ 18%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-str-Device_4Impl] XFAIL [ 18%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-str-Device_5Impl] XFAIL [ 18%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-str-Device_6Impl] XFAIL [ 18%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-str-LatestDeviceImpl] XFAIL [ 18%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-bool-Device_4Impl] PASSED [ 18%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-bool-Device_5Impl] PASSED [ 18%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-bool-Device_6Impl] PASSED [ 19%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-bool-LatestDeviceImpl] PASSED [ 19%] 151s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-float-Device_4Impl] PASSED [ 19%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-float-Device_5Impl] PASSED [ 19%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-float-Device_6Impl] PASSED [ 19%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-float-LatestDeviceImpl] PASSED [ 19%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-int-Device_4Impl] PASSED [ 19%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-int-Device_5Impl] PASSED [ 19%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-int-Device_6Impl] PASSED [ 19%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-int-LatestDeviceImpl] PASSED [ 19%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-str-Device_4Impl] XFAIL [ 19%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-str-Device_5Impl] XFAIL [ 20%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-str-Device_6Impl] XFAIL [ 20%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-str-LatestDeviceImpl] XFAIL [ 20%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-bool-Device_4Impl] PASSED [ 20%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-bool-Device_5Impl] PASSED [ 20%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-bool-Device_6Impl] PASSED [ 20%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-bool-LatestDeviceImpl] PASSED [ 20%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-float-Device_4Impl] PASSED [ 20%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-float-Device_5Impl] PASSED [ 20%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-float-Device_6Impl] PASSED [ 20%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-float-LatestDeviceImpl] PASSED [ 20%] 152s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-int-Device_4Impl] PASSED [ 20%] 153s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-int-Device_5Impl] PASSED [ 21%] 153s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-int-Device_6Impl] PASSED [ 21%] 153s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-int-LatestDeviceImpl] PASSED [ 21%] 153s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-str-Device_4Impl] XFAIL [ 21%] 153s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-str-Device_5Impl] XFAIL [ 21%] 153s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-str-Device_6Impl] XFAIL [ 21%] 153s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-str-LatestDeviceImpl] XFAIL [ 21%] 153s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-bool-Device_4Impl] PASSED [ 21%] 153s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-bool-Device_5Impl] PASSED [ 21%] 153s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-bool-Device_6Impl] PASSED [ 21%] 153s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-bool-LatestDeviceImpl] PASSED [ 21%] 153s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SCALAR-state] PASSED [ 21%] 153s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SCALAR-DevState0] PASSED [ 22%] 153s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SCALAR-DevState1] PASSED [ 22%] 153s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SPECTRUM-state] PASSED [ 22%] 153s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SPECTRUM-DevState0] PASSED [ 22%] 153s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SPECTRUM-DevState1] PASSED [ 22%] 153s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[IMAGE-state] PASSED [ 22%] 153s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[IMAGE-DevState0] PASSED [ 22%] 153s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[IMAGE-DevState1] PASSED [ 22%] 154s tests/test_attributes.py::test_read_write_attribute_enum[SCALAR] PASSED [ 22%] 154s tests/test_attributes.py::test_read_write_attribute_enum[SPECTRUM] PASSED [ 22%] 154s tests/test_attributes.py::test_read_write_attribute_enum[IMAGE] PASSED [ 22%] 154s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[SCALAR-DevState] PASSED [ 22%] 154s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[SCALAR-GoodEnum] PASSED [ 23%] 154s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[SPECTRUM-DevState] PASSED [ 23%] 154s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[SPECTRUM-GoodEnum] PASSED [ 23%] 154s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[IMAGE-DevState] PASSED [ 23%] 154s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[IMAGE-GoodEnum] PASSED [ 23%] 154s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[int] PASSED [ 23%] 154s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[float] PASSED [ 23%] 154s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[str] PASSED [ 23%] 154s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[bool] PASSED [ 23%] 154s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[(int,)] PASSED [ 23%] 154s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[(float,)] PASSED [ 23%] 154s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[(str,)] PASSED [ 24%] 154s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[(bool,)] PASSED [ 24%] 154s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[((int,),)] PASSED [ 24%] 154s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[((float,),)] PASSED [ 24%] 154s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[((str,),)] PASSED [ 24%] 154s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[((bool,),)] PASSED [ 24%] 154s tests/test_attributes.py::test_read_enum_attribute_with_invalid_quality_is_none PASSED [ 24%] 154s tests/test_attributes.py::test_wrong_attribute_read PASSED [ 24%] 155s tests/test_attributes.py::test_attribute_access_with_default_method_names PASSED [ 24%] 155s tests/test_attributes.py::test_read_write_dynamic_attribute[low_level_read-Synchronous] PASSED [ 24%] 155s tests/test_attributes.py::test_read_write_dynamic_attribute[low_level_read-Asyncio] PASSED [ 24%] 155s tests/test_attributes.py::test_read_write_dynamic_attribute[low_level_read-Gevent] PASSED [ 24%] 155s tests/test_attributes.py::test_read_write_dynamic_attribute[high_level_read-Synchronous] PASSED [ 25%] 155s tests/test_attributes.py::test_read_write_dynamic_attribute[high_level_read-Asyncio] PASSED [ 25%] 155s tests/test_attributes.py::test_read_write_dynamic_attribute[high_level_read-Gevent] PASSED [ 25%] 155s tests/test_attributes.py::test_async_add_remove_dynamic_attribute PASSED [ 25%] 155s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[int] PASSED [ 25%] 155s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[float] PASSED [ 25%] 155s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[str] PASSED [ 25%] 155s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[bool] PASSED [ 25%] 155s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[(int,)] PASSED [ 25%] 155s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[(float,)] PASSED [ 25%] 155s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[(str,)] PASSED [ 25%] 155s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[(bool,)] PASSED [ 25%] 155s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[((int,),)] PASSED [ 26%] 155s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[((float,),)] PASSED [ 26%] 155s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[((str,),)] PASSED [ 26%] 155s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[((bool,),)] PASSED [ 26%] 155s tests/test_attributes.py::test_dynamic_attribute_self_typed_with_not_defined_name PASSED [ 26%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[bool, SCALAR] PASSED [ 26%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[bool], SPECTRUM] PASSED [ 26%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[uint8, SCALAR] PASSED [ 26%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[uint8], SPECTRUM] PASSED [ 26%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[int16, SCALAR] PASSED [ 26%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[int16], SPECTRUM] PASSED [ 26%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[uint16, SCALAR] PASSED [ 27%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[uint16], SPECTRUM] PASSED [ 27%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[int32, SCALAR] PASSED [ 27%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[int32], SPECTRUM] PASSED [ 27%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[uint32, SCALAR] PASSED [ 27%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[uint32], SPECTRUM] PASSED [ 27%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[int64, SCALAR] PASSED [ 27%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[int64], SPECTRUM] PASSED [ 27%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[uint64, SCALAR] PASSED [ 27%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[uint64], SPECTRUM] PASSED [ 27%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[float64, SCALAR] PASSED [ 27%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[float64], SPECTRUM] PASSED [ 27%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[float32, SCALAR] PASSED [ 28%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[float32], SPECTRUM] PASSED [ 28%] 156s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[bool], IMAGE] PASSED [ 28%] 157s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[uint8], IMAGE] PASSED [ 28%] 157s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[int16], IMAGE] PASSED [ 28%] 157s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[uint16], IMAGE] PASSED [ 28%] 157s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[int32], IMAGE] PASSED [ 28%] 157s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[uint32], IMAGE] PASSED [ 28%] 157s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[int64], IMAGE] PASSED [ 28%] 157s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[uint64], IMAGE] PASSED [ 28%] 157s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[float64], IMAGE] PASSED [ 28%] 157s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[float32], IMAGE] PASSED [ 28%] 157s tests/test_attributes.py::test_attribute_wrong_declared_with_numpy_typing[RuntimeError: AttrDataFormat has to be specified] PASSED [ 29%] 157s tests/test_attributes.py::test_attribute_wrong_declared_with_numpy_typing[DevFailed: Maximum y dim. wrongly defined] PASSED [ 29%] 157s tests/test_attributes.py::test_attribute_wrong_declared_with_numpy_typing[TypeError: No registered converter] PASSED [ 29%] 157s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_default_names[Synchronous] PASSED [ 29%] 157s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_default_names[Asyncio] PASSED [ 29%] 157s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_default_names[Gevent] PASSED [ 29%] 157s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_user_names[Synchronous] PASSED [ 29%] 157s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_user_names[Asyncio] PASSED [ 29%] 157s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_user_names[Gevent] PASSED [ 29%] 157s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_shared_user_functions PASSED [ 29%] 157s tests/test_attributes.py::test_read_write_dynamic_attribute_enum[SCALAR] PASSED [ 29%] 157s tests/test_attributes.py::test_read_write_dynamic_attribute_enum[SPECTRUM] PASSED [ 30%] 157s tests/test_attributes.py::test_read_write_dynamic_attribute_enum[IMAGE] PASSED [ 30%] 157s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[SCALAR-DevState] PASSED [ 30%] 158s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[SCALAR-GoodEnum] PASSED [ 30%] 158s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[SPECTRUM-DevState] PASSED [ 30%] 158s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[SPECTRUM-GoodEnum] PASSED [ 30%] 158s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[IMAGE-DevState] PASSED [ 30%] 158s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[IMAGE-GoodEnum] PASSED [ 30%] 158s tests/test_attributes.py::test_read_write_dynamic_attribute_is_allowed_with_async[Synchronous] PASSED [ 30%] 158s tests/test_attributes.py::test_read_write_dynamic_attribute_is_allowed_with_async[Asyncio] PASSED [ 30%] 158s tests/test_attributes.py::test_read_write_dynamic_attribute_is_allowed_with_async[Gevent] PASSED [ 30%] 158s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Synchronous-True] PASSED [ 30%] 158s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Synchronous-False] PASSED [ 31%] 158s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Asyncio-True] PASSED [ 31%] 158s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Asyncio-False] PASSED [ 31%] 158s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Gevent-True] PASSED [ 31%] 158s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Gevent-False] PASSED [ 31%] 158s tests/test_attributes.py::test_dynamic_attribute_using_classic_api_like_sardana[Device_4Impl] PASSED [ 31%] 158s tests/test_attributes.py::test_dynamic_attribute_using_classic_api_like_sardana[Device_5Impl] PASSED [ 31%] 158s tests/test_attributes.py::test_dynamic_attribute_using_classic_api_like_sardana[Device_6Impl] PASSED [ 31%] 158s tests/test_attributes.py::test_dynamic_attribute_using_classic_api_like_sardana[LatestDeviceImpl] PASSED [ 31%] 158s tests/test_attributes.py::test_dynamic_attribute_with_unbound_functions[True-low_level] PASSED [ 31%] 158s tests/test_attributes.py::test_dynamic_attribute_with_unbound_functions[True-high_level] PASSED [ 31%] 159s tests/test_attributes.py::test_dynamic_attribute_with_unbound_functions[False-low_level] PASSED [ 31%] 159s tests/test_attributes.py::test_dynamic_attribute_with_unbound_functions[False-high_level] PASSED [ 32%] 159s tests/test_attributes.py::test_attribute_decorators[Synchronous] PASSED [ 32%] 159s tests/test_attributes.py::test_attribute_decorators[Asyncio] PASSED [ 32%] 159s tests/test_attributes.py::test_attribute_decorators[Gevent] PASSED [ 32%] 159s tests/test_attributes.py::test_attribute_info_description PASSED [ 32%] 159s tests/test_attributes.py::test_read_only_dynamic_attribute_with_dummy_write_method[low_level_read] PASSED [ 32%] 159s tests/test_attributes.py::test_read_only_dynamic_attribute_with_dummy_write_method[high_level_read] PASSED [ 32%] 159s tests/test_attributes.py::test_dynamic_attribute_with_method_in_other_class PASSED [ 32%] 159s tests/test_attributes.py::test_polled_attribute[Synchronous] PASSED [ 32%] 159s tests/test_attributes.py::test_polled_attribute[Asyncio] PASSED [ 32%] 159s tests/test_attributes.py::test_polled_attribute[Gevent] PASSED [ 32%] 159s tests/test_attributes.py::test_read_write_dev_encoded[str] PASSED [ 32%] 159s tests/test_attributes.py::test_read_write_dev_encoded[bytes] PASSED [ 33%] 159s tests/test_attributes.py::test_read_write_dev_encoded[bytearray] PASSED [ 33%] 159s tests/test_attributes.py::test_dev_encoded_wrong_encoding PASSED [ 33%] 159s tests/test_attributes.py::test_set_value_None PASSED [ 33%] 159s tests/test_attributes.py::test_encoded_attribute[gray8] PASSED [ 33%] 159s tests/test_attributes.py::test_encoded_attribute[gray16] PASSED [ 33%] 159s tests/test_attributes.py::test_encoded_attribute[rgb24] PASSED [ 33%] 159s tests/test_attributes.py::test_encoded_attribute[jpeg_gray8] PASSED [ 33%] 160s tests/test_attributes.py::test_encoded_attribute[jpeg_rgb24] PASSED [ 33%] 160s tests/test_attributes.py::test_encoded_attribute[jpeg_rgb32] XFAIL (...) [ 33%] 162s tests/test_attributes.py::test_dev_encoded_memory_usage PASSED [ 33%] 162s tests/test_attributes.py::test_attribute_list PASSED [ 34%] 163s tests/test_auto_tango_allow_threads.py::test_dont_crash_with_nested_tango_allow_threads PASSED [ 34%] 163s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_DEVICE-True] PASSED [ 34%] 166s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_DEVICE-False] PASSED [ 34%] 166s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_CLASS-True] XFAIL [ 34%] 169s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_CLASS-False] PASSED [ 34%] 169s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_PROCESS-True] XFAIL [ 34%] 172s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_PROCESS-False] PASSED [ 34%] 172s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-NO_SYNC-True] PASSED [ 34%] 172s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-NO_SYNC-False] PASSED [ 34%] 173s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_DEVICE-True] PASSED [ 34%] 176s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_DEVICE-False] PASSED [ 34%] 176s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_CLASS-True] XFAIL [ 35%] 179s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_CLASS-False] PASSED [ 35%] 179s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_PROCESS-True] XFAIL [ 35%] 182s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_PROCESS-False] PASSED [ 35%] 182s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-NO_SYNC-True] PASSED [ 35%] 182s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-NO_SYNC-False] PASSED [ 35%] 183s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_DEVICE-True] PASSED [ 35%] 186s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_DEVICE-False] PASSED [ 35%] 186s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_CLASS-True] XFAIL [ 35%] 189s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_CLASS-False] PASSED [ 35%] 189s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_PROCESS-True] XFAIL [ 35%] 192s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_PROCESS-False] PASSED [ 35%] 192s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-NO_SYNC-True] PASSED [ 36%] 192s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-NO_SYNC-False] PASSED [ 36%] 196s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_DEVICE-True] PASSED [ 36%] 199s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_DEVICE-False] PASSED [ 36%] 202s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_CLASS-True] PASSED [ 36%] 205s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_CLASS-False] PASSED [ 36%] 209s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_PROCESS-True] PASSED [ 36%] 212s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_PROCESS-False] PASSED [ 36%] 212s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-NO_SYNC-True] PASSED [ 36%] 212s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-NO_SYNC-False] PASSED [ 36%] 215s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_DEVICE-True] PASSED [ 36%] 219s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_DEVICE-False] PASSED [ 37%] 222s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_CLASS-True] PASSED [ 37%] 225s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_CLASS-False] PASSED [ 37%] 228s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_PROCESS-True] PASSED [ 37%] 231s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_PROCESS-False] PASSED [ 37%] 232s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-NO_SYNC-True] PASSED [ 37%] 232s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-NO_SYNC-False] PASSED [ 37%] 235s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_DEVICE-True] PASSED [ 37%] 238s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_DEVICE-False] PASSED [ 37%] 241s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_CLASS-True] PASSED [ 37%] 245s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_CLASS-False] PASSED [ 37%] 248s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_PROCESS-True] PASSED [ 37%] 251s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_PROCESS-False] PASSED [ 38%] 251s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-NO_SYNC-True] PASSED [ 38%] 251s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-NO_SYNC-False] PASSED [ 38%] 251s tests/test_commands.py::test_identity_command[int-Synchronous] PASSED [ 38%] 251s tests/test_commands.py::test_identity_command[int-Asyncio] PASSED [ 38%] 251s tests/test_commands.py::test_identity_command[int-Gevent] PASSED [ 38%] 251s tests/test_commands.py::test_identity_command[float-Synchronous] PASSED [ 38%] 251s tests/test_commands.py::test_identity_command[float-Asyncio] PASSED [ 38%] 251s tests/test_commands.py::test_identity_command[float-Gevent] PASSED [ 38%] 251s tests/test_commands.py::test_identity_command[str-Synchronous] PASSED [ 38%] 251s tests/test_commands.py::test_identity_command[str-Asyncio] PASSED [ 38%] 252s tests/test_commands.py::test_identity_command[str-Gevent] PASSED [ 38%] 252s tests/test_commands.py::test_identity_command[bool-Synchronous] PASSED [ 39%] 252s tests/test_commands.py::test_identity_command[bool-Asyncio] PASSED [ 39%] 252s tests/test_commands.py::test_identity_command[bool-Gevent] PASSED [ 39%] 252s tests/test_commands.py::test_identity_command[(int,)-Synchronous] PASSED [ 39%] 252s tests/test_commands.py::test_identity_command[(int,)-Asyncio] PASSED [ 39%] 252s tests/test_commands.py::test_identity_command[(int,)-Gevent] PASSED [ 39%] 252s tests/test_commands.py::test_identity_command[(float,)-Synchronous] PASSED [ 39%] 252s tests/test_commands.py::test_identity_command[(float,)-Asyncio] PASSED [ 39%] 252s tests/test_commands.py::test_identity_command[(float,)-Gevent] PASSED [ 39%] 252s tests/test_commands.py::test_identity_command[(str,)-Synchronous] PASSED [ 39%] 252s tests/test_commands.py::test_identity_command[(str,)-Asyncio] PASSED [ 39%] 252s tests/test_commands.py::test_identity_command[(str,)-Gevent] PASSED [ 40%] 252s tests/test_commands.py::test_identity_command[(bool,)-Synchronous] XFAIL [ 40%] 252s tests/test_commands.py::test_identity_command[(bool,)-Asyncio] XFAIL [ 40%] 252s tests/test_commands.py::test_identity_command[(bool,)-Gevent] XFAIL [ 40%] 252s tests/test_commands.py::test_identity_command[DevVarLongStringArray-Synchronous] PASSED [ 40%] 252s tests/test_commands.py::test_identity_command[DevVarLongStringArray-Asyncio] PASSED [ 40%] 252s tests/test_commands.py::test_identity_command[DevVarLongStringArray-Gevent] PASSED [ 40%] 252s tests/test_commands.py::test_identity_command[DevVarDoubleStringArray-Synchronous] PASSED [ 40%] 252s tests/test_commands.py::test_identity_command[DevVarDoubleStringArray-Asyncio] PASSED [ 40%] 252s tests/test_commands.py::test_identity_command[DevVarDoubleStringArray-Gevent] PASSED [ 40%] 252s tests/test_commands.py::test_identity_command_with_typing[int] PASSED [ 40%] 252s tests/test_commands.py::test_identity_command_with_typing[float] PASSED [ 40%] 253s tests/test_commands.py::test_identity_command_with_typing[str] PASSED [ 41%] 253s tests/test_commands.py::test_identity_command_with_typing[bool] PASSED [ 41%] 253s tests/test_commands.py::test_identity_command_with_typing[(int,)] PASSED [ 41%] 253s tests/test_commands.py::test_identity_command_with_typing[(float,)] PASSED [ 41%] 253s tests/test_commands.py::test_identity_command_with_typing[(str,)] PASSED [ 41%] 253s tests/test_commands.py::test_identity_command_with_typing[(bool,)] XFAIL [ 41%] 253s tests/test_commands.py::test_identity_command_with_typing[DevVarLongStringArray] PASSED [ 41%] 253s tests/test_commands.py::test_identity_command_with_typing[DevVarDoubleStringArray] PASSED [ 41%] 253s tests/test_commands.py::test_devstate_command_with_typing PASSED [ 41%] 253s tests/test_commands.py::test_command_self_typed_with_not_defined_name PASSED [ 41%] 253s tests/test_commands.py::test_decorated_command[Synchronous] PASSED [ 41%] 253s tests/test_commands.py::test_decorated_command[Asyncio] PASSED [ 41%] 253s tests/test_commands.py::test_decorated_command[Gevent] PASSED [ 42%] 253s tests/test_commands.py::test_command_isallowed[Synchronous] PASSED [ 42%] 253s tests/test_commands.py::test_command_isallowed[Asyncio] PASSED [ 42%] 253s tests/test_commands.py::test_command_isallowed[Gevent] PASSED [ 42%] 253s tests/test_commands.py::test_dynamic_command[Synchronous-True] PASSED [ 42%] 253s tests/test_commands.py::test_dynamic_command[Synchronous-False] PASSED [ 42%] 253s tests/test_commands.py::test_dynamic_command[Asyncio-True] PASSED [ 42%] 253s tests/test_commands.py::test_dynamic_command[Asyncio-False] PASSED [ 42%] 253s tests/test_commands.py::test_dynamic_command[Gevent-True] PASSED [ 42%] 253s tests/test_commands.py::test_dynamic_command[Gevent-False] PASSED [ 42%] 254s tests/test_commands.py::test_identity_dynamic_command_with_typing[int] PASSED [ 42%] 254s tests/test_commands.py::test_identity_dynamic_command_with_typing[float] PASSED [ 42%] 254s tests/test_commands.py::test_identity_dynamic_command_with_typing[str] PASSED [ 43%] 254s tests/test_commands.py::test_identity_dynamic_command_with_typing[bool] PASSED [ 43%] 254s tests/test_commands.py::test_identity_dynamic_command_with_typing[(int,)] PASSED [ 43%] 254s tests/test_commands.py::test_identity_dynamic_command_with_typing[(float,)] PASSED [ 43%] 254s tests/test_commands.py::test_identity_dynamic_command_with_typing[(str,)] PASSED [ 43%] 254s tests/test_commands.py::test_identity_dynamic_command_with_typing[(bool,)] XFAIL [ 43%] 254s tests/test_commands.py::test_identity_dynamic_command_with_typing[DevVarLongStringArray] PASSED [ 43%] 254s tests/test_commands.py::test_identity_dynamic_command_with_typing[DevVarDoubleStringArray] PASSED [ 43%] 254s tests/test_commands.py::test_identity_commands_with_numpy_typing[bool, SCALAR] PASSED [ 43%] 254s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[bool], SPECTRUM] PASSED [ 43%] 254s tests/test_commands.py::test_identity_commands_with_numpy_typing[uint8, SCALAR] XFAIL [ 43%] 254s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[uint8], SPECTRUM] PASSED [ 44%] 254s tests/test_commands.py::test_identity_commands_with_numpy_typing[int16, SCALAR] PASSED [ 44%] 254s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[int16], SPECTRUM] PASSED [ 44%] 254s tests/test_commands.py::test_identity_commands_with_numpy_typing[uint16, SCALAR] PASSED [ 44%] 254s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[uint16], SPECTRUM] PASSED [ 44%] 254s tests/test_commands.py::test_identity_commands_with_numpy_typing[int32, SCALAR] PASSED [ 44%] 254s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[int32], SPECTRUM] PASSED [ 44%] 254s tests/test_commands.py::test_identity_commands_with_numpy_typing[uint32, SCALAR] PASSED [ 44%] 254s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[uint32], SPECTRUM] PASSED [ 44%] 255s tests/test_commands.py::test_identity_commands_with_numpy_typing[int64, SCALAR] PASSED [ 44%] 255s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[int64], SPECTRUM] PASSED [ 44%] 255s tests/test_commands.py::test_identity_commands_with_numpy_typing[uint64, SCALAR] PASSED [ 44%] 255s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[uint64], SPECTRUM] PASSED [ 45%] 255s tests/test_commands.py::test_identity_commands_with_numpy_typing[float64, SCALAR] PASSED [ 45%] 255s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[float64], SPECTRUM] PASSED [ 45%] 255s tests/test_commands.py::test_identity_commands_with_numpy_typing[float32, SCALAR] PASSED [ 45%] 255s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[float32], SPECTRUM] PASSED [ 45%] 255s tests/test_commands.py::test_polled_command PASSED [ 45%] 255s tests/test_commands.py::test_wrong_command_result PASSED [ 45%] 255s tests/test_commands.py::test_command_info PASSED [ 45%] 255s tests/test_database.py::test_put_remove_attribute_properties PASSED [ 45%] 255s tests/test_databaseds.py::test_ping SKIPPED (This test is failing wh...) [ 45%] 255s tests/test_databaseds.py::test_status SKIPPED (This test is failing ...) [ 45%] 255s tests/test_databaseds.py::test_state SKIPPED (This test is failing w...) [ 45%] 255s tests/test_databaseds.py::test_device_property SKIPPED (This test is...) [ 46%] 255s tests/test_databaseds.py::test_info SKIPPED (This test is failing wh...) [ 46%] 255s tests/test_device_proxy.py::test_ping PASSED [ 46%] 255s tests/test_device_proxy.py::test_info PASSED [ 46%] 255s tests/test_device_proxy.py::test_read_attribute[State] PASSED [ 46%] 255s tests/test_device_proxy.py::test_read_attribute[Status] PASSED [ 46%] 255s tests/test_device_proxy.py::test_read_attribute[ampli] PASSED [ 46%] 256s tests/test_device_proxy.py::test_read_attribute[boolean_image] PASSED [ 46%] 256s tests/test_device_proxy.py::test_read_attribute[boolean_image_ro] PASSED [ 46%] 256s tests/test_device_proxy.py::test_read_attribute[boolean_scalar] PASSED [ 46%] 256s tests/test_device_proxy.py::test_read_attribute[boolean_spectrum] PASSED [ 46%] 256s tests/test_device_proxy.py::test_read_attribute[boolean_spectrum_ro] PASSED [ 47%] 256s tests/test_device_proxy.py::test_read_attribute[double_image] PASSED [ 47%] 256s tests/test_device_proxy.py::test_read_attribute[double_image_ro] PASSED [ 47%] 256s tests/test_device_proxy.py::test_read_attribute[double_scalar] PASSED [ 47%] 256s tests/test_device_proxy.py::test_read_attribute[double_scalar_rww] PASSED [ 47%] 256s tests/test_device_proxy.py::test_read_attribute[double_scalar_w] PASSED [ 47%] 256s tests/test_device_proxy.py::test_read_attribute[double_spectrum] PASSED [ 47%] 256s tests/test_device_proxy.py::test_read_attribute[double_spectrum_ro] PASSED [ 47%] 257s tests/test_device_proxy.py::test_read_attribute[echo_mode] SKIPPED (...) [ 47%] 257s tests/test_device_proxy.py::test_read_attribute[enum_image] PASSED [ 47%] 257s tests/test_device_proxy.py::test_read_attribute[enum_image_ro] PASSED [ 47%] 257s tests/test_device_proxy.py::test_read_attribute[enum_scalar] PASSED [ 47%] 257s tests/test_device_proxy.py::test_read_attribute[enum_scalar_ro] PASSED [ 48%] 257s tests/test_device_proxy.py::test_read_attribute[enum_spectrum] PASSED [ 48%] 257s tests/test_device_proxy.py::test_read_attribute[enum_spectrum_ro] PASSED [ 48%] 257s tests/test_device_proxy.py::test_read_attribute[float_image] PASSED [ 48%] 257s tests/test_device_proxy.py::test_read_attribute[float_image_ro] PASSED [ 48%] 257s tests/test_device_proxy.py::test_read_attribute[float_scalar] PASSED [ 48%] 257s tests/test_device_proxy.py::test_read_attribute[float_spectrum] PASSED [ 48%] 257s tests/test_device_proxy.py::test_read_attribute[float_spectrum_ro] PASSED [ 48%] 258s tests/test_device_proxy.py::test_read_attribute[freq] PASSED [ 48%] 258s tests/test_device_proxy.py::test_read_attribute[long64_image_ro] PASSED [ 48%] 258s tests/test_device_proxy.py::test_read_attribute[long64_scalar] PASSED [ 48%] 258s tests/test_device_proxy.py::test_read_attribute[long64_spectrum_ro] PASSED [ 48%] 258s tests/test_device_proxy.py::test_read_attribute[long_image] PASSED [ 49%] 258s tests/test_device_proxy.py::test_read_attribute[long_image_ro] PASSED [ 49%] 258s tests/test_device_proxy.py::test_read_attribute[long_scalar] PASSED [ 49%] 258s tests/test_device_proxy.py::test_read_attribute[long_scalar_rww] PASSED [ 49%] 258s tests/test_device_proxy.py::test_read_attribute[long_scalar_w] PASSED [ 49%] 258s tests/test_device_proxy.py::test_read_attribute[long_spectrum] PASSED [ 49%] 258s tests/test_device_proxy.py::test_read_attribute[long_spectrum_ro] PASSED [ 49%] 258s tests/test_device_proxy.py::test_read_attribute[short_image] PASSED [ 49%] 259s tests/test_device_proxy.py::test_read_attribute[short_image_ro] PASSED [ 49%] 259s tests/test_device_proxy.py::test_read_attribute[short_scalar] PASSED [ 49%] 259s tests/test_device_proxy.py::test_read_attribute[short_scalar_ro] PASSED [ 49%] 259s tests/test_device_proxy.py::test_read_attribute[short_scalar_rww] PASSED [ 50%] 259s tests/test_device_proxy.py::test_read_attribute[short_scalar_w] PASSED [ 50%] 259s tests/test_device_proxy.py::test_read_attribute[short_spectrum] PASSED [ 50%] 259s tests/test_device_proxy.py::test_read_attribute[short_spectrum_ro] PASSED [ 50%] 259s tests/test_device_proxy.py::test_read_attribute[string_image] PASSED [ 50%] 259s tests/test_device_proxy.py::test_read_attribute[string_image_ro] XFAIL [ 50%] 259s tests/test_device_proxy.py::test_read_attribute[string_scalar] PASSED [ 50%] 260s tests/test_device_proxy.py::test_read_attribute[string_spectrum] PASSED [ 50%] 260s tests/test_device_proxy.py::test_read_attribute[string_spectrum_ro] XFAIL [ 50%] 260s tests/test_device_proxy.py::test_read_attribute[uchar_image] PASSED [ 50%] 260s tests/test_device_proxy.py::test_read_attribute[uchar_image_ro] PASSED [ 50%] 260s tests/test_device_proxy.py::test_read_attribute[uchar_scalar] PASSED [ 50%] 260s tests/test_device_proxy.py::test_read_attribute[uchar_spectrum] PASSED [ 51%] 260s tests/test_device_proxy.py::test_read_attribute[uchar_spectrum_ro] PASSED [ 51%] 260s tests/test_device_proxy.py::test_read_attribute[ulong64_image_ro] PASSED [ 51%] 260s tests/test_device_proxy.py::test_read_attribute[ulong64_scalar] PASSED [ 51%] 260s tests/test_device_proxy.py::test_read_attribute[ulong64_spectrum_ro] PASSED [ 51%] 260s tests/test_device_proxy.py::test_read_attribute[ulong_image_ro] PASSED [ 51%] 260s tests/test_device_proxy.py::test_read_attribute[ulong_scalar] PASSED [ 51%] 261s tests/test_device_proxy.py::test_read_attribute[ulong_spectrum_ro] PASSED [ 51%] 261s tests/test_device_proxy.py::test_read_attribute[ushort_image] PASSED [ 51%] 261s tests/test_device_proxy.py::test_read_attribute[ushort_image_ro] PASSED [ 51%] 261s tests/test_device_proxy.py::test_read_attribute[ushort_scalar] PASSED [ 51%] 261s tests/test_device_proxy.py::test_read_attribute[ushort_spectrum] PASSED [ 51%] 261s tests/test_device_proxy.py::test_read_attribute[ushort_spectrum_ro] PASSED [ 52%] 261s tests/test_device_proxy.py::test_read_attribute[wave] PASSED [ 52%] 261s tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Synchronous] PASSED [ 52%] 261s tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Futures] PASSED [ 52%] 261s tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Gevent] PASSED [ 52%] 262s tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Asyncio] PASSED [ 52%] 262s tests/test_device_proxy.py::test_high_level_api_for_asyncio PASSED [ 52%] 262s tests/test_device_proxy.py::test_write_scalar_attribute[boolean_scalar] PASSED [ 52%] 262s tests/test_device_proxy.py::test_write_scalar_attribute[double_scalar] PASSED [ 52%] 262s tests/test_device_proxy.py::test_write_scalar_attribute[double_scalar_w] PASSED [ 52%] 262s tests/test_device_proxy.py::test_write_scalar_attribute[enum_scalar] XFAIL [ 52%] 262s tests/test_device_proxy.py::test_write_scalar_attribute[float_scalar] PASSED [ 52%] 262s tests/test_device_proxy.py::test_write_scalar_attribute[long64_scalar] PASSED [ 53%] 262s tests/test_device_proxy.py::test_write_scalar_attribute[long_scalar] PASSED [ 53%] 262s tests/test_device_proxy.py::test_write_scalar_attribute[long_scalar_w] PASSED [ 53%] 262s tests/test_device_proxy.py::test_write_scalar_attribute[short_scalar] PASSED [ 53%] 263s tests/test_device_proxy.py::test_write_scalar_attribute[short_scalar_w] PASSED [ 53%] 263s tests/test_device_proxy.py::test_write_scalar_attribute[string_scalar] PASSED [ 53%] 263s tests/test_device_proxy.py::test_write_scalar_attribute[uchar_scalar] XFAIL [ 53%] 263s tests/test_device_proxy.py::test_write_scalar_attribute[ulong64_scalar] PASSED [ 53%] 263s tests/test_device_proxy.py::test_write_scalar_attribute[ulong_scalar] PASSED [ 53%] 263s tests/test_device_proxy.py::test_write_scalar_attribute[ushort_scalar] PASSED [ 53%] 263s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.Numpy] PASSED [ 53%] 263s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.Tuple] PASSED [ 54%] 263s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.List] PASSED [ 54%] 263s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.Bytes] PASSED [ 54%] 263s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.ByteArray] PASSED [ 54%] 264s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.String] PASSED [ 54%] 264s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.Numpy] PASSED [ 54%] 264s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.Tuple] PASSED [ 54%] 264s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.List] PASSED [ 54%] 264s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.Bytes] PASSED [ 54%] 264s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.ByteArray] PASSED [ 54%] 264s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.String] PASSED [ 54%] 264s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.Numpy] XFAIL [ 54%] 264s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.Tuple] XFAIL [ 55%] 264s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.List] XFAIL [ 55%] 265s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.Bytes] XFAIL [ 55%] 265s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.ByteArray] XFAIL [ 55%] 265s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.String] XFAIL [ 55%] 265s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.Numpy] PASSED [ 55%] 265s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.Tuple] PASSED [ 55%] 265s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.List] PASSED [ 55%] 265s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.Bytes] PASSED [ 55%] 265s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.ByteArray] PASSED [ 55%] 265s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.String] PASSED [ 55%] 265s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.Numpy] PASSED [ 55%] 265s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.Tuple] PASSED [ 56%] 266s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.List] PASSED [ 56%] 266s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.Bytes] PASSED [ 56%] 266s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.ByteArray] PASSED [ 56%] 266s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.String] PASSED [ 56%] 266s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.Numpy] PASSED [ 56%] 266s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.Tuple] PASSED [ 56%] 266s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.List] PASSED [ 56%] 266s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.Bytes] PASSED [ 56%] 266s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.ByteArray] PASSED [ 56%] 266s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.String] PASSED [ 56%] 266s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.Numpy] PASSED [ 57%] 267s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.Tuple] PASSED [ 57%] 267s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.List] PASSED [ 57%] 274s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.Bytes] XFAIL [ 57%] 274s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.ByteArray] XFAIL [ 57%] 274s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.String] XFAIL [ 57%] 274s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.Numpy] XFAIL [ 57%] 274s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.Tuple] XFAIL [ 57%] 274s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.List] XFAIL [ 57%] 274s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.Bytes] XFAIL [ 57%] 274s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.ByteArray] XFAIL [ 57%] 274s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.String] XFAIL [ 57%] 274s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.Numpy] PASSED [ 58%] 274s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.Tuple] PASSED [ 58%] 274s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.List] PASSED [ 58%] 274s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.Bytes] PASSED [ 58%] 274s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.ByteArray] PASSED [ 58%] 274s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.String] PASSED [ 58%] 274s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[boolean_spectrum] PASSED [ 58%] 274s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[double_spectrum] PASSED [ 58%] 274s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[enum_spectrum] PASSED [ 58%] 274s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[float_spectrum] PASSED [ 58%] 274s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[long_spectrum] PASSED [ 58%] 274s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[short_spectrum] PASSED [ 58%] 274s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[string_spectrum] XFAIL [ 59%] 274s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[uchar_spectrum] PASSED [ 59%] 274s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[ushort_spectrum] PASSED [ 59%] 274s tests/test_device_proxy.py::test_write_read_string_attribute PASSED [ 59%] 274s tests/test_device_proxy.py::test_set_non_existent_attribute_raises_by_default PASSED [ 59%] 274s tests/test_device_proxy.py::test_set_non_existent_attribute_allowed_if_dynamic_interface_unfrozen PASSED [ 59%] 274s tests/test_device_proxy.py::test_dynamic_interface_can_be_toggled PASSED [ 59%] 274s tests/test_device_proxy.py::test_dynamic_interface_flag_can_be_read PASSED [ 59%] 274s tests/test_device_proxy.py::test_dynamic_interface_only_applies_to_device_proxy_instance PASSED [ 59%] 274s tests/test_device_proxy.py::test_dynamic_interface_unfreeze_generates_a_user_warning PASSED [ 59%] 274s tests/test_device_proxy.py::test_read_attribute_config SKIPPED (This...) [ 59%] 274s tests/test_device_proxy.py::test_read_attribute_config_ex PASSED [ 60%] 274s tests/test_device_proxy.py::test_attribute_list_query SKIPPED (This ...) [ 60%] 274s tests/test_device_proxy.py::test_attribute_list_query_ex SKIPPED (Th...) [ 60%] 274s tests/test_device_proxy.py::test_device_proxy_dir_method PASSED [ 60%] 274s tests/test_device_proxy.py::test_device_polling_command PASSED [ 60%] 274s tests/test_device_proxy.py::test_device_polling_attribute PASSED [ 60%] 274s tests/test_device_proxy.py::test_command_string PASSED [ 60%] 274s tests/test_device_proxy.py::test_command_raises_type_error_for_bad_input PASSED [ 60%] 274s tests/test_device_proxy.py::test_repr_uses_info[Synchronous] PASSED [ 60%] 274s tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Synchronous] PASSED [ 60%] 274s tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Synchronous] PASSED [ 60%] 274s tests/test_device_proxy.py::test_no_memory_leak_for_repr[Synchronous] PASSED [ 60%] 274s tests/test_device_proxy.py::test_no_memory_leak_for_str[Synchronous] PASSED [ 61%] 274s tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Synchronous] PASSED [ 61%] 274s tests/test_device_proxy.py::test_repr_uses_info[Futures] PASSED [ 61%] 274s tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Futures] PASSED [ 61%] 274s tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Futures] PASSED [ 61%] 274s tests/test_device_proxy.py::test_no_memory_leak_for_repr[Futures] PASSED [ 61%] 274s tests/test_device_proxy.py::test_no_memory_leak_for_str[Futures] PASSED [ 61%] 274s tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Futures] PASSED [ 61%] 274s tests/test_device_proxy.py::test_repr_uses_info[Gevent] PASSED [ 61%] 274s tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Gevent] PASSED [ 61%] 274s tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Gevent] PASSED [ 61%] 274s tests/test_device_proxy.py::test_no_memory_leak_for_repr[Gevent] PASSED [ 61%] 274s tests/test_device_proxy.py::test_no_memory_leak_for_str[Gevent] PASSED [ 62%] 274s tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Gevent] PASSED [ 62%] 274s tests/test_device_proxy.py::test_repr_uses_info[Asyncio] PASSED [ 62%] 274s tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Asyncio] PASSED [ 62%] 274s tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Asyncio] PASSED [ 62%] 274s tests/test_device_proxy.py::test_no_memory_leak_for_repr[Asyncio] PASSED [ 62%] 274s tests/test_device_proxy.py::test_no_memory_leak_for_str[Asyncio] PASSED [ 62%] 274s tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Asyncio] PASSED [ 62%] 274s tests/test_device_proxy.py::test_client_destructor_does_not_deadlock[group_client_lifecycle] SKIPPED [ 62%] 274s tests/test_device_proxy.py::test_client_destructor_does_not_deadlock[device_proxy_lifecycle] SKIPPED [ 62%] 274s tests/test_group.py::test_nested_multi_group PASSED [ 62%] 274s tests/test_group.py::test_read_write_attribute PASSED [ 62%] 274s tests/test_group.py::test_command PASSED [ 63%] 274s tests/test_log.py::test_logging_decorators PASSED [ 63%] 274s tests/test_log.py::test_async_logging_decorators PASSED [ 63%] 274s tests/test_log.py::test_tango_stream PASSED [ 63%] 274s tests/test_log.py::test_logging[Synchronous] PASSED [ 63%] 274s tests/test_log.py::test_logging[Asyncio] PASSED [ 63%] 274s tests/test_log.py::test_logging[Gevent] PASSED [ 63%] 274s tests/test_log.py::test_decorator_logging_source_location[Synchronous] SKIPPED [ 63%] 274s tests/test_log.py::test_decorator_logging_source_location[Asyncio] SKIPPED [ 63%] 274s tests/test_log.py::test_decorator_logging_source_location[Gevent] SKIPPED [ 63%] 274s tests/test_log.py::test_stream_logging_source_location[Synchronous] SKIPPED [ 63%] 274s tests/test_log.py::test_stream_logging_source_location[Asyncio] SKIPPED [ 64%] 274s tests/test_log.py::test_stream_logging_source_location[Gevent] SKIPPED [ 64%] 274s tests/test_multi_attr_prop.py::test_stuff PASSED [ 64%] 274s tests/test_properties.py::test_device_property_no_default[int] PASSED [ 64%] 274s tests/test_properties.py::test_device_property_no_default[float] PASSED [ 64%] 274s tests/test_properties.py::test_device_property_no_default[str] PASSED [ 64%] 274s tests/test_properties.py::test_device_property_no_default[bool] PASSED [ 64%] 274s tests/test_properties.py::test_device_property_no_default[(int,)] PASSED [ 64%] 274s tests/test_properties.py::test_device_property_no_default[(float,)] PASSED [ 64%] 274s tests/test_properties.py::test_device_property_no_default[(str,)] PASSED [ 64%] 274s tests/test_properties.py::test_device_property_no_default[(bool,)] PASSED [ 64%] 274s tests/test_properties.py::test_device_property_with_typing[int] PASSED [ 64%] 274s tests/test_properties.py::test_device_property_with_typing[float] PASSED [ 65%] 274s tests/test_properties.py::test_device_property_with_typing[str] PASSED [ 65%] 274s tests/test_properties.py::test_device_property_with_typing[bool] PASSED [ 65%] 274s tests/test_properties.py::test_device_property_with_typing[(int,)] PASSED [ 65%] 274s tests/test_properties.py::test_device_property_with_typing[(float,)] PASSED [ 65%] 274s tests/test_properties.py::test_device_property_with_typing[(str,)] PASSED [ 65%] 274s tests/test_properties.py::test_device_property_with_typing[(bool,)] PASSED [ 65%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[bool, SCALAR] PASSED [ 65%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[bool], SPECTRUM] PASSED [ 65%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[uint8, SCALAR] XFAIL [ 65%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[uint8], SPECTRUM] XFAIL [ 65%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[int16, SCALAR] PASSED [ 65%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[int16], SPECTRUM] PASSED [ 66%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[uint16, SCALAR] PASSED [ 66%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[uint16], SPECTRUM] PASSED [ 66%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[int32, SCALAR] PASSED [ 66%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[int32], SPECTRUM] PASSED [ 66%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[uint32, SCALAR] PASSED [ 66%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[uint32], SPECTRUM] PASSED [ 66%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[int64, SCALAR] PASSED [ 66%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[int64], SPECTRUM] PASSED [ 66%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[uint64, SCALAR] PASSED [ 66%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[uint64], SPECTRUM] PASSED [ 66%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[float64, SCALAR] PASSED [ 67%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[float64], SPECTRUM] PASSED [ 67%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[float32, SCALAR] PASSED [ 67%] 274s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[float32], SPECTRUM] PASSED [ 67%] 274s tests/test_properties.py::test_device_property_with_default_value[int] PASSED [ 67%] 274s tests/test_properties.py::test_device_property_with_default_value[float] PASSED [ 67%] 274s tests/test_properties.py::test_device_property_with_default_value[str] PASSED [ 67%] 274s tests/test_properties.py::test_device_property_with_default_value[bool] PASSED [ 67%] 274s tests/test_properties.py::test_device_property_with_default_value[(int,)] PASSED [ 67%] 274s tests/test_properties.py::test_device_property_with_default_value[(float,)] PASSED [ 67%] 274s tests/test_properties.py::test_device_property_with_default_value[(str,)] PASSED [ 67%] 274s tests/test_properties.py::test_device_property_with_default_value[(bool,)] PASSED [ 67%] 274s tests/test_properties.py::test_device_get_device_properties_when_init_device PASSED [ 68%] 275s tests/test_properties.py::test_mandatory_device_property_with_db_value_succeeds[True] PASSED [ 68%] 275s tests/test_properties.py::test_mandatory_device_property_with_db_value_succeeds[False] PASSED [ 68%] 275s tests/test_server.py::test_uncorrect_typing_hints[property-tuple-Property does not support IMAGE type0] PASSED [ 68%] 275s tests/test_server.py::test_uncorrect_typing_hints[property-tuple-Property does not support IMAGE type1] PASSED [ 68%] 275s tests/test_server.py::test_uncorrect_typing_hints[property-tuple-PyTango does not support mixed types] PASSED [ 68%] 275s tests/test_server.py::test_uncorrect_typing_hints[attribute-tuple-PyTango does not support mixed types0] PASSED [ 68%] 275s tests/test_server.py::test_uncorrect_typing_hints[attribute-tuple-PyTango does not support mixed types1] PASSED [ 68%] 275s tests/test_server.py::test_uncorrect_typing_hints[attribute-tuple-PyTango does not support mixed types2] PASSED [ 68%] 275s tests/test_server.py::test_uncorrect_typing_hints[attribute-Callable-Cannot translate] PASSED [ 68%] 275s tests/test_server.py::test_get_enum_labels_success[GoodEnum] PASSED [ 68%] 275s tests/test_server.py::test_get_enum_labels_fail[BadEnumNonZero] PASSED [ 68%] 275s tests/test_server.py::test_get_enum_labels_fail[BadEnumSkipValues] PASSED [ 69%] 275s tests/test_server.py::test_get_enum_labels_fail[BadEnumDuplicates] PASSED [ 69%] 275s tests/test_server.py::test_device_classes_use_latest_implementation PASSED [ 69%] 275s tests/test_server.py::test_empty_device[Synchronous] PASSED [ 69%] 275s tests/test_server.py::test_empty_device[Asyncio] PASSED [ 69%] 275s tests/test_server.py::test_empty_device[Gevent] PASSED [ 69%] 275s tests/test_server.py::test_set_desc_status_state_at_init[doc] PASSED [ 69%] 275s tests/test_server.py::test_set_desc_status_state_at_init[description] PASSED [ 69%] 275s tests/test_server.py::test_set_state_status[ON-Synchronous-False] PASSED [ 69%] 275s tests/test_server.py::test_set_state_status[ON-Synchronous-True] PASSED [ 69%] 275s tests/test_server.py::test_set_state_status[ON-Asyncio-False] PASSED [ 69%] 275s tests/test_server.py::test_set_state_status[ON-Asyncio-True] PASSED [ 70%] 275s tests/test_server.py::test_set_state_status[ON-Gevent-False] PASSED [ 70%] 275s tests/test_server.py::test_set_state_status[ON-Gevent-True] PASSED [ 70%] 275s tests/test_server.py::test_set_state_status[OFF-Synchronous-False] PASSED [ 70%] 275s tests/test_server.py::test_set_state_status[OFF-Synchronous-True] PASSED [ 70%] 275s tests/test_server.py::test_set_state_status[OFF-Asyncio-False] PASSED [ 70%] 275s tests/test_server.py::test_set_state_status[OFF-Asyncio-True] PASSED [ 70%] 275s tests/test_server.py::test_set_state_status[OFF-Gevent-False] PASSED [ 70%] 275s tests/test_server.py::test_set_state_status[OFF-Gevent-True] PASSED [ 70%] 276s tests/test_server.py::test_set_state_status[CLOSE-Synchronous-False] PASSED [ 70%] 276s tests/test_server.py::test_set_state_status[CLOSE-Synchronous-True] PASSED [ 70%] 276s tests/test_server.py::test_set_state_status[CLOSE-Asyncio-False] PASSED [ 70%] 276s tests/test_server.py::test_set_state_status[CLOSE-Asyncio-True] PASSED [ 71%] 276s tests/test_server.py::test_set_state_status[CLOSE-Gevent-False] PASSED [ 71%] 276s tests/test_server.py::test_set_state_status[CLOSE-Gevent-True] PASSED [ 71%] 276s tests/test_server.py::test_set_state_status[OPEN-Synchronous-False] PASSED [ 71%] 276s tests/test_server.py::test_set_state_status[OPEN-Synchronous-True] PASSED [ 71%] 276s tests/test_server.py::test_set_state_status[OPEN-Asyncio-False] PASSED [ 71%] 276s tests/test_server.py::test_set_state_status[OPEN-Asyncio-True] PASSED [ 71%] 276s tests/test_server.py::test_set_state_status[OPEN-Gevent-False] PASSED [ 71%] 276s tests/test_server.py::test_set_state_status[OPEN-Gevent-True] PASSED [ 71%] 276s tests/test_server.py::test_set_state_status[INSERT-Synchronous-False] PASSED [ 71%] 276s tests/test_server.py::test_set_state_status[INSERT-Synchronous-True] PASSED [ 71%] 276s tests/test_server.py::test_set_state_status[INSERT-Asyncio-False] PASSED [ 71%] 276s tests/test_server.py::test_set_state_status[INSERT-Asyncio-True] PASSED [ 72%] 276s tests/test_server.py::test_set_state_status[INSERT-Gevent-False] PASSED [ 72%] 276s tests/test_server.py::test_set_state_status[INSERT-Gevent-True] PASSED [ 72%] 276s tests/test_server.py::test_set_state_status[EXTRACT-Synchronous-False] PASSED [ 72%] 276s tests/test_server.py::test_set_state_status[EXTRACT-Synchronous-True] PASSED [ 72%] 276s tests/test_server.py::test_set_state_status[EXTRACT-Asyncio-False] PASSED [ 72%] 276s tests/test_server.py::test_set_state_status[EXTRACT-Asyncio-True] PASSED [ 72%] 277s tests/test_server.py::test_set_state_status[EXTRACT-Gevent-False] PASSED [ 72%] 277s tests/test_server.py::test_set_state_status[EXTRACT-Gevent-True] PASSED [ 72%] 277s tests/test_server.py::test_set_state_status[MOVING-Synchronous-False] PASSED [ 72%] 277s tests/test_server.py::test_set_state_status[MOVING-Synchronous-True] PASSED [ 72%] 277s tests/test_server.py::test_set_state_status[MOVING-Asyncio-False] PASSED [ 72%] 277s tests/test_server.py::test_set_state_status[MOVING-Asyncio-True] PASSED [ 73%] 277s tests/test_server.py::test_set_state_status[MOVING-Gevent-False] PASSED [ 73%] 277s tests/test_server.py::test_set_state_status[MOVING-Gevent-True] PASSED [ 73%] 277s tests/test_server.py::test_set_state_status[STANDBY-Synchronous-False] PASSED [ 73%] 277s tests/test_server.py::test_set_state_status[STANDBY-Synchronous-True] PASSED [ 73%] 277s tests/test_server.py::test_set_state_status[STANDBY-Asyncio-False] PASSED [ 73%] 277s tests/test_server.py::test_set_state_status[STANDBY-Asyncio-True] PASSED [ 73%] 277s tests/test_server.py::test_set_state_status[STANDBY-Gevent-False] PASSED [ 73%] 277s tests/test_server.py::test_set_state_status[STANDBY-Gevent-True] PASSED [ 73%] 277s tests/test_server.py::test_set_state_status[FAULT-Synchronous-False] PASSED [ 73%] 277s tests/test_server.py::test_set_state_status[FAULT-Synchronous-True] PASSED [ 73%] 277s tests/test_server.py::test_set_state_status[FAULT-Asyncio-False] PASSED [ 74%] 277s tests/test_server.py::test_set_state_status[FAULT-Asyncio-True] PASSED [ 74%] 277s tests/test_server.py::test_set_state_status[FAULT-Gevent-False] PASSED [ 74%] 277s tests/test_server.py::test_set_state_status[FAULT-Gevent-True] PASSED [ 74%] 277s tests/test_server.py::test_set_state_status[INIT-Synchronous-False] PASSED [ 74%] 277s tests/test_server.py::test_set_state_status[INIT-Synchronous-True] PASSED [ 74%] 277s tests/test_server.py::test_set_state_status[INIT-Asyncio-False] PASSED [ 74%] 278s tests/test_server.py::test_set_state_status[INIT-Asyncio-True] PASSED [ 74%] 278s tests/test_server.py::test_set_state_status[INIT-Gevent-False] PASSED [ 74%] 278s tests/test_server.py::test_set_state_status[INIT-Gevent-True] PASSED [ 74%] 278s tests/test_server.py::test_set_state_status[RUNNING-Synchronous-False] PASSED [ 74%] 278s tests/test_server.py::test_set_state_status[RUNNING-Synchronous-True] PASSED [ 74%] 278s tests/test_server.py::test_set_state_status[RUNNING-Asyncio-False] PASSED [ 75%] 278s tests/test_server.py::test_set_state_status[RUNNING-Asyncio-True] PASSED [ 75%] 278s tests/test_server.py::test_set_state_status[RUNNING-Gevent-False] PASSED [ 75%] 278s tests/test_server.py::test_set_state_status[RUNNING-Gevent-True] PASSED [ 75%] 278s tests/test_server.py::test_set_state_status[ALARM-Synchronous-False] PASSED [ 75%] 278s tests/test_server.py::test_set_state_status[ALARM-Synchronous-True] PASSED [ 75%] 278s tests/test_server.py::test_set_state_status[ALARM-Asyncio-False] PASSED [ 75%] 278s tests/test_server.py::test_set_state_status[ALARM-Asyncio-True] PASSED [ 75%] 278s tests/test_server.py::test_set_state_status[ALARM-Gevent-False] PASSED [ 75%] 278s tests/test_server.py::test_set_state_status[ALARM-Gevent-True] PASSED [ 75%] 278s tests/test_server.py::test_set_state_status[DISABLE-Synchronous-False] PASSED [ 75%] 278s tests/test_server.py::test_set_state_status[DISABLE-Synchronous-True] PASSED [ 75%] 278s tests/test_server.py::test_set_state_status[DISABLE-Asyncio-False] PASSED [ 76%] 278s tests/test_server.py::test_set_state_status[DISABLE-Asyncio-True] PASSED [ 76%] 278s tests/test_server.py::test_set_state_status[DISABLE-Gevent-False] PASSED [ 76%] 278s tests/test_server.py::test_set_state_status[DISABLE-Gevent-True] PASSED [ 76%] 278s tests/test_server.py::test_set_state_status[UNKNOWN-Synchronous-False] PASSED [ 76%] 279s tests/test_server.py::test_set_state_status[UNKNOWN-Synchronous-True] PASSED [ 76%] 279s tests/test_server.py::test_set_state_status[UNKNOWN-Asyncio-False] PASSED [ 76%] 279s tests/test_server.py::test_set_state_status[UNKNOWN-Asyncio-True] PASSED [ 76%] 279s tests/test_server.py::test_set_state_status[UNKNOWN-Gevent-False] PASSED [ 76%] 279s tests/test_server.py::test_set_state_status[UNKNOWN-Gevent-True] PASSED [ 76%] 279s tests/test_server.py::test_user_dev_state_status[Synchronous] PASSED [ 76%] 279s tests/test_server.py::test_user_dev_state_status[Asyncio] PASSED [ 77%] 279s tests/test_server.py::test_user_dev_state_status[Gevent] PASSED [ 77%] 279s tests/test_server.py::test_attr_quality_checked_with_state[Synchronous] PASSED [ 77%] 279s tests/test_server.py::test_attr_quality_checked_with_state[Asyncio] PASSED [ 77%] 279s tests/test_server.py::test_attr_quality_checked_with_state[Gevent] PASSED [ 77%] 279s tests/test_server.py::test_device_get_attr_config[Synchronous] PASSED [ 77%] 279s tests/test_server.py::test_device_get_attr_config[Asyncio] PASSED [ 77%] 279s tests/test_server.py::test_device_get_attr_config[Gevent] PASSED [ 77%] 279s tests/test_server.py::test_device_set_attr_config[Synchronous] PASSED [ 77%] 279s tests/test_server.py::test_device_set_attr_config[Asyncio] PASSED [ 77%] 279s tests/test_server.py::test_device_set_attr_config[Gevent] PASSED [ 77%] 279s tests/test_server.py::test_default_units PASSED [ 77%] 279s tests/test_server.py::test_custom_units PASSED [ 78%] 279s tests/test_server.py::test_inheritance_overrides_a_property PASSED [ 78%] 279s tests/test_server.py::test_inheritance_override_dev_status PASSED [ 78%] 279s tests/test_server.py::test_inheritance_init_device PASSED [ 78%] 279s tests/test_server.py::test_inheritance_with_decorated_attributes PASSED [ 78%] 280s tests/test_server.py::test_inheritance_with_undecorated_attributes PASSED [ 78%] 280s tests/test_server.py::test_inheritance_with_undecorated_attribute_and_bound_methods PASSED [ 78%] 280s tests/test_server.py::test_inheritance_with_undecorated_attributes_and_unbound_functions PASSED [ 78%] 280s tests/test_server.py::test_inheritance_command_is_allowed_by_naming_convention PASSED [ 78%] 280s tests/test_server.py::test_inheritance_command_is_allowed_by_kwarg_method PASSED [ 78%] 280s tests/test_server.py::test_inheritance_command_is_allowed_by_kwarg_unbound_function PASSED [ 78%] 280s tests/test_server.py::test_exception_propagation[Synchronous] PASSED [ 78%] 280s tests/test_server.py::test_exception_propagation[Asyncio] PASSED [ 79%] 280s tests/test_server.py::test_exception_propagation[Gevent] PASSED [ 79%] 280s tests/test_server.py::test_arguments[linux-applicable_os0-MyDs instance --nodb --port 1234-expected_output0] PASSED [ 79%] 280s tests/test_server.py::test_arguments[linux-applicable_os1-MyDs -port 1234 -host myhost instance-expected_output1] PASSED [ 79%] 280s tests/test_server.py::test_arguments[linux-applicable_os2-MyDs instance --ORBendPoint giop:tcp:_:1234-expected_output2] PASSED [ 79%] 280s tests/test_server.py::test_arguments[linux-applicable_os3-MyDs instance -nodb -port 1000 -dlist a/b/c;d/e/f-expected_output3] PASSED [ 79%] 280s tests/test_server.py::test_arguments[linux-applicable_os4-MyDs instance -file a/b/c-expected_output4] PASSED [ 79%] 280s tests/test_server.py::test_arguments[linux-applicable_os5-MyDs instance -nodb-expected_output5] PASSED [ 79%] 280s tests/test_server.py::test_arguments[linux-applicable_os6-MyDs instance -dlist a/b/c;d/e/f-expected_output6] PASSED [ 79%] 280s tests/test_server.py::test_arguments[linux-applicable_os7-MyDs instance -vvvv-expected_output7] PASSED [ 79%] 280s tests/test_server.py::test_arguments[linux-applicable_os8-MyDs instance --verbose --verbose --verbose --verbose-expected_output8] PASSED [ 79%] 280s tests/test_server.py::test_arguments[linux-applicable_os9-MyDs instance -v4-expected_output9] PASSED [ 80%] 280s tests/test_server.py::test_arguments[linux-applicable_os10-MyDs instance -v 4-expected_output10] PASSED [ 80%] 280s tests/test_server.py::test_arguments[linux-applicable_os11-MyDs instance -dbg -i -s -u-expected_output11] PASSED [ 80%] 280s tests/test_server.py::test_arguments[linux-applicable_os12-MyDs instance -ORBtest1 test1 --ORBtest2 test2-expected_output12] PASSED [ 80%] 280s tests/test_server.py::test_arguments[linux-applicable_os13-MyDs ORBinstance -ORBtest myORBparam-expected_output13] PASSED [ 80%] 280s tests/test_server.py::test_arguments[linux-applicable_os14-MyDs instance -nodb -ORBendPoint giop:tcp:localhost:1234 -ORBendPointPublish giop:tcp:myhost.local:2345-expected_output14] PASSED [ 80%] 280s tests/test_server.py::test_arguments[linux-applicable_os15-MyDs instance -ORBtest1 test1 --orbinvalid value-expected_output15] PASSED [ 80%] 280s tests/test_server.py::test_arguments[win-applicable_os0-MyDs instance --nodb --port 1234-expected_output0] PASSED [ 80%] 280s tests/test_server.py::test_arguments[win-applicable_os1-MyDs -port 1234 -host myhost instance-expected_output1] PASSED [ 80%] 280s tests/test_server.py::test_arguments[win-applicable_os2-MyDs instance --ORBendPoint giop:tcp:_:1234-expected_output2] PASSED [ 80%] 280s tests/test_server.py::test_arguments[win-applicable_os3-MyDs instance -nodb -port 1000 -dlist a/b/c;d/e/f-expected_output3] PASSED [ 80%] 280s tests/test_server.py::test_arguments[win-applicable_os4-MyDs instance -file a/b/c-expected_output4] PASSED [ 80%] 280s tests/test_server.py::test_arguments[win-applicable_os5-MyDs instance -nodb-expected_output5] PASSED [ 81%] 280s tests/test_server.py::test_arguments[win-applicable_os6-MyDs instance -dlist a/b/c;d/e/f-expected_output6] PASSED [ 81%] 280s tests/test_server.py::test_arguments[win-applicable_os7-MyDs instance -vvvv-expected_output7] PASSED [ 81%] 280s tests/test_server.py::test_arguments[win-applicable_os8-MyDs instance --verbose --verbose --verbose --verbose-expected_output8] PASSED [ 81%] 280s tests/test_server.py::test_arguments[win-applicable_os9-MyDs instance -v4-expected_output9] PASSED [ 81%] 280s tests/test_server.py::test_arguments[win-applicable_os10-MyDs instance -v 4-expected_output10] PASSED [ 81%] 280s tests/test_server.py::test_arguments[win-applicable_os11-MyDs instance -dbg -i -s -u-expected_output11] PASSED [ 81%] 280s tests/test_server.py::test_arguments[win-applicable_os12-MyDs instance -ORBtest1 test1 --ORBtest2 test2-expected_output12] PASSED [ 81%] 280s tests/test_server.py::test_arguments[win-applicable_os13-MyDs ORBinstance -ORBtest myORBparam-expected_output13] PASSED [ 81%] 280s tests/test_server.py::test_arguments[win-applicable_os14-MyDs instance -nodb -ORBendPoint giop:tcp:localhost:1234 -ORBendPointPublish giop:tcp:myhost.local:2345-expected_output14] PASSED [ 81%] 280s tests/test_server.py::test_arguments[win-applicable_os15-MyDs instance -ORBtest1 test1 --orbinvalid value-expected_output15] PASSED [ 81%] 280s tests/test_server.py::test_server_init_hook_called[Synchronous] PASSED [ 81%] 280s tests/test_server.py::test_server_init_hook_called[Asyncio] SKIPPED [ 82%] 280s tests/test_server.py::test_server_init_hook_called[Gevent] PASSED [ 82%] 280s tests/test_server.py::test_server_init_hook_change_state PASSED [ 82%] 281s tests/test_server.py::test_asyncio_server_init_hook_change_state PASSED [ 82%] 281s tests/test_server.py::test_server_init_hook_called_after_init PASSED [ 82%] 281s tests/test_server.py::test_async_server_init_hook_called_after_init PASSED [ 82%] 281s tests/test_server.py::test_server_init_hook_exception PASSED [ 82%] 281s tests/test_server.py::test_asyncio_server_init_hook_exception PASSED [ 82%] 281s tests/test_server.py::test_server_init_hook_with_low_level_api_called PASSED [ 82%] 281s tests/test_server.py::test_server_init_hook_with_low_level_api_change_state PASSED [ 82%] 281s tests/test_server.py::test_server_init_hook_with_low_level_api_called_after_init PASSED [ 82%] 281s tests/test_server.py::test_server_init_hook_with_low_level_api_exception PASSED [ 82%] 281s tests/test_server.py::test_server_init_multiple_devices PASSED [ 83%] 281s tests/test_server.py::test_server_init_hook_subscribe_event_multiple_devices XFAIL [ 83%] 281s tests/test_server.py::test_deprecation_warning_for_sync_attr_com_methods_in_asyncio_device PASSED [ 83%] 281s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[init_device] PASSED [ 83%] 281s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[delete_device] PASSED [ 83%] 281s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_state] PASSED [ 83%] 281s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_status] PASSED [ 83%] 281s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[read_attr_hardware] PASSED [ 83%] 281s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[always_executed_hook] PASSED [ 83%] 281s tests/test_server.py::test_no_sync_attribute_locks[Synchronous] SKIPPED [ 83%] 281s tests/test_server.py::test_no_sync_attribute_locks[Asyncio] SKIPPED [ 83%] 281s tests/test_server.py::test_no_sync_attribute_locks[Gevent] SKIPPED (...) [ 84%] 281s tests/test_server.py::test_read_slow_and_fast_attributes_with_asyncio SKIPPED [ 84%] 281s tests/test_server.py::test_get_version_info_classic_api PASSED [ 84%] 281s tests/test_server.py::test_get_version_info_high_level_api PASSED [ 84%] 282s tests/test_server.py::test_add_version_info_classic_api PASSED [ 84%] 282s tests/test_server.py::test_add_version_info_high_level_api PASSED [ 84%] 282s tests/test_server.py::test_restart_server_command_cpp_and_py SKIPPED [ 84%] 282s tests/test_server.py::test_attr_data_default_fwd_properties PASSED [ 84%] 282s tests/test_server.py::test_attr_data_default_properties PASSED [ 84%] 282s tests/test_server.py::test_attr_data_default_properties_throws_on_unknown PASSED [ 84%] 282s tests/test_server.py::test_attr_data_enum_labels PASSED [ 84%] 282s tests/test_server.py::test_attr_data_to_attr PASSED [ 84%] 282s tests/test_server.py::test_from_attr_info_exceptions[some string-Wrong data type for value for describing attribute] PASSED [ 85%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info1-Wrong number of argument for describing attribute] PASSED [ 85%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info2-Wrong number of argument for describing attribute] PASSED [ 85%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info3-Wrong data type for describing mandatory information] PASSED [ 85%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info4-Wrong data type for describing mandatory information] PASSED [ 85%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info5-Wrong data type in attribute argument for attribute] PASSED [ 85%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info6-Wrong data format in attribute argument for attribute] PASSED [ 85%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info7-Sequence describing mandatory attribute parameters for scalar attribute must have 3 elements] PASSED [ 85%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info8-Sequence describing mandatory attribute parameters for spectrum attribute must have 4 elements] PASSED [ 85%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info9-mandatory dim_x attribute parameter for spectrum attribute must be an integer] PASSED [ 85%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info10-Sequence describing mandatory attribute parameters for image attribute must have 5 elements] PASSED [ 85%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info11-mandatory dim_x attribute parameter for image attribute must be an integer] PASSED [ 85%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info12-mandatory dim_y attribute parameter for image attribute must be an integer] PASSED [ 86%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info13-Wrong data write type in attribute argument] PASSED [ 86%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info14-Wrong display level] PASSED [ 86%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info15-Wrong polling period] PASSED [ 86%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info16-Wrong memorized value] PASSED [ 86%] 282s tests/test_server.py::test_from_attr_info_exceptions[attr_info17-Missing 'enum_labels' key in attr_list definition] PASSED [ 86%] 282s tests/test_server.py::test_from_attr_info_hw_memorized PASSED [ 86%] 282s tests/test_server.py::test_from_attr_info_memorized PASSED [ 86%] 282s tests/test_server.py::test_device_repr_does_not_segfault_with_pytest PASSED [ 86%] 282s tests/test_telemetry.py::test_telemetry_available_constant_exists PASSED [ 86%] 282s tests/test_telemetry.py::test_telemetry_packages_available_if_telemetry_active SKIPPED [ 86%] 282s tests/test_telemetry.py::test_init_device_and_basic_span_details[Synchronous] SKIPPED [ 87%] 282s tests/test_telemetry.py::test_init_device_and_basic_span_details[Asyncio] SKIPPED [ 87%] 282s tests/test_telemetry.py::test_init_device_and_basic_span_details[Gevent] SKIPPED [ 87%] 282s tests/test_telemetry.py::test_delete_device[Synchronous] SKIPPED (Te...) [ 87%] 282s tests/test_telemetry.py::test_delete_device[Asyncio] SKIPPED (Teleme...) [ 87%] 282s tests/test_telemetry.py::test_delete_device[Gevent] SKIPPED (Telemet...) [ 87%] 282s tests/test_telemetry.py::test_state[Synchronous] SKIPPED (Telemetry ...) [ 87%] 282s tests/test_telemetry.py::test_state[Asyncio] SKIPPED (Telemetry not ...) [ 87%] 282s tests/test_telemetry.py::test_state[Gevent] SKIPPED (Telemetry not a...) [ 87%] 282s tests/test_telemetry.py::test_static_command[Synchronous] SKIPPED (T...) [ 87%] 282s tests/test_telemetry.py::test_static_command[Asyncio] SKIPPED (Telem...) [ 87%] 282s tests/test_telemetry.py::test_static_command[Gevent] SKIPPED (Teleme...) [ 87%] 282s tests/test_telemetry.py::test_static_attribute[Synchronous] SKIPPED [ 88%] 282s tests/test_telemetry.py::test_static_attribute[Asyncio] SKIPPED (Tel...) [ 88%] 282s tests/test_telemetry.py::test_static_attribute[Gevent] SKIPPED (Tele...) [ 88%] 282s tests/test_telemetry.py::test_user_span_traceid_propagates_to_tango[Synchronous] SKIPPED [ 88%] 282s tests/test_telemetry.py::test_user_span_traceid_propagates_to_tango[Asyncio] SKIPPED [ 88%] 282s tests/test_telemetry.py::test_user_span_traceid_propagates_to_tango[Gevent] SKIPPED [ 88%] 282s tests/test_telemetry.py::test_base_device_kernel_tracing_disabled_by_default SKIPPED [ 88%] 282s tests/test_telemetry.py::test_base_device_traces_if_kernel_tracing_enabled[Synchronous] SKIPPED [ 88%] 282s tests/test_telemetry.py::test_base_device_traces_if_kernel_tracing_enabled[Asyncio] SKIPPED [ 88%] 282s tests/test_telemetry.py::test_base_device_traces_if_kernel_tracing_enabled[Gevent] SKIPPED [ 88%] 282s tests/test_telemetry.py::test_no_device_traces_if_device_tracing_disabled[Synchronous] SKIPPED [ 88%] 282s tests/test_telemetry.py::test_no_device_traces_if_device_tracing_disabled[Asyncio] SKIPPED [ 88%] 282s tests/test_telemetry.py::test_no_device_traces_if_device_tracing_disabled[Gevent] SKIPPED [ 89%] 282s tests/test_test_context.py::test_no_warnings_in_test_context PASSED [ 89%] 282s tests/test_test_context.py::test_single_device[Synchronous] PASSED [ 89%] 282s tests/test_test_context.py::test_single_device[Asyncio] PASSED [ 89%] 282s tests/test_test_context.py::test_single_device[Gevent] PASSED [ 89%] 282s tests/test_test_context.py::test_single_device_old_api PASSED [ 89%] 282s tests/test_test_context.py::test_nested_single_device_in_same_process_failure SKIPPED [ 89%] 283s tests/test_test_context.py::test_nested_single_device_in_different_processes_success_without_short_names PASSED [ 89%] 283s tests/test_test_context.py::test_nested_single_device_in_different_processes_failure_with_short_names PASSED [ 89%] 283s tests/test_test_context.py::test_multi_devices_info[SimpleDevice-SimpleDevice] PASSED [ 89%] 283s tests/test_test_context.py::test_multi_devices_info[tango.test_utils.SimpleDevice-SimpleDevice] PASSED [ 89%] 283s tests/test_test_context.py::test_multi_devices_info[class_field2-ClassicAPISimpleDeviceImpl] PASSED [ 90%] 283s tests/test_test_context.py::test_multi_devices_info[class_field3-ClassicAPISimpleDeviceImpl] PASSED [ 90%] 283s tests/test_test_context.py::test_multi_devices_info[class_field4-ClassicAPISimpleDeviceImpl] PASSED [ 90%] 283s tests/test_test_context.py::test_multi_devices_info[class_field5-ClassicAPISimpleDeviceImpl] PASSED [ 90%] 283s tests/test_test_context.py::test_multi_with_single_device[Synchronous] PASSED [ 90%] 283s tests/test_test_context.py::test_multi_with_single_device[Asyncio] PASSED [ 90%] 283s tests/test_test_context.py::test_multi_with_single_device[Gevent] PASSED [ 90%] 283s tests/test_test_context.py::test_multi_with_single_device_old_api PASSED [ 90%] 283s tests/test_test_context.py::test_multi_with_two_devices[Synchronous] PASSED [ 90%] 284s tests/test_test_context.py::test_multi_with_two_devices[Asyncio] PASSED [ 90%] 284s tests/test_test_context.py::test_multi_with_two_devices[Gevent] PASSED [ 90%] 284s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1GreenModeUnspecified-Device2GreenModeUnspecified-None] PASSED [ 90%] 284s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1GreenModeUnspecified-Device2Synchronous-None] PASSED [ 91%] 284s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1GreenModeUnspecified-Device2Gevent-ValueError] PASSED [ 91%] 284s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1GreenModeUnspecified-Device2Asyncio-ValueError] PASSED [ 91%] 284s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Synchronous-Device2GreenModeUnspecified-None] PASSED [ 91%] 284s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Synchronous-Device2Synchronous-None] PASSED [ 91%] 284s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Synchronous-Device2Gevent-ValueError] PASSED [ 91%] 284s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Synchronous-Device2Asyncio-ValueError] PASSED [ 91%] 284s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2GreenModeUnspecified-ValueError] PASSED [ 91%] 284s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Synchronous-ValueError] PASSED [ 91%] 284s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Gevent-ValueError] PASSED [ 91%] 284s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Asyncio-None] PASSED [ 91%] 284s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Gevent-Device2GreenModeUnspecified-ValueError] PASSED [ 91%] 284s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Gevent-Device2Synchronous-ValueError] PASSED [ 92%] 284s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Gevent-Device2Gevent-None] PASSED [ 92%] 284s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Gevent-Device2Asyncio-ValueError] PASSED [ 92%] 284s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Synchronous-Asyncio-Asyncio-None-SynchronousExecutor] PASSED [ 92%] 284s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Synchronous-Gevent-Gevent-None-SynchronousExecutor] PASSED [ 92%] 284s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Synchronous-Synchronous-None-AsyncioExecutor] PASSED [ 92%] 284s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Gevent-Gevent-None-AsyncioExecutor] PASSED [ 92%] 284s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Gevent-Synchronous-Synchronous-None-GeventExecutor] PASSED [ 92%] 284s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Gevent-Asyncio-Asyncio-None-GeventExecutor] PASSED [ 92%] 284s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Synchronous-Asyncio-None-SynchronousExecutor] PASSED [ 92%] 284s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Synchronous-Gevent-None-SynchronousExecutor] PASSED [ 92%] 284s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Gevent-Synchronous-None-GeventExecutor] PASSED [ 92%] 284s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Gevent-Asyncio-None-GeventExecutor] PASSED [ 93%] 284s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-None-Synchronous-None-SynchronousExecutor] PASSED [ 93%] 284s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Synchronous-DeprecationWarning-AsyncioExecutor] PASSED [ 93%] 284s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Gevent-DeprecationWarning-AsyncioExecutor] PASSED [ 93%] 285s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-None-Asyncio-RuntimeError-AsyncioExecutor] PASSED [ 93%] 286s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-None-Gevent-RuntimeError-GeventExecutor] PASSED [ 93%] 286s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-None-Asyncio-RuntimeError-AsyncioExecutor] PASSED [ 93%] 287s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Gevent-None-Gevent-RuntimeError-GeventExecutor] PASSED [ 93%] 287s tests/test_test_context.py::test_multi_with_async_devices_initialised PASSED [ 93%] 287s tests/test_test_context.py::test_multi_device_access_via_test_context_methods PASSED [ 93%] 287s tests/test_test_context.py::test_multi_short_name_device_proxy_access_without_tango_db PASSED [ 93%] 287s tests/test_test_context.py::test_multi_short_name_device_proxy_with_dependencies_access_without_tango_db PASSED [ 94%] 287s tests/test_test_context.py::test_multi_short_name_attribute_proxy_access_without_tango_db PASSED [ 94%] 287s tests/test_test_context.py::test_single_short_name_device_proxy_access_without_tango_db PASSED [ 94%] 287s tests/test_test_context.py::test_single_short_name_attribute_proxy_access_without_tango_db PASSED [ 94%] 287s tests/test_test_context.py::test_multi_short_name_access_fails_if_override_disabled PASSED [ 94%] 287s tests/test_test_context.py::test_multi_device_proxy_cached PASSED [ 94%] 287s tests/test_test_context.py::test_multi_with_two_devices_with_properties[Synchronous] PASSED [ 94%] 287s tests/test_test_context.py::test_multi_with_two_devices_with_properties[Asyncio] PASSED [ 94%] 287s tests/test_test_context.py::test_multi_with_two_devices_with_properties[Gevent] PASSED [ 94%] 287s tests/test_test_context.py::test_multi_raises_on_invalid_file_database_properties PASSED [ 94%] 287s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config0] PASSED [ 94%] 287s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config1] PASSED [ 94%] 287s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config2] PASSED [ 95%] 287s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config3] PASSED [ 95%] 287s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config4] PASSED [ 95%] 287s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config5] PASSED [ 95%] 287s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config6] PASSED [ 95%] 288s tests/test_test_context.py::test_multi_with_memorized_attribute_values[False-None-0] PASSED [ 95%] 288s tests/test_test_context.py::test_multi_with_memorized_attribute_values[False-1-0] PASSED [ 95%] 288s tests/test_test_context.py::test_multi_with_memorized_attribute_values[True-None-0] PASSED [ 95%] 288s tests/test_test_context.py::test_multi_with_memorized_attribute_values[True-1-1] PASSED [ 95%] 288s tests/test_test_context.py::test_single_with_memorized_attribute_values[False-None-0] PASSED [ 95%] 288s tests/test_test_context.py::test_single_with_memorized_attribute_values[False-1-0] PASSED [ 95%] 288s tests/test_test_context.py::test_single_with_memorized_attribute_values[True-None-0] PASSED [ 95%] 288s tests/test_test_context.py::test_single_with_memorized_attribute_values[True-1-1] PASSED [ 96%] 288s tests/test_test_context.py::test_empty_string_property_bug[str-property_value0- ] PASSED [ 96%] 288s tests/test_test_context.py::test_empty_string_property_bug[property_type1-property_value1-expected_outcome1] PASSED [ 96%] 288s tests/test_test_context.py::test_empty_string_property_bug[property_type2-property_value2-expected_outcome2] PASSED [ 96%] 288s tests/test_test_context.py::test_test_context_async_device_proxy[True] PASSED [ 96%] 288s tests/test_test_context.py::test_test_context_async_device_proxy[False] PASSED [ 96%] 288s tests/test_test_context.py::test_test_context_multi_async_device_proxy[True] PASSED [ 96%] 289s tests/test_test_context.py::test_test_context_multi_async_device_proxy[False] PASSED [ 96%] 289s tests/test_test_context.py::test_test_context_future_and_gevent_device_proxy[True-Futures] PASSED [ 96%] 289s tests/test_test_context.py::test_test_context_future_and_gevent_device_proxy[True-Gevent] PASSED [ 96%] 289s tests/test_test_context.py::test_test_context_future_and_gevent_device_proxy[False-Futures] PASSED [ 96%] 289s tests/test_test_context.py::test_test_context_future_and_gevent_device_proxy[False-Gevent] PASSED [ 97%] 289s tests/test_test_context.py::test_forwarded_attributes[True] XFAIL (D...) [ 97%] 289s tests/test_test_context.py::test_forwarded_attributes[False] XFAIL (...) [ 97%] 289s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[None-a/b/c-a/b/c] PASSED [ 97%] 289s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[None-a/b/c/d-a/b/c/d] PASSED [ 97%] 289s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[None-tango://host:12/a/b/c-tango://host:12/a/b/c] PASSED [ 97%] 289s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[None-tango://host:12/a/b/c#dbase=no-tango://host:12/a/b/c#dbase=no] PASSED [ 97%] 289s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[None-no://trl/validation-no://trl/validation] PASSED [ 97%] 289s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[tango://host:12-a/b/c-tango://host:12/a/b/c] PASSED [ 97%] 289s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[tango://host:12-a/b/c/d-tango://host:12/a/b/c/d] PASSED [ 97%] 289s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[tango://host:12-tango://host:12/a/b/c-tango://host:12/a/b/c] PASSED [ 97%] 289s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[tango://host:12#dbase=no-a/b/c-tango://host:12/a/b/c#dbase=no] PASSED [ 97%] 289s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[tango://host:12#dbase=yes-a/b/c-tango://host:12/a/b/c#dbase=yes] PASSED [ 98%] 289s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[tango://127.0.0.1:12-a/b/c-tango://127.0.0.1:12/a/b/c] PASSED [ 98%] 289s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[host:123-a/b/c] PASSED [ 98%] 289s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://-a/b/c] PASSED [ 98%] 289s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://:123-a/b/c] PASSED [ 98%] 289s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host-a/b/c] PASSED [ 98%] 289s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host:0-a/b/c] PASSED [ 98%] 289s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host:12/path-a/b/c] PASSED [ 98%] 289s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host:123?query=1-a/b/c] PASSED [ 98%] 289s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host:123#dbase=invalid-a/b/c] PASSED [ 98%] 289s tests/test_utils.py::test_global_state_default_set_and_clear PASSED [ 98%] 289s tests/test_utils.py::test_clear_global_var_without_set_does_not_raise PASSED [ 98%] 289s tests/test_utils.py::test_get_tango_type_valid PASSED [ 99%] 289s tests/test_utils.py::test_get_tango_type_invalid_raises_type_error PASSED [ 99%] 289s tests/test_utils.py::test_sequence_to_string_vector_and_back PASSED [ 99%] 289s tests/test_utils.py::test_sequence_to_double_vector_and_back PASSED [ 99%] 289s tests/test_utils.py::test_sequence_to_dbdevinfo_vector_and_back PASSED [ 99%] 289s tests/test_utils.py::test_sequence_to_dbdevexportinfo_vector_and_back PASSED [ 99%] 289s tests/test_utils.py::test_sequence_to_dbdata_vector_and_back PASSED [ 99%] 289s tests/test_utils.py::test_sequence_to_dbdevimport_vector_and_back PASSED [ 99%] 289s tests/test_utils.py::test_sequence_to_dbhistorylist_vector_and_back PASSED [ 99%] 289s tests/test_utils.py::test_sequence_to_devicedatalist_vector_and_back PASSED [ 99%] 289s tests/test_utils.py::test_sequence_to_devicedatahistorylist_vector_and_back PASSED [ 99%] 289s tests/test_zzz_deprecated_pytango_module.py::test_import_aliased_module PASSED [100%] 289s 289s =========== 1061 passed, 56 skipped, 53 xfailed in 156.56s (0:02:36) =========== 290s Testing with python3.14: 290s ============================= test session starts ============================== 290s platform linux -- Python 3.14.2, pytest-9.0.2, pluggy-1.6.0 -- /usr/bin/python3.14 290s cachedir: .pytest_cache 290s rootdir: /tmp/autopkgtest.vbPr85/autopkgtest_tmp 290s plugins: typeguard-4.4.4, rerunfailures-16.1, forked-1.6.0, asyncio-1.3.0 290s asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function 291s collecting ... collected 1170 items 291s 291s tests/test_api_util.py::test_get_env_var PASSED [ 0%] 291s tests/test_async.py::test_green_mode_kwarg_for_proxy_methods FAILED [ 0%] 291s tests/test_async.py::test_async_attribute_polled PASSED [ 0%] 291s tests/test_async.py::test_async_attribute_with_callback[poll] SKIPPED [ 0%] 291s tests/test_async.py::test_async_attribute_with_callback[push] SKIPPED [ 0%] 291s tests/test_async.py::test_async_command_polled PASSED [ 0%] 292s tests/test_async.py::test_async_command_with_polled_callback[cmd_ok-123-123-False] PASSED [ 0%] 293s tests/test_async.py::test_async_command_with_polled_callback[cmd_timeout-123-None-True] PASSED [ 0%] 293s tests/test_async.py::test_async_command_with_polled_callback[cmd_exception-123-None-True] PASSED [ 0%] 294s tests/test_async.py::test_async_attribute_read_with_polled_callback[attr_ok-argout0-False] PASSED [ 0%] 295s tests/test_async.py::test_async_attribute_read_with_polled_callback[attr_timeout-None-True] PASSED [ 0%] 295s tests/test_async.py::test_async_attribute_read_with_polled_callback[attr_exception-argout2-False] PASSED [ 1%] 296s tests/test_async.py::test_async_attribute_write_with_polled_callback[attr_ok-False] PASSED [ 1%] 297s tests/test_async.py::test_async_attribute_write_with_polled_callback[attr_timeout-True] PASSED [ 1%] 297s tests/test_async.py::test_async_attribute_write_with_polled_callback[attr_exception-False] PASSED [ 1%] 298s tests/test_async.py::test_async_command_with_pushed_callback[cmd_ok-123-123-False] PASSED [ 1%] 298s tests/test_async.py::test_async_command_with_pushed_callback[cmd_timeout-123-None-True] PASSED [ 1%] 299s tests/test_async.py::test_async_command_with_pushed_callback[cmd_exception-123-None-True] PASSED [ 1%] 299s tests/test_async.py::test_async_attribute_read_with_pushed_callback[attr_ok-argout0-False] PASSED [ 1%] 300s tests/test_async.py::test_async_attribute_read_with_pushed_callback[attr_timeout-None-True] PASSED [ 1%] 301s tests/test_async.py::test_async_attribute_read_with_pushed_callback[attr_exception-argout2-False] PASSED [ 1%] 301s tests/test_async.py::test_async_attribute_write_with_pushed_callback[attr_ok-False] PASSED [ 1%] 302s tests/test_async.py::test_async_attribute_write_with_pushed_callback[attr_timeout-True] PASSED [ 1%] 303s tests/test_async.py::test_async_attribute_write_with_pushed_callback[attr_exception-False] PASSED [ 2%] 303s tests/test_async.py::test_async_exception_in_callback PASSED [ 2%] 304s tests/test_attrconfeventdata.py::test_attribute_configuration_event PASSED [ 2%] 305s tests/test_attrconfeventdata.py::test_attribute_configuration_event_set_errors PASSED [ 2%] 305s tests/test_attribute_proxy.py::test_ping[scalar_int] PASSED [ 2%] 305s tests/test_attribute_proxy.py::test_ping[spectrum_str] PASSED [ 2%] 305s tests/test_attribute_proxy.py::test_ping[image_float] PASSED [ 2%] 305s tests/test_attribute_proxy.py::test_state_status[scalar_int] PASSED [ 2%] 305s tests/test_attribute_proxy.py::test_state_status[spectrum_str] PASSED [ 2%] 305s tests/test_attribute_proxy.py::test_state_status[image_float] PASSED [ 2%] 305s tests/test_attribute_proxy.py::test_read_write_attribute[scalar_int] PASSED [ 2%] 305s tests/test_attribute_proxy.py::test_read_write_attribute[spectrum_str] PASSED [ 2%] 305s tests/test_attribute_proxy.py::test_read_write_attribute[image_float] PASSED [ 3%] 306s tests/test_attribute_proxy.py::test_attribute_poll[scalar_int] PASSED [ 3%] 306s tests/test_attribute_proxy.py::test_attribute_poll[spectrum_str] PASSED [ 3%] 307s tests/test_attribute_proxy.py::test_attribute_poll[image_float] PASSED [ 3%] 307s tests/test_attribute_proxy.py::test_read_write_attribute_async[scalar_int] PASSED [ 3%] 307s tests/test_attribute_proxy.py::test_read_write_attribute_async[spectrum_str] PASSED [ 3%] 308s tests/test_attribute_proxy.py::test_read_write_attribute_async[image_float] PASSED [ 3%] 308s tests/test_attribute_proxy.py::test_event[Synchronous] SKIPPED (This...) [ 3%] 308s tests/test_attribute_proxy.py::test_event[Futures] SKIPPED (This tes...) [ 3%] 308s tests/test_attribute_proxy.py::test_event[Gevent] SKIPPED (This test...) [ 3%] 308s tests/test_attribute_proxy.py::test_event[Asyncio] SKIPPED (This tes...) [ 3%] 308s tests/test_attributes.py::test_read_write_attribute[int-Synchronous] PASSED [ 4%] 308s tests/test_attributes.py::test_read_write_attribute[int-Asyncio] FAILED [ 4%] 308s tests/test_attributes.py::test_read_write_attribute[int-Gevent] PASSED [ 4%] 308s tests/test_attributes.py::test_read_write_attribute[float-Synchronous] PASSED [ 4%] 308s tests/test_attributes.py::test_read_write_attribute[float-Asyncio] FAILED [ 4%] 308s tests/test_attributes.py::test_read_write_attribute[float-Gevent] PASSED [ 4%] 308s tests/test_attributes.py::test_read_write_attribute[str-Synchronous] PASSED [ 4%] 313s tests/test_attributes.py::test_read_write_attribute[str-Asyncio] FAILED [ 4%] 313s tests/test_attributes.py::test_read_write_attribute[str-Gevent] PASSED [ 4%] 313s tests/test_attributes.py::test_read_write_attribute[bool-Synchronous] PASSED [ 4%] 313s tests/test_attributes.py::test_read_write_attribute[bool-Asyncio] FAILED [ 4%] 313s tests/test_attributes.py::test_read_write_attribute[bool-Gevent] PASSED [ 4%] 313s tests/test_attributes.py::test_read_write_attribute[(int,)-Synchronous] PASSED [ 5%] 313s tests/test_attributes.py::test_read_write_attribute[(int,)-Asyncio] FAILED [ 5%] 313s tests/test_attributes.py::test_read_write_attribute[(int,)-Gevent] PASSED [ 5%] 313s tests/test_attributes.py::test_read_write_attribute[(float,)-Synchronous] PASSED [ 5%] 313s tests/test_attributes.py::test_read_write_attribute[(float,)-Asyncio] FAILED [ 5%] 313s tests/test_attributes.py::test_read_write_attribute[(float,)-Gevent] PASSED [ 5%] 313s tests/test_attributes.py::test_read_write_attribute[(str,)-Synchronous] PASSED [ 5%] 313s tests/test_attributes.py::test_read_write_attribute[(str,)-Asyncio] FAILED [ 5%] 313s tests/test_attributes.py::test_read_write_attribute[(str,)-Gevent] PASSED [ 5%] 313s tests/test_attributes.py::test_read_write_attribute[(bool,)-Synchronous] PASSED [ 5%] 313s tests/test_attributes.py::test_read_write_attribute[(bool,)-Asyncio] FAILED [ 5%] 313s tests/test_attributes.py::test_read_write_attribute[(bool,)-Gevent] PASSED [ 5%] 313s tests/test_attributes.py::test_read_write_attribute[((int,),)-Synchronous] PASSED [ 6%] 313s tests/test_attributes.py::test_read_write_attribute[((int,),)-Asyncio] FAILED [ 6%] 313s tests/test_attributes.py::test_read_write_attribute[((int,),)-Gevent] PASSED [ 6%] 313s tests/test_attributes.py::test_read_write_attribute[((float,),)-Synchronous] PASSED [ 6%] 313s tests/test_attributes.py::test_read_write_attribute[((float,),)-Asyncio] FAILED [ 6%] 313s tests/test_attributes.py::test_read_write_attribute[((float,),)-Gevent] PASSED [ 6%] 313s tests/test_attributes.py::test_read_write_attribute[((str,),)-Synchronous] PASSED [ 6%] 313s tests/test_attributes.py::test_read_write_attribute[((str,),)-Asyncio] FAILED [ 6%] 313s tests/test_attributes.py::test_read_write_attribute[((str,),)-Gevent] PASSED [ 6%] 313s tests/test_attributes.py::test_read_write_attribute[((bool,),)-Synchronous] PASSED [ 6%] 313s tests/test_attributes.py::test_read_write_attribute[((bool,),)-Asyncio] FAILED [ 6%] 313s tests/test_attributes.py::test_read_write_attribute[((bool,),)-Gevent] PASSED [ 7%] 313s tests/test_attributes.py::test_wrong_encoding_string PASSED [ 7%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[int-True] PASSED [ 7%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[int-False] PASSED [ 7%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[float-True] PASSED [ 7%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[float-False] PASSED [ 7%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[str-True] PASSED [ 7%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[str-False] PASSED [ 7%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[bool-True] PASSED [ 7%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[bool-False] PASSED [ 7%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[(int,)-True] PASSED [ 7%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[(int,)-False] PASSED [ 7%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[(float,)-True] PASSED [ 8%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[(float,)-False] PASSED [ 8%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[(str,)-True] PASSED [ 8%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[(str,)-False] PASSED [ 8%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[(bool,)-True] PASSED [ 8%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[(bool,)-False] PASSED [ 8%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[((int,),)-True] PASSED [ 8%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[((int,),)-False] PASSED [ 8%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[((float,),)-True] PASSED [ 8%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[((float,),)-False] PASSED [ 8%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[((str,),)-True] PASSED [ 8%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[((str,),)-False] PASSED [ 8%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[((bool,),)-True] PASSED [ 9%] 313s tests/test_attributes.py::test_attribute_declared_with_typing[((bool,),)-False] PASSED [ 9%] 313s tests/test_attributes.py::test_attribute_self_typed_with_not_defined_name PASSED [ 9%] 313s tests/test_attributes.py::test_read_write_attribute_with_unbound_functions PASSED [ 9%] 313s tests/test_attributes.py::test_read_write_attribute_decorated_methods[Synchronous] PASSED [ 9%] 313s tests/test_attributes.py::test_read_write_attribute_decorated_methods[Asyncio] FAILED [ 9%] 314s tests/test_attributes.py::test_read_write_attribute_decorated_methods[Gevent] PASSED [ 9%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[int-True] PASSED [ 9%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[int-False] PASSED [ 9%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[float-True] PASSED [ 9%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[float-False] PASSED [ 9%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[str-True] PASSED [ 10%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[str-False] PASSED [ 10%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[bool-True] PASSED [ 10%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[bool-False] PASSED [ 10%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[(int,)-True] PASSED [ 10%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[(int,)-False] PASSED [ 10%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[(float,)-True] PASSED [ 10%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[(float,)-False] PASSED [ 10%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[(str,)-True] PASSED [ 10%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[(str,)-False] PASSED [ 10%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[(bool,)-True] PASSED [ 10%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[(bool,)-False] PASSED [ 10%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[((int,),)-True] PASSED [ 11%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[((int,),)-False] PASSED [ 11%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[((float,),)-True] PASSED [ 11%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[((float,),)-False] PASSED [ 11%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[((str,),)-True] PASSED [ 11%] 314s tests/test_attributes.py::test_read_write_wvalue_attribute[((str,),)-False] PASSED [ 11%] 315s tests/test_attributes.py::test_read_write_wvalue_attribute[((bool,),)-True] PASSED [ 11%] 315s tests/test_attributes.py::test_read_write_wvalue_attribute[((bool,),)-False] PASSED [ 11%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Numpy-float] PASSED [ 11%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Numpy-int] PASSED [ 11%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Numpy-str] PASSED [ 11%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Numpy-bool] PASSED [ 11%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Tuple-float] PASSED [ 12%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Tuple-int] PASSED [ 12%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Tuple-str] PASSED [ 12%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Tuple-bool] PASSED [ 12%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.List-float] PASSED [ 12%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.List-int] PASSED [ 12%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.List-str] PASSED [ 12%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.List-bool] PASSED [ 12%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Bytes-float] PASSED [ 12%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Bytes-int] PASSED [ 12%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Bytes-str] XFAIL [ 12%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Bytes-bool] PASSED [ 12%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.ByteArray-float] PASSED [ 13%] 315s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.ByteArray-int] PASSED [ 13%] 316s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.ByteArray-str] XFAIL [ 13%] 316s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.ByteArray-bool] PASSED [ 13%] 316s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.String-float] PASSED [ 13%] 316s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.String-int] PASSED [ 13%] 316s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.String-str] XFAIL [ 13%] 316s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.String-bool] PASSED [ 13%] 316s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-float-Device_4Impl] PASSED [ 13%] 316s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-float-Device_5Impl] PASSED [ 13%] 316s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-float-Device_6Impl] PASSED [ 13%] 316s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-float-LatestDeviceImpl] PASSED [ 14%] 316s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-int-Device_4Impl] PASSED [ 14%] 316s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-int-Device_5Impl] PASSED [ 14%] 316s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-int-Device_6Impl] PASSED [ 14%] 316s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-int-LatestDeviceImpl] PASSED [ 14%] 316s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-str-Device_4Impl] PASSED [ 14%] 317s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-str-Device_5Impl] PASSED [ 14%] 317s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-str-Device_6Impl] PASSED [ 14%] 317s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-str-LatestDeviceImpl] PASSED [ 14%] 317s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-bool-Device_4Impl] PASSED [ 14%] 317s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-bool-Device_5Impl] PASSED [ 14%] 317s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-bool-Device_6Impl] PASSED [ 14%] 317s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-bool-LatestDeviceImpl] PASSED [ 15%] 317s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-float-Device_4Impl] PASSED [ 15%] 317s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-float-Device_5Impl] PASSED [ 15%] 317s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-float-Device_6Impl] PASSED [ 15%] 317s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-float-LatestDeviceImpl] PASSED [ 15%] 317s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-int-Device_4Impl] PASSED [ 15%] 317s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-int-Device_5Impl] PASSED [ 15%] 317s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-int-Device_6Impl] PASSED [ 15%] 317s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-int-LatestDeviceImpl] PASSED [ 15%] 318s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-str-Device_4Impl] PASSED [ 15%] 318s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-str-Device_5Impl] PASSED [ 15%] 318s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-str-Device_6Impl] PASSED [ 15%] 318s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-str-LatestDeviceImpl] PASSED [ 16%] 318s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-bool-Device_4Impl] PASSED [ 16%] 318s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-bool-Device_5Impl] PASSED [ 16%] 318s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-bool-Device_6Impl] PASSED [ 16%] 318s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-bool-LatestDeviceImpl] PASSED [ 16%] 318s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-float-Device_4Impl] PASSED [ 16%] 318s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-float-Device_5Impl] PASSED [ 16%] 318s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-float-Device_6Impl] PASSED [ 16%] 318s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-float-LatestDeviceImpl] PASSED [ 16%] 318s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-int-Device_4Impl] PASSED [ 16%] 318s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-int-Device_5Impl] PASSED [ 16%] 319s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-int-Device_6Impl] PASSED [ 17%] 319s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-int-LatestDeviceImpl] PASSED [ 17%] 319s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-str-Device_4Impl] PASSED [ 17%] 319s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-str-Device_5Impl] PASSED [ 17%] 319s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-str-Device_6Impl] PASSED [ 17%] 319s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-str-LatestDeviceImpl] PASSED [ 17%] 319s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-bool-Device_4Impl] PASSED [ 17%] 319s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-bool-Device_5Impl] PASSED [ 17%] 319s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-bool-Device_6Impl] PASSED [ 17%] 319s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-bool-LatestDeviceImpl] PASSED [ 17%] 319s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-float-Device_4Impl] PASSED [ 17%] 319s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-float-Device_5Impl] PASSED [ 17%] 319s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-float-Device_6Impl] PASSED [ 18%] 319s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-float-LatestDeviceImpl] PASSED [ 18%] 320s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-int-Device_4Impl] PASSED [ 18%] 320s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-int-Device_5Impl] PASSED [ 18%] 320s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-int-Device_6Impl] PASSED [ 18%] 320s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-int-LatestDeviceImpl] PASSED [ 18%] 320s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-str-Device_4Impl] XFAIL [ 18%] 320s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-str-Device_5Impl] XFAIL [ 18%] 320s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-str-Device_6Impl] XFAIL [ 18%] 320s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-str-LatestDeviceImpl] XFAIL [ 18%] 320s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-bool-Device_4Impl] PASSED [ 18%] 320s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-bool-Device_5Impl] PASSED [ 18%] 320s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-bool-Device_6Impl] PASSED [ 19%] 320s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-bool-LatestDeviceImpl] PASSED [ 19%] 320s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-float-Device_4Impl] PASSED [ 19%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-float-Device_5Impl] PASSED [ 19%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-float-Device_6Impl] PASSED [ 19%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-float-LatestDeviceImpl] PASSED [ 19%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-int-Device_4Impl] PASSED [ 19%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-int-Device_5Impl] PASSED [ 19%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-int-Device_6Impl] PASSED [ 19%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-int-LatestDeviceImpl] PASSED [ 19%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-str-Device_4Impl] XFAIL [ 19%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-str-Device_5Impl] XFAIL [ 20%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-str-Device_6Impl] XFAIL [ 20%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-str-LatestDeviceImpl] XFAIL [ 20%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-bool-Device_4Impl] PASSED [ 20%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-bool-Device_5Impl] PASSED [ 20%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-bool-Device_6Impl] PASSED [ 20%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-bool-LatestDeviceImpl] PASSED [ 20%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-float-Device_4Impl] PASSED [ 20%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-float-Device_5Impl] PASSED [ 20%] 321s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-float-Device_6Impl] PASSED [ 20%] 322s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-float-LatestDeviceImpl] PASSED [ 20%] 322s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-int-Device_4Impl] PASSED [ 20%] 322s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-int-Device_5Impl] PASSED [ 21%] 322s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-int-Device_6Impl] PASSED [ 21%] 322s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-int-LatestDeviceImpl] PASSED [ 21%] 322s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-str-Device_4Impl] XFAIL [ 21%] 322s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-str-Device_5Impl] XFAIL [ 21%] 322s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-str-Device_6Impl] XFAIL [ 21%] 322s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-str-LatestDeviceImpl] XFAIL [ 21%] 322s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-bool-Device_4Impl] PASSED [ 21%] 322s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-bool-Device_5Impl] PASSED [ 21%] 322s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-bool-Device_6Impl] PASSED [ 21%] 322s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-bool-LatestDeviceImpl] PASSED [ 21%] 322s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SCALAR-state] PASSED [ 21%] 322s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SCALAR-DevState0] PASSED [ 22%] 322s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SCALAR-DevState1] PASSED [ 22%] 322s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SPECTRUM-state] PASSED [ 22%] 322s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SPECTRUM-DevState0] PASSED [ 22%] 322s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SPECTRUM-DevState1] PASSED [ 22%] 322s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[IMAGE-state] PASSED [ 22%] 322s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[IMAGE-DevState0] PASSED [ 22%] 323s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[IMAGE-DevState1] PASSED [ 22%] 323s tests/test_attributes.py::test_read_write_attribute_enum[SCALAR] PASSED [ 22%] 323s tests/test_attributes.py::test_read_write_attribute_enum[SPECTRUM] PASSED [ 22%] 323s tests/test_attributes.py::test_read_write_attribute_enum[IMAGE] PASSED [ 22%] 323s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[SCALAR-DevState] PASSED [ 22%] 323s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[SCALAR-GoodEnum] PASSED [ 23%] 323s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[SPECTRUM-DevState] PASSED [ 23%] 323s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[SPECTRUM-GoodEnum] PASSED [ 23%] 323s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[IMAGE-DevState] PASSED [ 23%] 323s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[IMAGE-GoodEnum] PASSED [ 23%] 323s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[int] PASSED [ 23%] 323s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[float] PASSED [ 23%] 323s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[str] PASSED [ 23%] 323s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[bool] PASSED [ 23%] 323s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[(int,)] PASSED [ 23%] 323s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[(float,)] PASSED [ 23%] 323s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[(str,)] PASSED [ 24%] 323s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[(bool,)] PASSED [ 24%] 323s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[((int,),)] PASSED [ 24%] 323s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[((float,),)] PASSED [ 24%] 323s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[((str,),)] PASSED [ 24%] 323s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[((bool,),)] PASSED [ 24%] 323s tests/test_attributes.py::test_read_enum_attribute_with_invalid_quality_is_none PASSED [ 24%] 324s tests/test_attributes.py::test_wrong_attribute_read PASSED [ 24%] 324s tests/test_attributes.py::test_attribute_access_with_default_method_names PASSED [ 24%] 324s tests/test_attributes.py::test_read_write_dynamic_attribute[low_level_read-Synchronous] PASSED [ 24%] 324s tests/test_attributes.py::test_read_write_dynamic_attribute[low_level_read-Asyncio] FAILED [ 24%] 324s tests/test_attributes.py::test_read_write_dynamic_attribute[low_level_read-Gevent] PASSED [ 24%] 324s tests/test_attributes.py::test_read_write_dynamic_attribute[high_level_read-Synchronous] PASSED [ 25%] 324s tests/test_attributes.py::test_read_write_dynamic_attribute[high_level_read-Asyncio] FAILED [ 25%] 324s tests/test_attributes.py::test_read_write_dynamic_attribute[high_level_read-Gevent] PASSED [ 25%] 324s tests/test_attributes.py::test_async_add_remove_dynamic_attribute FAILED [ 25%] 325s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[int] PASSED [ 25%] 325s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[float] PASSED [ 25%] 325s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[str] PASSED [ 25%] 325s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[bool] PASSED [ 25%] 325s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[(int,)] PASSED [ 25%] 325s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[(float,)] PASSED [ 25%] 325s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[(str,)] PASSED [ 25%] 325s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[(bool,)] PASSED [ 25%] 325s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[((int,),)] PASSED [ 26%] 325s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[((float,),)] PASSED [ 26%] 325s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[((str,),)] PASSED [ 26%] 325s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[((bool,),)] PASSED [ 26%] 325s tests/test_attributes.py::test_dynamic_attribute_self_typed_with_not_defined_name PASSED [ 26%] 325s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[bool, SCALAR] PASSED [ 26%] 325s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[bool], SPECTRUM] PASSED [ 26%] 325s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[uint8, SCALAR] PASSED [ 26%] 325s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[uint8], SPECTRUM] PASSED [ 26%] 325s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[int16, SCALAR] PASSED [ 26%] 325s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[int16], SPECTRUM] PASSED [ 26%] 325s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[uint16, SCALAR] PASSED [ 27%] 325s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[uint16], SPECTRUM] PASSED [ 27%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[int32, SCALAR] PASSED [ 27%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[int32], SPECTRUM] PASSED [ 27%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[uint32, SCALAR] PASSED [ 27%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[uint32], SPECTRUM] PASSED [ 27%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[int64, SCALAR] PASSED [ 27%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[int64], SPECTRUM] PASSED [ 27%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[uint64, SCALAR] PASSED [ 27%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[uint64], SPECTRUM] PASSED [ 27%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[float64, SCALAR] PASSED [ 27%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[float64], SPECTRUM] PASSED [ 27%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[float32, SCALAR] PASSED [ 28%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[float32], SPECTRUM] PASSED [ 28%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[bool], IMAGE] PASSED [ 28%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[uint8], IMAGE] PASSED [ 28%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[int16], IMAGE] PASSED [ 28%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[uint16], IMAGE] PASSED [ 28%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[int32], IMAGE] PASSED [ 28%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[uint32], IMAGE] PASSED [ 28%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[int64], IMAGE] PASSED [ 28%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[uint64], IMAGE] PASSED [ 28%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[float64], IMAGE] PASSED [ 28%] 326s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[float32], IMAGE] PASSED [ 28%] 327s tests/test_attributes.py::test_attribute_wrong_declared_with_numpy_typing[RuntimeError: AttrDataFormat has to be specified] PASSED [ 29%] 327s tests/test_attributes.py::test_attribute_wrong_declared_with_numpy_typing[DevFailed: Maximum y dim. wrongly defined] PASSED [ 29%] 327s tests/test_attributes.py::test_attribute_wrong_declared_with_numpy_typing[TypeError: No registered converter] PASSED [ 29%] 327s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_default_names[Synchronous] PASSED [ 29%] 327s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_default_names[Asyncio] FAILED [ 29%] 327s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_default_names[Gevent] PASSED [ 29%] 327s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_user_names[Synchronous] PASSED [ 29%] 327s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_user_names[Asyncio] FAILED [ 29%] 327s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_user_names[Gevent] PASSED [ 29%] 327s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_shared_user_functions PASSED [ 29%] 327s tests/test_attributes.py::test_read_write_dynamic_attribute_enum[SCALAR] PASSED [ 29%] 327s tests/test_attributes.py::test_read_write_dynamic_attribute_enum[SPECTRUM] PASSED [ 30%] 327s tests/test_attributes.py::test_read_write_dynamic_attribute_enum[IMAGE] PASSED [ 30%] 327s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[SCALAR-DevState] PASSED [ 30%] 328s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[SCALAR-GoodEnum] PASSED [ 30%] 328s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[SPECTRUM-DevState] PASSED [ 30%] 328s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[SPECTRUM-GoodEnum] PASSED [ 30%] 328s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[IMAGE-DevState] PASSED [ 30%] 328s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[IMAGE-GoodEnum] PASSED [ 30%] 328s tests/test_attributes.py::test_read_write_dynamic_attribute_is_allowed_with_async[Synchronous] PASSED [ 30%] 328s tests/test_attributes.py::test_read_write_dynamic_attribute_is_allowed_with_async[Asyncio] FAILED [ 30%] 328s tests/test_attributes.py::test_read_write_dynamic_attribute_is_allowed_with_async[Gevent] PASSED [ 30%] 328s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Synchronous-True] PASSED [ 30%] 328s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Synchronous-False] PASSED [ 31%] 328s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Asyncio-True] FAILED [ 31%] 329s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Asyncio-False] FAILED [ 31%] 329s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Gevent-True] PASSED [ 31%] 329s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Gevent-False] PASSED [ 31%] 329s tests/test_attributes.py::test_dynamic_attribute_using_classic_api_like_sardana[Device_4Impl] PASSED [ 31%] 329s tests/test_attributes.py::test_dynamic_attribute_using_classic_api_like_sardana[Device_5Impl] PASSED [ 31%] 329s tests/test_attributes.py::test_dynamic_attribute_using_classic_api_like_sardana[Device_6Impl] PASSED [ 31%] 329s tests/test_attributes.py::test_dynamic_attribute_using_classic_api_like_sardana[LatestDeviceImpl] PASSED [ 31%] 329s tests/test_attributes.py::test_dynamic_attribute_with_unbound_functions[True-low_level] PASSED [ 31%] 329s tests/test_attributes.py::test_dynamic_attribute_with_unbound_functions[True-high_level] PASSED [ 31%] 329s tests/test_attributes.py::test_dynamic_attribute_with_unbound_functions[False-low_level] PASSED [ 31%] 329s tests/test_attributes.py::test_dynamic_attribute_with_unbound_functions[False-high_level] PASSED [ 32%] 329s tests/test_attributes.py::test_attribute_decorators[Synchronous] PASSED [ 32%] 329s tests/test_attributes.py::test_attribute_decorators[Asyncio] FAILED [ 32%] 329s tests/test_attributes.py::test_attribute_decorators[Gevent] PASSED [ 32%] 329s tests/test_attributes.py::test_attribute_info_description PASSED [ 32%] 329s tests/test_attributes.py::test_read_only_dynamic_attribute_with_dummy_write_method[low_level_read] PASSED [ 32%] 329s tests/test_attributes.py::test_read_only_dynamic_attribute_with_dummy_write_method[high_level_read] PASSED [ 32%] 330s tests/test_attributes.py::test_dynamic_attribute_with_method_in_other_class PASSED [ 32%] 330s tests/test_attributes.py::test_polled_attribute[Synchronous] PASSED [ 32%] 330s tests/test_attributes.py::test_polled_attribute[Asyncio] FAILED [ 32%] 330s tests/test_attributes.py::test_polled_attribute[Gevent] PASSED [ 32%] 330s tests/test_attributes.py::test_read_write_dev_encoded[str] PASSED [ 32%] 330s tests/test_attributes.py::test_read_write_dev_encoded[bytes] PASSED [ 33%] 330s tests/test_attributes.py::test_read_write_dev_encoded[bytearray] PASSED [ 33%] 330s tests/test_attributes.py::test_dev_encoded_wrong_encoding PASSED [ 33%] 330s tests/test_attributes.py::test_set_value_None PASSED [ 33%] 330s tests/test_attributes.py::test_encoded_attribute[gray8] PASSED [ 33%] 330s tests/test_attributes.py::test_encoded_attribute[gray16] PASSED [ 33%] 330s tests/test_attributes.py::test_encoded_attribute[rgb24] PASSED [ 33%] 330s tests/test_attributes.py::test_encoded_attribute[jpeg_gray8] PASSED [ 33%] 330s tests/test_attributes.py::test_encoded_attribute[jpeg_rgb24] PASSED [ 33%] 330s tests/test_attributes.py::test_encoded_attribute[jpeg_rgb32] XFAIL (...) [ 33%] 333s tests/test_attributes.py::test_dev_encoded_memory_usage PASSED [ 33%] 333s tests/test_attributes.py::test_attribute_list PASSED [ 34%] 333s tests/test_auto_tango_allow_threads.py::test_dont_crash_with_nested_tango_allow_threads PASSED [ 34%] 333s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_DEVICE-True] PASSED [ 34%] 337s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_DEVICE-False] PASSED [ 34%] 337s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_CLASS-True] XFAIL [ 34%] 340s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_CLASS-False] PASSED [ 34%] 340s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_PROCESS-True] XFAIL [ 34%] 343s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_PROCESS-False] PASSED [ 34%] 343s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-NO_SYNC-True] PASSED [ 34%] 343s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-NO_SYNC-False] PASSED [ 34%] 343s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_DEVICE-True] PASSED [ 34%] 346s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_DEVICE-False] PASSED [ 34%] 346s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_CLASS-True] XFAIL [ 35%] 350s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_CLASS-False] PASSED [ 35%] 350s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_PROCESS-True] XFAIL [ 35%] 353s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_PROCESS-False] PASSED [ 35%] 353s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-NO_SYNC-True] PASSED [ 35%] 353s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-NO_SYNC-False] PASSED [ 35%] 353s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_DEVICE-True] PASSED [ 35%] 356s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_DEVICE-False] PASSED [ 35%] 356s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_CLASS-True] XFAIL [ 35%] 360s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_CLASS-False] PASSED [ 35%] 360s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_PROCESS-True] XFAIL [ 35%] 363s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_PROCESS-False] PASSED [ 35%] 363s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-NO_SYNC-True] PASSED [ 36%] 363s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-NO_SYNC-False] PASSED [ 36%] 366s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_DEVICE-True] PASSED [ 36%] 370s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_DEVICE-False] PASSED [ 36%] 373s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_CLASS-True] PASSED [ 36%] 376s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_CLASS-False] PASSED [ 36%] 379s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_PROCESS-True] PASSED [ 36%] 383s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_PROCESS-False] PASSED [ 36%] 383s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-NO_SYNC-True] PASSED [ 36%] 383s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-NO_SYNC-False] PASSED [ 36%] 386s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_DEVICE-True] PASSED [ 36%] 389s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_DEVICE-False] PASSED [ 37%] 392s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_CLASS-True] PASSED [ 37%] 396s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_CLASS-False] PASSED [ 37%] 399s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_PROCESS-True] PASSED [ 37%] 402s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_PROCESS-False] PASSED [ 37%] 402s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-NO_SYNC-True] PASSED [ 37%] 402s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-NO_SYNC-False] PASSED [ 37%] 405s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_DEVICE-True] PASSED [ 37%] 409s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_DEVICE-False] PASSED [ 37%] 412s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_CLASS-True] PASSED [ 37%] 415s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_CLASS-False] PASSED [ 37%] 418s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_PROCESS-True] PASSED [ 37%] 422s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_PROCESS-False] PASSED [ 38%] 422s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-NO_SYNC-True] PASSED [ 38%] 422s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-NO_SYNC-False] PASSED [ 38%] 422s tests/test_commands.py::test_identity_command[int-Synchronous] PASSED [ 38%] 422s tests/test_commands.py::test_identity_command[int-Asyncio] FAILED [ 38%] 422s tests/test_commands.py::test_identity_command[int-Gevent] PASSED [ 38%] 422s tests/test_commands.py::test_identity_command[float-Synchronous] PASSED [ 38%] 422s tests/test_commands.py::test_identity_command[float-Asyncio] FAILED [ 38%] 422s tests/test_commands.py::test_identity_command[float-Gevent] PASSED [ 38%] 422s tests/test_commands.py::test_identity_command[str-Synchronous] PASSED [ 38%] 423s tests/test_commands.py::test_identity_command[str-Asyncio] FAILED [ 38%] 423s tests/test_commands.py::test_identity_command[str-Gevent] PASSED [ 38%] 423s tests/test_commands.py::test_identity_command[bool-Synchronous] PASSED [ 39%] 423s tests/test_commands.py::test_identity_command[bool-Asyncio] FAILED [ 39%] 423s tests/test_commands.py::test_identity_command[bool-Gevent] PASSED [ 39%] 423s tests/test_commands.py::test_identity_command[(int,)-Synchronous] PASSED [ 39%] 423s tests/test_commands.py::test_identity_command[(int,)-Asyncio] FAILED [ 39%] 423s tests/test_commands.py::test_identity_command[(int,)-Gevent] PASSED [ 39%] 423s tests/test_commands.py::test_identity_command[(float,)-Synchronous] PASSED [ 39%] 423s tests/test_commands.py::test_identity_command[(float,)-Asyncio] FAILED [ 39%] 423s tests/test_commands.py::test_identity_command[(float,)-Gevent] PASSED [ 39%] 424s tests/test_commands.py::test_identity_command[(str,)-Synchronous] PASSED [ 39%] 424s tests/test_commands.py::test_identity_command[(str,)-Asyncio] FAILED [ 39%] 424s tests/test_commands.py::test_identity_command[(str,)-Gevent] PASSED [ 40%] 424s tests/test_commands.py::test_identity_command[(bool,)-Synchronous] XFAIL [ 40%] 424s tests/test_commands.py::test_identity_command[(bool,)-Asyncio] XFAIL [ 40%] 424s tests/test_commands.py::test_identity_command[(bool,)-Gevent] XFAIL [ 40%] 424s tests/test_commands.py::test_identity_command[DevVarLongStringArray-Synchronous] PASSED [ 40%] 424s tests/test_commands.py::test_identity_command[DevVarLongStringArray-Asyncio] FAILED [ 40%] 424s tests/test_commands.py::test_identity_command[DevVarLongStringArray-Gevent] PASSED [ 40%] 424s tests/test_commands.py::test_identity_command[DevVarDoubleStringArray-Synchronous] PASSED [ 40%] 424s tests/test_commands.py::test_identity_command[DevVarDoubleStringArray-Asyncio] FAILED [ 40%] 425s tests/test_commands.py::test_identity_command[DevVarDoubleStringArray-Gevent] PASSED [ 40%] 425s tests/test_commands.py::test_identity_command_with_typing[int] PASSED [ 40%] 425s tests/test_commands.py::test_identity_command_with_typing[float] PASSED [ 40%] 425s tests/test_commands.py::test_identity_command_with_typing[str] PASSED [ 41%] 425s tests/test_commands.py::test_identity_command_with_typing[bool] PASSED [ 41%] 425s tests/test_commands.py::test_identity_command_with_typing[(int,)] PASSED [ 41%] 425s tests/test_commands.py::test_identity_command_with_typing[(float,)] PASSED [ 41%] 425s tests/test_commands.py::test_identity_command_with_typing[(str,)] PASSED [ 41%] 425s tests/test_commands.py::test_identity_command_with_typing[(bool,)] XFAIL [ 41%] 425s tests/test_commands.py::test_identity_command_with_typing[DevVarLongStringArray] PASSED [ 41%] 425s tests/test_commands.py::test_identity_command_with_typing[DevVarDoubleStringArray] PASSED [ 41%] 425s tests/test_commands.py::test_devstate_command_with_typing PASSED [ 41%] 425s tests/test_commands.py::test_command_self_typed_with_not_defined_name PASSED [ 41%] 425s tests/test_commands.py::test_decorated_command[Synchronous] PASSED [ 41%] 425s tests/test_commands.py::test_decorated_command[Asyncio] FAILED [ 41%] 425s tests/test_commands.py::test_decorated_command[Gevent] PASSED [ 42%] 425s tests/test_commands.py::test_command_isallowed[Synchronous] PASSED [ 42%] 426s tests/test_commands.py::test_command_isallowed[Asyncio] FAILED [ 42%] 426s tests/test_commands.py::test_command_isallowed[Gevent] PASSED [ 42%] 426s tests/test_commands.py::test_dynamic_command[Synchronous-True] PASSED [ 42%] 426s tests/test_commands.py::test_dynamic_command[Synchronous-False] PASSED [ 42%] 426s tests/test_commands.py::test_dynamic_command[Asyncio-True] FAILED [ 42%] 426s tests/test_commands.py::test_dynamic_command[Asyncio-False] FAILED [ 42%] 426s tests/test_commands.py::test_dynamic_command[Gevent-True] PASSED [ 42%] 426s tests/test_commands.py::test_dynamic_command[Gevent-False] PASSED [ 42%] 426s tests/test_commands.py::test_identity_dynamic_command_with_typing[int] PASSED [ 42%] 426s tests/test_commands.py::test_identity_dynamic_command_with_typing[float] PASSED [ 42%] 426s tests/test_commands.py::test_identity_dynamic_command_with_typing[str] PASSED [ 43%] 426s tests/test_commands.py::test_identity_dynamic_command_with_typing[bool] PASSED [ 43%] 426s tests/test_commands.py::test_identity_dynamic_command_with_typing[(int,)] PASSED [ 43%] 427s tests/test_commands.py::test_identity_dynamic_command_with_typing[(float,)] PASSED [ 43%] 427s tests/test_commands.py::test_identity_dynamic_command_with_typing[(str,)] PASSED [ 43%] 427s tests/test_commands.py::test_identity_dynamic_command_with_typing[(bool,)] XFAIL [ 43%] 427s tests/test_commands.py::test_identity_dynamic_command_with_typing[DevVarLongStringArray] PASSED [ 43%] 427s tests/test_commands.py::test_identity_dynamic_command_with_typing[DevVarDoubleStringArray] PASSED [ 43%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[bool, SCALAR] PASSED [ 43%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[bool], SPECTRUM] PASSED [ 43%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[uint8, SCALAR] XFAIL [ 43%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[uint8], SPECTRUM] PASSED [ 44%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[int16, SCALAR] PASSED [ 44%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[int16], SPECTRUM] PASSED [ 44%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[uint16, SCALAR] PASSED [ 44%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[uint16], SPECTRUM] PASSED [ 44%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[int32, SCALAR] PASSED [ 44%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[int32], SPECTRUM] PASSED [ 44%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[uint32, SCALAR] PASSED [ 44%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[uint32], SPECTRUM] PASSED [ 44%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[int64, SCALAR] PASSED [ 44%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[int64], SPECTRUM] PASSED [ 44%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[uint64, SCALAR] PASSED [ 44%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[uint64], SPECTRUM] PASSED [ 45%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[float64, SCALAR] PASSED [ 45%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[float64], SPECTRUM] PASSED [ 45%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[float32, SCALAR] PASSED [ 45%] 427s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[float32], SPECTRUM] PASSED [ 45%] 427s tests/test_commands.py::test_polled_command PASSED [ 45%] 428s tests/test_commands.py::test_wrong_command_result PASSED [ 45%] 428s tests/test_commands.py::test_command_info PASSED [ 45%] 428s tests/test_database.py::test_put_remove_attribute_properties PASSED [ 45%] 428s tests/test_databaseds.py::test_ping SKIPPED (This test is failing wh...) [ 45%] 428s tests/test_databaseds.py::test_status SKIPPED (This test is failing ...) [ 45%] 428s tests/test_databaseds.py::test_state SKIPPED (This test is failing w...) [ 45%] 428s tests/test_databaseds.py::test_device_property SKIPPED (This test is...) [ 46%] 428s tests/test_databaseds.py::test_info SKIPPED (This test is failing wh...) [ 46%] 428s tests/test_device_proxy.py::test_ping PASSED [ 46%] 428s tests/test_device_proxy.py::test_info PASSED [ 46%] 428s tests/test_device_proxy.py::test_read_attribute[State] PASSED [ 46%] 428s tests/test_device_proxy.py::test_read_attribute[Status] PASSED [ 46%] 428s tests/test_device_proxy.py::test_read_attribute[ampli] PASSED [ 46%] 428s tests/test_device_proxy.py::test_read_attribute[boolean_image] PASSED [ 46%] 428s tests/test_device_proxy.py::test_read_attribute[boolean_image_ro] PASSED [ 46%] 428s tests/test_device_proxy.py::test_read_attribute[boolean_scalar] PASSED [ 46%] 428s tests/test_device_proxy.py::test_read_attribute[boolean_spectrum] PASSED [ 46%] 428s tests/test_device_proxy.py::test_read_attribute[boolean_spectrum_ro] PASSED [ 47%] 429s tests/test_device_proxy.py::test_read_attribute[double_image] PASSED [ 47%] 429s tests/test_device_proxy.py::test_read_attribute[double_image_ro] PASSED [ 47%] 429s tests/test_device_proxy.py::test_read_attribute[double_scalar] PASSED [ 47%] 429s tests/test_device_proxy.py::test_read_attribute[double_scalar_rww] PASSED [ 47%] 429s tests/test_device_proxy.py::test_read_attribute[double_scalar_w] PASSED [ 47%] 429s tests/test_device_proxy.py::test_read_attribute[double_spectrum] PASSED [ 47%] 429s tests/test_device_proxy.py::test_read_attribute[double_spectrum_ro] PASSED [ 47%] 429s tests/test_device_proxy.py::test_read_attribute[echo_mode] SKIPPED (...) [ 47%] 429s tests/test_device_proxy.py::test_read_attribute[enum_image] PASSED [ 47%] 429s tests/test_device_proxy.py::test_read_attribute[enum_image_ro] PASSED [ 47%] 429s tests/test_device_proxy.py::test_read_attribute[enum_scalar] PASSED [ 47%] 429s tests/test_device_proxy.py::test_read_attribute[enum_scalar_ro] PASSED [ 48%] 430s tests/test_device_proxy.py::test_read_attribute[enum_spectrum] PASSED [ 48%] 430s tests/test_device_proxy.py::test_read_attribute[enum_spectrum_ro] PASSED [ 48%] 430s tests/test_device_proxy.py::test_read_attribute[float_image] PASSED [ 48%] 430s tests/test_device_proxy.py::test_read_attribute[float_image_ro] PASSED [ 48%] 430s tests/test_device_proxy.py::test_read_attribute[float_scalar] PASSED [ 48%] 430s tests/test_device_proxy.py::test_read_attribute[float_spectrum] PASSED [ 48%] 430s tests/test_device_proxy.py::test_read_attribute[float_spectrum_ro] PASSED [ 48%] 430s tests/test_device_proxy.py::test_read_attribute[freq] PASSED [ 48%] 430s tests/test_device_proxy.py::test_read_attribute[long64_image_ro] PASSED [ 48%] 430s tests/test_device_proxy.py::test_read_attribute[long64_scalar] PASSED [ 48%] 430s tests/test_device_proxy.py::test_read_attribute[long64_spectrum_ro] PASSED [ 48%] 430s tests/test_device_proxy.py::test_read_attribute[long_image] PASSED [ 49%] 431s tests/test_device_proxy.py::test_read_attribute[long_image_ro] PASSED [ 49%] 431s tests/test_device_proxy.py::test_read_attribute[long_scalar] PASSED [ 49%] 431s tests/test_device_proxy.py::test_read_attribute[long_scalar_rww] PASSED [ 49%] 431s tests/test_device_proxy.py::test_read_attribute[long_scalar_w] PASSED [ 49%] 431s tests/test_device_proxy.py::test_read_attribute[long_spectrum] PASSED [ 49%] 431s tests/test_device_proxy.py::test_read_attribute[long_spectrum_ro] PASSED [ 49%] 431s tests/test_device_proxy.py::test_read_attribute[short_image] PASSED [ 49%] 431s tests/test_device_proxy.py::test_read_attribute[short_image_ro] PASSED [ 49%] 431s tests/test_device_proxy.py::test_read_attribute[short_scalar] PASSED [ 49%] 431s tests/test_device_proxy.py::test_read_attribute[short_scalar_ro] PASSED [ 49%] 431s tests/test_device_proxy.py::test_read_attribute[short_scalar_rww] PASSED [ 50%] 431s tests/test_device_proxy.py::test_read_attribute[short_scalar_w] PASSED [ 50%] 432s tests/test_device_proxy.py::test_read_attribute[short_spectrum] PASSED [ 50%] 432s tests/test_device_proxy.py::test_read_attribute[short_spectrum_ro] PASSED [ 50%] 432s tests/test_device_proxy.py::test_read_attribute[string_image] PASSED [ 50%] 432s tests/test_device_proxy.py::test_read_attribute[string_image_ro] XFAIL [ 50%] 432s tests/test_device_proxy.py::test_read_attribute[string_scalar] PASSED [ 50%] 432s tests/test_device_proxy.py::test_read_attribute[string_spectrum] PASSED [ 50%] 432s tests/test_device_proxy.py::test_read_attribute[string_spectrum_ro] XFAIL [ 50%] 432s tests/test_device_proxy.py::test_read_attribute[uchar_image] PASSED [ 50%] 432s tests/test_device_proxy.py::test_read_attribute[uchar_image_ro] PASSED [ 50%] 432s tests/test_device_proxy.py::test_read_attribute[uchar_scalar] PASSED [ 50%] 432s tests/test_device_proxy.py::test_read_attribute[uchar_spectrum] PASSED [ 51%] 433s tests/test_device_proxy.py::test_read_attribute[uchar_spectrum_ro] PASSED [ 51%] 433s tests/test_device_proxy.py::test_read_attribute[ulong64_image_ro] PASSED [ 51%] 433s tests/test_device_proxy.py::test_read_attribute[ulong64_scalar] PASSED [ 51%] 433s tests/test_device_proxy.py::test_read_attribute[ulong64_spectrum_ro] PASSED [ 51%] 433s tests/test_device_proxy.py::test_read_attribute[ulong_image_ro] PASSED [ 51%] 433s tests/test_device_proxy.py::test_read_attribute[ulong_scalar] PASSED [ 51%] 433s tests/test_device_proxy.py::test_read_attribute[ulong_spectrum_ro] PASSED [ 51%] 433s tests/test_device_proxy.py::test_read_attribute[ushort_image] PASSED [ 51%] 433s tests/test_device_proxy.py::test_read_attribute[ushort_image_ro] PASSED [ 51%] 433s tests/test_device_proxy.py::test_read_attribute[ushort_scalar] PASSED [ 51%] 433s tests/test_device_proxy.py::test_read_attribute[ushort_spectrum] PASSED [ 51%] 433s tests/test_device_proxy.py::test_read_attribute[ushort_spectrum_ro] PASSED [ 52%] 434s tests/test_device_proxy.py::test_read_attribute[wave] PASSED [ 52%] 434s tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Synchronous] PASSED [ 52%] 434s tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Futures] PASSED [ 52%] 434s tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Gevent] PASSED [ 52%] 434s tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Asyncio] ERROR [ 52%] 434s tests/test_device_proxy.py::test_high_level_api_for_asyncio FAILED [ 52%] 434s tests/test_device_proxy.py::test_write_scalar_attribute[boolean_scalar] PASSED [ 52%] 434s tests/test_device_proxy.py::test_write_scalar_attribute[double_scalar] PASSED [ 52%] 434s tests/test_device_proxy.py::test_write_scalar_attribute[double_scalar_w] PASSED [ 52%] 435s tests/test_device_proxy.py::test_write_scalar_attribute[enum_scalar] XFAIL [ 52%] 435s tests/test_device_proxy.py::test_write_scalar_attribute[float_scalar] PASSED [ 52%] 435s tests/test_device_proxy.py::test_write_scalar_attribute[long64_scalar] PASSED [ 53%] 435s tests/test_device_proxy.py::test_write_scalar_attribute[long_scalar] PASSED [ 53%] 435s tests/test_device_proxy.py::test_write_scalar_attribute[long_scalar_w] PASSED [ 53%] 435s tests/test_device_proxy.py::test_write_scalar_attribute[short_scalar] PASSED [ 53%] 435s tests/test_device_proxy.py::test_write_scalar_attribute[short_scalar_w] PASSED [ 53%] 435s tests/test_device_proxy.py::test_write_scalar_attribute[string_scalar] PASSED [ 53%] 435s tests/test_device_proxy.py::test_write_scalar_attribute[uchar_scalar] XFAIL [ 53%] 435s tests/test_device_proxy.py::test_write_scalar_attribute[ulong64_scalar] PASSED [ 53%] 435s tests/test_device_proxy.py::test_write_scalar_attribute[ulong_scalar] PASSED [ 53%] 436s tests/test_device_proxy.py::test_write_scalar_attribute[ushort_scalar] PASSED [ 53%] 436s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.Numpy] PASSED [ 53%] 436s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.Tuple] PASSED [ 54%] 436s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.List] PASSED [ 54%] 436s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.Bytes] PASSED [ 54%] 436s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.ByteArray] PASSED [ 54%] 436s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.String] PASSED [ 54%] 436s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.Numpy] PASSED [ 54%] 436s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.Tuple] PASSED [ 54%] 436s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.List] PASSED [ 54%] 436s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.Bytes] PASSED [ 54%] 437s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.ByteArray] PASSED [ 54%] 437s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.String] PASSED [ 54%] 437s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.Numpy] XFAIL [ 54%] 437s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.Tuple] XFAIL [ 55%] 437s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.List] XFAIL [ 55%] 437s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.Bytes] XFAIL [ 55%] 437s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.ByteArray] XFAIL [ 55%] 437s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.String] XFAIL [ 55%] 437s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.Numpy] PASSED [ 55%] 438s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.Tuple] PASSED [ 55%] 438s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.List] PASSED [ 55%] 438s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.Bytes] PASSED [ 55%] 438s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.ByteArray] PASSED [ 55%] 438s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.String] PASSED [ 55%] 438s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.Numpy] PASSED [ 55%] 438s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.Tuple] PASSED [ 56%] 438s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.List] PASSED [ 56%] 438s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.Bytes] PASSED [ 56%] 438s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.ByteArray] PASSED [ 56%] 438s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.String] PASSED [ 56%] 438s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.Numpy] PASSED [ 56%] 439s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.Tuple] PASSED [ 56%] 439s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.List] PASSED [ 56%] 439s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.Bytes] PASSED [ 56%] 439s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.ByteArray] PASSED [ 56%] 439s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.String] PASSED [ 56%] 439s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.Numpy] PASSED [ 57%] 439s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.Tuple] PASSED [ 57%] 439s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.List] PASSED [ 57%] 439s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.Bytes] XFAIL [ 57%] 439s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.ByteArray] XFAIL [ 57%] 440s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.String] XFAIL [ 57%] 440s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.Numpy] XFAIL [ 57%] 440s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.Tuple] XFAIL [ 57%] 440s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.List] XFAIL [ 57%] 440s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.Bytes] XFAIL [ 57%] 440s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.ByteArray] XFAIL [ 57%] 440s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.String] XFAIL [ 57%] 440s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.Numpy] PASSED [ 58%] 440s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.Tuple] PASSED [ 58%] 440s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.List] PASSED [ 58%] 441s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.Bytes] PASSED [ 58%] 441s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.ByteArray] PASSED [ 58%] 441s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.String] PASSED [ 58%] 441s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[boolean_spectrum] PASSED [ 58%] 441s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[double_spectrum] PASSED [ 58%] 441s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[enum_spectrum] PASSED [ 58%] 441s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[float_spectrum] PASSED [ 58%] 441s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[long_spectrum] PASSED [ 58%] 441s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[short_spectrum] PASSED [ 58%] 441s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[string_spectrum] XFAIL [ 59%] 441s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[uchar_spectrum] PASSED [ 59%] 442s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[ushort_spectrum] PASSED [ 59%] 442s tests/test_device_proxy.py::test_write_read_string_attribute PASSED [ 59%] 442s tests/test_device_proxy.py::test_set_non_existent_attribute_raises_by_default PASSED [ 59%] 442s tests/test_device_proxy.py::test_set_non_existent_attribute_allowed_if_dynamic_interface_unfrozen PASSED [ 59%] 442s tests/test_device_proxy.py::test_dynamic_interface_can_be_toggled PASSED [ 59%] 442s tests/test_device_proxy.py::test_dynamic_interface_flag_can_be_read PASSED [ 59%] 442s tests/test_device_proxy.py::test_dynamic_interface_only_applies_to_device_proxy_instance PASSED [ 59%] 442s tests/test_device_proxy.py::test_dynamic_interface_unfreeze_generates_a_user_warning PASSED [ 59%] 442s tests/test_device_proxy.py::test_read_attribute_config SKIPPED (This...) [ 59%] 442s tests/test_device_proxy.py::test_read_attribute_config_ex PASSED [ 60%] 442s tests/test_device_proxy.py::test_attribute_list_query SKIPPED (This ...) [ 60%] 442s tests/test_device_proxy.py::test_attribute_list_query_ex SKIPPED (Th...) [ 60%] 442s tests/test_device_proxy.py::test_device_proxy_dir_method PASSED [ 60%] 443s tests/test_device_proxy.py::test_device_polling_command PASSED [ 60%] 443s tests/test_device_proxy.py::test_device_polling_attribute PASSED [ 60%] 443s tests/test_device_proxy.py::test_command_string PASSED [ 60%] 443s tests/test_device_proxy.py::test_command_raises_type_error_for_bad_input PASSED [ 60%] 443s tests/test_device_proxy.py::test_repr_uses_info[Synchronous] PASSED [ 60%] 443s tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Synchronous] PASSED [ 60%] 443s tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Synchronous] PASSED [ 60%] 443s tests/test_device_proxy.py::test_no_memory_leak_for_repr[Synchronous] PASSED [ 60%] 443s tests/test_device_proxy.py::test_no_memory_leak_for_str[Synchronous] PASSED [ 61%] 443s tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Synchronous] PASSED [ 61%] 443s tests/test_device_proxy.py::test_repr_uses_info[Futures] PASSED [ 61%] 443s tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Futures] PASSED [ 61%] 443s tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Futures] PASSED [ 61%] 443s tests/test_device_proxy.py::test_no_memory_leak_for_repr[Futures] PASSED [ 61%] 444s tests/test_device_proxy.py::test_no_memory_leak_for_str[Futures] PASSED [ 61%] 444s tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Futures] PASSED [ 61%] 444s tests/test_device_proxy.py::test_repr_uses_info[Gevent] PASSED [ 61%] 444s tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Gevent] PASSED [ 61%] 444s tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Gevent] PASSED [ 61%] 444s tests/test_device_proxy.py::test_no_memory_leak_for_repr[Gevent] PASSED [ 61%] 444s tests/test_device_proxy.py::test_no_memory_leak_for_str[Gevent] PASSED [ 62%] 444s tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Gevent] PASSED [ 62%] 444s tests/test_device_proxy.py::test_repr_uses_info[Asyncio] FAILED [ 62%] 444s tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Asyncio] FAILED [ 62%] 444s tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Asyncio] FAILED [ 62%] 445s tests/test_device_proxy.py::test_no_memory_leak_for_repr[Asyncio] FAILED [ 62%] 445s tests/test_device_proxy.py::test_no_memory_leak_for_str[Asyncio] FAILED [ 62%] 445s tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Asyncio] FAILED [ 62%] 445s tests/test_device_proxy.py::test_client_destructor_does_not_deadlock[group_client_lifecycle] SKIPPED [ 62%] 445s tests/test_device_proxy.py::test_client_destructor_does_not_deadlock[device_proxy_lifecycle] SKIPPED [ 62%] 445s tests/test_group.py::test_nested_multi_group PASSED [ 62%] 445s tests/test_group.py::test_read_write_attribute PASSED [ 62%] 445s tests/test_group.py::test_command PASSED [ 63%] 445s tests/test_log.py::test_logging_decorators PASSED [ 63%] 445s tests/test_log.py::test_async_logging_decorators FAILED [ 63%] 445s tests/test_log.py::test_tango_stream PASSED [ 63%] 445s tests/test_log.py::test_logging[Synchronous] PASSED [ 63%] 446s tests/test_log.py::test_logging[Asyncio] FAILED [ 63%] 446s tests/test_log.py::test_logging[Gevent] PASSED [ 63%] 446s tests/test_log.py::test_decorator_logging_source_location[Synchronous] SKIPPED [ 63%] 446s tests/test_log.py::test_decorator_logging_source_location[Asyncio] SKIPPED [ 63%] 446s tests/test_log.py::test_decorator_logging_source_location[Gevent] SKIPPED [ 63%] 446s tests/test_log.py::test_stream_logging_source_location[Synchronous] SKIPPED [ 63%] 446s tests/test_log.py::test_stream_logging_source_location[Asyncio] SKIPPED [ 64%] 446s tests/test_log.py::test_stream_logging_source_location[Gevent] SKIPPED [ 64%] 446s tests/test_multi_attr_prop.py::test_stuff PASSED [ 64%] 446s tests/test_properties.py::test_device_property_no_default[int] PASSED [ 64%] 446s tests/test_properties.py::test_device_property_no_default[float] PASSED [ 64%] 446s tests/test_properties.py::test_device_property_no_default[str] PASSED [ 64%] 446s tests/test_properties.py::test_device_property_no_default[bool] PASSED [ 64%] 446s tests/test_properties.py::test_device_property_no_default[(int,)] PASSED [ 64%] 446s tests/test_properties.py::test_device_property_no_default[(float,)] PASSED [ 64%] 446s tests/test_properties.py::test_device_property_no_default[(str,)] PASSED [ 64%] 446s tests/test_properties.py::test_device_property_no_default[(bool,)] PASSED [ 64%] 446s tests/test_properties.py::test_device_property_with_typing[int] PASSED [ 64%] 446s tests/test_properties.py::test_device_property_with_typing[float] PASSED [ 65%] 446s tests/test_properties.py::test_device_property_with_typing[str] PASSED [ 65%] 446s tests/test_properties.py::test_device_property_with_typing[bool] PASSED [ 65%] 446s tests/test_properties.py::test_device_property_with_typing[(int,)] PASSED [ 65%] 446s tests/test_properties.py::test_device_property_with_typing[(float,)] PASSED [ 65%] 446s tests/test_properties.py::test_device_property_with_typing[(str,)] PASSED [ 65%] 446s tests/test_properties.py::test_device_property_with_typing[(bool,)] PASSED [ 65%] 446s tests/test_properties.py::test_device_property_with_numpy_typing[bool, SCALAR] PASSED [ 65%] 446s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[bool], SPECTRUM] PASSED [ 65%] 446s tests/test_properties.py::test_device_property_with_numpy_typing[uint8, SCALAR] XFAIL [ 65%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[uint8], SPECTRUM] XFAIL [ 65%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[int16, SCALAR] PASSED [ 65%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[int16], SPECTRUM] PASSED [ 66%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[uint16, SCALAR] PASSED [ 66%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[uint16], SPECTRUM] PASSED [ 66%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[int32, SCALAR] PASSED [ 66%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[int32], SPECTRUM] PASSED [ 66%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[uint32, SCALAR] PASSED [ 66%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[uint32], SPECTRUM] PASSED [ 66%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[int64, SCALAR] PASSED [ 66%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[int64], SPECTRUM] PASSED [ 66%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[uint64, SCALAR] PASSED [ 66%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[uint64], SPECTRUM] PASSED [ 66%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[float64, SCALAR] PASSED [ 67%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[float64], SPECTRUM] PASSED [ 67%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[float32, SCALAR] PASSED [ 67%] 447s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[float32], SPECTRUM] PASSED [ 67%] 447s tests/test_properties.py::test_device_property_with_default_value[int] PASSED [ 67%] 447s tests/test_properties.py::test_device_property_with_default_value[float] PASSED [ 67%] 447s tests/test_properties.py::test_device_property_with_default_value[str] PASSED [ 67%] 447s tests/test_properties.py::test_device_property_with_default_value[bool] PASSED [ 67%] 447s tests/test_properties.py::test_device_property_with_default_value[(int,)] PASSED [ 67%] 447s tests/test_properties.py::test_device_property_with_default_value[(float,)] PASSED [ 67%] 448s tests/test_properties.py::test_device_property_with_default_value[(str,)] PASSED [ 67%] 448s tests/test_properties.py::test_device_property_with_default_value[(bool,)] PASSED [ 67%] 448s tests/test_properties.py::test_device_get_device_properties_when_init_device PASSED [ 68%] 448s tests/test_properties.py::test_mandatory_device_property_with_db_value_succeeds[True] PASSED [ 68%] 448s tests/test_properties.py::test_mandatory_device_property_with_db_value_succeeds[False] PASSED [ 68%] 448s tests/test_server.py::test_uncorrect_typing_hints[property-tuple-Property does not support IMAGE type0] PASSED [ 68%] 448s tests/test_server.py::test_uncorrect_typing_hints[property-tuple-Property does not support IMAGE type1] PASSED [ 68%] 448s tests/test_server.py::test_uncorrect_typing_hints[property-tuple-PyTango does not support mixed types] PASSED [ 68%] 448s tests/test_server.py::test_uncorrect_typing_hints[attribute-tuple-PyTango does not support mixed types0] PASSED [ 68%] 448s tests/test_server.py::test_uncorrect_typing_hints[attribute-tuple-PyTango does not support mixed types1] PASSED [ 68%] 448s tests/test_server.py::test_uncorrect_typing_hints[attribute-tuple-PyTango does not support mixed types2] PASSED [ 68%] 448s tests/test_server.py::test_uncorrect_typing_hints[attribute-Callable-Cannot translate] PASSED [ 68%] 448s tests/test_server.py::test_get_enum_labels_success[GoodEnum] PASSED [ 68%] 448s tests/test_server.py::test_get_enum_labels_fail[BadEnumNonZero] PASSED [ 68%] 448s tests/test_server.py::test_get_enum_labels_fail[BadEnumSkipValues] PASSED [ 69%] 448s tests/test_server.py::test_get_enum_labels_fail[BadEnumDuplicates] PASSED [ 69%] 448s tests/test_server.py::test_device_classes_use_latest_implementation PASSED [ 69%] 448s tests/test_server.py::test_empty_device[Synchronous] PASSED [ 69%] 448s tests/test_server.py::test_empty_device[Asyncio] FAILED [ 69%] 448s tests/test_server.py::test_empty_device[Gevent] PASSED [ 69%] 448s tests/test_server.py::test_set_desc_status_state_at_init[doc] PASSED [ 69%] 448s tests/test_server.py::test_set_desc_status_state_at_init[description] PASSED [ 69%] 448s tests/test_server.py::test_set_state_status[ON-Synchronous-False] PASSED [ 69%] 448s tests/test_server.py::test_set_state_status[ON-Synchronous-True] PASSED [ 69%] 448s tests/test_server.py::test_set_state_status[ON-Asyncio-False] FAILED [ 69%] 449s tests/test_server.py::test_set_state_status[ON-Asyncio-True] FAILED [ 70%] 449s tests/test_server.py::test_set_state_status[ON-Gevent-False] PASSED [ 70%] 449s tests/test_server.py::test_set_state_status[ON-Gevent-True] PASSED [ 70%] 449s tests/test_server.py::test_set_state_status[OFF-Synchronous-False] PASSED [ 70%] 449s tests/test_server.py::test_set_state_status[OFF-Synchronous-True] PASSED [ 70%] 449s tests/test_server.py::test_set_state_status[OFF-Asyncio-False] FAILED [ 70%] 449s tests/test_server.py::test_set_state_status[OFF-Asyncio-True] FAILED [ 70%] 449s tests/test_server.py::test_set_state_status[OFF-Gevent-False] PASSED [ 70%] 449s tests/test_server.py::test_set_state_status[OFF-Gevent-True] PASSED [ 70%] 449s tests/test_server.py::test_set_state_status[CLOSE-Synchronous-False] PASSED [ 70%] 449s tests/test_server.py::test_set_state_status[CLOSE-Synchronous-True] PASSED [ 70%] 450s tests/test_server.py::test_set_state_status[CLOSE-Asyncio-False] FAILED [ 70%] 450s tests/test_server.py::test_set_state_status[CLOSE-Asyncio-True] FAILED [ 71%] 450s tests/test_server.py::test_set_state_status[CLOSE-Gevent-False] PASSED [ 71%] 450s tests/test_server.py::test_set_state_status[CLOSE-Gevent-True] PASSED [ 71%] 450s tests/test_server.py::test_set_state_status[OPEN-Synchronous-False] PASSED [ 71%] 450s tests/test_server.py::test_set_state_status[OPEN-Synchronous-True] PASSED [ 71%] 450s tests/test_server.py::test_set_state_status[OPEN-Asyncio-False] FAILED [ 71%] 450s tests/test_server.py::test_set_state_status[OPEN-Asyncio-True] FAILED [ 71%] 450s tests/test_server.py::test_set_state_status[OPEN-Gevent-False] PASSED [ 71%] 451s tests/test_server.py::test_set_state_status[OPEN-Gevent-True] PASSED [ 71%] 451s tests/test_server.py::test_set_state_status[INSERT-Synchronous-False] PASSED [ 71%] 451s tests/test_server.py::test_set_state_status[INSERT-Synchronous-True] PASSED [ 71%] 451s tests/test_server.py::test_set_state_status[INSERT-Asyncio-False] FAILED [ 71%] 451s tests/test_server.py::test_set_state_status[INSERT-Asyncio-True] FAILED [ 72%] 451s tests/test_server.py::test_set_state_status[INSERT-Gevent-False] PASSED [ 72%] 451s tests/test_server.py::test_set_state_status[INSERT-Gevent-True] PASSED [ 72%] 451s tests/test_server.py::test_set_state_status[EXTRACT-Synchronous-False] PASSED [ 72%] 451s tests/test_server.py::test_set_state_status[EXTRACT-Synchronous-True] PASSED [ 72%] 451s tests/test_server.py::test_set_state_status[EXTRACT-Asyncio-False] FAILED [ 72%] 452s tests/test_server.py::test_set_state_status[EXTRACT-Asyncio-True] FAILED [ 72%] 452s tests/test_server.py::test_set_state_status[EXTRACT-Gevent-False] PASSED [ 72%] 452s tests/test_server.py::test_set_state_status[EXTRACT-Gevent-True] PASSED [ 72%] 452s tests/test_server.py::test_set_state_status[MOVING-Synchronous-False] PASSED [ 72%] 452s tests/test_server.py::test_set_state_status[MOVING-Synchronous-True] PASSED [ 72%] 452s tests/test_server.py::test_set_state_status[MOVING-Asyncio-False] FAILED [ 72%] 452s tests/test_server.py::test_set_state_status[MOVING-Asyncio-True] FAILED [ 73%] 452s tests/test_server.py::test_set_state_status[MOVING-Gevent-False] PASSED [ 73%] 452s tests/test_server.py::test_set_state_status[MOVING-Gevent-True] PASSED [ 73%] 452s tests/test_server.py::test_set_state_status[STANDBY-Synchronous-False] PASSED [ 73%] 452s tests/test_server.py::test_set_state_status[STANDBY-Synchronous-True] PASSED [ 73%] 453s tests/test_server.py::test_set_state_status[STANDBY-Asyncio-False] FAILED [ 73%] 453s tests/test_server.py::test_set_state_status[STANDBY-Asyncio-True] FAILED [ 73%] 453s tests/test_server.py::test_set_state_status[STANDBY-Gevent-False] PASSED [ 73%] 453s tests/test_server.py::test_set_state_status[STANDBY-Gevent-True] PASSED [ 73%] 453s tests/test_server.py::test_set_state_status[FAULT-Synchronous-False] PASSED [ 73%] 453s tests/test_server.py::test_set_state_status[FAULT-Synchronous-True] PASSED [ 73%] 453s tests/test_server.py::test_set_state_status[FAULT-Asyncio-False] FAILED [ 74%] 453s tests/test_server.py::test_set_state_status[FAULT-Asyncio-True] FAILED [ 74%] 453s tests/test_server.py::test_set_state_status[FAULT-Gevent-False] PASSED [ 74%] 453s tests/test_server.py::test_set_state_status[FAULT-Gevent-True] PASSED [ 74%] 454s tests/test_server.py::test_set_state_status[INIT-Synchronous-False] PASSED [ 74%] 454s tests/test_server.py::test_set_state_status[INIT-Synchronous-True] PASSED [ 74%] 454s tests/test_server.py::test_set_state_status[INIT-Asyncio-False] FAILED [ 74%] 454s tests/test_server.py::test_set_state_status[INIT-Asyncio-True] FAILED [ 74%] 454s tests/test_server.py::test_set_state_status[INIT-Gevent-False] PASSED [ 74%] 454s tests/test_server.py::test_set_state_status[INIT-Gevent-True] PASSED [ 74%] 454s tests/test_server.py::test_set_state_status[RUNNING-Synchronous-False] PASSED [ 74%] 454s tests/test_server.py::test_set_state_status[RUNNING-Synchronous-True] PASSED [ 74%] 454s tests/test_server.py::test_set_state_status[RUNNING-Asyncio-False] FAILED [ 75%] 455s tests/test_server.py::test_set_state_status[RUNNING-Asyncio-True] FAILED [ 75%] 455s tests/test_server.py::test_set_state_status[RUNNING-Gevent-False] PASSED [ 75%] 455s tests/test_server.py::test_set_state_status[RUNNING-Gevent-True] PASSED [ 75%] 455s tests/test_server.py::test_set_state_status[ALARM-Synchronous-False] PASSED [ 75%] 455s tests/test_server.py::test_set_state_status[ALARM-Synchronous-True] PASSED [ 75%] 455s tests/test_server.py::test_set_state_status[ALARM-Asyncio-False] FAILED [ 75%] 455s tests/test_server.py::test_set_state_status[ALARM-Asyncio-True] FAILED [ 75%] 455s tests/test_server.py::test_set_state_status[ALARM-Gevent-False] PASSED [ 75%] 455s tests/test_server.py::test_set_state_status[ALARM-Gevent-True] PASSED [ 75%] 455s tests/test_server.py::test_set_state_status[DISABLE-Synchronous-False] PASSED [ 75%] 455s tests/test_server.py::test_set_state_status[DISABLE-Synchronous-True] PASSED [ 75%] 456s tests/test_server.py::test_set_state_status[DISABLE-Asyncio-False] FAILED [ 76%] 456s tests/test_server.py::test_set_state_status[DISABLE-Asyncio-True] FAILED [ 76%] 456s tests/test_server.py::test_set_state_status[DISABLE-Gevent-False] PASSED [ 76%] 456s tests/test_server.py::test_set_state_status[DISABLE-Gevent-True] PASSED [ 76%] 456s tests/test_server.py::test_set_state_status[UNKNOWN-Synchronous-False] PASSED [ 76%] 456s tests/test_server.py::test_set_state_status[UNKNOWN-Synchronous-True] PASSED [ 76%] 456s tests/test_server.py::test_set_state_status[UNKNOWN-Asyncio-False] FAILED [ 76%] 456s tests/test_server.py::test_set_state_status[UNKNOWN-Asyncio-True] FAILED [ 76%] 456s tests/test_server.py::test_set_state_status[UNKNOWN-Gevent-False] PASSED [ 76%] 456s tests/test_server.py::test_set_state_status[UNKNOWN-Gevent-True] PASSED [ 76%] 456s tests/test_server.py::test_user_dev_state_status[Synchronous] PASSED [ 76%] 457s tests/test_server.py::test_user_dev_state_status[Asyncio] FAILED [ 77%] 457s tests/test_server.py::test_user_dev_state_status[Gevent] PASSED [ 77%] 457s tests/test_server.py::test_attr_quality_checked_with_state[Synchronous] PASSED [ 77%] 457s tests/test_server.py::test_attr_quality_checked_with_state[Asyncio] FAILED [ 77%] 457s tests/test_server.py::test_attr_quality_checked_with_state[Gevent] PASSED [ 77%] 457s tests/test_server.py::test_device_get_attr_config[Synchronous] PASSED [ 77%] 457s tests/test_server.py::test_device_get_attr_config[Asyncio] FAILED [ 77%] 457s tests/test_server.py::test_device_get_attr_config[Gevent] PASSED [ 77%] 457s tests/test_server.py::test_device_set_attr_config[Synchronous] PASSED [ 77%] 458s tests/test_server.py::test_device_set_attr_config[Asyncio] FAILED [ 77%] 458s tests/test_server.py::test_device_set_attr_config[Gevent] PASSED [ 77%] 458s tests/test_server.py::test_default_units PASSED [ 77%] 458s tests/test_server.py::test_custom_units PASSED [ 78%] 458s tests/test_server.py::test_inheritance_overrides_a_property PASSED [ 78%] 458s tests/test_server.py::test_inheritance_override_dev_status PASSED [ 78%] 458s tests/test_server.py::test_inheritance_init_device PASSED [ 78%] 458s tests/test_server.py::test_inheritance_with_decorated_attributes PASSED [ 78%] 458s tests/test_server.py::test_inheritance_with_undecorated_attributes PASSED [ 78%] 458s tests/test_server.py::test_inheritance_with_undecorated_attribute_and_bound_methods PASSED [ 78%] 458s tests/test_server.py::test_inheritance_with_undecorated_attributes_and_unbound_functions PASSED [ 78%] 458s tests/test_server.py::test_inheritance_command_is_allowed_by_naming_convention PASSED [ 78%] 458s tests/test_server.py::test_inheritance_command_is_allowed_by_kwarg_method PASSED [ 78%] 458s tests/test_server.py::test_inheritance_command_is_allowed_by_kwarg_unbound_function PASSED [ 78%] 458s tests/test_server.py::test_exception_propagation[Synchronous] PASSED [ 78%] 458s tests/test_server.py::test_exception_propagation[Asyncio] FAILED [ 79%] 458s tests/test_server.py::test_exception_propagation[Gevent] PASSED [ 79%] 458s tests/test_server.py::test_arguments[linux-applicable_os0-MyDs instance --nodb --port 1234-expected_output0] PASSED [ 79%] 459s tests/test_server.py::test_arguments[linux-applicable_os1-MyDs -port 1234 -host myhost instance-expected_output1] PASSED [ 79%] 459s tests/test_server.py::test_arguments[linux-applicable_os2-MyDs instance --ORBendPoint giop:tcp:_:1234-expected_output2] PASSED [ 79%] 459s tests/test_server.py::test_arguments[linux-applicable_os3-MyDs instance -nodb -port 1000 -dlist a/b/c;d/e/f-expected_output3] PASSED [ 79%] 459s tests/test_server.py::test_arguments[linux-applicable_os4-MyDs instance -file a/b/c-expected_output4] PASSED [ 79%] 459s tests/test_server.py::test_arguments[linux-applicable_os5-MyDs instance -nodb-expected_output5] PASSED [ 79%] 459s tests/test_server.py::test_arguments[linux-applicable_os6-MyDs instance -dlist a/b/c;d/e/f-expected_output6] PASSED [ 79%] 459s tests/test_server.py::test_arguments[linux-applicable_os7-MyDs instance -vvvv-expected_output7] PASSED [ 79%] 459s tests/test_server.py::test_arguments[linux-applicable_os8-MyDs instance --verbose --verbose --verbose --verbose-expected_output8] PASSED [ 79%] 459s tests/test_server.py::test_arguments[linux-applicable_os9-MyDs instance -v4-expected_output9] PASSED [ 80%] 459s tests/test_server.py::test_arguments[linux-applicable_os10-MyDs instance -v 4-expected_output10] PASSED [ 80%] 459s tests/test_server.py::test_arguments[linux-applicable_os11-MyDs instance -dbg -i -s -u-expected_output11] PASSED [ 80%] 459s tests/test_server.py::test_arguments[linux-applicable_os12-MyDs instance -ORBtest1 test1 --ORBtest2 test2-expected_output12] PASSED [ 80%] 459s tests/test_server.py::test_arguments[linux-applicable_os13-MyDs ORBinstance -ORBtest myORBparam-expected_output13] PASSED [ 80%] 459s tests/test_server.py::test_arguments[linux-applicable_os14-MyDs instance -nodb -ORBendPoint giop:tcp:localhost:1234 -ORBendPointPublish giop:tcp:myhost.local:2345-expected_output14] PASSED [ 80%] 459s tests/test_server.py::test_arguments[linux-applicable_os15-MyDs instance -ORBtest1 test1 --orbinvalid value-expected_output15] PASSED [ 80%] 459s tests/test_server.py::test_arguments[win-applicable_os0-MyDs instance --nodb --port 1234-expected_output0] PASSED [ 80%] 459s tests/test_server.py::test_arguments[win-applicable_os1-MyDs -port 1234 -host myhost instance-expected_output1] PASSED [ 80%] 459s tests/test_server.py::test_arguments[win-applicable_os2-MyDs instance --ORBendPoint giop:tcp:_:1234-expected_output2] PASSED [ 80%] 459s tests/test_server.py::test_arguments[win-applicable_os3-MyDs instance -nodb -port 1000 -dlist a/b/c;d/e/f-expected_output3] PASSED [ 80%] 459s tests/test_server.py::test_arguments[win-applicable_os4-MyDs instance -file a/b/c-expected_output4] PASSED [ 80%] 459s tests/test_server.py::test_arguments[win-applicable_os5-MyDs instance -nodb-expected_output5] PASSED [ 81%] 459s tests/test_server.py::test_arguments[win-applicable_os6-MyDs instance -dlist a/b/c;d/e/f-expected_output6] PASSED [ 81%] 459s tests/test_server.py::test_arguments[win-applicable_os7-MyDs instance -vvvv-expected_output7] PASSED [ 81%] 459s tests/test_server.py::test_arguments[win-applicable_os8-MyDs instance --verbose --verbose --verbose --verbose-expected_output8] PASSED [ 81%] 459s tests/test_server.py::test_arguments[win-applicable_os9-MyDs instance -v4-expected_output9] PASSED [ 81%] 459s tests/test_server.py::test_arguments[win-applicable_os10-MyDs instance -v 4-expected_output10] PASSED [ 81%] 459s tests/test_server.py::test_arguments[win-applicable_os11-MyDs instance -dbg -i -s -u-expected_output11] PASSED [ 81%] 459s tests/test_server.py::test_arguments[win-applicable_os12-MyDs instance -ORBtest1 test1 --ORBtest2 test2-expected_output12] PASSED [ 81%] 459s tests/test_server.py::test_arguments[win-applicable_os13-MyDs ORBinstance -ORBtest myORBparam-expected_output13] PASSED [ 81%] 459s tests/test_server.py::test_arguments[win-applicable_os14-MyDs instance -nodb -ORBendPoint giop:tcp:localhost:1234 -ORBendPointPublish giop:tcp:myhost.local:2345-expected_output14] PASSED [ 81%] 459s tests/test_server.py::test_arguments[win-applicable_os15-MyDs instance -ORBtest1 test1 --orbinvalid value-expected_output15] PASSED [ 81%] 459s tests/test_server.py::test_server_init_hook_called[Synchronous] PASSED [ 81%] 459s tests/test_server.py::test_server_init_hook_called[Asyncio] SKIPPED [ 82%] 459s tests/test_server.py::test_server_init_hook_called[Gevent] PASSED [ 82%] 459s tests/test_server.py::test_server_init_hook_change_state PASSED [ 82%] 459s tests/test_server.py::test_asyncio_server_init_hook_change_state FAILED [ 82%] 459s tests/test_server.py::test_server_init_hook_called_after_init PASSED [ 82%] 459s tests/test_server.py::test_async_server_init_hook_called_after_init FAILED [ 82%] 459s tests/test_server.py::test_server_init_hook_exception PASSED [ 82%] 460s tests/test_server.py::test_asyncio_server_init_hook_exception FAILED [ 82%] 460s tests/test_server.py::test_server_init_hook_with_low_level_api_called PASSED [ 82%] 460s tests/test_server.py::test_server_init_hook_with_low_level_api_change_state PASSED [ 82%] 460s tests/test_server.py::test_server_init_hook_with_low_level_api_called_after_init PASSED [ 82%] 460s tests/test_server.py::test_server_init_hook_with_low_level_api_exception PASSED [ 82%] 460s tests/test_server.py::test_server_init_multiple_devices PASSED [ 83%] 460s tests/test_server.py::test_server_init_hook_subscribe_event_multiple_devices XFAIL [ 83%] 460s tests/test_server.py::test_deprecation_warning_for_sync_attr_com_methods_in_asyncio_device FAILED [ 83%] 460s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[init_device] FAILED [ 83%] 461s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[delete_device] FAILED [ 83%] 461s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_state] FAILED [ 83%] 461s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_status] FAILED [ 83%] 461s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[read_attr_hardware] FAILED [ 83%] 461s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[always_executed_hook] FAILED [ 83%] 461s tests/test_server.py::test_no_sync_attribute_locks[Synchronous] SKIPPED [ 83%] 462s tests/test_server.py::test_no_sync_attribute_locks[Asyncio] SKIPPED [ 83%] 462s tests/test_server.py::test_no_sync_attribute_locks[Gevent] SKIPPED (...) [ 84%] 462s tests/test_server.py::test_read_slow_and_fast_attributes_with_asyncio SKIPPED [ 84%] 462s tests/test_server.py::test_get_version_info_classic_api PASSED [ 84%] 462s tests/test_server.py::test_get_version_info_high_level_api PASSED [ 84%] 462s tests/test_server.py::test_add_version_info_classic_api PASSED [ 84%] 462s tests/test_server.py::test_add_version_info_high_level_api PASSED [ 84%] 462s tests/test_server.py::test_restart_server_command_cpp_and_py SKIPPED [ 84%] 462s tests/test_server.py::test_attr_data_default_fwd_properties PASSED [ 84%] 462s tests/test_server.py::test_attr_data_default_properties PASSED [ 84%] 462s tests/test_server.py::test_attr_data_default_properties_throws_on_unknown PASSED [ 84%] 462s tests/test_server.py::test_attr_data_enum_labels PASSED [ 84%] 462s tests/test_server.py::test_attr_data_to_attr PASSED [ 84%] 462s tests/test_server.py::test_from_attr_info_exceptions[some string-Wrong data type for value for describing attribute] PASSED [ 85%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info1-Wrong number of argument for describing attribute] PASSED [ 85%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info2-Wrong number of argument for describing attribute] PASSED [ 85%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info3-Wrong data type for describing mandatory information] PASSED [ 85%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info4-Wrong data type for describing mandatory information] PASSED [ 85%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info5-Wrong data type in attribute argument for attribute] PASSED [ 85%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info6-Wrong data format in attribute argument for attribute] PASSED [ 85%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info7-Sequence describing mandatory attribute parameters for scalar attribute must have 3 elements] PASSED [ 85%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info8-Sequence describing mandatory attribute parameters for spectrum attribute must have 4 elements] PASSED [ 85%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info9-mandatory dim_x attribute parameter for spectrum attribute must be an integer] PASSED [ 85%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info10-Sequence describing mandatory attribute parameters for image attribute must have 5 elements] PASSED [ 85%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info11-mandatory dim_x attribute parameter for image attribute must be an integer] PASSED [ 85%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info12-mandatory dim_y attribute parameter for image attribute must be an integer] PASSED [ 86%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info13-Wrong data write type in attribute argument] PASSED [ 86%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info14-Wrong display level] PASSED [ 86%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info15-Wrong polling period] PASSED [ 86%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info16-Wrong memorized value] PASSED [ 86%] 462s tests/test_server.py::test_from_attr_info_exceptions[attr_info17-Missing 'enum_labels' key in attr_list definition] PASSED [ 86%] 462s tests/test_server.py::test_from_attr_info_hw_memorized PASSED [ 86%] 462s tests/test_server.py::test_from_attr_info_memorized PASSED [ 86%] 462s tests/test_server.py::test_device_repr_does_not_segfault_with_pytest PASSED [ 86%] 462s tests/test_telemetry.py::test_telemetry_available_constant_exists PASSED [ 86%] 462s tests/test_telemetry.py::test_telemetry_packages_available_if_telemetry_active SKIPPED [ 86%] 462s tests/test_telemetry.py::test_init_device_and_basic_span_details[Synchronous] SKIPPED [ 87%] 462s tests/test_telemetry.py::test_init_device_and_basic_span_details[Asyncio] SKIPPED [ 87%] 462s tests/test_telemetry.py::test_init_device_and_basic_span_details[Gevent] SKIPPED [ 87%] 462s tests/test_telemetry.py::test_delete_device[Synchronous] SKIPPED (Te...) [ 87%] 462s tests/test_telemetry.py::test_delete_device[Asyncio] SKIPPED (Teleme...) [ 87%] 462s tests/test_telemetry.py::test_delete_device[Gevent] SKIPPED (Telemet...) [ 87%] 462s tests/test_telemetry.py::test_state[Synchronous] SKIPPED (Telemetry ...) [ 87%] 462s tests/test_telemetry.py::test_state[Asyncio] SKIPPED (Telemetry not ...) [ 87%] 462s tests/test_telemetry.py::test_state[Gevent] SKIPPED (Telemetry not a...) [ 87%] 462s tests/test_telemetry.py::test_static_command[Synchronous] SKIPPED (T...) [ 87%] 462s tests/test_telemetry.py::test_static_command[Asyncio] SKIPPED (Telem...) [ 87%] 462s tests/test_telemetry.py::test_static_command[Gevent] SKIPPED (Teleme...) [ 87%] 462s tests/test_telemetry.py::test_static_attribute[Synchronous] SKIPPED [ 88%] 462s tests/test_telemetry.py::test_static_attribute[Asyncio] SKIPPED (Tel...) [ 88%] 462s tests/test_telemetry.py::test_static_attribute[Gevent] SKIPPED (Tele...) [ 88%] 462s tests/test_telemetry.py::test_user_span_traceid_propagates_to_tango[Synchronous] SKIPPED [ 88%] 462s tests/test_telemetry.py::test_user_span_traceid_propagates_to_tango[Asyncio] SKIPPED [ 88%] 462s tests/test_telemetry.py::test_user_span_traceid_propagates_to_tango[Gevent] SKIPPED [ 88%] 462s tests/test_telemetry.py::test_base_device_kernel_tracing_disabled_by_default SKIPPED [ 88%] 462s tests/test_telemetry.py::test_base_device_traces_if_kernel_tracing_enabled[Synchronous] SKIPPED [ 88%] 462s tests/test_telemetry.py::test_base_device_traces_if_kernel_tracing_enabled[Asyncio] SKIPPED [ 88%] 462s tests/test_telemetry.py::test_base_device_traces_if_kernel_tracing_enabled[Gevent] SKIPPED [ 88%] 462s tests/test_telemetry.py::test_no_device_traces_if_device_tracing_disabled[Synchronous] SKIPPED [ 88%] 462s tests/test_telemetry.py::test_no_device_traces_if_device_tracing_disabled[Asyncio] SKIPPED [ 88%] 462s tests/test_telemetry.py::test_no_device_traces_if_device_tracing_disabled[Gevent] SKIPPED [ 89%] 462s tests/test_test_context.py::test_no_warnings_in_test_context PASSED [ 89%] 462s tests/test_test_context.py::test_single_device[Synchronous] PASSED [ 89%] 463s tests/test_test_context.py::test_single_device[Asyncio] FAILED [ 89%] 463s tests/test_test_context.py::test_single_device[Gevent] PASSED [ 89%] 463s tests/test_test_context.py::test_single_device_old_api PASSED [ 89%] 463s tests/test_test_context.py::test_nested_single_device_in_same_process_failure SKIPPED [ 89%] 464s tests/test_test_context.py::test_nested_single_device_in_different_processes_success_without_short_names PASSED [ 89%] 465s tests/test_test_context.py::test_nested_single_device_in_different_processes_failure_with_short_names PASSED [ 89%] 465s tests/test_test_context.py::test_multi_devices_info[SimpleDevice-SimpleDevice] PASSED [ 89%] 465s tests/test_test_context.py::test_multi_devices_info[tango.test_utils.SimpleDevice-SimpleDevice] PASSED [ 89%] 465s tests/test_test_context.py::test_multi_devices_info[class_field2-ClassicAPISimpleDeviceImpl] PASSED [ 90%] 465s tests/test_test_context.py::test_multi_devices_info[class_field3-ClassicAPISimpleDeviceImpl] PASSED [ 90%] 465s tests/test_test_context.py::test_multi_devices_info[class_field4-ClassicAPISimpleDeviceImpl] PASSED [ 90%] 465s tests/test_test_context.py::test_multi_devices_info[class_field5-ClassicAPISimpleDeviceImpl] PASSED [ 90%] 465s tests/test_test_context.py::test_multi_with_single_device[Synchronous] PASSED [ 90%] 465s tests/test_test_context.py::test_multi_with_single_device[Asyncio] FAILED [ 90%] 465s tests/test_test_context.py::test_multi_with_single_device[Gevent] PASSED [ 90%] 465s tests/test_test_context.py::test_multi_with_single_device_old_api PASSED [ 90%] 465s tests/test_test_context.py::test_multi_with_two_devices[Synchronous] PASSED [ 90%] 466s tests/test_test_context.py::test_multi_with_two_devices[Asyncio] FAILED [ 90%] 466s tests/test_test_context.py::test_multi_with_two_devices[Gevent] PASSED [ 90%] 466s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1GreenModeUnspecified-Device2GreenModeUnspecified-None] PASSED [ 90%] 466s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1GreenModeUnspecified-Device2Synchronous-None] PASSED [ 91%] 466s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1GreenModeUnspecified-Device2Gevent-ValueError] PASSED [ 91%] 466s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1GreenModeUnspecified-Device2Asyncio-ValueError] PASSED [ 91%] 466s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Synchronous-Device2GreenModeUnspecified-None] PASSED [ 91%] 466s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Synchronous-Device2Synchronous-None] PASSED [ 91%] 466s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Synchronous-Device2Gevent-ValueError] PASSED [ 91%] 466s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Synchronous-Device2Asyncio-ValueError] PASSED [ 91%] 466s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2GreenModeUnspecified-ValueError] PASSED [ 91%] 466s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Synchronous-ValueError] PASSED [ 91%] 466s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Gevent-ValueError] PASSED [ 91%] 466s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Asyncio-None] FAILED [ 91%] 466s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Gevent-Device2GreenModeUnspecified-ValueError] PASSED [ 91%] 466s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Gevent-Device2Synchronous-ValueError] PASSED [ 92%] 466s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Gevent-Device2Gevent-None] PASSED [ 92%] 466s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Gevent-Device2Asyncio-ValueError] PASSED [ 92%] 466s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Synchronous-Asyncio-Asyncio-None-SynchronousExecutor] FAILED [ 92%] 466s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Synchronous-Gevent-Gevent-None-SynchronousExecutor] PASSED [ 92%] 467s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Synchronous-Synchronous-None-AsyncioExecutor] FAILED [ 92%] 467s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Gevent-Gevent-None-AsyncioExecutor] FAILED [ 92%] 467s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Gevent-Synchronous-Synchronous-None-GeventExecutor] PASSED [ 92%] 467s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Gevent-Asyncio-Asyncio-None-GeventExecutor] FAILED [ 92%] 467s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Synchronous-Asyncio-None-SynchronousExecutor] FAILED [ 92%] 467s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Synchronous-Gevent-None-SynchronousExecutor] PASSED [ 92%] 467s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Gevent-Synchronous-None-GeventExecutor] PASSED [ 92%] 467s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Gevent-Asyncio-None-GeventExecutor] FAILED [ 93%] 467s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-None-Synchronous-None-SynchronousExecutor] PASSED [ 93%] 468s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Synchronous-DeprecationWarning-AsyncioExecutor] FAILED [ 93%] 468s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Gevent-DeprecationWarning-AsyncioExecutor] FAILED [ 93%] 468s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-None-Asyncio-RuntimeError-AsyncioExecutor] PASSED [ 93%] 469s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-None-Gevent-RuntimeError-GeventExecutor] PASSED [ 93%] 469s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-None-Asyncio-RuntimeError-AsyncioExecutor] PASSED [ 93%] 470s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Gevent-None-Gevent-RuntimeError-GeventExecutor] PASSED [ 93%] 470s tests/test_test_context.py::test_multi_with_async_devices_initialised FAILED [ 93%] 470s tests/test_test_context.py::test_multi_device_access_via_test_context_methods PASSED [ 93%] 471s tests/test_test_context.py::test_multi_short_name_device_proxy_access_without_tango_db PASSED [ 93%] 471s tests/test_test_context.py::test_multi_short_name_device_proxy_with_dependencies_access_without_tango_db PASSED [ 94%] 471s tests/test_test_context.py::test_multi_short_name_attribute_proxy_access_without_tango_db PASSED [ 94%] 471s tests/test_test_context.py::test_single_short_name_device_proxy_access_without_tango_db PASSED [ 94%] 471s tests/test_test_context.py::test_single_short_name_attribute_proxy_access_without_tango_db PASSED [ 94%] 472s tests/test_test_context.py::test_multi_short_name_access_fails_if_override_disabled PASSED [ 94%] 472s tests/test_test_context.py::test_multi_device_proxy_cached PASSED [ 94%] 472s tests/test_test_context.py::test_multi_with_two_devices_with_properties[Synchronous] PASSED [ 94%] 472s tests/test_test_context.py::test_multi_with_two_devices_with_properties[Asyncio] FAILED [ 94%] 472s tests/test_test_context.py::test_multi_with_two_devices_with_properties[Gevent] PASSED [ 94%] 472s tests/test_test_context.py::test_multi_raises_on_invalid_file_database_properties PASSED [ 94%] 472s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config0] PASSED [ 94%] 472s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config1] PASSED [ 94%] 472s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config2] PASSED [ 95%] 472s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config3] PASSED [ 95%] 472s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config4] PASSED [ 95%] 472s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config5] PASSED [ 95%] 472s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config6] PASSED [ 95%] 472s tests/test_test_context.py::test_multi_with_memorized_attribute_values[False-None-0] PASSED [ 95%] 473s tests/test_test_context.py::test_multi_with_memorized_attribute_values[False-1-0] PASSED [ 95%] 473s tests/test_test_context.py::test_multi_with_memorized_attribute_values[True-None-0] PASSED [ 95%] 473s tests/test_test_context.py::test_multi_with_memorized_attribute_values[True-1-1] PASSED [ 95%] 473s tests/test_test_context.py::test_single_with_memorized_attribute_values[False-None-0] PASSED [ 95%] 473s tests/test_test_context.py::test_single_with_memorized_attribute_values[False-1-0] PASSED [ 95%] 473s tests/test_test_context.py::test_single_with_memorized_attribute_values[True-None-0] PASSED [ 95%] 473s tests/test_test_context.py::test_single_with_memorized_attribute_values[True-1-1] PASSED [ 96%] 473s tests/test_test_context.py::test_empty_string_property_bug[str-property_value0- ] PASSED [ 96%] 473s tests/test_test_context.py::test_empty_string_property_bug[property_type1-property_value1-expected_outcome1] PASSED [ 96%] 473s tests/test_test_context.py::test_empty_string_property_bug[property_type2-property_value2-expected_outcome2] PASSED [ 96%] 473s tests/test_test_context.py::test_test_context_async_device_proxy[True] FAILED [ 96%] 474s tests/test_test_context.py::test_test_context_async_device_proxy[False] FAILED [ 96%] 474s tests/test_test_context.py::test_test_context_multi_async_device_proxy[True] FAILED [ 96%] 474s tests/test_test_context.py::test_test_context_multi_async_device_proxy[False] FAILED [ 96%] 475s tests/test_test_context.py::test_test_context_future_and_gevent_device_proxy[True-Futures] PASSED [ 96%] 476s tests/test_test_context.py::test_test_context_future_and_gevent_device_proxy[True-Gevent] PASSED [ 96%] 476s tests/test_test_context.py::test_test_context_future_and_gevent_device_proxy[False-Futures] PASSED [ 96%] 476s tests/test_test_context.py::test_test_context_future_and_gevent_device_proxy[False-Gevent] PASSED [ 97%] 476s tests/test_test_context.py::test_forwarded_attributes[True] XFAIL (D...) [ 97%] 476s tests/test_test_context.py::test_forwarded_attributes[False] XFAIL (...) [ 97%] 476s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[None-a/b/c-a/b/c] PASSED [ 97%] 476s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[None-a/b/c/d-a/b/c/d] PASSED [ 97%] 476s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[None-tango://host:12/a/b/c-tango://host:12/a/b/c] PASSED [ 97%] 476s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[None-tango://host:12/a/b/c#dbase=no-tango://host:12/a/b/c#dbase=no] PASSED [ 97%] 476s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[None-no://trl/validation-no://trl/validation] PASSED [ 97%] 476s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[tango://host:12-a/b/c-tango://host:12/a/b/c] PASSED [ 97%] 476s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[tango://host:12-a/b/c/d-tango://host:12/a/b/c/d] PASSED [ 97%] 476s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[tango://host:12-tango://host:12/a/b/c-tango://host:12/a/b/c] PASSED [ 97%] 476s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[tango://host:12#dbase=no-a/b/c-tango://host:12/a/b/c#dbase=no] PASSED [ 97%] 476s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[tango://host:12#dbase=yes-a/b/c-tango://host:12/a/b/c#dbase=yes] PASSED [ 98%] 476s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[tango://127.0.0.1:12-a/b/c-tango://127.0.0.1:12/a/b/c] PASSED [ 98%] 476s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[host:123-a/b/c] PASSED [ 98%] 476s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://-a/b/c] PASSED [ 98%] 476s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://:123-a/b/c] PASSED [ 98%] 476s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host-a/b/c] PASSED [ 98%] 476s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host:0-a/b/c] PASSED [ 98%] 476s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host:12/path-a/b/c] PASSED [ 98%] 476s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host:123?query=1-a/b/c] PASSED [ 98%] 476s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host:123#dbase=invalid-a/b/c] PASSED [ 98%] 476s tests/test_utils.py::test_global_state_default_set_and_clear PASSED [ 98%] 476s tests/test_utils.py::test_clear_global_var_without_set_does_not_raise PASSED [ 98%] 476s tests/test_utils.py::test_get_tango_type_valid PASSED [ 99%] 476s tests/test_utils.py::test_get_tango_type_invalid_raises_type_error PASSED [ 99%] 476s tests/test_utils.py::test_sequence_to_string_vector_and_back PASSED [ 99%] 476s tests/test_utils.py::test_sequence_to_double_vector_and_back PASSED [ 99%] 476s tests/test_utils.py::test_sequence_to_dbdevinfo_vector_and_back PASSED [ 99%] 476s tests/test_utils.py::test_sequence_to_dbdevexportinfo_vector_and_back PASSED [ 99%] 476s tests/test_utils.py::test_sequence_to_dbdata_vector_and_back PASSED [ 99%] 476s tests/test_utils.py::test_sequence_to_dbdevimport_vector_and_back PASSED [ 99%] 476s tests/test_utils.py::test_sequence_to_dbhistorylist_vector_and_back PASSED [ 99%] 476s tests/test_utils.py::test_sequence_to_devicedatalist_vector_and_back PASSED [ 99%] 476s tests/test_utils.py::test_sequence_to_devicedatahistorylist_vector_and_back PASSED [ 99%] 476s tests/test_zzz_deprecated_pytango_module.py::test_import_aliased_module PASSED [100%] 476s 476s ==================================== ERRORS ==================================== 476s ____ ERROR at setup of test_read_write_attribute_with_green_modes[Asyncio] _____ 476s fixturedef = 476s request = > 476s 476s @pytest.hookimpl(wrapper=True) 476s def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None: 476s asyncio_mode = _get_asyncio_mode(request.config) 476s if not _is_asyncio_fixture_function(fixturedef.func): 476s if asyncio_mode == Mode.STRICT: 476s # Ignore async fixtures without explicit asyncio mark in strict mode 476s # This applies to pytest_trio fixtures, for example 476s > return (yield) 476s ^^^^^ 476s 476s /usr/lib/python3/dist-packages/pytest_asyncio/plugin.py:728: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s tests/conftest.py:201: in tango_test_with_green_modes 476s proxy = wait_for_proxy(host, proc, device, green_mode) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s tests/conftest.py:176: in wait_for_proxy 476s proxy = get_proxy(host, port, device, green_mode) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s tests/conftest.py:167: in get_proxy 476s return device_proxy_map[green_mode](access) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 476s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s =================================== FAILURES =================================== 476s ___________________ test_green_mode_kwarg_for_proxy_methods ____________________ 476s @pytest.mark.asyncio 476s async def test_green_mode_kwarg_for_proxy_methods(): 476s with DeviceTestContext(ServerTest, device_name="test/test_device/1"): 476s > dev = await get_device_proxy("test/test_device/1", green_mode=GreenMode.Asyncio) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_async.py:41: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 476s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stdout call ----------------------------- 476s Ready to accept request 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ____________________ test_read_write_attribute[int-Asyncio] ____________________ 476s attribute_typed_values = (, (1, 2, -65535, 23), . at 0x74fec6325fe0>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_attribute(attribute_typed_values, server_green_mode): 476s dtype, values, expected = attribute_typed_values 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s async def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s async def attr(self, value): 476s self.attr_value = value 476s 476s async def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s def attr(self, value): 476s self.attr_value = value 476s 476s def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:131: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ___________________ test_read_write_attribute[float-Asyncio] ___________________ 476s attribute_typed_values = (, (2.71, 3.14, -3.4678e-09, 1.2678e+16), . at 0x74fec6326610>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_attribute(attribute_typed_values, server_green_mode): 476s dtype, values, expected = attribute_typed_values 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s async def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s async def attr(self, value): 476s self.attr_value = value 476s 476s async def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s def attr(self, value): 476s self.attr_value = value 476s 476s def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:131: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ____________________ test_read_write_attribute[str-Asyncio] ____________________ 476s attribute_typed_values = (, ('hey hey', 'my my', b'\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\...ÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'), . at 0x74fec6326c40>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_attribute(attribute_typed_values, server_green_mode): 476s dtype, values, expected = attribute_typed_values 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s async def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s async def attr(self, value): 476s self.attr_value = value 476s 476s async def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s def attr(self, value): 476s self.attr_value = value 476s 476s def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:131: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ___________________ test_read_write_attribute[bool-Asyncio] ____________________ 476s attribute_typed_values = (, (False, True, True, False), . at 0x74fec6327270>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_attribute(attribute_typed_values, server_green_mode): 476s dtype, values, expected = attribute_typed_values 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s async def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s async def attr(self, value): 476s self.attr_value = value 476s 476s async def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s def attr(self, value): 476s self.attr_value = value 476s 476s def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:131: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________ test_read_write_attribute[(int,)-Asyncio] ___________________ 476s attribute_typed_values = ((,), (array([1, 2]), (1, 2, 3), [9, 8, 7], [-65535, 2224], [0, 0]), . at 0x74fec63278a0>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_attribute(attribute_typed_values, server_green_mode): 476s dtype, values, expected = attribute_typed_values 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s async def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s async def attr(self, value): 476s self.attr_value = value 476s 476s async def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s def attr(self, value): 476s self.attr_value = value 476s 476s def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:131: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________ test_read_write_attribute[(float,)-Asyncio] __________________ 476s attribute_typed_values = ((,), (array([0.1, 0.2]), (0.1, 0.2, 0.3), [0.9, 0.8, 0.7], [-0.0063232], [0.0, 12560000000000.0]), . at 0x74fec6327ed0>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_attribute(attribute_typed_values, server_green_mode): 476s dtype, values, expected = attribute_typed_values 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s async def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s async def attr(self, value): 476s self.attr_value = value 476s 476s async def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s def attr(self, value): 476s self.attr_value = value 476s 476s def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:131: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________ test_read_write_attribute[(str,)-Asyncio] ___________________ 476s attribute_typed_values = ((,), (array(['foo', 'bar'], dtype='. at 0x74fec632c5c0>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_attribute(attribute_typed_values, server_green_mode): 476s dtype, values, expected = attribute_typed_values 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s async def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s async def attr(self, value): 476s self.attr_value = value 476s 476s async def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s def attr(self, value): 476s self.attr_value = value 476s 476s def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:131: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________ test_read_write_attribute[(bool,)-Asyncio] __________________ 476s attribute_typed_values = ((,), (array([ True, False]), [False, False, True], [True, False, False], [False], [True]), . at 0x74fec632cbf0>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_attribute(attribute_typed_values, server_green_mode): 476s dtype, values, expected = attribute_typed_values 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s async def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s async def attr(self, value): 476s self.attr_value = value 476s 476s async def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s def attr(self, value): 476s self.attr_value = value 476s 476s def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:131: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________ test_read_write_attribute[((int,),)-Asyncio] _________________ 476s attribute_typed_values = (((,),), (array([[1, 2], 476s [3, 4]]), ((1, 2, 3), (4, 5, 6)), [[-65535, 2224], [-65535, 2224]]), . at 0x74fec632d220>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_attribute(attribute_typed_values, server_green_mode): 476s dtype, values, expected = attribute_typed_values 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s async def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s async def attr(self, value): 476s self.attr_value = value 476s 476s async def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s def attr(self, value): 476s self.attr_value = value 476s 476s def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:131: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ________________ test_read_write_attribute[((float,),)-Asyncio] ________________ 476s attribute_typed_values = (((,),), (array([[0.1, 0.2], 476s [0.3, 0.4]]), ((0.1, 0.2, 0.3), (0.9, 0.8, 0.7)), [[-0.0063232, 0.0], [0.0, 12560000000000.0]]), . at 0x74fec632d850>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_attribute(attribute_typed_values, server_green_mode): 476s dtype, values, expected = attribute_typed_values 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s async def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s async def attr(self, value): 476s self.attr_value = value 476s 476s async def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s def attr(self, value): 476s self.attr_value = value 476s 476s def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:131: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________ test_read_write_attribute[((str,),)-Asyncio] _________________ 476s attribute_typed_values = (((,),), (array([['hi-hi', 'ha-ha'], 476s ['hu-hu', 'yuhuu']], dtype='. at 0x74fec632de80>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_attribute(attribute_typed_values, server_green_mode): 476s dtype, values, expected = attribute_typed_values 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s async def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s async def attr(self, value): 476s self.attr_value = value 476s 476s async def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s def attr(self, value): 476s self.attr_value = value 476s 476s def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:131: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ________________ test_read_write_attribute[((bool,),)-Asyncio] _________________ 476s attribute_typed_values = (((,),), (array([[ True, False], 476s [False, True]]), [[False, False, True], [True, False, False]], [[False]], [[True]]), . at 0x74fec632e4b0>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_attribute(attribute_typed_values, server_green_mode): 476s dtype, values, expected = attribute_typed_values 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s async def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s async def attr(self, value): 476s self.attr_value = value 476s 476s async def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s _is_allowed = None 476s 476s @attribute( 476s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 476s ) 476s def attr(self): 476s return self.attr_value 476s 476s @attr.write 476s def attr(self, value): 476s self.attr_value = value 476s 476s def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self._is_allowed 476s 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:131: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _____________ test_read_write_attribute_decorated_methods[Asyncio] _____________ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_attribute_decorated_methods(server_green_mode): 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class BaseTestDevice(Device): 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self.is_allowed = yesno 476s 476s else: 476s 476s class BaseTestDevice(Device): 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self.is_allowed = yesno 476s 476s class TestDevice(BaseTestDevice): 476s green_mode = server_green_mode 476s 476s attr_value = None 476s is_allowed = None 476s 476s attr = attribute(dtype=int, access=AttrWriteType.READ_WRITE) 476s 476s sync_code = textwrap.dedent( 476s """ 476s @general_decorator 476s def read_attr(self): 476s return self.attr_value 476s 476s @general_decorator 476s def write_attr(self, value): 476s self.attr_value = value 476s 476s @general_decorator 476s def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self.is_allowed 476s """ 476s ) 476s 476s if server_green_mode == GreenMode.Asyncio: 476s exec( 476s sync_code.replace("def", "async def").replace( 476s "general_decorator", "general_asyncio_decorator" 476s ) 476s ) 476s else: 476s exec(sync_code) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:421: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________ test_read_write_dynamic_attribute[low_level_read-Asyncio] ___________ 476s dynamic_attribute_read_function = 'def read_dyn_attr(self, attr):\n attr.set_value(self.attr_value)\n' 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_dynamic_attribute( 476s dynamic_attribute_read_function, server_green_mode 476s ): 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s attr_value = None 476s 476s @command 476s async def add_dyn_attr(self): 476s attr = attribute( 476s name="dyn_attr", 476s dtype=int, 476s access=AttrWriteType.READ_WRITE, 476s fget=self.read_dyn_attr, 476s fset=self.write_dyn_attr, 476s ) 476s await self.async_add_attribute(attr) 476s 476s @command 476s async def delete_dyn_attr(self): 476s await self.async_remove_attribute("dyn_attr") 476s 476s async def write_dyn_attr(self, attr): 476s self.attr_value = attr.get_write_value() 476s 476s exec(dynamic_attribute_read_function.replace("def ", "async def ")) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s attr_value = None 476s 476s @command 476s def add_dyn_attr(self): 476s attr = attribute( 476s name="dyn_attr", 476s dtype=int, 476s access=AttrWriteType.READ_WRITE, 476s fget=self.read_dyn_attr, 476s fset=self.write_dyn_attr, 476s ) 476s self.add_attribute(attr) 476s 476s @command 476s def delete_dyn_attr(self): 476s self.remove_attribute("dyn_attr") 476s 476s def write_dyn_attr(self, attr): 476s self.attr_value = attr.get_write_value() 476s 476s exec(dynamic_attribute_read_function) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:918: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________ test_read_write_dynamic_attribute[high_level_read-Asyncio] __________ 476s dynamic_attribute_read_function = 'def read_dyn_attr(self, attr):\n return self.attr_value\n' 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_dynamic_attribute( 476s dynamic_attribute_read_function, server_green_mode 476s ): 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s attr_value = None 476s 476s @command 476s async def add_dyn_attr(self): 476s attr = attribute( 476s name="dyn_attr", 476s dtype=int, 476s access=AttrWriteType.READ_WRITE, 476s fget=self.read_dyn_attr, 476s fset=self.write_dyn_attr, 476s ) 476s await self.async_add_attribute(attr) 476s 476s @command 476s async def delete_dyn_attr(self): 476s await self.async_remove_attribute("dyn_attr") 476s 476s async def write_dyn_attr(self, attr): 476s self.attr_value = attr.get_write_value() 476s 476s exec(dynamic_attribute_read_function.replace("def ", "async def ")) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s attr_value = None 476s 476s @command 476s def add_dyn_attr(self): 476s attr = attribute( 476s name="dyn_attr", 476s dtype=int, 476s access=AttrWriteType.READ_WRITE, 476s fget=self.read_dyn_attr, 476s fset=self.write_dyn_attr, 476s ) 476s self.add_attribute(attr) 476s 476s @command 476s def delete_dyn_attr(self): 476s self.remove_attribute("dyn_attr") 476s 476s def write_dyn_attr(self, attr): 476s self.attr_value = attr.get_write_value() 476s 476s exec(dynamic_attribute_read_function) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:918: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ___________________ test_async_add_remove_dynamic_attribute ____________________ 476s def test_async_add_remove_dynamic_attribute(): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s 476s def __init__(self, *args, **kwargs): 476s super().__init__(*args, **kwargs) 476s self.attr_value = None 476s 476s @command 476s async def add_dyn_attr(self): 476s attr = attribute( 476s name="dyn_attr", 476s dtype=int, 476s access=AttrWriteType.READ_WRITE, 476s fget=self.read_dyn_attr, 476s fset=self.write_dyn_attr, 476s ) 476s self.add_attribute(attr) 476s 476s @command 476s async def delete_dyn_attr(self): 476s self.remove_attribute("dyn_attr") 476s 476s @command 476s async def async_add_dyn_attr(self): 476s attr = attribute( 476s name="dyn_attr", 476s dtype=int, 476s access=AttrWriteType.READ_WRITE, 476s fget=self.read_dyn_attr, 476s fset=self.write_dyn_attr, 476s ) 476s await self.async_add_attribute(attr) 476s 476s @command 476s async def async_delete_dyn_attr(self): 476s await self.async_remove_attribute("dyn_attr") 476s 476s async def write_dyn_attr(self, attr): 476s self.attr_value = attr.get_write_value() 476s 476s async def read_dyn_attr(self, attr): 476s return self.attr_value 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:970: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __ test_read_write_dynamic_attribute_decorated_methods_default_names[Asyncio] __ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_dynamic_attribute_decorated_methods_default_names( 476s server_green_mode, 476s ): 476s 476s is_allowed = True 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s attr_value = None 476s is_allowed = None 476s 476s def initialize_dynamic_attributes(self): 476s attr = attribute(name="attr", dtype=int, access=AttrWriteType.READ_WRITE) 476s self.add_attribute(attr) 476s 476s def allowed(self): 476s return is_allowed 476s 476s sync_code = textwrap.dedent( 476s """\ 476s @general_decorator 476s def read_attr(self, attr): 476s return self.attr_value 476s 476s @general_decorator 476s def write_attr(self, attr): 476s self.attr_value = attr.get_write_value() 476s 476s @general_decorator 476s def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self.allowed() 476s """ 476s ) 476s 476s if server_green_mode != GreenMode.Asyncio: 476s exec(sync_code) 476s else: 476s exec( 476s sync_code.replace("def ", "async def ").replace( 476s "general_decorator", "general_asyncio_decorator" 476s ) 476s ) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:1291: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ___ test_read_write_dynamic_attribute_decorated_methods_user_names[Asyncio] ____ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_dynamic_attribute_decorated_methods_user_names(server_green_mode): 476s 476s is_allowed = True 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s attr_value = None 476s is_allowed = None 476s 476s def initialize_dynamic_attributes(self): 476s attr = attribute( 476s name="attr", 476s dtype=int, 476s access=AttrWriteType.READ_WRITE, 476s fget=self.user_read, 476s fset=self.user_write, 476s fisallowed=self.user_is_allowed, 476s ) 476s self.add_attribute(attr) 476s 476s def allowed(self): 476s return is_allowed 476s 476s sync_code = textwrap.dedent( 476s """\ 476s @general_decorator 476s def user_read(self, attr): 476s return self.attr_value 476s 476s @general_decorator 476s def user_write(self, attr): 476s self.attr_value = attr.get_write_value() 476s 476s @general_decorator 476s def user_is_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self.allowed() 476s """ 476s ) 476s 476s if server_green_mode != GreenMode.Asyncio: 476s exec(sync_code) 476s else: 476s exec( 476s sync_code.replace("def ", "async def ").replace( 476s "general_decorator", "general_asyncio_decorator" 476s ) 476s ) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:1352: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _______ test_read_write_dynamic_attribute_is_allowed_with_async[Asyncio] _______ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_read_write_dynamic_attribute_is_allowed_with_async(server_green_mode): 476s DYN_ATTRS_END_RANGE = 9 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class BaseTestDevice(Device): 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s for att_num in range(1, DYN_ATTRS_END_RANGE): 476s setattr(self, f"attr{att_num}_allowed", yesno) 476s 476s else: 476s 476s class BaseTestDevice(Device): 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s for att_num in range(1, DYN_ATTRS_END_RANGE): 476s setattr(self, f"attr{att_num}_allowed", yesno) 476s 476s class TestDevice(BaseTestDevice): 476s green_mode = server_green_mode 476s 476s def __init__(self, *args, **kwargs): 476s super().__init__(*args, **kwargs) 476s for att_num in range(1, DYN_ATTRS_END_RANGE): 476s setattr(self, f"attr{att_num}_allowed", True) 476s for att_num in range(1, DYN_ATTRS_END_RANGE): 476s setattr(self, f"attr{att_num}_value", None) 476s 476s def initialize_dynamic_attributes(self): 476s # recommended approach: using attribute() and bound methods: 476s attr = attribute( 476s name="dyn_attr1", 476s dtype=int, 476s access=AttrWriteType.READ_WRITE, 476s fget=self.read_dyn_attr1, 476s fset=self.write_dyn_attr1, 476s fisallowed=self.is_attr1_allowed, 476s ) 476s self.add_attribute(attr) 476s 476s # not recommended: using attribute() with unbound methods: 476s attr = attribute( 476s name="dyn_attr2", 476s dtype=int, 476s access=AttrWriteType.READ_WRITE, 476s fget=TestDevice.read_dyn_attr2, 476s fset=TestDevice.write_dyn_attr2, 476s fisallowed=TestDevice.is_attr2_allowed, 476s ) 476s self.add_attribute(attr) 476s 476s # possible approach: using attribute() with method name strings: 476s attr = attribute( 476s name="dyn_attr3", 476s dtype=int, 476s access=AttrWriteType.READ_WRITE, 476s fget="read_dyn_attr3", 476s fset="write_dyn_attr3", 476s fisallowed="is_attr3_allowed", 476s ) 476s self.add_attribute(attr) 476s 476s # old approach: using tango.AttrData with bound methods: 476s attr_name = "dyn_attr4" 476s data_info = self._get_attr_data_info() 476s dev_class = self.get_device_class() 476s attr_data = AttrData(attr_name, dev_class.get_name(), data_info) 476s self.add_attribute( 476s attr_data, 476s self.read_dyn_attr4, 476s self.write_dyn_attr4, 476s self.is_attr4_allowed, 476s ) 476s 476s # old approach: using tango.AttrData with unbound methods: 476s attr_name = "dyn_attr5" 476s attr_data = AttrData(attr_name, dev_class.get_name(), data_info) 476s self.add_attribute( 476s attr_data, 476s TestDevice.read_dyn_attr5, 476s TestDevice.write_dyn_attr5, 476s TestDevice.is_attr5_allowed, 476s ) 476s 476s # old approach: using tango.AttrData with default method names 476s attr_name = "dyn_attr6" 476s attr_data = AttrData(attr_name, dev_class.get_name(), data_info) 476s self.add_attribute(attr_data) 476s 476s # old approach: using tango.AttrData filled from dictionary 476s attr_name = "dyn_attr7" 476s d = { 476s "name": attr_name, 476s "class_name": dev_class.get_name(), 476s # not setting access explicitly 476s "fread": "read_dyn_attr7", 476s "fwrite": "write_dyn_attr7", 476s "fisallowed": self.is_attr7_allowed, 476s } 476s attr_data = AttrData.from_dict(d) 476s self.add_attribute(attr_data) 476s 476s # not recommened: implicit access level 476s attr = attribute( 476s name="dyn_attr8", 476s fset=self.write_dyn_attr8, 476s fisallowed=self.is_attr8_allowed, 476s ) 476s self.add_attribute(attr) 476s 476s def _get_attr_data_info(self): 476s simple_type, fmt = get_tango_type_format(int) 476s data_info = [[simple_type, fmt, READ_WRITE]] 476s return data_info 476s 476s # the following methods are written in plain text which looks 476s # weird. This is done so that it is easy to change for async 476s # tests without duplicating all the code. 476s read_code = textwrap.dedent( 476s """ 476s def read_dyn_attr(self, attr): 476s return self.attr_value 476s """ 476s ) 476s 476s write_code = textwrap.dedent( 476s """ 476s def write_dyn_attr(self, attr): 476s self.attr_value = attr.get_write_value() 476s """ 476s ) 476s 476s is_allowed_code = textwrap.dedent( 476s """ 476s def is_attr_allowed(self, req_type): 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return self.attr_allowed 476s """ 476s ) 476s 476s for attr_num in range(1, DYN_ATTRS_END_RANGE): 476s read_method = read_code.replace("read_dyn_attr", f"read_dyn_attr{attr_num}") 476s read_method = read_method.replace("attr_value", f"attr{attr_num}_value") 476s write_method = write_code.replace( 476s "write_dyn_attr", f"write_dyn_attr{attr_num}" 476s ) 476s write_method = write_method.replace("attr_value", f"attr{attr_num}_value") 476s if attr_num != 6: 476s is_allowed_method = is_allowed_code.replace( 476s "is_attr_allowed", f"is_attr{attr_num}_allowed" 476s ) 476s else: 476s # default name differs 476s is_allowed_method = is_allowed_code.replace( 476s "is_attr_allowed", f"is_dyn_attr{attr_num}_allowed" 476s ) 476s is_allowed_method = is_allowed_method.replace( 476s "self.attr_allowed", f"self.attr{attr_num}_allowed" 476s ) 476s 476s if server_green_mode != GreenMode.Asyncio: 476s exec(read_method) 476s exec(write_method) 476s exec(is_allowed_method) 476s else: 476s exec(read_method.replace("def ", "async def ")) 476s exec(write_method.replace("def ", "async def ")) 476s exec(is_allowed_method.replace("def ", "async def ")) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:1702: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _____________ test_dynamic_attribute_with_green_mode[Asyncio-True] _____________ 476s use_green_mode = True, server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s @pytest.mark.parametrize("use_green_mode", [True, False]) 476s def test_dynamic_attribute_with_green_mode(use_green_mode, server_green_mode): 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s attr_value = 123 476s 476s def initialize_dynamic_attributes(self): 476s global executor 476s executor = get_executor(server_green_mode) 476s attr = attribute( 476s name="attr_r", 476s dtype=int, 476s access=AttrWriteType.READ, 476s fget=self.user_read, 476s read_green_mode=use_green_mode, 476s ) 476s self.add_attribute(attr) 476s attr = attribute( 476s name="attr_rw", 476s dtype=int, 476s access=AttrWriteType.READ_WRITE, 476s fget=self.user_read, 476s fset=self.user_write, 476s read_green_mode=use_green_mode, 476s write_green_mode=use_green_mode, 476s ) 476s self.add_attribute(attr) 476s attr = attribute( 476s name="attr_ia", 476s dtype=int, 476s access=AttrWriteType.READ, 476s fget=self.user_read, 476s fisallowed=self.user_is_allowed, 476s read_green_mode=use_green_mode, 476s isallowed_green_mode=use_green_mode, 476s ) 476s self.add_attribute(attr) 476s attr = attribute( 476s name="attr_rw_always_ok", 476s dtype=int, 476s access=AttrWriteType.READ_WRITE, 476s fget=self.user_read, 476s fset=self.user_write, 476s green_mode=True, 476s ) 476s self.add_attribute(attr) 476s 476s sync_code = textwrap.dedent( 476s """ 476s def user_read(self, attr): 476s self.assert_executor_context_correct(attr.get_name()) 476s return self.attr_value 476s 476s def user_write(self, attr): 476s self.assert_executor_context_correct(attr.get_name()) 476s self.attr_value = attr.get_write_value() 476s 476s def user_is_allowed(self, req_type): 476s self.assert_executor_context_correct() 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return True 476s 476s """ 476s ) 476s 476s def assert_executor_context_correct(self, attr_name=""): 476s check_required = attr_name != "attr_rw_always_ok" 476s if check_required and executor.asynchronous: 476s assert executor.in_executor_context() == use_green_mode 476s 476s if server_green_mode == GreenMode.Asyncio and use_green_mode: 476s exec(sync_code.replace("def", "async def")) 476s else: 476s exec(sync_code) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:1799: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ____________ test_dynamic_attribute_with_green_mode[Asyncio-False] _____________ 476s use_green_mode = False, server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s @pytest.mark.parametrize("use_green_mode", [True, False]) 476s def test_dynamic_attribute_with_green_mode(use_green_mode, server_green_mode): 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s attr_value = 123 476s 476s def initialize_dynamic_attributes(self): 476s global executor 476s executor = get_executor(server_green_mode) 476s attr = attribute( 476s name="attr_r", 476s dtype=int, 476s access=AttrWriteType.READ, 476s fget=self.user_read, 476s read_green_mode=use_green_mode, 476s ) 476s self.add_attribute(attr) 476s attr = attribute( 476s name="attr_rw", 476s dtype=int, 476s access=AttrWriteType.READ_WRITE, 476s fget=self.user_read, 476s fset=self.user_write, 476s read_green_mode=use_green_mode, 476s write_green_mode=use_green_mode, 476s ) 476s self.add_attribute(attr) 476s attr = attribute( 476s name="attr_ia", 476s dtype=int, 476s access=AttrWriteType.READ, 476s fget=self.user_read, 476s fisallowed=self.user_is_allowed, 476s read_green_mode=use_green_mode, 476s isallowed_green_mode=use_green_mode, 476s ) 476s self.add_attribute(attr) 476s attr = attribute( 476s name="attr_rw_always_ok", 476s dtype=int, 476s access=AttrWriteType.READ_WRITE, 476s fget=self.user_read, 476s fset=self.user_write, 476s green_mode=True, 476s ) 476s self.add_attribute(attr) 476s 476s sync_code = textwrap.dedent( 476s """ 476s def user_read(self, attr): 476s self.assert_executor_context_correct(attr.get_name()) 476s return self.attr_value 476s 476s def user_write(self, attr): 476s self.assert_executor_context_correct(attr.get_name()) 476s self.attr_value = attr.get_write_value() 476s 476s def user_is_allowed(self, req_type): 476s self.assert_executor_context_correct() 476s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 476s return True 476s 476s """ 476s ) 476s 476s def assert_executor_context_correct(self, attr_name=""): 476s check_required = attr_name != "attr_rw_always_ok" 476s if check_required and executor.asynchronous: 476s assert executor.in_executor_context() == use_green_mode 476s 476s if server_green_mode == GreenMode.Asyncio and use_green_mode: 476s exec(sync_code.replace("def", "async def")) 476s else: 476s exec(sync_code) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:1799: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ______________________ test_attribute_decorators[Asyncio] ______________________ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_attribute_decorators(server_green_mode): 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class BaseTestDevice(Device): 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self.is_allowed = yesno 476s 476s else: 476s 476s class BaseTestDevice(Device): 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self.is_allowed = yesno 476s 476s class TestDevice(BaseTestDevice): 476s green_mode = server_green_mode 476s current_value = None 476s voltage_value = None 476s is_allowed = None 476s 476s current = attribute(label="Current", unit="mA", dtype=float) 476s voltage = attribute(label="Voltage", unit="V", dtype=float) 476s 476s sync_code = textwrap.dedent( 476s """ 476s @current.getter 476s def cur_read(self): 476s return self.current_value 476s 476s @current.setter 476s def cur_write(self, current): 476s self.current_value = current 476s 476s @current.is_allowed 476s def cur_allo(self, req_type): 476s return self.is_allowed 476s 476s @voltage.read 476s def vol_read(self): 476s return self.voltage_value 476s 476s @voltage.write 476s def vol_write(self, voltage): 476s self.voltage_value = voltage 476s 476s @voltage.is_allowed 476s def vol_allo(self, req_type): 476s return self.is_allowed 476s """ 476s ) 476s 476s if server_green_mode == GreenMode.Asyncio: 476s exec(sync_code.replace("def ", "async def ")) 476s else: 476s exec(sync_code) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:2013: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ________________________ test_polled_attribute[Asyncio] ________________________ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_polled_attribute(server_green_mode): 476s dct = {"PolledAttribute1": 100, "PolledAttribute2": 100000, "PolledAttribute3": 500} 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @attribute(polling_period=dct["PolledAttribute1"]) 476s def PolledAttribute1(self): 476s return 42.0 476s 476s @attribute(polling_period=dct["PolledAttribute2"]) 476s def PolledAttribute2(self): 476s return 43.0 476s 476s @attribute(polling_period=dct["PolledAttribute3"]) 476s def PolledAttribute3(self): 476s return 44.0 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_attributes.py:2164: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ______________________ test_identity_command[int-Asyncio] ______________________ 476s command_typed_values = (, (1, 2, -65535, 23), . at 0x74fec68928d0>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_identity_command(command_typed_values, server_green_mode): 476s dtype, values, expected = command_typed_values 476s 476s if dtype == (bool,): 476s pytest.xfail("Not supported for some reasons") 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s async def identity(self, arg): 476s return arg 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s def identity(self, arg): 476s return arg 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_commands.py:57: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _____________________ test_identity_command[float-Asyncio] _____________________ 476s command_typed_values = (, (2.71, 3.14, -3.4678e-09, 1.2678e+16), . at 0x74fec6892f00>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_identity_command(command_typed_values, server_green_mode): 476s dtype, values, expected = command_typed_values 476s 476s if dtype == (bool,): 476s pytest.xfail("Not supported for some reasons") 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s async def identity(self, arg): 476s return arg 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s def identity(self, arg): 476s return arg 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_commands.py:57: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ______________________ test_identity_command[str-Asyncio] ______________________ 476s command_typed_values = (, ('hey hey', 'my my', b'\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\...ÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ'), . at 0x74fec6893530>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_identity_command(command_typed_values, server_green_mode): 476s dtype, values, expected = command_typed_values 476s 476s if dtype == (bool,): 476s pytest.xfail("Not supported for some reasons") 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s async def identity(self, arg): 476s return arg 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s def identity(self, arg): 476s return arg 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_commands.py:57: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _____________________ test_identity_command[bool-Asyncio] ______________________ 476s command_typed_values = (, (False, True, True, False), . at 0x74fec6893b60>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_identity_command(command_typed_values, server_green_mode): 476s dtype, values, expected = command_typed_values 476s 476s if dtype == (bool,): 476s pytest.xfail("Not supported for some reasons") 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s async def identity(self, arg): 476s return arg 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s def identity(self, arg): 476s return arg 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_commands.py:57: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ____________________ test_identity_command[(int,)-Asyncio] _____________________ 476s command_typed_values = ((,), (array([1, 2]), (1, 2, 3), [9, 8, 7], [-65535, 2224], [0, 0]), . at 0x74fec6728250>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_identity_command(command_typed_values, server_green_mode): 476s dtype, values, expected = command_typed_values 476s 476s if dtype == (bool,): 476s pytest.xfail("Not supported for some reasons") 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s async def identity(self, arg): 476s return arg 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s def identity(self, arg): 476s return arg 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_commands.py:57: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ___________________ test_identity_command[(float,)-Asyncio] ____________________ 476s command_typed_values = ((,), (array([0.1, 0.2]), (0.1, 0.2, 0.3), [0.9, 0.8, 0.7], [-0.0063232], [0.0, 12560000000000.0]), . at 0x74fec6728880>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_identity_command(command_typed_values, server_green_mode): 476s dtype, values, expected = command_typed_values 476s 476s if dtype == (bool,): 476s pytest.xfail("Not supported for some reasons") 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s async def identity(self, arg): 476s return arg 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s def identity(self, arg): 476s return arg 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_commands.py:57: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ____________________ test_identity_command[(str,)-Asyncio] _____________________ 476s command_typed_values = ((,), (array(['foo', 'bar'], dtype='. at 0x74fec6728eb0>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_identity_command(command_typed_values, server_green_mode): 476s dtype, values, expected = command_typed_values 476s 476s if dtype == (bool,): 476s pytest.xfail("Not supported for some reasons") 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s async def identity(self, arg): 476s return arg 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s def identity(self, arg): 476s return arg 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_commands.py:57: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _____________ test_identity_command[DevVarLongStringArray-Asyncio] _____________ 476s command_typed_values = (tango._tango.CmdArgType.DevVarLongStringArray, ([[1, 2, 3], ['foo', 'bar', 'hmm']],), . at 0x74fec6729b10>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_identity_command(command_typed_values, server_green_mode): 476s dtype, values, expected = command_typed_values 476s 476s if dtype == (bool,): 476s pytest.xfail("Not supported for some reasons") 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s async def identity(self, arg): 476s return arg 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s def identity(self, arg): 476s return arg 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_commands.py:57: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ____________ test_identity_command[DevVarDoubleStringArray-Asyncio] ____________ 476s command_typed_values = (tango._tango.CmdArgType.DevVarDoubleStringArray, ([[1.1, 2.2, 3.3], ['foo', 'bar', 'hmm']],), . at 0x74fec672a140>) 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_identity_command(command_typed_values, server_green_mode): 476s dtype, values, expected = command_typed_values 476s 476s if dtype == (bool,): 476s pytest.xfail("Not supported for some reasons") 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s async def identity(self, arg): 476s return arg 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @command(dtype_in=dtype, dtype_out=dtype) 476s def identity(self, arg): 476s return arg 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_commands.py:57: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _______________________ test_decorated_command[Asyncio] ________________________ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_decorated_command(server_green_mode): 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s is_allowed = None 476s 476s @command(dtype_in=int, dtype_out=int) 476s @general_asyncio_decorator() 476s async def identity(self, arg): 476s return arg 476s 476s @general_asyncio_decorator 476s async def is_identity_allowed(self): 476s return self.is_allowed 476s 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self.is_allowed = yesno 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s is_allowed = None 476s 476s @command(dtype_in=int, dtype_out=int) 476s @general_decorator() 476s def identity(self, arg): 476s return arg 476s 476s @general_decorator 476s def is_identity_allowed(self): 476s return self.is_allowed 476s 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self.is_allowed = yesno 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_commands.py:158: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _______________________ test_command_isallowed[Asyncio] ________________________ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_command_isallowed(server_green_mode): 476s is_allowed = None 476s 476s def sync_allowed(device): 476s assert isinstance(device, TestDevice) 476s return is_allowed 476s 476s async def async_allowed(device): 476s assert isinstance(device, TestDevice) 476s return is_allowed 476s 476s class IsAllowedCallableClass: 476s def __init__(self): 476s self._is_allowed = None 476s 476s def __call__(self, device): 476s assert isinstance(device, TestDevice) 476s return self._is_allowed 476s 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s is_allowed_callable_class = IsAllowedCallableClass() 476s 476s class AsyncIsAllowedCallableClass(IsAllowedCallableClass): 476s async def __call__(self, device): 476s assert isinstance(device, TestDevice) 476s return self._is_allowed 476s 476s async_is_allowed_callable_class = AsyncIsAllowedCallableClass() 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def __init__(self, *args, **kwargs): 476s super().__init__(*args, **kwargs) 476s self._is_allowed = True 476s 476s @command(dtype_in=int, dtype_out=int) 476s async def identity(self, arg): 476s return arg 476s 476s @command(dtype_in=int, dtype_out=int, fisallowed="is_identity_allowed") 476s async def identity_kwarg_string(self, arg): 476s return arg 476s 476s @command( 476s dtype_in=int, 476s dtype_out=int, 476s fisallowed=async_allowed, 476s ) 476s async def identity_kwarg_callable(self, arg): 476s return arg 476s 476s @command( 476s dtype_in=int, dtype_out=int, fisallowed=async_is_allowed_callable_class 476s ) 476s async def identity_kwarg_callable_class(self, arg): 476s return arg 476s 476s @command(dtype_in=int, dtype_out=int) 476s async def identity_always_allowed(self, arg): 476s return arg 476s 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s async def is_identity_allowed(self): 476s return self._is_allowed 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def __init__(self, *args, **kwargs): 476s super().__init__(*args, **kwargs) 476s self._is_allowed = True 476s 476s @command(dtype_in=int, dtype_out=int) 476s def identity(self, arg): 476s return arg 476s 476s @command(dtype_in=int, dtype_out=int, fisallowed="is_identity_allowed") 476s def identity_kwarg_string(self, arg): 476s return arg 476s 476s @command(dtype_in=int, dtype_out=int, fisallowed=sync_allowed) 476s def identity_kwarg_callable(self, arg): 476s return arg 476s 476s @command(dtype_in=int, dtype_out=int, fisallowed=is_allowed_callable_class) 476s def identity_kwarg_callable_class(self, arg): 476s return arg 476s 476s @command(dtype_in=int, dtype_out=int) 476s def identity_always_allowed(self, arg): 476s return arg 476s 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s def is_identity_allowed(self): 476s return self._is_allowed 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_commands.py:276: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ______________________ test_dynamic_command[Asyncio-True] ______________________ 476s device_command_level = True, server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s @pytest.mark.parametrize("device_command_level", [True, False]) 476s def test_dynamic_command(device_command_level, server_green_mode): 476s is_allowed = None 476s 476s def sync_allowed(device): 476s assert isinstance(device, TestDevice) 476s return is_allowed 476s 476s async def async_allowed(device): 476s assert isinstance(device, TestDevice) 476s return is_allowed 476s 476s class IsAllowedCallable: 476s def __init__(self): 476s self._is_allowed = None 476s 476s def __call__(self, device): 476s assert isinstance(device, TestDevice) 476s return self._is_allowed 476s 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s class AsyncIsAllowedCallable(IsAllowedCallable): 476s async def __call__(self, device): 476s assert isinstance(device, TestDevice) 476s return self._is_allowed 476s 476s is_allowed_callable_class = IsAllowedCallable() 476s async_is_allowed_callable_class = AsyncIsAllowedCallable() 476s 476s class BaseTestDevice(Device): 476s green_mode = server_green_mode 476s 476s def __init__(self, *args, **kwargs): 476s super().__init__(*args, **kwargs) 476s self._is_allowed = True 476s 476s def _add_dyn_cmd(self): 476s cmd = command(f=self.identity, dtype_in=int, dtype_out=int) 476s self.add_command(cmd, device_command_level) 476s 476s cmd = command( 476s f=self.identity_kwarg_string, 476s dtype_in=int, 476s dtype_out=int, 476s fisallowed="is_identity_allowed", 476s ) 476s self.add_command(cmd, device_command_level) 476s 476s cmd = command( 476s f=self.identity_kwarg_callable, 476s dtype_in=int, 476s dtype_out=int, 476s fisallowed=self.is_identity_allowed, 476s ) 476s self.add_command(cmd, device_command_level) 476s 476s cmd = command( 476s f=self.identity_kwarg_callable_outside_class, 476s dtype_in=int, 476s dtype_out=int, 476s fisallowed=( 476s sync_allowed 476s if server_green_mode != GreenMode.Asyncio 476s else async_allowed 476s ), 476s ) 476s self.add_command(cmd, device_command_level) 476s 476s cmd = command( 476s f=self.identity_kwarg_callable_class, 476s dtype_in=int, 476s dtype_out=int, 476s fisallowed=( 476s is_allowed_callable_class 476s if server_green_mode != GreenMode.Asyncio 476s else async_is_allowed_callable_class 476s ), 476s ) 476s self.add_command(cmd, device_command_level) 476s 476s cmd = command(f=self.identity_always_allowed, dtype_in=int, dtype_out=int) 476s self.add_command(cmd, device_command_level) 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(BaseTestDevice): 476s async def identity(self, arg): 476s return arg 476s 476s async def identity_kwarg_string(self, arg): 476s return arg 476s 476s async def identity_kwarg_callable(self, arg): 476s return arg 476s 476s async def identity_kwarg_callable_outside_class(self, arg): 476s return arg 476s 476s async def identity_kwarg_callable_class(self, arg): 476s return arg 476s 476s async def identity_always_allowed(self, arg): 476s return arg 476s 476s @command() 476s async def add_dyn_cmd(self): 476s self._add_dyn_cmd() 476s 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s async def is_identity_allowed(self): 476s return self._is_allowed 476s 476s else: 476s 476s class TestDevice(BaseTestDevice): 476s def identity(self, arg): 476s return arg 476s 476s def identity_kwarg_string(self, arg): 476s return arg 476s 476s def identity_kwarg_callable(self, arg): 476s return arg 476s 476s def identity_kwarg_callable_outside_class(self, arg): 476s return arg 476s 476s def identity_kwarg_callable_class(self, arg): 476s return arg 476s 476s def identity_always_allowed(self, arg): 476s return arg 476s 476s @command() 476s def add_dyn_cmd(self): 476s self._add_dyn_cmd() 476s 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s def is_identity_allowed(self): 476s return self._is_allowed 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_commands.py:457: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _____________________ test_dynamic_command[Asyncio-False] ______________________ 476s device_command_level = False, server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s @pytest.mark.parametrize("device_command_level", [True, False]) 476s def test_dynamic_command(device_command_level, server_green_mode): 476s is_allowed = None 476s 476s def sync_allowed(device): 476s assert isinstance(device, TestDevice) 476s return is_allowed 476s 476s async def async_allowed(device): 476s assert isinstance(device, TestDevice) 476s return is_allowed 476s 476s class IsAllowedCallable: 476s def __init__(self): 476s self._is_allowed = None 476s 476s def __call__(self, device): 476s assert isinstance(device, TestDevice) 476s return self._is_allowed 476s 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s class AsyncIsAllowedCallable(IsAllowedCallable): 476s async def __call__(self, device): 476s assert isinstance(device, TestDevice) 476s return self._is_allowed 476s 476s is_allowed_callable_class = IsAllowedCallable() 476s async_is_allowed_callable_class = AsyncIsAllowedCallable() 476s 476s class BaseTestDevice(Device): 476s green_mode = server_green_mode 476s 476s def __init__(self, *args, **kwargs): 476s super().__init__(*args, **kwargs) 476s self._is_allowed = True 476s 476s def _add_dyn_cmd(self): 476s cmd = command(f=self.identity, dtype_in=int, dtype_out=int) 476s self.add_command(cmd, device_command_level) 476s 476s cmd = command( 476s f=self.identity_kwarg_string, 476s dtype_in=int, 476s dtype_out=int, 476s fisallowed="is_identity_allowed", 476s ) 476s self.add_command(cmd, device_command_level) 476s 476s cmd = command( 476s f=self.identity_kwarg_callable, 476s dtype_in=int, 476s dtype_out=int, 476s fisallowed=self.is_identity_allowed, 476s ) 476s self.add_command(cmd, device_command_level) 476s 476s cmd = command( 476s f=self.identity_kwarg_callable_outside_class, 476s dtype_in=int, 476s dtype_out=int, 476s fisallowed=( 476s sync_allowed 476s if server_green_mode != GreenMode.Asyncio 476s else async_allowed 476s ), 476s ) 476s self.add_command(cmd, device_command_level) 476s 476s cmd = command( 476s f=self.identity_kwarg_callable_class, 476s dtype_in=int, 476s dtype_out=int, 476s fisallowed=( 476s is_allowed_callable_class 476s if server_green_mode != GreenMode.Asyncio 476s else async_is_allowed_callable_class 476s ), 476s ) 476s self.add_command(cmd, device_command_level) 476s 476s cmd = command(f=self.identity_always_allowed, dtype_in=int, dtype_out=int) 476s self.add_command(cmd, device_command_level) 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(BaseTestDevice): 476s async def identity(self, arg): 476s return arg 476s 476s async def identity_kwarg_string(self, arg): 476s return arg 476s 476s async def identity_kwarg_callable(self, arg): 476s return arg 476s 476s async def identity_kwarg_callable_outside_class(self, arg): 476s return arg 476s 476s async def identity_kwarg_callable_class(self, arg): 476s return arg 476s 476s async def identity_always_allowed(self, arg): 476s return arg 476s 476s @command() 476s async def add_dyn_cmd(self): 476s self._add_dyn_cmd() 476s 476s @command(dtype_in=bool) 476s async def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s async def is_identity_allowed(self): 476s return self._is_allowed 476s 476s else: 476s 476s class TestDevice(BaseTestDevice): 476s def identity(self, arg): 476s return arg 476s 476s def identity_kwarg_string(self, arg): 476s return arg 476s 476s def identity_kwarg_callable(self, arg): 476s return arg 476s 476s def identity_kwarg_callable_outside_class(self, arg): 476s return arg 476s 476s def identity_kwarg_callable_class(self, arg): 476s return arg 476s 476s def identity_always_allowed(self, arg): 476s return arg 476s 476s @command() 476s def add_dyn_cmd(self): 476s self._add_dyn_cmd() 476s 476s @command(dtype_in=bool) 476s def make_allowed(self, yesno): 476s self._is_allowed = yesno 476s 476s def is_identity_allowed(self): 476s return self._is_allowed 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_commands.py:457: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _______________________ test_high_level_api_for_asyncio ________________________ 476s tango_test = TangoTest(sys/tg_test/17) 476s 476s @pytest.mark.asyncio 476s async def test_high_level_api_for_asyncio(tango_test): 476s tango_test.set_green_mode(GreenMode.Asyncio) 476s > _ = await tango_test.long_scalar 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_device_proxy.py:234: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/device_proxy.py:387: in __async_get_attribute_value 476s attr_value = await self.read_attribute(name) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 476s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ---------------------------- Captured stdout setup ----------------------------- 476s Ready to accept request 476s _________________________ test_repr_uses_info[Asyncio] _________________________ 476s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 476s simple_device_fqdn = 'tango://127.0.0.1:35585/test/nodb/testdevice#dbase=no' 476s 476s def test_repr_uses_info(green_mode_device_proxy, simple_device_fqdn): 476s > proxy = green_mode_device_proxy(simple_device_fqdn) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_device_proxy.py:578: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 476s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ---------------------------- Captured stdout setup ----------------------------- 476s Ready to accept request 476s ---------------------------- Captured stderr setup ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ________________ test_repr_default_if_info_unavailable[Asyncio] ________________ 476s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 476s simple_device_fqdn = 'tango://127.0.0.1:45381/test/nodb/testdevice#dbase=no' 476s 476s def test_repr_default_if_info_unavailable(green_mode_device_proxy, simple_device_fqdn): 476s > proxy = green_mode_device_proxy(simple_device_fqdn) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_device_proxy.py:583: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 476s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ---------------------------- Captured stdout setup ----------------------------- 476s Ready to accept request 476s ---------------------------- Captured stderr setup ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ____________ test_multiple_repr_calls_only_call_info_once[Asyncio] _____________ 476s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 476s simple_device_fqdn = 'tango://127.0.0.1:59551/test/nodb/testdevice#dbase=no' 476s 476s def test_multiple_repr_calls_only_call_info_once( 476s green_mode_device_proxy, simple_device_fqdn 476s ): 476s > proxy = green_mode_device_proxy(simple_device_fqdn) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_device_proxy.py:596: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 476s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ---------------------------- Captured stdout setup ----------------------------- 476s Ready to accept request 476s ---------------------------- Captured stderr setup ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ____________________ test_no_memory_leak_for_repr[Asyncio] _____________________ 476s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 476s simple_device_fqdn = 'tango://127.0.0.1:40735/test/nodb/testdevice#dbase=no' 476s 476s def test_no_memory_leak_for_repr(green_mode_device_proxy, simple_device_fqdn): 476s > proxy = green_mode_device_proxy(simple_device_fqdn) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_device_proxy.py:613: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 476s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ---------------------------- Captured stdout setup ----------------------------- 476s Ready to accept request 476s ---------------------------- Captured stderr setup ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _____________________ test_no_memory_leak_for_str[Asyncio] _____________________ 476s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 476s simple_device_fqdn = 'tango://127.0.0.1:55201/test/nodb/testdevice#dbase=no' 476s 476s def test_no_memory_leak_for_str(green_mode_device_proxy, simple_device_fqdn): 476s > proxy = green_mode_device_proxy(simple_device_fqdn) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_device_proxy.py:625: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 476s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ---------------------------- Captured stdout setup ----------------------------- 476s Ready to accept request 476s ---------------------------- Captured stderr setup ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ____________________ test_no_cyclic_ref_for_proxy[Asyncio] _____________________ 476s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 476s simple_device_fqdn = 'tango://127.0.0.1:40855/test/nodb/testdevice#dbase=no' 476s 476s def test_no_cyclic_ref_for_proxy(green_mode_device_proxy, simple_device_fqdn): 476s > proxy = green_mode_device_proxy(simple_device_fqdn) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_device_proxy.py:637: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 476s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ---------------------------- Captured stdout setup ----------------------------- 476s Ready to accept request 476s ---------------------------- Captured stderr setup ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ________________________ test_async_logging_decorators _________________________ 476s def test_async_logging_decorators(): 476s > with MultiDeviceTestContext(async_devices_info) as context: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_log.py:279: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ____________________________ test_logging[Asyncio] _____________________________ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_logging(server_green_mode): 476s log_received = threading.Event() 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class LogSourceDevice(Device): 476s green_mode = server_green_mode 476s _last_log_time = 0.0 476s 476s @command(dtype_in=("str",)) 476s async def log_fatal_message(self, msg): 476s self._last_log_time = time.time() 476s if len(msg) > 1: 476s self.fatal_stream(msg[0], msg[1]) 476s else: 476s self.fatal_stream(msg[0]) 476s 476s @command(dtype_in=("str",)) 476s async def log_error_message(self, msg): 476s self._last_log_time = time.time() 476s if len(msg) > 1: 476s self.error_stream(msg[0], msg[1]) 476s else: 476s self.error_stream(msg[0]) 476s 476s @command(dtype_in=("str",)) 476s async def log_warn_message(self, msg): 476s self._last_log_time = time.time() 476s if len(msg) > 1: 476s self.warn_stream(msg[0], msg[1]) 476s else: 476s self.warn_stream(msg[0]) 476s 476s @command(dtype_in=("str",)) 476s async def log_info_message(self, msg): 476s self._last_log_time = time.time() 476s if len(msg) > 1: 476s self.info_stream(msg[0], msg[1]) 476s else: 476s self.info_stream(msg[0]) 476s 476s @command(dtype_in=("str",)) 476s async def log_debug_message(self, msg): 476s self._last_log_time = time.time() 476s if len(msg) > 1: 476s self.debug_stream(msg[0], msg[1]) 476s else: 476s self.debug_stream(msg[0]) 476s 476s @attribute(dtype=float) 476s async def last_log_time(self): 476s return self._last_log_time 476s 476s class LogConsumerDevice(Device): 476s green_mode = server_green_mode 476s _last_log_data = [] 476s 476s @command(dtype_in=("str",)) 476s async def Log(self, argin): 476s self._last_log_data = argin 476s log_received.set() 476s 476s @attribute(dtype=int) 476s async def last_log_timestamp_ms(self): 476s return int(self._last_log_data[0]) 476s 476s @attribute(dtype=str) 476s async def last_log_level(self): 476s return self._last_log_data[1] 476s 476s @attribute(dtype=str) 476s async def last_log_source(self): 476s return self._last_log_data[2] 476s 476s @attribute(dtype=str) 476s async def last_log_message(self): 476s return self._last_log_data[3] 476s 476s @attribute(dtype=str) 476s async def last_log_context_unused(self): 476s return self._last_log_data[4] 476s 476s @attribute(dtype=str) 476s async def last_log_thread_id(self): 476s return self._last_log_data[5] 476s 476s else: 476s 476s class LogSourceDevice(Device): 476s green_mode = server_green_mode 476s _last_log_time = 0.0 476s 476s @command(dtype_in=("str",)) 476s def log_fatal_message(self, msg): 476s self._last_log_time = time.time() 476s if len(msg) > 1: 476s self.fatal_stream(msg[0], msg[1]) 476s else: 476s self.fatal_stream(msg[0]) 476s 476s @command(dtype_in=("str",)) 476s def log_error_message(self, msg): 476s self._last_log_time = time.time() 476s if len(msg) > 1: 476s self.error_stream(msg[0], msg[1]) 476s else: 476s self.error_stream(msg[0]) 476s 476s @command(dtype_in=("str",)) 476s def log_warn_message(self, msg): 476s self._last_log_time = time.time() 476s if len(msg) > 1: 476s self.warn_stream(msg[0], msg[1]) 476s else: 476s self.warn_stream(msg[0]) 476s 476s @command(dtype_in=("str",)) 476s def log_info_message(self, msg): 476s self._last_log_time = time.time() 476s if len(msg) > 1: 476s self.info_stream(msg[0], msg[1]) 476s else: 476s self.info_stream(msg[0]) 476s 476s @command(dtype_in=("str",)) 476s def log_debug_message(self, msg): 476s self._last_log_time = time.time() 476s if len(msg) > 1: 476s self.debug_stream(msg[0], msg[1]) 476s else: 476s self.debug_stream(msg[0]) 476s 476s @attribute(dtype=float) 476s def last_log_time(self): 476s return self._last_log_time 476s 476s class LogConsumerDevice(Device): 476s green_mode = server_green_mode 476s _last_log_data = [] 476s 476s @command(dtype_in=("str",)) 476s def Log(self, argin): 476s self._last_log_data = argin 476s log_received.set() 476s 476s @attribute(dtype=int) 476s def last_log_timestamp_ms(self): 476s return int(self._last_log_data[0]) 476s 476s @attribute(dtype=str) 476s def last_log_level(self): 476s return self._last_log_data[1] 476s 476s @attribute(dtype=str) 476s def last_log_source(self): 476s return self._last_log_data[2] 476s 476s @attribute(dtype=str) 476s def last_log_message(self): 476s return self._last_log_data[3] 476s 476s @attribute(dtype=str) 476s def last_log_context_unused(self): 476s return self._last_log_data[4] 476s 476s @attribute(dtype=str) 476s def last_log_thread_id(self): 476s return self._last_log_data[5] 476s 476s def assert_log_details_correct(level, msg): 476s assert log_received.wait(0.5) 476s _assert_log_time_close_enough() 476s _assert_log_fields_correct_for_level(level, msg) 476s log_received.clear() 476s 476s def _assert_log_time_close_enough(): 476s log_emit_time = proxy_source.last_log_time 476s log_receive_time = proxy_consumer.last_log_timestamp_ms / 1000.0 476s now = time.time() 476s # cppTango logger time function may use a different 476s # implementation to CPython's time.time(). This is 476s # especially noticeable on Windows platforms. 476s timer_implementation_tolerance = 0.020 if WINDOWS else 0.001 476s min_time = log_emit_time - timer_implementation_tolerance 476s max_time = now + timer_implementation_tolerance 476s assert min_time <= log_receive_time <= max_time 476s 476s def _assert_log_fields_correct_for_level(level, msg): 476s assert proxy_consumer.last_log_level == level.upper() 476s assert proxy_consumer.last_log_source == "test/log/source" 476s assert proxy_consumer.last_log_message == msg 476s assert proxy_consumer.last_log_context_unused == "" 476s assert len(proxy_consumer.last_log_thread_id) > 0 476s 476s devices_info = ( 476s {"class": LogSourceDevice, "devices": [{"name": "test/log/source"}]}, 476s {"class": LogConsumerDevice, "devices": [{"name": "test/log/consumer"}]}, 476s ) 476s 476s > with MultiDeviceTestContext(devices_info) as context: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_log.py:528: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________________ test_empty_device[Asyncio] __________________________ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_empty_device(server_green_mode): 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:133: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ___________________ test_set_state_status[ON-Asyncio-False] ____________________ 476s state = tango._tango.DevState.ON 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ____________________ test_set_state_status[ON-Asyncio-True] ____________________ 476s state = tango._tango.DevState.ON 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ___________________ test_set_state_status[OFF-Asyncio-False] ___________________ 476s state = tango._tango.DevState.OFF 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ___________________ test_set_state_status[OFF-Asyncio-True] ____________________ 476s state = tango._tango.DevState.OFF 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________ test_set_state_status[CLOSE-Asyncio-False] __________________ 476s state = tango._tango.DevState.CLOSE 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________ test_set_state_status[CLOSE-Asyncio-True] ___________________ 476s state = tango._tango.DevState.CLOSE 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________ test_set_state_status[OPEN-Asyncio-False] ___________________ 476s state = tango._tango.DevState.OPEN 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ___________________ test_set_state_status[OPEN-Asyncio-True] ___________________ 476s state = tango._tango.DevState.OPEN 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________ test_set_state_status[INSERT-Asyncio-False] __________________ 476s state = tango._tango.DevState.INSERT 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________ test_set_state_status[INSERT-Asyncio-True] __________________ 476s state = tango._tango.DevState.INSERT 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________ test_set_state_status[EXTRACT-Asyncio-False] _________________ 476s state = tango._tango.DevState.EXTRACT 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________ test_set_state_status[EXTRACT-Asyncio-True] __________________ 476s state = tango._tango.DevState.EXTRACT 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________ test_set_state_status[MOVING-Asyncio-False] __________________ 476s state = tango._tango.DevState.MOVING 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________ test_set_state_status[MOVING-Asyncio-True] __________________ 476s state = tango._tango.DevState.MOVING 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________ test_set_state_status[STANDBY-Asyncio-False] _________________ 476s state = tango._tango.DevState.STANDBY 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________ test_set_state_status[STANDBY-Asyncio-True] __________________ 476s state = tango._tango.DevState.STANDBY 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________ test_set_state_status[FAULT-Asyncio-False] __________________ 476s state = tango._tango.DevState.FAULT 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________ test_set_state_status[FAULT-Asyncio-True] ___________________ 476s state = tango._tango.DevState.FAULT 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________ test_set_state_status[INIT-Asyncio-False] ___________________ 476s state = tango._tango.DevState.INIT 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ___________________ test_set_state_status[INIT-Asyncio-True] ___________________ 476s state = tango._tango.DevState.INIT 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________ test_set_state_status[RUNNING-Asyncio-False] _________________ 476s state = tango._tango.DevState.RUNNING 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________ test_set_state_status[RUNNING-Asyncio-True] __________________ 476s state = tango._tango.DevState.RUNNING 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________ test_set_state_status[ALARM-Asyncio-False] __________________ 476s state = tango._tango.DevState.ALARM 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________ test_set_state_status[ALARM-Asyncio-True] ___________________ 476s state = tango._tango.DevState.ALARM 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________ test_set_state_status[DISABLE-Asyncio-False] _________________ 476s state = tango._tango.DevState.DISABLE 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________ test_set_state_status[DISABLE-Asyncio-True] __________________ 476s state = tango._tango.DevState.DISABLE 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________ test_set_state_status[UNKNOWN-Asyncio-False] _________________ 476s state = tango._tango.DevState.UNKNOWN 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________ test_set_state_status[UNKNOWN-Asyncio-True] __________________ 476s state = tango._tango.DevState.UNKNOWN 476s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 476s 476s @pytest.mark.parametrize("force_user_status", [False, True]) 476s def test_set_state_status(state, server_green_mode, force_user_status): 476s if force_user_status: 476s status = "\n".join( 476s ( 476s "This is a multiline status", 476s "with special characters such as", 476s "Café à la crème", 476s ) 476s ) 476s else: 476s status = f"The device is in {state!s} state." 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def init_device(self): 476s self.set_state(state) 476s if force_user_status: 476s self.set_status(status) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:215: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _____________________ test_user_dev_state_status[Asyncio] ______________________ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_user_dev_state_status(server_green_mode): 476s state = DevState.MOVING 476s status = "Device is MOVING" 476s 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s async def dev_state(self): 476s return state 476s 476s async def dev_status(self): 476s return status 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s def dev_state(self): 476s return state 476s 476s def dev_status(self): 476s return status 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:246: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ________________ test_attr_quality_checked_with_state[Asyncio] _________________ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_attr_quality_checked_with_state(server_green_mode): 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class BaseTestDevice(Device): 476s @command(dtype_out=bool) 476s async def check_sub_function_was_called(self): 476s return ( 476s self.read_attr_hardware_was_called 476s and self.always_executed_hook_was_called 476s ) 476s 476s else: 476s 476s class BaseTestDevice(Device): 476s @command(dtype_out=bool) 476s def check_sub_function_was_called(self): 476s return ( 476s self.read_attr_hardware_was_called 476s and self.always_executed_hook_was_called 476s ) 476s 476s class TestDevice(BaseTestDevice): 476s green_mode = server_green_mode 476s 476s read_attr_hardware_was_called = False 476s always_executed_hook_was_called = False 476s 476s sync_code = textwrap.dedent( 476s """ 476s def init_device(self): 476s Device.init_device(self) 476s self.set_state(DevState.ON) 476s 476s def read_attr_hardware(self, attr_list): 476s self.read_attr_hardware_was_called = True 476s return Device.read_attr_hardware(self, attr_list) 476s 476s def always_executed_hook(self): 476s self.always_executed_hook_was_called = True 476s 476s @attribute(max_alarm=0) 476s def test_attribute(self): 476s return 42 476s """ 476s ) 476s 476s if server_green_mode == GreenMode.Asyncio: 476s exec( 476s sync_code.replace("def", "async def").replace("Device", "await Device") 476s ) 476s else: 476s exec(sync_code) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:304: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _____________________ test_device_get_attr_config[Asyncio] _____________________ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_device_get_attr_config(server_green_mode): 476s class TestDevice(Device): 476s # green mode matters to check deadlocks in async modes 476s green_mode = server_green_mode 476s 476s sync_code = textwrap.dedent( 476s """ 476s @attribute(dtype=bool) 476s def attr_config_ok(self): 476s # testing that call to get_attribute_config for all types of 476s # input arguments gives same result and doesn't raise an exception 476s ac1 = self.get_attribute_config(b"attr_config_ok") 476s ac2 = self.get_attribute_config("attr_config_ok") 476s ac3 = self.get_attribute_config(["attr_config_ok"]) 476s return repr(ac1) == repr(ac2) == repr(ac3) 476s """ 476s ) 476s 476s if server_green_mode == GreenMode.Asyncio: 476s exec(sync_code.replace("def", "async def")) 476s else: 476s exec(sync_code) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:332: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _____________________ test_device_set_attr_config[Asyncio] _____________________ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_device_set_attr_config(server_green_mode): 476s class TestDevice(Device): 476s # green mode matters to check deadlocks in async modes 476s green_mode = server_green_mode 476s 476s sync_code = textwrap.dedent( 476s """ 476s @attribute(dtype=int) 476s def attr(self): 476s attr_config = self.get_attribute_config("attr") 476s attr_config[0].min_value = "-7" 476s attr_config[0].min_alarm = "-6" 476s 476s attr_config[0].max_alarm = "6" 476s attr_config[0].max_value = "7" 476s 476s self.set_attribute_config(attr_config) 476s assert repr(attr_config) == repr(self.get_attribute_config("attr")) 476s 476s with pytest.warns(PyTangoUserWarning, match="is not supported by Tango IDL"): 476s attr_config[0].lala = "7" 476s 476s attr_config = self.get_attribute_config_3("attr") 476s attr_config[0].min_value = "-5" 476s attr_config[0].att_alarm.min_alarm = "-4" 476s attr_config[0].att_alarm.min_warning = "-3" 476s 476s attr_config[0].att_alarm.max_warning = "3" 476s attr_config[0].att_alarm.max_alarm = "4" 476s attr_config[0].max_value = "5" 476s 476s self.set_attribute_config_3(attr_config) 476s assert repr(attr_config) == repr(self.get_attribute_config_3("attr")) 476s 476s with pytest.warns(PyTangoUserWarning, match="is not supported by Tango IDL"): 476s attr_config[0].lala = "7" 476s 476s attr = self.get_device_attr().get_attr_by_name("attr") 476s 476s val = -2 476s for f in ["min_alarm", "min_warning", "max_warning", "max_alarm"]: 476s getattr(attr, f"set_{f}")(val) 476s assert val == getattr(attr, f"get_{f}")() 476s val += 1 476s 476s return 1 476s """ 476s ) 476s 476s if server_green_mode == GreenMode.Asyncio: 476s exec(sync_code.replace("def", "async def")) 476s else: 476s exec(sync_code) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:390: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _____________________ test_exception_propagation[Asyncio] ______________________ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_exception_propagation(server_green_mode): 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @attribute 476s async def attr(self): 476s 1 / 0 # pylint: disable=pointless-statement 476s 476s @command 476s async def cmd(self): 476s 1 / 0 # pylint: disable=pointless-statement 476s 476s else: 476s 476s class TestDevice(Device): 476s green_mode = server_green_mode 476s 476s @attribute 476s def attr(self): 476s 1 / 0 # pylint: disable=pointless-statement 476s 476s @command 476s def cmd(self): 476s 1 / 0 # pylint: disable=pointless-statement 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:873: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________ test_asyncio_server_init_hook_change_state __________________ 476s def test_asyncio_server_init_hook_change_state(): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s 476s async def server_init_hook(self): 476s await asyncio.sleep(0.01) 476s self.set_state(DevState.ON) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:959: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ________________ test_async_server_init_hook_called_after_init _________________ 476s def test_async_server_init_hook_called_after_init(): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s 476s async def init_device(self): 476s await asyncio.sleep(0.01) 476s self.set_state(DevState.INIT) 476s 476s async def server_init_hook(self): 476s await asyncio.sleep(0.01) 476s self.set_state(DevState.ON) 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:987: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ___________________ test_asyncio_server_init_hook_exception ____________________ 476s def test_asyncio_server_init_hook_exception(): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s 476s async def server_init_hook(self): 476s await asyncio.sleep(0.01) 476s raise RuntimeError("Force exception for test") 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:1010: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _____ test_deprecation_warning_for_sync_attr_com_methods_in_asyncio_device _____ 476s def test_deprecation_warning_for_sync_attr_com_methods_in_asyncio_device(): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s attr_value = 1 476s 476s # static attributes and commands 476s 476s @attribute(access=AttrWriteType.READ_WRITE) 476s async def attr_all_methods_async(self) -> int: 476s return self.attr_value 476s 476s @attr_all_methods_async.write 476s async def attr_all_methods_async(self, value): 476s self.attr_value = value 476s 476s @attr_all_methods_async.is_allowed 476s async def attr_all_methods_async(self, req_type): 476s return True 476s 476s @attribute(access=AttrWriteType.READ_WRITE) 476s def attr_sync_read_write(self) -> int: 476s return self.attr_value 476s 476s @attr_sync_read_write.write 476s def set_attr_sync_read_write(self, value): 476s self.attr_value = value 476s 476s @attribute 476s async def attr_sync_is_allowed(self) -> int: 476s return self.attr_value 476s 476s @attr_sync_is_allowed.is_allowed 476s def is_attr_sync_is_allowed(self, req_type): 476s return True 476s 476s @command(dtype_out=int) 476s async def cmd_all_methods_async(self, val_in: int) -> int: 476s return val_in 476s 476s async def is_cmd_all_methods_async_allowed(self): 476s return True 476s 476s @command(dtype_out=int) 476s def cmd_sync_func(self, val_in: int) -> int: 476s return val_in 476s 476s @command(dtype_out=int) 476s async def cmd_sync_is_allowed(self, val_in: int) -> int: 476s return val_in 476s 476s def is_cmd_sync_is_allowed_allowed(self): 476s return True 476s 476s # dynamic attributes and commands 476s 476s @command 476s async def add_dynamic_cmd_attr(self): 476s attr = attribute( 476s name="dyn_attr_all_methods_async", 476s access=AttrWriteType.READ_WRITE, 476s fget=self.dyn_attr_all_methods_async, 476s fset=self.dyn_set_attr_all_methods_async, 476s fisallowed=self.is_dyn_attr_all_methods_async_allowed, 476s ) 476s self.add_attribute(attr) 476s 476s attr = attribute( 476s name="dyn_attr_sync_read_write", 476s access=AttrWriteType.READ_WRITE, 476s fget=self.dyn_attr_sync_read_write, 476s fset=self.dyn_set_attr_sync_read_write, 476s ) 476s self.add_attribute(attr) 476s 476s attr = attribute( 476s name="dyn_attr_sync_is_allowed", 476s access=AttrWriteType.READ, 476s fget=self.dyn_attr_sync_is_allowed, 476s fisallowed=self.is_dyn_attr_sync_is_allowed, 476s ) 476s self.add_attribute(attr) 476s 476s cmd = command( 476s f=self.dyn_cmd_all_methods_async, 476s fisallowed=self.is_dyn_cmd_all_methods_async_allowed, 476s ) 476s self.add_command(cmd) 476s 476s cmd = command(f=self.dyn_cmd_sync_func) 476s self.add_command(cmd) 476s 476s cmd = command( 476s f=self.dyn_cmd_sync_is_allowed, 476s fisallowed=self.is_dyn_cmd_sync_is_allowed_allowed, 476s ) 476s self.add_command(cmd) 476s 476s async def dyn_attr_all_methods_async(self, attr) -> int: 476s return self.attr_value 476s 476s async def dyn_set_attr_all_methods_async(self, attr): 476s self.attr_value = attr.get_write_value() 476s 476s async def is_dyn_attr_all_methods_async_allowed(self, req_type): 476s return True 476s 476s def dyn_attr_sync_read_write(self, attr) -> int: 476s return self.attr_value 476s 476s def dyn_set_attr_sync_read_write(self, attr): 476s self.attr_value = attr.get_write_value() 476s 476s async def dyn_attr_sync_is_allowed(self, attr) -> int: 476s return self.attr_value 476s 476s def is_dyn_attr_sync_is_allowed(self, req_type): 476s return True 476s 476s async def dyn_cmd_all_methods_async(self, val_in: int) -> int: 476s return val_in 476s 476s async def is_dyn_cmd_all_methods_async_allowed(self): 476s return True 476s 476s def dyn_cmd_sync_func(self, val_in: int) -> int: 476s return val_in 476s 476s async def dyn_cmd_sync_is_allowed(self, val_in: int) -> int: 476s return val_in 476s 476s def is_dyn_cmd_sync_is_allowed_allowed(self): 476s return True 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:1286: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _ test_deprecation_warning_for_standard_methods_in_asyncio_device[init_device] _ 476s method = 'init_device' 476s 476s @pytest.mark.parametrize( 476s "method", 476s [ 476s "init_device", 476s "delete_device", 476s "dev_state", 476s "dev_status", 476s "read_attr_hardware", 476s "always_executed_hook", 476s ], 476s ) 476s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s 476s @attribute 476s async def attr(self) -> int: 476s return 1 476s 476s async_code = textwrap.dedent( 476s """ 476s async def init_device(self): 476s pass 476s 476s async def delete_device(self): 476s pass 476s 476s async def dev_state(self): 476s return DevState.ON 476s 476s async def dev_status(self): 476s return "All good" 476s 476s async def read_attr_hardware(self, attr_list): 476s pass 476s 476s async def always_executed_hook(self): 476s pass 476s """ 476s ) 476s 476s exec(async_code.replace(f"async def {method}", f"def {method}")) 476s 476s with pytest.warns(DeprecationWarning, match=method): 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:1374: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s 476s During handling of the above exception, another exception occurred: 476s 476s method = 'init_device' 476s 476s @pytest.mark.parametrize( 476s "method", 476s [ 476s "init_device", 476s "delete_device", 476s "dev_state", 476s "dev_status", 476s "read_attr_hardware", 476s "always_executed_hook", 476s ], 476s ) 476s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s 476s @attribute 476s async def attr(self) -> int: 476s return 1 476s 476s async_code = textwrap.dedent( 476s """ 476s async def init_device(self): 476s pass 476s 476s async def delete_device(self): 476s pass 476s 476s async def dev_state(self): 476s return DevState.ON 476s 476s async def dev_status(self): 476s return "All good" 476s 476s async def read_attr_hardware(self, attr_list): 476s pass 476s 476s async def always_executed_hook(self): 476s pass 476s """ 476s ) 476s 476s exec(async_code.replace(f"async def {method}", f"def {method}")) 476s 476s > with pytest.warns(DeprecationWarning, match=method): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 476s E Emitted warnings: []. 476s 476s tests/test_server.py:1373: Failed 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _ test_deprecation_warning_for_standard_methods_in_asyncio_device[delete_device] _ 476s method = 'delete_device' 476s 476s @pytest.mark.parametrize( 476s "method", 476s [ 476s "init_device", 476s "delete_device", 476s "dev_state", 476s "dev_status", 476s "read_attr_hardware", 476s "always_executed_hook", 476s ], 476s ) 476s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s 476s @attribute 476s async def attr(self) -> int: 476s return 1 476s 476s async_code = textwrap.dedent( 476s """ 476s async def init_device(self): 476s pass 476s 476s async def delete_device(self): 476s pass 476s 476s async def dev_state(self): 476s return DevState.ON 476s 476s async def dev_status(self): 476s return "All good" 476s 476s async def read_attr_hardware(self, attr_list): 476s pass 476s 476s async def always_executed_hook(self): 476s pass 476s """ 476s ) 476s 476s exec(async_code.replace(f"async def {method}", f"def {method}")) 476s 476s with pytest.warns(DeprecationWarning, match=method): 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:1374: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s 476s During handling of the above exception, another exception occurred: 476s 476s method = 'delete_device' 476s 476s @pytest.mark.parametrize( 476s "method", 476s [ 476s "init_device", 476s "delete_device", 476s "dev_state", 476s "dev_status", 476s "read_attr_hardware", 476s "always_executed_hook", 476s ], 476s ) 476s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s 476s @attribute 476s async def attr(self) -> int: 476s return 1 476s 476s async_code = textwrap.dedent( 476s """ 476s async def init_device(self): 476s pass 476s 476s async def delete_device(self): 476s pass 476s 476s async def dev_state(self): 476s return DevState.ON 476s 476s async def dev_status(self): 476s return "All good" 476s 476s async def read_attr_hardware(self, attr_list): 476s pass 476s 476s async def always_executed_hook(self): 476s pass 476s """ 476s ) 476s 476s exec(async_code.replace(f"async def {method}", f"def {method}")) 476s 476s > with pytest.warns(DeprecationWarning, match=method): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 476s E Emitted warnings: []. 476s 476s tests/test_server.py:1373: Failed 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __ test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_state] __ 476s method = 'dev_state' 476s 476s @pytest.mark.parametrize( 476s "method", 476s [ 476s "init_device", 476s "delete_device", 476s "dev_state", 476s "dev_status", 476s "read_attr_hardware", 476s "always_executed_hook", 476s ], 476s ) 476s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s 476s @attribute 476s async def attr(self) -> int: 476s return 1 476s 476s async_code = textwrap.dedent( 476s """ 476s async def init_device(self): 476s pass 476s 476s async def delete_device(self): 476s pass 476s 476s async def dev_state(self): 476s return DevState.ON 476s 476s async def dev_status(self): 476s return "All good" 476s 476s async def read_attr_hardware(self, attr_list): 476s pass 476s 476s async def always_executed_hook(self): 476s pass 476s """ 476s ) 476s 476s exec(async_code.replace(f"async def {method}", f"def {method}")) 476s 476s with pytest.warns(DeprecationWarning, match=method): 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:1374: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s 476s During handling of the above exception, another exception occurred: 476s 476s method = 'dev_state' 476s 476s @pytest.mark.parametrize( 476s "method", 476s [ 476s "init_device", 476s "delete_device", 476s "dev_state", 476s "dev_status", 476s "read_attr_hardware", 476s "always_executed_hook", 476s ], 476s ) 476s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s 476s @attribute 476s async def attr(self) -> int: 476s return 1 476s 476s async_code = textwrap.dedent( 476s """ 476s async def init_device(self): 476s pass 476s 476s async def delete_device(self): 476s pass 476s 476s async def dev_state(self): 476s return DevState.ON 476s 476s async def dev_status(self): 476s return "All good" 476s 476s async def read_attr_hardware(self, attr_list): 476s pass 476s 476s async def always_executed_hook(self): 476s pass 476s """ 476s ) 476s 476s exec(async_code.replace(f"async def {method}", f"def {method}")) 476s 476s > with pytest.warns(DeprecationWarning, match=method): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 476s E Emitted warnings: []. 476s 476s tests/test_server.py:1373: Failed 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _ test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_status] __ 476s method = 'dev_status' 476s 476s @pytest.mark.parametrize( 476s "method", 476s [ 476s "init_device", 476s "delete_device", 476s "dev_state", 476s "dev_status", 476s "read_attr_hardware", 476s "always_executed_hook", 476s ], 476s ) 476s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s 476s @attribute 476s async def attr(self) -> int: 476s return 1 476s 476s async_code = textwrap.dedent( 476s """ 476s async def init_device(self): 476s pass 476s 476s async def delete_device(self): 476s pass 476s 476s async def dev_state(self): 476s return DevState.ON 476s 476s async def dev_status(self): 476s return "All good" 476s 476s async def read_attr_hardware(self, attr_list): 476s pass 476s 476s async def always_executed_hook(self): 476s pass 476s """ 476s ) 476s 476s exec(async_code.replace(f"async def {method}", f"def {method}")) 476s 476s with pytest.warns(DeprecationWarning, match=method): 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:1374: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s 476s During handling of the above exception, another exception occurred: 476s 476s method = 'dev_status' 476s 476s @pytest.mark.parametrize( 476s "method", 476s [ 476s "init_device", 476s "delete_device", 476s "dev_state", 476s "dev_status", 476s "read_attr_hardware", 476s "always_executed_hook", 476s ], 476s ) 476s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s 476s @attribute 476s async def attr(self) -> int: 476s return 1 476s 476s async_code = textwrap.dedent( 476s """ 476s async def init_device(self): 476s pass 476s 476s async def delete_device(self): 476s pass 476s 476s async def dev_state(self): 476s return DevState.ON 476s 476s async def dev_status(self): 476s return "All good" 476s 476s async def read_attr_hardware(self, attr_list): 476s pass 476s 476s async def always_executed_hook(self): 476s pass 476s """ 476s ) 476s 476s exec(async_code.replace(f"async def {method}", f"def {method}")) 476s 476s > with pytest.warns(DeprecationWarning, match=method): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 476s E Emitted warnings: []. 476s 476s tests/test_server.py:1373: Failed 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _ test_deprecation_warning_for_standard_methods_in_asyncio_device[read_attr_hardware] _ 476s method = 'read_attr_hardware' 476s 476s @pytest.mark.parametrize( 476s "method", 476s [ 476s "init_device", 476s "delete_device", 476s "dev_state", 476s "dev_status", 476s "read_attr_hardware", 476s "always_executed_hook", 476s ], 476s ) 476s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s 476s @attribute 476s async def attr(self) -> int: 476s return 1 476s 476s async_code = textwrap.dedent( 476s """ 476s async def init_device(self): 476s pass 476s 476s async def delete_device(self): 476s pass 476s 476s async def dev_state(self): 476s return DevState.ON 476s 476s async def dev_status(self): 476s return "All good" 476s 476s async def read_attr_hardware(self, attr_list): 476s pass 476s 476s async def always_executed_hook(self): 476s pass 476s """ 476s ) 476s 476s exec(async_code.replace(f"async def {method}", f"def {method}")) 476s 476s with pytest.warns(DeprecationWarning, match=method): 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:1374: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s 476s During handling of the above exception, another exception occurred: 476s 476s method = 'read_attr_hardware' 476s 476s @pytest.mark.parametrize( 476s "method", 476s [ 476s "init_device", 476s "delete_device", 476s "dev_state", 476s "dev_status", 476s "read_attr_hardware", 476s "always_executed_hook", 476s ], 476s ) 476s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s 476s @attribute 476s async def attr(self) -> int: 476s return 1 476s 476s async_code = textwrap.dedent( 476s """ 476s async def init_device(self): 476s pass 476s 476s async def delete_device(self): 476s pass 476s 476s async def dev_state(self): 476s return DevState.ON 476s 476s async def dev_status(self): 476s return "All good" 476s 476s async def read_attr_hardware(self, attr_list): 476s pass 476s 476s async def always_executed_hook(self): 476s pass 476s """ 476s ) 476s 476s exec(async_code.replace(f"async def {method}", f"def {method}")) 476s 476s > with pytest.warns(DeprecationWarning, match=method): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 476s E Emitted warnings: []. 476s 476s tests/test_server.py:1373: Failed 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _ test_deprecation_warning_for_standard_methods_in_asyncio_device[always_executed_hook] _ 476s method = 'always_executed_hook' 476s 476s @pytest.mark.parametrize( 476s "method", 476s [ 476s "init_device", 476s "delete_device", 476s "dev_state", 476s "dev_status", 476s "read_attr_hardware", 476s "always_executed_hook", 476s ], 476s ) 476s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s 476s @attribute 476s async def attr(self) -> int: 476s return 1 476s 476s async_code = textwrap.dedent( 476s """ 476s async def init_device(self): 476s pass 476s 476s async def delete_device(self): 476s pass 476s 476s async def dev_state(self): 476s return DevState.ON 476s 476s async def dev_status(self): 476s return "All good" 476s 476s async def read_attr_hardware(self, attr_list): 476s pass 476s 476s async def always_executed_hook(self): 476s pass 476s """ 476s ) 476s 476s exec(async_code.replace(f"async def {method}", f"def {method}")) 476s 476s with pytest.warns(DeprecationWarning, match=method): 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_server.py:1374: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s 476s During handling of the above exception, another exception occurred: 476s 476s method = 'always_executed_hook' 476s 476s @pytest.mark.parametrize( 476s "method", 476s [ 476s "init_device", 476s "delete_device", 476s "dev_state", 476s "dev_status", 476s "read_attr_hardware", 476s "always_executed_hook", 476s ], 476s ) 476s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 476s class TestDevice(Device): 476s green_mode = GreenMode.Asyncio 476s 476s @attribute 476s async def attr(self) -> int: 476s return 1 476s 476s async_code = textwrap.dedent( 476s """ 476s async def init_device(self): 476s pass 476s 476s async def delete_device(self): 476s pass 476s 476s async def dev_state(self): 476s return DevState.ON 476s 476s async def dev_status(self): 476s return "All good" 476s 476s async def read_attr_hardware(self, attr_list): 476s pass 476s 476s async def always_executed_hook(self): 476s pass 476s """ 476s ) 476s 476s exec(async_code.replace(f"async def {method}", f"def {method}")) 476s 476s > with pytest.warns(DeprecationWarning, match=method): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 476s E Emitted warnings: []. 476s 476s tests/test_server.py:1373: Failed 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________________ test_single_device[Asyncio] __________________________ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_single_device(server_green_mode): 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device1Asyncio): 476s pass 476s 476s else: 476s 476s class TestDevice(Device1): 476s green_mode = server_green_mode 476s 476s > with DeviceTestContext(TestDevice) as proxy: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:144: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ____________________ test_multi_with_single_device[Asyncio] ____________________ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_multi_with_single_device(server_green_mode): 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice(Device1Asyncio): 476s pass 476s 476s else: 476s 476s class TestDevice(Device1): 476s green_mode = server_green_mode 476s 476s devices_info = ({"class": TestDevice, "devices": [{"name": "test/device1/1"}]},) 476s 476s > with MultiDeviceTestContext(devices_info) as context: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:235: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _____________________ test_multi_with_two_devices[Asyncio] _____________________ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_multi_with_two_devices(server_green_mode): 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice1(Device1Asyncio): 476s pass 476s 476s class TestDevice2(Device2Asyncio): 476s pass 476s 476s else: 476s 476s class TestDevice1(Device1): 476s green_mode = server_green_mode 476s 476s class TestDevice2(Device2): 476s green_mode = server_green_mode 476s 476s devices_info = ( 476s {"class": TestDevice1, "devices": [{"name": "test/device1/1"}]}, 476s {"class": TestDevice2, "devices": [{"name": "test/device2/1"}]}, 476s ) 476s 476s > with MultiDeviceTestContext(devices_info) as context: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:275: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _ test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Asyncio-None] _ 476s first_type = 476s second_type = , exception_type = None 476s 476s @pytest.mark.parametrize( 476s "first_type, second_type, exception_type", 476s [ 476s (Device1GreenModeUnspecified, Device2GreenModeUnspecified, None), 476s (Device1GreenModeUnspecified, Device2Synchronous, None), 476s (Device1GreenModeUnspecified, Device2Gevent, ValueError), 476s (Device1GreenModeUnspecified, Device2Asyncio, ValueError), 476s (Device1Synchronous, Device2GreenModeUnspecified, None), 476s (Device1Synchronous, Device2Synchronous, None), 476s (Device1Synchronous, Device2Gevent, ValueError), 476s (Device1Synchronous, Device2Asyncio, ValueError), 476s (Device1Asyncio, Device2GreenModeUnspecified, ValueError), 476s (Device1Asyncio, Device2Synchronous, ValueError), 476s (Device1Asyncio, Device2Gevent, ValueError), 476s (Device1Asyncio, Device2Asyncio, None), 476s (Device1Gevent, Device2GreenModeUnspecified, ValueError), 476s (Device1Gevent, Device2Synchronous, ValueError), 476s (Device1Gevent, Device2Gevent, None), 476s (Device1Gevent, Device2Asyncio, ValueError), 476s ], 476s ) 476s def test_multi_with_mixed_device_green_modes(first_type, second_type, exception_type): 476s devices_info = ( 476s {"class": first_type, "devices": [{"name": "test/device1/1"}]}, 476s {"class": second_type, "devices": [{"name": "test/device2/1"}]}, 476s ) 476s 476s if exception_type is None: 476s > with MultiDeviceTestContext(devices_info): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:312: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _ test_green_modes_in_device_kwarg_and_global[Device1Synchronous-Asyncio-Asyncio-None-SynchronousExecutor] _ 476s device_type = 476s green_mode = tango._tango.GreenMode.Asyncio 476s global_mode = tango._tango.GreenMode.Asyncio, exception_type = None 476s executor_type = 476s 476s @pytest.mark.parametrize( 476s "device_type, green_mode, global_mode, exception_type, executor_type", 476s [ 476s # If a device specifies its green mode explicitly, then both 476s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 476s ( 476s Device1Synchronous, 476s GreenMode.Asyncio, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Synchronous, 476s GreenMode.Gevent, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Asyncio, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s AsyncioExecutor, 476s ), 476s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 476s ( 476s Device1Gevent, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 476s # If device doesn't specify its green mode, but green_mode kwarg is provided, 476s # then we use green_mode kwarg 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Asyncio, 476s None, 476s GeventExecutor, 476s ), 476s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 476s # (currently only works for synchronous mode - see unsupported modes below) 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Synchronous, 476s None, 476s SynchronousExecutor, 476s ), 476s # Deprecated modes - starting from PyTango 10 it is deprecated 476s # to modify sync servers to async "on the fly". 476s # All base methods should be defined with "async def" instead. 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Synchronous, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Gevent, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s # Unsupported modes - device servers with the following combinations 476s # fail to start up. The cause is unknown. This could be fixed in the future. 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Asyncio, 476s RuntimeError, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Gevent, 476s RuntimeError, 476s GeventExecutor, 476s ), 476s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 476s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 476s ], 476s ) 476s def test_green_modes_in_device_kwarg_and_global( 476s device_type, green_mode, global_mode, exception_type, executor_type 476s ): 476s if WINDOWS and exception_type is not None: 476s pytest.skip("Skip test that hangs on Windows") 476s 476s old_green_mode = tango.get_green_mode() 476s try: 476s tango.set_green_mode(global_mode) 476s 476s if exception_type is None: 476s > with DeviceTestContext(device_type, green_mode=green_mode): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:442: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:669: in connect 476s self.server.ping() 476s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 476s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stdout call ----------------------------- 476s Ready to accept request 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _ test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Synchronous-Synchronous-None-AsyncioExecutor] _ 476s device_type = 476s green_mode = tango._tango.GreenMode.Synchronous 476s global_mode = tango._tango.GreenMode.Synchronous, exception_type = None 476s executor_type = 476s 476s @pytest.mark.parametrize( 476s "device_type, green_mode, global_mode, exception_type, executor_type", 476s [ 476s # If a device specifies its green mode explicitly, then both 476s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 476s ( 476s Device1Synchronous, 476s GreenMode.Asyncio, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Synchronous, 476s GreenMode.Gevent, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Asyncio, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s AsyncioExecutor, 476s ), 476s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 476s ( 476s Device1Gevent, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 476s # If device doesn't specify its green mode, but green_mode kwarg is provided, 476s # then we use green_mode kwarg 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Asyncio, 476s None, 476s GeventExecutor, 476s ), 476s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 476s # (currently only works for synchronous mode - see unsupported modes below) 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Synchronous, 476s None, 476s SynchronousExecutor, 476s ), 476s # Deprecated modes - starting from PyTango 10 it is deprecated 476s # to modify sync servers to async "on the fly". 476s # All base methods should be defined with "async def" instead. 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Synchronous, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Gevent, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s # Unsupported modes - device servers with the following combinations 476s # fail to start up. The cause is unknown. This could be fixed in the future. 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Asyncio, 476s RuntimeError, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Gevent, 476s RuntimeError, 476s GeventExecutor, 476s ), 476s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 476s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 476s ], 476s ) 476s def test_green_modes_in_device_kwarg_and_global( 476s device_type, green_mode, global_mode, exception_type, executor_type 476s ): 476s if WINDOWS and exception_type is not None: 476s pytest.skip("Skip test that hangs on Windows") 476s 476s old_green_mode = tango.get_green_mode() 476s try: 476s tango.set_green_mode(global_mode) 476s 476s if exception_type is None: 476s > with DeviceTestContext(device_type, green_mode=green_mode): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:442: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _ test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Gevent-Gevent-None-AsyncioExecutor] _ 476s device_type = 476s green_mode = tango._tango.GreenMode.Gevent 476s global_mode = tango._tango.GreenMode.Gevent, exception_type = None 476s executor_type = 476s 476s @pytest.mark.parametrize( 476s "device_type, green_mode, global_mode, exception_type, executor_type", 476s [ 476s # If a device specifies its green mode explicitly, then both 476s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 476s ( 476s Device1Synchronous, 476s GreenMode.Asyncio, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Synchronous, 476s GreenMode.Gevent, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Asyncio, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s AsyncioExecutor, 476s ), 476s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 476s ( 476s Device1Gevent, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 476s # If device doesn't specify its green mode, but green_mode kwarg is provided, 476s # then we use green_mode kwarg 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Asyncio, 476s None, 476s GeventExecutor, 476s ), 476s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 476s # (currently only works for synchronous mode - see unsupported modes below) 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Synchronous, 476s None, 476s SynchronousExecutor, 476s ), 476s # Deprecated modes - starting from PyTango 10 it is deprecated 476s # to modify sync servers to async "on the fly". 476s # All base methods should be defined with "async def" instead. 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Synchronous, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Gevent, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s # Unsupported modes - device servers with the following combinations 476s # fail to start up. The cause is unknown. This could be fixed in the future. 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Asyncio, 476s RuntimeError, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Gevent, 476s RuntimeError, 476s GeventExecutor, 476s ), 476s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 476s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 476s ], 476s ) 476s def test_green_modes_in_device_kwarg_and_global( 476s device_type, green_mode, global_mode, exception_type, executor_type 476s ): 476s if WINDOWS and exception_type is not None: 476s pytest.skip("Skip test that hangs on Windows") 476s 476s old_green_mode = tango.get_green_mode() 476s try: 476s tango.set_green_mode(global_mode) 476s 476s if exception_type is None: 476s > with DeviceTestContext(device_type, green_mode=green_mode): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:442: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _ test_green_modes_in_device_kwarg_and_global[Device1Gevent-Asyncio-Asyncio-None-GeventExecutor] _ 476s device_type = 476s green_mode = tango._tango.GreenMode.Asyncio 476s global_mode = tango._tango.GreenMode.Asyncio, exception_type = None 476s executor_type = 476s 476s @pytest.mark.parametrize( 476s "device_type, green_mode, global_mode, exception_type, executor_type", 476s [ 476s # If a device specifies its green mode explicitly, then both 476s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 476s ( 476s Device1Synchronous, 476s GreenMode.Asyncio, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Synchronous, 476s GreenMode.Gevent, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Asyncio, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s AsyncioExecutor, 476s ), 476s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 476s ( 476s Device1Gevent, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 476s # If device doesn't specify its green mode, but green_mode kwarg is provided, 476s # then we use green_mode kwarg 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Asyncio, 476s None, 476s GeventExecutor, 476s ), 476s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 476s # (currently only works for synchronous mode - see unsupported modes below) 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Synchronous, 476s None, 476s SynchronousExecutor, 476s ), 476s # Deprecated modes - starting from PyTango 10 it is deprecated 476s # to modify sync servers to async "on the fly". 476s # All base methods should be defined with "async def" instead. 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Synchronous, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Gevent, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s # Unsupported modes - device servers with the following combinations 476s # fail to start up. The cause is unknown. This could be fixed in the future. 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Asyncio, 476s RuntimeError, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Gevent, 476s RuntimeError, 476s GeventExecutor, 476s ), 476s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 476s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 476s ], 476s ) 476s def test_green_modes_in_device_kwarg_and_global( 476s device_type, green_mode, global_mode, exception_type, executor_type 476s ): 476s if WINDOWS and exception_type is not None: 476s pytest.skip("Skip test that hangs on Windows") 476s 476s old_green_mode = tango.get_green_mode() 476s try: 476s tango.set_green_mode(global_mode) 476s 476s if exception_type is None: 476s > with DeviceTestContext(device_type, green_mode=green_mode): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:442: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:669: in connect 476s self.server.ping() 476s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 476s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stdout call ----------------------------- 476s Ready to accept request 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _ test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Synchronous-Asyncio-None-SynchronousExecutor] _ 476s device_type = 476s green_mode = tango._tango.GreenMode.Synchronous 476s global_mode = tango._tango.GreenMode.Asyncio, exception_type = None 476s executor_type = 476s 476s @pytest.mark.parametrize( 476s "device_type, green_mode, global_mode, exception_type, executor_type", 476s [ 476s # If a device specifies its green mode explicitly, then both 476s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 476s ( 476s Device1Synchronous, 476s GreenMode.Asyncio, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Synchronous, 476s GreenMode.Gevent, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Asyncio, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s AsyncioExecutor, 476s ), 476s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 476s ( 476s Device1Gevent, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 476s # If device doesn't specify its green mode, but green_mode kwarg is provided, 476s # then we use green_mode kwarg 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Asyncio, 476s None, 476s GeventExecutor, 476s ), 476s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 476s # (currently only works for synchronous mode - see unsupported modes below) 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Synchronous, 476s None, 476s SynchronousExecutor, 476s ), 476s # Deprecated modes - starting from PyTango 10 it is deprecated 476s # to modify sync servers to async "on the fly". 476s # All base methods should be defined with "async def" instead. 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Synchronous, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Gevent, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s # Unsupported modes - device servers with the following combinations 476s # fail to start up. The cause is unknown. This could be fixed in the future. 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Asyncio, 476s RuntimeError, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Gevent, 476s RuntimeError, 476s GeventExecutor, 476s ), 476s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 476s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 476s ], 476s ) 476s def test_green_modes_in_device_kwarg_and_global( 476s device_type, green_mode, global_mode, exception_type, executor_type 476s ): 476s if WINDOWS and exception_type is not None: 476s pytest.skip("Skip test that hangs on Windows") 476s 476s old_green_mode = tango.get_green_mode() 476s try: 476s tango.set_green_mode(global_mode) 476s 476s if exception_type is None: 476s > with DeviceTestContext(device_type, green_mode=green_mode): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:442: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:669: in connect 476s self.server.ping() 476s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 476s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stdout call ----------------------------- 476s Ready to accept request 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _ test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Gevent-Asyncio-None-GeventExecutor] _ 476s device_type = 476s green_mode = tango._tango.GreenMode.Gevent 476s global_mode = tango._tango.GreenMode.Asyncio, exception_type = None 476s executor_type = 476s 476s @pytest.mark.parametrize( 476s "device_type, green_mode, global_mode, exception_type, executor_type", 476s [ 476s # If a device specifies its green mode explicitly, then both 476s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 476s ( 476s Device1Synchronous, 476s GreenMode.Asyncio, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Synchronous, 476s GreenMode.Gevent, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Asyncio, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s AsyncioExecutor, 476s ), 476s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 476s ( 476s Device1Gevent, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 476s # If device doesn't specify its green mode, but green_mode kwarg is provided, 476s # then we use green_mode kwarg 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Asyncio, 476s None, 476s GeventExecutor, 476s ), 476s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 476s # (currently only works for synchronous mode - see unsupported modes below) 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Synchronous, 476s None, 476s SynchronousExecutor, 476s ), 476s # Deprecated modes - starting from PyTango 10 it is deprecated 476s # to modify sync servers to async "on the fly". 476s # All base methods should be defined with "async def" instead. 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Synchronous, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Gevent, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s # Unsupported modes - device servers with the following combinations 476s # fail to start up. The cause is unknown. This could be fixed in the future. 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Asyncio, 476s RuntimeError, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Gevent, 476s RuntimeError, 476s GeventExecutor, 476s ), 476s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 476s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 476s ], 476s ) 476s def test_green_modes_in_device_kwarg_and_global( 476s device_type, green_mode, global_mode, exception_type, executor_type 476s ): 476s if WINDOWS and exception_type is not None: 476s pytest.skip("Skip test that hangs on Windows") 476s 476s old_green_mode = tango.get_green_mode() 476s try: 476s tango.set_green_mode(global_mode) 476s 476s if exception_type is None: 476s > with DeviceTestContext(device_type, green_mode=green_mode): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:442: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:669: in connect 476s self.server.ping() 476s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 476s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stdout call ----------------------------- 476s Ready to accept request 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _ test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Synchronous-DeprecationWarning-AsyncioExecutor] _ 476s device_type = 476s green_mode = tango._tango.GreenMode.Asyncio 476s global_mode = tango._tango.GreenMode.Synchronous 476s exception_type = 476s executor_type = 476s 476s @pytest.mark.parametrize( 476s "device_type, green_mode, global_mode, exception_type, executor_type", 476s [ 476s # If a device specifies its green mode explicitly, then both 476s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 476s ( 476s Device1Synchronous, 476s GreenMode.Asyncio, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Synchronous, 476s GreenMode.Gevent, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Asyncio, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s AsyncioExecutor, 476s ), 476s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 476s ( 476s Device1Gevent, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 476s # If device doesn't specify its green mode, but green_mode kwarg is provided, 476s # then we use green_mode kwarg 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Asyncio, 476s None, 476s GeventExecutor, 476s ), 476s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 476s # (currently only works for synchronous mode - see unsupported modes below) 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Synchronous, 476s None, 476s SynchronousExecutor, 476s ), 476s # Deprecated modes - starting from PyTango 10 it is deprecated 476s # to modify sync servers to async "on the fly". 476s # All base methods should be defined with "async def" instead. 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Synchronous, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Gevent, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s # Unsupported modes - device servers with the following combinations 476s # fail to start up. The cause is unknown. This could be fixed in the future. 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Asyncio, 476s RuntimeError, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Gevent, 476s RuntimeError, 476s GeventExecutor, 476s ), 476s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 476s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 476s ], 476s ) 476s def test_green_modes_in_device_kwarg_and_global( 476s device_type, green_mode, global_mode, exception_type, executor_type 476s ): 476s if WINDOWS and exception_type is not None: 476s pytest.skip("Skip test that hangs on Windows") 476s 476s old_green_mode = tango.get_green_mode() 476s try: 476s tango.set_green_mode(global_mode) 476s 476s if exception_type is None: 476s with DeviceTestContext(device_type, green_mode=green_mode): 476s pass 476s elif exception_type is DeprecationWarning: 476s with pytest.warns((DeprecationWarning, RuntimeWarning)): 476s > with DeviceTestContext(device_type, green_mode=green_mode): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:446: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s 476s During handling of the above exception, another exception occurred: 476s 476s device_type = 476s green_mode = tango._tango.GreenMode.Asyncio 476s global_mode = tango._tango.GreenMode.Synchronous 476s exception_type = 476s executor_type = 476s 476s @pytest.mark.parametrize( 476s "device_type, green_mode, global_mode, exception_type, executor_type", 476s [ 476s # If a device specifies its green mode explicitly, then both 476s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 476s ( 476s Device1Synchronous, 476s GreenMode.Asyncio, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Synchronous, 476s GreenMode.Gevent, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Asyncio, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s AsyncioExecutor, 476s ), 476s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 476s ( 476s Device1Gevent, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 476s # If device doesn't specify its green mode, but green_mode kwarg is provided, 476s # then we use green_mode kwarg 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Asyncio, 476s None, 476s GeventExecutor, 476s ), 476s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 476s # (currently only works for synchronous mode - see unsupported modes below) 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Synchronous, 476s None, 476s SynchronousExecutor, 476s ), 476s # Deprecated modes - starting from PyTango 10 it is deprecated 476s # to modify sync servers to async "on the fly". 476s # All base methods should be defined with "async def" instead. 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Synchronous, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Gevent, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s # Unsupported modes - device servers with the following combinations 476s # fail to start up. The cause is unknown. This could be fixed in the future. 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Asyncio, 476s RuntimeError, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Gevent, 476s RuntimeError, 476s GeventExecutor, 476s ), 476s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 476s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 476s ], 476s ) 476s def test_green_modes_in_device_kwarg_and_global( 476s device_type, green_mode, global_mode, exception_type, executor_type 476s ): 476s if WINDOWS and exception_type is not None: 476s pytest.skip("Skip test that hangs on Windows") 476s 476s old_green_mode = tango.get_green_mode() 476s try: 476s tango.set_green_mode(global_mode) 476s 476s if exception_type is None: 476s with DeviceTestContext(device_type, green_mode=green_mode): 476s pass 476s elif exception_type is DeprecationWarning: 476s > with pytest.warns((DeprecationWarning, RuntimeWarning)): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s E Failed: DID NOT WARN. No warnings of type (, ) were emitted. 476s E Emitted warnings: []. 476s 476s tests/test_test_context.py:445: Failed 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _ test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Gevent-DeprecationWarning-AsyncioExecutor] _ 476s device_type = 476s green_mode = tango._tango.GreenMode.Asyncio 476s global_mode = tango._tango.GreenMode.Gevent 476s exception_type = 476s executor_type = 476s 476s @pytest.mark.parametrize( 476s "device_type, green_mode, global_mode, exception_type, executor_type", 476s [ 476s # If a device specifies its green mode explicitly, then both 476s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 476s ( 476s Device1Synchronous, 476s GreenMode.Asyncio, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Synchronous, 476s GreenMode.Gevent, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Asyncio, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s AsyncioExecutor, 476s ), 476s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 476s ( 476s Device1Gevent, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 476s # If device doesn't specify its green mode, but green_mode kwarg is provided, 476s # then we use green_mode kwarg 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Asyncio, 476s None, 476s GeventExecutor, 476s ), 476s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 476s # (currently only works for synchronous mode - see unsupported modes below) 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Synchronous, 476s None, 476s SynchronousExecutor, 476s ), 476s # Deprecated modes - starting from PyTango 10 it is deprecated 476s # to modify sync servers to async "on the fly". 476s # All base methods should be defined with "async def" instead. 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Synchronous, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Gevent, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s # Unsupported modes - device servers with the following combinations 476s # fail to start up. The cause is unknown. This could be fixed in the future. 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Asyncio, 476s RuntimeError, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Gevent, 476s RuntimeError, 476s GeventExecutor, 476s ), 476s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 476s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 476s ], 476s ) 476s def test_green_modes_in_device_kwarg_and_global( 476s device_type, green_mode, global_mode, exception_type, executor_type 476s ): 476s if WINDOWS and exception_type is not None: 476s pytest.skip("Skip test that hangs on Windows") 476s 476s old_green_mode = tango.get_green_mode() 476s try: 476s tango.set_green_mode(global_mode) 476s 476s if exception_type is None: 476s with DeviceTestContext(device_type, green_mode=green_mode): 476s pass 476s elif exception_type is DeprecationWarning: 476s with pytest.warns((DeprecationWarning, RuntimeWarning)): 476s > with DeviceTestContext(device_type, green_mode=green_mode): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:446: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 476s super().connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s 476s During handling of the above exception, another exception occurred: 476s 476s device_type = 476s green_mode = tango._tango.GreenMode.Asyncio 476s global_mode = tango._tango.GreenMode.Gevent 476s exception_type = 476s executor_type = 476s 476s @pytest.mark.parametrize( 476s "device_type, green_mode, global_mode, exception_type, executor_type", 476s [ 476s # If a device specifies its green mode explicitly, then both 476s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 476s ( 476s Device1Synchronous, 476s GreenMode.Asyncio, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Synchronous, 476s GreenMode.Gevent, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1Asyncio, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s AsyncioExecutor, 476s ), 476s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 476s ( 476s Device1Gevent, 476s GreenMode.Synchronous, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 476s # If device doesn't specify its green mode, but green_mode kwarg is provided, 476s # then we use green_mode kwarg 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Asyncio, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Synchronous, 476s GreenMode.Gevent, 476s None, 476s SynchronousExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Synchronous, 476s None, 476s GeventExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Gevent, 476s GreenMode.Asyncio, 476s None, 476s GeventExecutor, 476s ), 476s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 476s # (currently only works for synchronous mode - see unsupported modes below) 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Synchronous, 476s None, 476s SynchronousExecutor, 476s ), 476s # Deprecated modes - starting from PyTango 10 it is deprecated 476s # to modify sync servers to async "on the fly". 476s # All base methods should be defined with "async def" instead. 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Synchronous, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s GreenMode.Asyncio, 476s GreenMode.Gevent, 476s DeprecationWarning, 476s AsyncioExecutor, 476s ), 476s # Unsupported modes - device servers with the following combinations 476s # fail to start up. The cause is unknown. This could be fixed in the future. 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Asyncio, 476s RuntimeError, 476s AsyncioExecutor, 476s ), 476s ( 476s Device1GreenModeUnspecified, 476s None, 476s GreenMode.Gevent, 476s RuntimeError, 476s GeventExecutor, 476s ), 476s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 476s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 476s ], 476s ) 476s def test_green_modes_in_device_kwarg_and_global( 476s device_type, green_mode, global_mode, exception_type, executor_type 476s ): 476s if WINDOWS and exception_type is not None: 476s pytest.skip("Skip test that hangs on Windows") 476s 476s old_green_mode = tango.get_green_mode() 476s try: 476s tango.set_green_mode(global_mode) 476s 476s if exception_type is None: 476s with DeviceTestContext(device_type, green_mode=green_mode): 476s pass 476s elif exception_type is DeprecationWarning: 476s > with pytest.warns((DeprecationWarning, RuntimeWarning)): 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s E Failed: DID NOT WARN. No warnings of type (, ) were emitted. 476s E Emitted warnings: []. 476s 476s tests/test_test_context.py:445: Failed 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________ test_multi_with_async_devices_initialised ___________________ 476s def test_multi_with_async_devices_initialised(): 476s devices_info = ( 476s {"class": Device1Asyncio, "devices": [{"name": "test/device1/1"}]}, 476s {"class": Device2Asyncio, "devices": [{"name": "test/device2/1"}]}, 476s ) 476s 476s > with MultiDeviceTestContext(devices_info) as context: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:464: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _____________ test_multi_with_two_devices_with_properties[Asyncio] _____________ 476s server_green_mode = tango._tango.GreenMode.Asyncio 476s 476s def test_multi_with_two_devices_with_properties(server_green_mode): 476s if server_green_mode == GreenMode.Asyncio: 476s 476s class TestDevice1(Device): 476s green_mode = server_green_mode 476s 476s prop1 = device_property(dtype=str) 476s 476s @command(dtype_out=str) 476s async def get_prop1(self): 476s return self.prop1 476s 476s class TestDevice2(Device): 476s green_mode = server_green_mode 476s 476s prop2 = device_property(dtype=int) 476s 476s @command(dtype_out=int) 476s async def get_prop2(self): 476s return self.prop2 476s 476s else: 476s 476s class TestDevice1(Device): 476s green_mode = server_green_mode 476s 476s prop1 = device_property(dtype=str) 476s 476s @command(dtype_out=str) 476s def get_prop1(self): 476s return self.prop1 476s 476s class TestDevice2(Device): 476s green_mode = server_green_mode 476s 476s prop2 = device_property(dtype=int) 476s 476s @command(dtype_out=int) 476s def get_prop2(self): 476s return self.prop2 476s 476s devices_info = ( 476s { 476s "class": TestDevice1, 476s "devices": [{"name": "test/device1/1", "properties": {"prop1": "abcd"}}], 476s }, 476s { 476s "class": TestDevice2, 476s "devices": [{"name": "test/device2/2", "properties": {"prop2": 5555}}], 476s }, 476s ) 476s 476s > with MultiDeviceTestContext(devices_info) as context: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:617: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s __________________ test_test_context_async_device_proxy[True] __________________ 476s process = True 476s 476s @pytest.mark.asyncio 476s @pytest.mark.parametrize("process", [True, False]) 476s async def test_test_context_async_device_proxy(process): 476s config = ({"class": AsyncDevice, "devices": [{"name": "test/device/1"}]},) 476s 476s > with MultiDeviceTestContext(config, process=process) as context: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:825: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def connect(self): 476s try: 476s self._wait_until_port_is_known() 476s self._wait_until_startup_status_is_known() 476s except RuntimeError: 476s if self.thread.is_alive(): 476s raise RuntimeError( 476s "The server appears to be stuck at initialization. " 476s "Check stdout/stderr for more information." 476s ) 476s elif hasattr(self.thread, "exitcode"): 476s raise RuntimeError( 476s f"The server process stopped with exitcode {self.thread.exitcode}. " 476s f"Check stdout/stderr for more information." 476s ) 476s else: 476s raise RuntimeError( 476s "The server stopped without reporting. " 476s "Check stdout/stderr for more information." 476s ) 476s 476s if self._startup_exception: 476s > raise self._startup_exception 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s _________________ test_test_context_async_device_proxy[False] __________________ 476s process = False 476s 476s @pytest.mark.asyncio 476s @pytest.mark.parametrize("process", [True, False]) 476s async def test_test_context_async_device_proxy(process): 476s config = ({"class": AsyncDevice, "devices": [{"name": "test/device/1"}]},) 476s 476s > with MultiDeviceTestContext(config, process=process) as context: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:825: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s --------------------------- Captured stderr teardown --------------------------- 476s /usr/lib/python3.14/multiprocessing/resource_tracker.py:396: UserWarning: resource_tracker: There appear to be 11 leaked semaphore objects to clean up at shutdown: {'/mp-d12kjzpk', '/mp-azmrir2c', '/mp-k9xj2e7v', '/mp-_gu92e2w', '/mp-3y7zldxx', '/mp-5m415akb', '/mp-xeb54aoo', '/mp-0zjnwl9z', '/mp-y_f5v0vq', '/mp-ce8hb8ar', '/mp-jmpsqf2o'} 476s warnings.warn( 476s _______________ test_test_context_multi_async_device_proxy[True] _______________ 476s process = True 476s 476s @pytest.mark.asyncio 476s @pytest.mark.parametrize("process", [True, False]) 476s async def test_test_context_multi_async_device_proxy(process): 476s config = ( 476s { 476s "class": AsyncDevice, 476s "devices": [{"name": "test/device/main"}, {"name": "test/device/child"}], 476s }, 476s ) 476s 476s > with MultiDeviceTestContext(config, process=process) as context: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:855: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def connect(self): 476s try: 476s self._wait_until_port_is_known() 476s self._wait_until_startup_status_is_known() 476s except RuntimeError: 476s if self.thread.is_alive(): 476s raise RuntimeError( 476s "The server appears to be stuck at initialization. " 476s "Check stdout/stderr for more information." 476s ) 476s elif hasattr(self.thread, "exitcode"): 476s raise RuntimeError( 476s f"The server process stopped with exitcode {self.thread.exitcode}. " 476s f"Check stdout/stderr for more information." 476s ) 476s else: 476s raise RuntimeError( 476s "The server stopped without reporting. " 476s "Check stdout/stderr for more information." 476s ) 476s 476s if self._startup_exception: 476s > raise self._startup_exception 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s ______________ test_test_context_multi_async_device_proxy[False] _______________ 476s process = False 476s 476s @pytest.mark.asyncio 476s @pytest.mark.parametrize("process", [True, False]) 476s async def test_test_context_multi_async_device_proxy(process): 476s config = ( 476s { 476s "class": AsyncDevice, 476s "devices": [{"name": "test/device/main"}, {"name": "test/device/child"}], 476s }, 476s ) 476s 476s > with MultiDeviceTestContext(config, process=process) as context: 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s 476s tests/test_test_context.py:855: 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 476s self.start() 476s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 476s self.connect() 476s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 476s raise self._startup_exception 476s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 476s runserver( 476s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 476s return run((cls,), args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 476s return server_run() 476s ^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 476s worker.run(tango_loop, wait=True) 476s /usr/lib/python3/dist-packages/tango/green.py:118: in run 476s accessor = self.delegate(fn, *args, **kwargs) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 476s coro = self.loop.run_in_executor(self.subexecutor, callback) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 476s executor.submit(func, *args), loop=self) 476s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 476s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 476s self._adjust_thread_count() 476s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 476s 476s self = 476s 476s def _adjust_thread_count(self): 476s # if idle threads are available, don't spin new threads 476s if self._idle_semaphore.acquire(timeout=0): 476s return 476s 476s # When the executor gets lost, the weakref callback will wake up 476s # the worker threads. 476s def weakref_cb(_, q=self._work_queue): 476s q.put(None) 476s 476s num_threads = len(self._threads) 476s if num_threads < self._max_workers: 476s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 476s t = threading.Thread( 476s name=thread_name, 476s target=_thread_pool_executor_worker, 476s args=( 476s weakref.ref(self, weakref_cb), 476s self._work_queue, 476s > self._initializer, 476s ^^^^^^^^^^^^^^^^^ 476s self._initargs, 476s ), 476s ) 476s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 476s 476s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 476s ----------------------------- Captured stderr call ----------------------------- 476s Can't create notifd event supplier. Notifd event not available 476s --------------------------- Captured stderr teardown --------------------------- 476s /usr/lib/python3.14/multiprocessing/resource_tracker.py:396: UserWarning: resource_tracker: There appear to be 11 leaked semaphore objects to clean up at shutdown: {'/mp-rv5jejx_', '/mp-6lzjhh1g', '/mp-e4vfw422', '/mp-a8a451ex', '/mp-5eqvrl7g', '/mp-nfcqiii_', '/mp-ojayc0xs', '/mp-p0bjaopr', '/mp-n6cyko4n', '/mp-jo1pe309', '/mp-20e9d4ji'} 476s warnings.warn( 476s =========================== short test summary info ============================ 476s FAILED tests/test_async.py::test_green_mode_kwarg_for_proxy_methods - @pytest... 476s FAILED tests/test_attributes.py::test_read_write_attribute[int-Asyncio] - att... 476s FAILED tests/test_attributes.py::test_read_write_attribute[float-Asyncio] - a... 476s FAILED tests/test_attributes.py::test_read_write_attribute[str-Asyncio] - att... 476s FAILED tests/test_attributes.py::test_read_write_attribute[bool-Asyncio] - at... 476s FAILED tests/test_attributes.py::test_read_write_attribute[(int,)-Asyncio] - ... 476s FAILED tests/test_attributes.py::test_read_write_attribute[(float,)-Asyncio] 476s FAILED tests/test_attributes.py::test_read_write_attribute[(str,)-Asyncio] - ... 476s FAILED tests/test_attributes.py::test_read_write_attribute[(bool,)-Asyncio] 476s FAILED tests/test_attributes.py::test_read_write_attribute[((int,),)-Asyncio] 476s FAILED tests/test_attributes.py::test_read_write_attribute[((float,),)-Asyncio] 476s FAILED tests/test_attributes.py::test_read_write_attribute[((str,),)-Asyncio] 476s FAILED tests/test_attributes.py::test_read_write_attribute[((bool,),)-Asyncio] 476s FAILED tests/test_attributes.py::test_read_write_attribute_decorated_methods[Asyncio] 476s FAILED tests/test_attributes.py::test_read_write_dynamic_attribute[low_level_read-Asyncio] 476s FAILED tests/test_attributes.py::test_read_write_dynamic_attribute[high_level_read-Asyncio] 476s FAILED tests/test_attributes.py::test_async_add_remove_dynamic_attribute - de... 476s FAILED tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_default_names[Asyncio] 476s FAILED tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_user_names[Asyncio] 476s FAILED tests/test_attributes.py::test_read_write_dynamic_attribute_is_allowed_with_async[Asyncio] 476s FAILED tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Asyncio-True] 476s FAILED tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Asyncio-False] 476s FAILED tests/test_attributes.py::test_attribute_decorators[Asyncio] - server_... 476s FAILED tests/test_attributes.py::test_polled_attribute[Asyncio] - server_gree... 476s FAILED tests/test_commands.py::test_identity_command[int-Asyncio] - command_t... 476s FAILED tests/test_commands.py::test_identity_command[float-Asyncio] - command... 476s FAILED tests/test_commands.py::test_identity_command[str-Asyncio] - command_t... 476s FAILED tests/test_commands.py::test_identity_command[bool-Asyncio] - command_... 476s FAILED tests/test_commands.py::test_identity_command[(int,)-Asyncio] - comman... 476s FAILED tests/test_commands.py::test_identity_command[(float,)-Asyncio] - comm... 476s FAILED tests/test_commands.py::test_identity_command[(str,)-Asyncio] - comman... 476s FAILED tests/test_commands.py::test_identity_command[DevVarLongStringArray-Asyncio] 476s FAILED tests/test_commands.py::test_identity_command[DevVarDoubleStringArray-Asyncio] 476s FAILED tests/test_commands.py::test_decorated_command[Asyncio] - server_green... 476s FAILED tests/test_commands.py::test_command_isallowed[Asyncio] - server_green... 476s FAILED tests/test_commands.py::test_dynamic_command[Asyncio-True] - device_co... 476s FAILED tests/test_commands.py::test_dynamic_command[Asyncio-False] - device_c... 476s FAILED tests/test_device_proxy.py::test_high_level_api_for_asyncio - tango_te... 476s FAILED tests/test_device_proxy.py::test_repr_uses_info[Asyncio] - green_mode_... 476s FAILED tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Asyncio] 476s FAILED tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Asyncio] 476s FAILED tests/test_device_proxy.py::test_no_memory_leak_for_repr[Asyncio] - gr... 476s FAILED tests/test_device_proxy.py::test_no_memory_leak_for_str[Asyncio] - gre... 476s FAILED tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Asyncio] - gr... 476s FAILED tests/test_log.py::test_async_logging_decorators - def test_async_logg... 476s FAILED tests/test_log.py::test_logging[Asyncio] - server_green_mode = tango._... 476s FAILED tests/test_server.py::test_empty_device[Asyncio] - server_green_mode =... 476s FAILED tests/test_server.py::test_set_state_status[ON-Asyncio-False] - state ... 476s FAILED tests/test_server.py::test_set_state_status[ON-Asyncio-True] - state =... 476s FAILED tests/test_server.py::test_set_state_status[OFF-Asyncio-False] - state... 476s FAILED tests/test_server.py::test_set_state_status[OFF-Asyncio-True] - state ... 476s FAILED tests/test_server.py::test_set_state_status[CLOSE-Asyncio-False] - sta... 476s FAILED tests/test_server.py::test_set_state_status[CLOSE-Asyncio-True] - stat... 476s FAILED tests/test_server.py::test_set_state_status[OPEN-Asyncio-False] - stat... 476s FAILED tests/test_server.py::test_set_state_status[OPEN-Asyncio-True] - state... 476s FAILED tests/test_server.py::test_set_state_status[INSERT-Asyncio-False] - st... 476s FAILED tests/test_server.py::test_set_state_status[INSERT-Asyncio-True] - sta... 476s FAILED tests/test_server.py::test_set_state_status[EXTRACT-Asyncio-False] - s... 476s FAILED tests/test_server.py::test_set_state_status[EXTRACT-Asyncio-True] - st... 476s FAILED tests/test_server.py::test_set_state_status[MOVING-Asyncio-False] - st... 476s FAILED tests/test_server.py::test_set_state_status[MOVING-Asyncio-True] - sta... 476s FAILED tests/test_server.py::test_set_state_status[STANDBY-Asyncio-False] - s... 476s FAILED tests/test_server.py::test_set_state_status[STANDBY-Asyncio-True] - st... 476s FAILED tests/test_server.py::test_set_state_status[FAULT-Asyncio-False] - sta... 476s FAILED tests/test_server.py::test_set_state_status[FAULT-Asyncio-True] - stat... 476s FAILED tests/test_server.py::test_set_state_status[INIT-Asyncio-False] - stat... 476s FAILED tests/test_server.py::test_set_state_status[INIT-Asyncio-True] - state... 476s FAILED tests/test_server.py::test_set_state_status[RUNNING-Asyncio-False] - s... 476s FAILED tests/test_server.py::test_set_state_status[RUNNING-Asyncio-True] - st... 476s FAILED tests/test_server.py::test_set_state_status[ALARM-Asyncio-False] - sta... 476s FAILED tests/test_server.py::test_set_state_status[ALARM-Asyncio-True] - stat... 476s FAILED tests/test_server.py::test_set_state_status[DISABLE-Asyncio-False] - s... 476s FAILED tests/test_server.py::test_set_state_status[DISABLE-Asyncio-True] - st... 476s FAILED tests/test_server.py::test_set_state_status[UNKNOWN-Asyncio-False] - s... 476s FAILED tests/test_server.py::test_set_state_status[UNKNOWN-Asyncio-True] - st... 476s FAILED tests/test_server.py::test_user_dev_state_status[Asyncio] - server_gre... 476s FAILED tests/test_server.py::test_attr_quality_checked_with_state[Asyncio] - ... 476s FAILED tests/test_server.py::test_device_get_attr_config[Asyncio] - server_gr... 476s FAILED tests/test_server.py::test_device_set_attr_config[Asyncio] - server_gr... 476s FAILED tests/test_server.py::test_exception_propagation[Asyncio] - server_gre... 476s FAILED tests/test_server.py::test_asyncio_server_init_hook_change_state - def... 476s FAILED tests/test_server.py::test_async_server_init_hook_called_after_init - ... 476s FAILED tests/test_server.py::test_asyncio_server_init_hook_exception - def te... 476s FAILED tests/test_server.py::test_deprecation_warning_for_sync_attr_com_methods_in_asyncio_device 476s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[init_device] 476s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[delete_device] 476s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_state] 476s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_status] 476s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[read_attr_hardware] 476s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[always_executed_hook] 476s FAILED tests/test_test_context.py::test_single_device[Asyncio] - server_green... 476s FAILED tests/test_test_context.py::test_multi_with_single_device[Asyncio] - s... 476s FAILED tests/test_test_context.py::test_multi_with_two_devices[Asyncio] - ser... 476s FAILED tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Asyncio-None] 476s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Synchronous-Asyncio-Asyncio-None-SynchronousExecutor] 476s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Synchronous-Synchronous-None-AsyncioExecutor] 476s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Gevent-Gevent-None-AsyncioExecutor] 476s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Gevent-Asyncio-Asyncio-None-GeventExecutor] 476s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Synchronous-Asyncio-None-SynchronousExecutor] 476s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Gevent-Asyncio-None-GeventExecutor] 476s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Synchronous-DeprecationWarning-AsyncioExecutor] 476s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Gevent-DeprecationWarning-AsyncioExecutor] 476s FAILED tests/test_test_context.py::test_multi_with_async_devices_initialised 476s FAILED tests/test_test_context.py::test_multi_with_two_devices_with_properties[Asyncio] 476s FAILED tests/test_test_context.py::test_test_context_async_device_proxy[True] 476s FAILED tests/test_test_context.py::test_test_context_async_device_proxy[False] 476s FAILED tests/test_test_context.py::test_test_context_multi_async_device_proxy[True] 476s FAILED tests/test_test_context.py::test_test_context_multi_async_device_proxy[False] 476s ERROR tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Asyncio] 476s = 108 failed, 952 passed, 56 skipped, 53 xfailed, 1 error in 185.86s (0:03:05) = 479s bash: line 1: 14548 Segmentation fault (core dumped) PATH=/usr/lib/tango/:$PATH $py -m pytest tests -v --forked --ignore tests/test_event.py --reruns 5 479s autopkgtest [13:25:04]: test command1: -----------------------] 480s command1 FAIL non-zero exit status 139 480s autopkgtest [13:25:05]: test command1: - - - - - - - - - - results - - - - - - - - - - 480s autopkgtest [13:25:05]: test command2: preparing testbed 499s Creating nova instance adt-resolute-amd64-pytango-20260124-131705-juju-7f2275-prod-proposed-migration-environment-20-cc6579e9-799e-4eab-9705-23c9038e4f44 from image adt/ubuntu-resolute-amd64-server-20260124.img (UUID 46811f22-3700-43f4-953b-ee3c613d71bb)... 573s autopkgtest [13:26:38]: testbed dpkg architecture: amd64 573s autopkgtest [13:26:38]: testbed apt version: 3.1.13 573s autopkgtest [13:26:38]: @@@@@@@@@@@@@@@@@@@@ test bed setup 574s autopkgtest [13:26:39]: testbed release detected to be: resolute 574s autopkgtest [13:26:39]: updating testbed package index (apt update) 574s Get:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease [124 kB] 574s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 574s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 574s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 574s Get:5 http://ftpmaster.internal/ubuntu resolute-proposed/universe Sources [998 kB] 575s Get:6 http://ftpmaster.internal/ubuntu resolute-proposed/restricted Sources [2820 B] 575s Get:7 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse Sources [24.3 kB] 575s Get:8 http://ftpmaster.internal/ubuntu resolute-proposed/main Sources [92.3 kB] 575s Get:9 http://ftpmaster.internal/ubuntu resolute-proposed/main i386 Packages [98.2 kB] 575s Get:10 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 Packages [115 kB] 575s Get:11 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 c-n-f Metadata [3712 B] 575s Get:12 http://ftpmaster.internal/ubuntu resolute-proposed/restricted i386 Packages [3696 B] 575s Get:13 http://ftpmaster.internal/ubuntu resolute-proposed/restricted amd64 Packages [12.3 kB] 575s Get:14 http://ftpmaster.internal/ubuntu resolute-proposed/restricted amd64 c-n-f Metadata [336 B] 575s Get:15 http://ftpmaster.internal/ubuntu resolute-proposed/universe i386 Packages [385 kB] 575s Get:16 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 Packages [905 kB] 575s Get:17 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 c-n-f Metadata [24.9 kB] 575s Get:18 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse amd64 Packages [12.4 kB] 575s Get:19 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse i386 Packages [4704 B] 575s Get:20 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse amd64 c-n-f Metadata [824 B] 576s Fetched 2806 kB in 1s (3279 kB/s) 576s Reading package lists... 577s Hit:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease 577s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 577s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 577s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 577s Reading package lists... 577s Reading package lists... 577s Building dependency tree... 577s Reading state information... 578s Calculating upgrade... 578s The following packages were automatically installed and are no longer required: 578s python3.13 python3.13-minimal 578s Use 'sudo apt autoremove' to remove them. 578s The following NEW packages will be installed: 578s libpython3.14-minimal libpython3.14-stdlib python3.14 python3.14-minimal 578s The following packages will be upgraded: 578s libpython3-stdlib python3 python3-gdbm python3-minimal rust-coreutils 578s 5 upgraded, 4 newly installed, 0 to remove and 0 not upgraded. 578s Need to get 10.4 MB of archives. 578s After this operation, 25.2 MB of additional disk space will be used. 578s Get:1 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.14-minimal amd64 3.14.2-1 [920 kB] 578s Get:2 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.14-minimal amd64 3.14.2-1 [2563 kB] 578s Get:3 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 python3-minimal amd64 3.14.2-1 [28.2 kB] 578s Get:4 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 python3 amd64 3.14.2-1 [22.9 kB] 578s Get:5 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.14-stdlib amd64 3.14.2-1 [2398 kB] 578s Get:6 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.14 amd64 3.14.2-1 [816 kB] 578s Get:7 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 libpython3-stdlib amd64 3.14.2-1 [10.9 kB] 578s Get:8 http://ftpmaster.internal/ubuntu resolute/main amd64 rust-coreutils amd64 0.5.0-0ubuntu1 [3628 kB] 578s Get:9 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 python3-gdbm amd64 3.14.2-1 [11.1 kB] 579s dpkg-preconfigure: unable to re-open stdin: No such file or directory 579s Fetched 10.4 MB in 1s (15.0 MB/s) 579s Selecting previously unselected package libpython3.14-minimal:amd64. 579s (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 ... 124177 files and directories currently installed.) 579s Preparing to unpack .../libpython3.14-minimal_3.14.2-1_amd64.deb ... 579s Unpacking libpython3.14-minimal:amd64 (3.14.2-1) ... 579s Selecting previously unselected package python3.14-minimal. 579s Preparing to unpack .../python3.14-minimal_3.14.2-1_amd64.deb ... 579s Unpacking python3.14-minimal (3.14.2-1) ... 579s Setting up libpython3.14-minimal:amd64 (3.14.2-1) ... 579s Setting up python3.14-minimal (3.14.2-1) ... 580s (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 ... 124519 files and directories currently installed.) 580s Preparing to unpack .../python3-minimal_3.14.2-1_amd64.deb ... 580s Unpacking python3-minimal (3.14.2-1) over (3.13.9-3) ... 580s Setting up python3-minimal (3.14.2-1) ... 580s (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 ... 124519 files and directories currently installed.) 580s Preparing to unpack .../python3_3.14.2-1_amd64.deb ... 580s running python pre-rtupdate hooks for python3.14... 580s Unpacking python3 (3.14.2-1) over (3.13.9-3) ... 580s Selecting previously unselected package libpython3.14-stdlib:amd64. 580s Preparing to unpack .../libpython3.14-stdlib_3.14.2-1_amd64.deb ... 580s Unpacking libpython3.14-stdlib:amd64 (3.14.2-1) ... 580s Selecting previously unselected package python3.14. 580s Preparing to unpack .../python3.14_3.14.2-1_amd64.deb ... 580s Unpacking python3.14 (3.14.2-1) ... 580s Preparing to unpack .../libpython3-stdlib_3.14.2-1_amd64.deb ... 580s Unpacking libpython3-stdlib:amd64 (3.14.2-1) over (3.13.9-3) ... 580s Preparing to unpack .../rust-coreutils_0.5.0-0ubuntu1_amd64.deb ... 580s Unpacking rust-coreutils (0.5.0-0ubuntu1) over (0.2.2-0ubuntu2) ... 580s Setting up rust-coreutils (0.5.0-0ubuntu1) ... 580s (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 ... 124980 files and directories currently installed.) 580s Preparing to unpack .../python3-gdbm_3.14.2-1_amd64.deb ... 580s Unpacking python3-gdbm (3.14.2-1) over (3.13.9-3) ... 580s Setting up libpython3.14-stdlib:amd64 (3.14.2-1) ... 580s Setting up python3.14 (3.14.2-1) ... 581s Setting up libpython3-stdlib:amd64 (3.14.2-1) ... 581s Setting up python3-gdbm (3.14.2-1) ... 581s Setting up python3 (3.14.2-1) ... 581s running python rtupdate hooks for python3.14... 581s running python post-rtupdate hooks for python3.14... 581s Processing triggers for man-db (2.13.1-1) ... 581s Processing triggers for systemd (259-1ubuntu2) ... 581s autopkgtest [13:26:46]: upgrading testbed (apt dist-upgrade and autopurge) 581s Reading package lists... 582s Building dependency tree... 582s Reading state information... 582s Calculating upgrade... 582s The following packages were automatically installed and are no longer required: 582s python3.13 python3.13-minimal 582s Use 'sudo apt autoremove' to remove them. 582s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 582s Reading package lists... 582s Building dependency tree... 582s Reading state information... 582s Solving dependencies... 582s The following packages will be REMOVED: 582s python3.13* python3.13-minimal* 582s 0 upgraded, 0 newly installed, 2 to remove and 0 not upgraded. 582s After this operation, 7860 kB disk space will be freed. 582s (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 ... 124978 files and directories currently installed.) 582s Removing python3.13 (3.13.11-1) ... 582s Removing python3.13-minimal (3.13.11-1) ... 583s Processing triggers for man-db (2.13.1-1) ... 583s Processing triggers for systemd (259-1ubuntu2) ... 583s (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 ... 124951 files and directories currently installed.) 583s Purging configuration files for python3.13-minimal (3.13.11-1) ... 585s Reading package lists... 585s Building dependency tree... 585s Reading state information... 586s Solving dependencies... 586s The following NEW packages will be installed: 586s dbconfig-common dbconfig-mysql default-mysql-server libabsl20240722 libblas3 586s libboost-python1.88.0 libcares2 libcos4-3 libev4t64 libexpat1-dev 586s libgfortran5 libgoogle-perftools4t64 libgrpc++1.51t64 libgrpc29t64 586s libjpeg-turbo8 libjpeg8 liblapack3 libmecab2 libmysqlclient24 libnorm1t64 586s libomniorb4-3t64 libomnithread4 libpgm-5.3-0t64 libprotobuf-lite32t64 586s libprotobuf32t64 libprotoc32t64 libpython3-all-dev libpython3-dev 586s libpython3.13-dev libpython3.14 libpython3.14-dev libre2-11 libsodium23 586s libtango-tools libtango10 libtcmalloc-minimal4t64 libzmq5 mysql-client 586s mysql-client-core mysql-common mysql-server mysql-server-core 586s opentelemetry-cpp python3-all python3-all-dev python3-dev python3-gevent 586s python3-greenlet python3-numpy python3-numpy-dev python3-psutil 586s python3-tango python3-zope.event python3-zope.interface python3.13 586s python3.13-dev python3.13-minimal python3.14-dev tango-common tango-db 586s zlib1g-dev 586s 0 upgraded, 61 newly installed, 0 to remove and 0 not upgraded. 586s Need to get 76.1 MB of archives. 586s After this operation, 419 MB of additional disk space will be used. 586s Get:1 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.13-minimal amd64 3.13.11-1 [2408 kB] 586s Get:2 http://ftpmaster.internal/ubuntu resolute/main amd64 mysql-common all 5.8+1.1.1ubuntu2 [7002 B] 586s Get:3 http://ftpmaster.internal/ubuntu resolute/main amd64 libtcmalloc-minimal4t64 amd64 2.16-1build1 [94.6 kB] 586s Get:4 http://ftpmaster.internal/ubuntu resolute/main amd64 libgoogle-perftools4t64 amd64 2.16-1build1 [208 kB] 586s Get:5 http://ftpmaster.internal/ubuntu resolute/main amd64 mysql-client-core amd64 8.4.7-0ubuntu3 [2204 kB] 586s Get:6 http://ftpmaster.internal/ubuntu resolute/main amd64 mysql-client amd64 8.4.7-0ubuntu3 [9130 B] 586s Get:7 http://ftpmaster.internal/ubuntu resolute/main amd64 libmecab2 amd64 0.996-15.1build3 [207 kB] 586s Get:8 http://ftpmaster.internal/ubuntu resolute/main amd64 libprotobuf-lite32t64 amd64 3.21.12-15 [251 kB] 586s Get:9 http://ftpmaster.internal/ubuntu resolute/main amd64 mysql-server-core amd64 8.4.7-0ubuntu3 [19.4 MB] 587s Get:10 http://ftpmaster.internal/ubuntu resolute/main amd64 mysql-server amd64 8.4.7-0ubuntu3 [1597 kB] 587s Get:11 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-numpy-dev amd64 1:2.3.5+ds-3 [147 kB] 587s Get:12 http://ftpmaster.internal/ubuntu resolute/main amd64 libblas3 amd64 3.12.1-7ubuntu1 [260 kB] 587s Get:13 http://ftpmaster.internal/ubuntu resolute/main amd64 libgfortran5 amd64 15.2.0-11ubuntu1 [939 kB] 587s Get:14 http://ftpmaster.internal/ubuntu resolute/main amd64 liblapack3 amd64 3.12.1-7ubuntu1 [2739 kB] 587s Get:15 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-numpy amd64 1:2.3.5+ds-3 [8129 kB] 587s Get:16 http://ftpmaster.internal/ubuntu resolute/universe amd64 dbconfig-common all 2.0.25ubuntu1 [609 kB] 587s Get:17 http://ftpmaster.internal/ubuntu resolute/universe amd64 dbconfig-mysql all 2.0.25ubuntu1 [942 B] 587s Get:18 http://ftpmaster.internal/ubuntu resolute/universe amd64 libomnithread4 amd64 4.3.3+ds1-1 [13.2 kB] 587s Get:19 http://ftpmaster.internal/ubuntu resolute/universe amd64 libomniorb4-3t64 amd64 4.3.3+ds1-1 [1276 kB] 587s Get:20 http://ftpmaster.internal/ubuntu resolute/main amd64 libabsl20240722 amd64 20240722.0-4ubuntu1 [528 kB] 587s Get:21 http://ftpmaster.internal/ubuntu resolute/main amd64 libcares2 amd64 1.34.6-1 [102 kB] 587s Get:22 http://ftpmaster.internal/ubuntu resolute/main amd64 libprotobuf32t64 amd64 3.21.12-15 [955 kB] 587s Get:23 http://ftpmaster.internal/ubuntu resolute/main amd64 libprotoc32t64 amd64 3.21.12-15 [702 kB] 587s Get:24 http://ftpmaster.internal/ubuntu resolute/main amd64 libre2-11 amd64 20250805-1build1 [175 kB] 587s Get:25 http://ftpmaster.internal/ubuntu resolute/universe amd64 libgrpc29t64 amd64 1.51.1-7 [2926 kB] 587s Get:26 http://ftpmaster.internal/ubuntu resolute/universe amd64 libgrpc++1.51t64 amd64 1.51.1-7 [498 kB] 588s Get:27 http://ftpmaster.internal/ubuntu resolute/universe amd64 opentelemetry-cpp amd64 1.23.0-3 [634 kB] 588s Get:28 http://ftpmaster.internal/ubuntu resolute/universe amd64 tango-common all 10.0.2+dfsg1-4 [8520 B] 588s Get:29 http://ftpmaster.internal/ubuntu resolute/universe amd64 libcos4-3 amd64 4.3.3+ds1-1 [1297 kB] 588s Get:30 http://ftpmaster.internal/ubuntu resolute/main amd64 libjpeg-turbo8 amd64 2.1.5-4ubuntu2 [152 kB] 588s Get:31 http://ftpmaster.internal/ubuntu resolute/main amd64 libjpeg8 amd64 8c-2ubuntu11 [2148 B] 588s Get:32 http://ftpmaster.internal/ubuntu resolute/universe amd64 libnorm1t64 amd64 1.5.9+dfsg-4 [158 kB] 588s Get:33 http://ftpmaster.internal/ubuntu resolute/universe amd64 libpgm-5.3-0t64 amd64 5.3.128~dfsg-2.1build2 [168 kB] 588s Get:34 http://ftpmaster.internal/ubuntu resolute/main amd64 libsodium23 amd64 1.0.18-2 [165 kB] 588s Get:35 http://ftpmaster.internal/ubuntu resolute/universe amd64 libzmq5 amd64 4.3.5-1build3 [262 kB] 588s Get:36 http://ftpmaster.internal/ubuntu resolute/universe amd64 libtango10 amd64 10.0.2+dfsg1-4 [2077 kB] 588s Get:37 http://ftpmaster.internal/ubuntu resolute/universe amd64 libtango-tools amd64 10.0.2+dfsg1-4 [25.9 kB] 588s Get:38 http://ftpmaster.internal/ubuntu resolute/main amd64 libmysqlclient24 amd64 8.4.7-0ubuntu3 [1258 kB] 588s Get:39 http://ftpmaster.internal/ubuntu resolute/universe amd64 tango-db amd64 10.0.2+dfsg1-4 [209 kB] 588s Get:40 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.13 amd64 3.13.11-1 [758 kB] 588s Get:41 http://ftpmaster.internal/ubuntu resolute/universe amd64 default-mysql-server all 1.1.1ubuntu2 [3168 B] 588s Get:42 http://ftpmaster.internal/ubuntu resolute/main amd64 libboost-python1.88.0 amd64 1.88.0-1.4ubuntu3 [360 kB] 588s Get:43 http://ftpmaster.internal/ubuntu resolute/universe amd64 libev4t64 amd64 1:4.33-2.1build2 [31.5 kB] 588s Get:44 http://ftpmaster.internal/ubuntu resolute/main amd64 libexpat1-dev amd64 2.7.3-1 [143 kB] 588s Get:45 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.14 amd64 3.14.2-1 [2568 kB] 588s Get:46 http://ftpmaster.internal/ubuntu resolute/main amd64 zlib1g-dev amd64 1:1.3.dfsg+really1.3.1-1ubuntu2 [898 kB] 588s Get:47 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.14-dev amd64 3.14.2-1 [5963 kB] 588s Get:48 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 libpython3-dev amd64 3.14.2-1 [11.2 kB] 588s Get:49 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.13-dev amd64 3.13.11-1 [5798 kB] 588s Get:50 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 libpython3-all-dev amd64 3.14.2-1 [916 B] 588s Get:51 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 python3-all amd64 3.14.2-1 [890 B] 588s Get:52 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.14-dev amd64 3.14.2-1 [510 kB] 588s Get:53 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 python3-dev amd64 3.14.2-1 [26.6 kB] 588s Get:54 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.13-dev amd64 3.13.11-1 [508 kB] 588s Get:55 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 python3-all-dev amd64 3.14.2-1 [914 B] 588s Get:56 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-psutil amd64 7.1.0-1ubuntu1 [191 kB] 588s Get:57 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-zope.event all 6.0-2 [7710 B] 588s Get:58 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-zope.interface amd64 8.2-1 [146 kB] 588s Get:59 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-greenlet amd64 3.2.4-3 [185 kB] 588s Get:60 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-gevent amd64 24.11.1-1build2 [1203 kB] 588s Get:61 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-tango amd64 10.0.2-3 [3945 kB] 589s Preconfiguring packages ... 589s Fetched 76.1 MB in 3s (26.6 MB/s) 589s Selecting previously unselected package python3.13-minimal. 589s (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 ... 124953 files and directories currently installed.) 589s Preparing to unpack .../0-python3.13-minimal_3.13.11-1_amd64.deb ... 589s Unpacking python3.13-minimal (3.13.11-1) ... 589s Selecting previously unselected package mysql-common. 589s Preparing to unpack .../1-mysql-common_5.8+1.1.1ubuntu2_all.deb ... 589s Unpacking mysql-common (5.8+1.1.1ubuntu2) ... 589s Selecting previously unselected package libtcmalloc-minimal4t64:amd64. 589s Preparing to unpack .../2-libtcmalloc-minimal4t64_2.16-1build1_amd64.deb ... 589s Unpacking libtcmalloc-minimal4t64:amd64 (2.16-1build1) ... 589s Selecting previously unselected package libgoogle-perftools4t64:amd64. 589s Preparing to unpack .../3-libgoogle-perftools4t64_2.16-1build1_amd64.deb ... 589s Unpacking libgoogle-perftools4t64:amd64 (2.16-1build1) ... 589s Selecting previously unselected package mysql-client-core. 589s Preparing to unpack .../4-mysql-client-core_8.4.7-0ubuntu3_amd64.deb ... 589s Unpacking mysql-client-core (8.4.7-0ubuntu3) ... 589s Selecting previously unselected package mysql-client. 589s Preparing to unpack .../5-mysql-client_8.4.7-0ubuntu3_amd64.deb ... 589s Unpacking mysql-client (8.4.7-0ubuntu3) ... 589s Selecting previously unselected package libmecab2:amd64. 589s Preparing to unpack .../6-libmecab2_0.996-15.1build3_amd64.deb ... 589s Unpacking libmecab2:amd64 (0.996-15.1build3) ... 589s Selecting previously unselected package libprotobuf-lite32t64:amd64. 589s Preparing to unpack .../7-libprotobuf-lite32t64_3.21.12-15_amd64.deb ... 589s Unpacking libprotobuf-lite32t64:amd64 (3.21.12-15) ... 589s Selecting previously unselected package mysql-server-core. 589s Preparing to unpack .../8-mysql-server-core_8.4.7-0ubuntu3_amd64.deb ... 589s Unpacking mysql-server-core (8.4.7-0ubuntu3) ... 589s Setting up mysql-common (5.8+1.1.1ubuntu2) ... 589s update-alternatives: using /etc/mysql/my.cnf.fallback to provide /etc/mysql/my.cnf (my.cnf) in auto mode 589s Selecting previously unselected package mysql-server. 589s (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 ... 125181 files and directories currently installed.) 589s Preparing to unpack .../00-mysql-server_8.4.7-0ubuntu3_amd64.deb ... 590s Unpacking mysql-server (8.4.7-0ubuntu3) ... 590s Selecting previously unselected package python3-numpy-dev:amd64. 590s Preparing to unpack .../01-python3-numpy-dev_1%3a2.3.5+ds-3_amd64.deb ... 590s Unpacking python3-numpy-dev:amd64 (1:2.3.5+ds-3) ... 590s Selecting previously unselected package libblas3:amd64. 590s Preparing to unpack .../02-libblas3_3.12.1-7ubuntu1_amd64.deb ... 590s Unpacking libblas3:amd64 (3.12.1-7ubuntu1) ... 590s Selecting previously unselected package libgfortran5:amd64. 590s Preparing to unpack .../03-libgfortran5_15.2.0-11ubuntu1_amd64.deb ... 590s Unpacking libgfortran5:amd64 (15.2.0-11ubuntu1) ... 590s Selecting previously unselected package liblapack3:amd64. 590s Preparing to unpack .../04-liblapack3_3.12.1-7ubuntu1_amd64.deb ... 590s Unpacking liblapack3:amd64 (3.12.1-7ubuntu1) ... 590s Selecting previously unselected package python3-numpy. 590s Preparing to unpack .../05-python3-numpy_1%3a2.3.5+ds-3_amd64.deb ... 590s Unpacking python3-numpy (1:2.3.5+ds-3) ... 590s Selecting previously unselected package dbconfig-common. 590s Preparing to unpack .../06-dbconfig-common_2.0.25ubuntu1_all.deb ... 590s Unpacking dbconfig-common (2.0.25ubuntu1) ... 590s Selecting previously unselected package dbconfig-mysql. 590s Preparing to unpack .../07-dbconfig-mysql_2.0.25ubuntu1_all.deb ... 590s Unpacking dbconfig-mysql (2.0.25ubuntu1) ... 590s Selecting previously unselected package libomnithread4:amd64. 590s Preparing to unpack .../08-libomnithread4_4.3.3+ds1-1_amd64.deb ... 590s Unpacking libomnithread4:amd64 (4.3.3+ds1-1) ... 590s Selecting previously unselected package libomniorb4-3t64:amd64. 590s Preparing to unpack .../09-libomniorb4-3t64_4.3.3+ds1-1_amd64.deb ... 590s Unpacking libomniorb4-3t64:amd64 (4.3.3+ds1-1) ... 590s Selecting previously unselected package libabsl20240722:amd64. 590s Preparing to unpack .../10-libabsl20240722_20240722.0-4ubuntu1_amd64.deb ... 590s Unpacking libabsl20240722:amd64 (20240722.0-4ubuntu1) ... 590s Selecting previously unselected package libcares2:amd64. 590s Preparing to unpack .../11-libcares2_1.34.6-1_amd64.deb ... 590s Unpacking libcares2:amd64 (1.34.6-1) ... 590s Selecting previously unselected package libprotobuf32t64:amd64. 590s Preparing to unpack .../12-libprotobuf32t64_3.21.12-15_amd64.deb ... 590s Unpacking libprotobuf32t64:amd64 (3.21.12-15) ... 590s Selecting previously unselected package libprotoc32t64:amd64. 590s Preparing to unpack .../13-libprotoc32t64_3.21.12-15_amd64.deb ... 590s Unpacking libprotoc32t64:amd64 (3.21.12-15) ... 590s Selecting previously unselected package libre2-11:amd64. 590s Preparing to unpack .../14-libre2-11_20250805-1build1_amd64.deb ... 590s Unpacking libre2-11:amd64 (20250805-1build1) ... 590s Selecting previously unselected package libgrpc29t64:amd64. 590s Preparing to unpack .../15-libgrpc29t64_1.51.1-7_amd64.deb ... 590s Unpacking libgrpc29t64:amd64 (1.51.1-7) ... 590s Selecting previously unselected package libgrpc++1.51t64:amd64. 590s Preparing to unpack .../16-libgrpc++1.51t64_1.51.1-7_amd64.deb ... 590s Unpacking libgrpc++1.51t64:amd64 (1.51.1-7) ... 590s Selecting previously unselected package opentelemetry-cpp:amd64. 590s Preparing to unpack .../17-opentelemetry-cpp_1.23.0-3_amd64.deb ... 590s Unpacking opentelemetry-cpp:amd64 (1.23.0-3) ... 590s Selecting previously unselected package tango-common. 590s Preparing to unpack .../18-tango-common_10.0.2+dfsg1-4_all.deb ... 590s Unpacking tango-common (10.0.2+dfsg1-4) ... 590s Selecting previously unselected package libcos4-3:amd64. 590s Preparing to unpack .../19-libcos4-3_4.3.3+ds1-1_amd64.deb ... 590s Unpacking libcos4-3:amd64 (4.3.3+ds1-1) ... 590s Selecting previously unselected package libjpeg-turbo8:amd64. 590s Preparing to unpack .../20-libjpeg-turbo8_2.1.5-4ubuntu2_amd64.deb ... 590s Unpacking libjpeg-turbo8:amd64 (2.1.5-4ubuntu2) ... 590s Selecting previously unselected package libjpeg8:amd64. 590s Preparing to unpack .../21-libjpeg8_8c-2ubuntu11_amd64.deb ... 590s Unpacking libjpeg8:amd64 (8c-2ubuntu11) ... 590s Selecting previously unselected package libnorm1t64:amd64. 590s Preparing to unpack .../22-libnorm1t64_1.5.9+dfsg-4_amd64.deb ... 590s Unpacking libnorm1t64:amd64 (1.5.9+dfsg-4) ... 590s Selecting previously unselected package libpgm-5.3-0t64:amd64. 590s Preparing to unpack .../23-libpgm-5.3-0t64_5.3.128~dfsg-2.1build2_amd64.deb ... 590s Unpacking libpgm-5.3-0t64:amd64 (5.3.128~dfsg-2.1build2) ... 590s Selecting previously unselected package libsodium23:amd64. 590s Preparing to unpack .../24-libsodium23_1.0.18-2_amd64.deb ... 590s Unpacking libsodium23:amd64 (1.0.18-2) ... 590s Selecting previously unselected package libzmq5:amd64. 590s Preparing to unpack .../25-libzmq5_4.3.5-1build3_amd64.deb ... 590s Unpacking libzmq5:amd64 (4.3.5-1build3) ... 590s Selecting previously unselected package libtango10:amd64. 590s Preparing to unpack .../26-libtango10_10.0.2+dfsg1-4_amd64.deb ... 590s Unpacking libtango10:amd64 (10.0.2+dfsg1-4) ... 590s Selecting previously unselected package libtango-tools. 590s Preparing to unpack .../27-libtango-tools_10.0.2+dfsg1-4_amd64.deb ... 590s Unpacking libtango-tools (10.0.2+dfsg1-4) ... 590s Selecting previously unselected package libmysqlclient24:amd64. 590s Preparing to unpack .../28-libmysqlclient24_8.4.7-0ubuntu3_amd64.deb ... 590s Unpacking libmysqlclient24:amd64 (8.4.7-0ubuntu3) ... 590s Selecting previously unselected package tango-db. 590s Preparing to unpack .../29-tango-db_10.0.2+dfsg1-4_amd64.deb ... 590s Unpacking tango-db (10.0.2+dfsg1-4) ... 590s Selecting previously unselected package python3.13. 590s Preparing to unpack .../30-python3.13_3.13.11-1_amd64.deb ... 590s Unpacking python3.13 (3.13.11-1) ... 590s Selecting previously unselected package default-mysql-server. 590s Preparing to unpack .../31-default-mysql-server_1.1.1ubuntu2_all.deb ... 590s Unpacking default-mysql-server (1.1.1ubuntu2) ... 590s Selecting previously unselected package libboost-python1.88.0. 590s Preparing to unpack .../32-libboost-python1.88.0_1.88.0-1.4ubuntu3_amd64.deb ... 590s Unpacking libboost-python1.88.0 (1.88.0-1.4ubuntu3) ... 590s Selecting previously unselected package libev4t64:amd64. 590s Preparing to unpack .../33-libev4t64_1%3a4.33-2.1build2_amd64.deb ... 590s Unpacking libev4t64:amd64 (1:4.33-2.1build2) ... 590s Selecting previously unselected package libexpat1-dev:amd64. 590s Preparing to unpack .../34-libexpat1-dev_2.7.3-1_amd64.deb ... 590s Unpacking libexpat1-dev:amd64 (2.7.3-1) ... 590s Selecting previously unselected package libpython3.14:amd64. 590s Preparing to unpack .../35-libpython3.14_3.14.2-1_amd64.deb ... 590s Unpacking libpython3.14:amd64 (3.14.2-1) ... 590s Selecting previously unselected package zlib1g-dev:amd64. 590s Preparing to unpack .../36-zlib1g-dev_1%3a1.3.dfsg+really1.3.1-1ubuntu2_amd64.deb ... 590s Unpacking zlib1g-dev:amd64 (1:1.3.dfsg+really1.3.1-1ubuntu2) ... 590s Selecting previously unselected package libpython3.14-dev:amd64. 590s Preparing to unpack .../37-libpython3.14-dev_3.14.2-1_amd64.deb ... 590s Unpacking libpython3.14-dev:amd64 (3.14.2-1) ... 590s Selecting previously unselected package libpython3-dev:amd64. 590s Preparing to unpack .../38-libpython3-dev_3.14.2-1_amd64.deb ... 590s Unpacking libpython3-dev:amd64 (3.14.2-1) ... 591s Selecting previously unselected package libpython3.13-dev:amd64. 591s Preparing to unpack .../39-libpython3.13-dev_3.13.11-1_amd64.deb ... 591s Unpacking libpython3.13-dev:amd64 (3.13.11-1) ... 591s Selecting previously unselected package libpython3-all-dev:amd64. 591s Preparing to unpack .../40-libpython3-all-dev_3.14.2-1_amd64.deb ... 591s Unpacking libpython3-all-dev:amd64 (3.14.2-1) ... 591s Selecting previously unselected package python3-all. 591s Preparing to unpack .../41-python3-all_3.14.2-1_amd64.deb ... 591s Unpacking python3-all (3.14.2-1) ... 591s Selecting previously unselected package python3.14-dev. 591s Preparing to unpack .../42-python3.14-dev_3.14.2-1_amd64.deb ... 591s Unpacking python3.14-dev (3.14.2-1) ... 591s Selecting previously unselected package python3-dev. 591s Preparing to unpack .../43-python3-dev_3.14.2-1_amd64.deb ... 591s Unpacking python3-dev (3.14.2-1) ... 591s Selecting previously unselected package python3.13-dev. 591s Preparing to unpack .../44-python3.13-dev_3.13.11-1_amd64.deb ... 591s Unpacking python3.13-dev (3.13.11-1) ... 591s Selecting previously unselected package python3-all-dev. 591s Preparing to unpack .../45-python3-all-dev_3.14.2-1_amd64.deb ... 591s Unpacking python3-all-dev (3.14.2-1) ... 591s Selecting previously unselected package python3-psutil. 591s Preparing to unpack .../46-python3-psutil_7.1.0-1ubuntu1_amd64.deb ... 591s Unpacking python3-psutil (7.1.0-1ubuntu1) ... 591s Selecting previously unselected package python3-zope.event. 591s Preparing to unpack .../47-python3-zope.event_6.0-2_all.deb ... 591s Unpacking python3-zope.event (6.0-2) ... 591s Selecting previously unselected package python3-zope.interface. 591s Preparing to unpack .../48-python3-zope.interface_8.2-1_amd64.deb ... 591s Unpacking python3-zope.interface (8.2-1) ... 591s Selecting previously unselected package python3-greenlet. 591s Preparing to unpack .../49-python3-greenlet_3.2.4-3_amd64.deb ... 591s Unpacking python3-greenlet (3.2.4-3) ... 591s Selecting previously unselected package python3-gevent. 591s Preparing to unpack .../50-python3-gevent_24.11.1-1build2_amd64.deb ... 591s Unpacking python3-gevent (24.11.1-1build2) ... 591s Selecting previously unselected package python3-tango. 591s Preparing to unpack .../51-python3-tango_10.0.2-3_amd64.deb ... 591s Unpacking python3-tango (10.0.2-3) ... 591s Setting up libprotobuf-lite32t64:amd64 (3.21.12-15) ... 591s Setting up libev4t64:amd64 (1:4.33-2.1build2) ... 591s Setting up libnorm1t64:amd64 (1.5.9+dfsg-4) ... 591s Setting up libmecab2:amd64 (0.996-15.1build3) ... 591s Setting up libprotobuf32t64:amd64 (3.21.12-15) ... 591s Setting up libboost-python1.88.0 (1.88.0-1.4ubuntu3) ... 591s Setting up libsodium23:amd64 (1.0.18-2) ... 591s Setting up python3-zope.event (6.0-2) ... 591s Setting up python3-zope.interface (8.2-1) ... 591s Setting up dbconfig-common (2.0.25ubuntu1) ... 591s Creating config file /etc/dbconfig-common/config with new version 591s Setting up libabsl20240722:amd64 (20240722.0-4ubuntu1) ... 591s Setting up libmysqlclient24:amd64 (8.4.7-0ubuntu3) ... 591s Setting up python3-psutil (7.1.0-1ubuntu1) ... 592s Setting up libpgm-5.3-0t64:amd64 (5.3.128~dfsg-2.1build2) ... 592s Setting up libblas3:amd64 (3.12.1-7ubuntu1) ... 592s update-alternatives: using /usr/lib/x86_64-linux-gnu/blas/libblas.so.3 to provide /usr/lib/x86_64-linux-gnu/libblas.so.3 (libblas.so.3-x86_64-linux-gnu) in auto mode 592s Setting up libexpat1-dev:amd64 (2.7.3-1) ... 592s Setting up python3-greenlet (3.2.4-3) ... 592s Setting up libcares2:amd64 (1.34.6-1) ... 592s Setting up python3-numpy-dev:amd64 (1:2.3.5+ds-3) ... 592s Setting up libtcmalloc-minimal4t64:amd64 (2.16-1build1) ... 592s Setting up libjpeg-turbo8:amd64 (2.1.5-4ubuntu2) ... 592s Setting up libomnithread4:amd64 (4.3.3+ds1-1) ... 592s Setting up libgfortran5:amd64 (15.2.0-11ubuntu1) ... 592s Setting up zlib1g-dev:amd64 (1:1.3.dfsg+really1.3.1-1ubuntu2) ... 592s Setting up libpython3.14:amd64 (3.14.2-1) ... 592s Setting up python3.13-minimal (3.13.11-1) ... 592s Setting up libpython3.14-dev:amd64 (3.14.2-1) ... 592s Setting up libprotoc32t64:amd64 (3.21.12-15) ... 592s Setting up libjpeg8:amd64 (8c-2ubuntu11) ... 592s Setting up libre2-11:amd64 (20250805-1build1) ... 592s Setting up liblapack3:amd64 (3.12.1-7ubuntu1) ... 592s update-alternatives: using /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3 to provide /usr/lib/x86_64-linux-gnu/liblapack.so.3 (liblapack.so.3-x86_64-linux-gnu) in auto mode 592s Setting up libpython3-dev:amd64 (3.14.2-1) ... 592s Setting up libzmq5:amd64 (4.3.5-1build3) ... 592s Setting up libgoogle-perftools4t64:amd64 (2.16-1build1) ... 592s Setting up libomniorb4-3t64:amd64 (4.3.3+ds1-1) ... 592s Setting up python3.14-dev (3.14.2-1) ... 592s Setting up python3.13 (3.13.11-1) ... 593s Setting up python3-all (3.14.2-1) ... 593s Setting up python3-gevent (24.11.1-1build2) ... 593s /usr/lib/python3/dist-packages/gevent/_ffi/loop.py:226: SyntaxWarning: 'return' in a 'finally' block 593s return # pylint:disable=lost-exception,return-in-finally 593s Setting up mysql-server-core (8.4.7-0ubuntu3) ... 593s Setting up libpython3.13-dev:amd64 (3.13.11-1) ... 593s Setting up python3-dev (3.14.2-1) ... 593s Setting up libgrpc29t64:amd64 (1.51.1-7) ... 593s Setting up python3-numpy (1:2.3.5+ds-3) ... 595s Setting up mysql-client-core (8.4.7-0ubuntu3) ... 595s Setting up libcos4-3:amd64 (4.3.3+ds1-1) ... 595s Setting up mysql-client (8.4.7-0ubuntu3) ... 595s Setting up python3.13-dev (3.13.11-1) ... 595s Setting up dbconfig-mysql (2.0.25ubuntu1) ... 595s Setting up libgrpc++1.51t64:amd64 (1.51.1-7) ... 595s Setting up libpython3-all-dev:amd64 (3.14.2-1) ... 595s Setting up opentelemetry-cpp:amd64 (1.23.0-3) ... 595s Setting up tango-common (10.0.2+dfsg1-4) ... 595s Adding group tango....done 595s Adding system user tango....done 596s Setting up mysql-server (8.4.7-0ubuntu3) ... 596s update-alternatives: using /etc/mysql/mysql.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode 596s Renaming removed key_buffer and myisam-recover options (if present) 600s Created symlink '/etc/systemd/system/multi-user.target.wants/mysql.service' → '/usr/lib/systemd/system/mysql.service'. 600s Setting up python3-all-dev (3.14.2-1) ... 600s Setting up libtango10:amd64 (10.0.2+dfsg1-4) ... 600s Setting up libtango-tools (10.0.2+dfsg1-4) ... 600s Setting up default-mysql-server (1.1.1ubuntu2) ... 600s Setting up python3-tango (10.0.2-3) ... 601s Setting up tango-db (10.0.2+dfsg1-4) ... 601s Determining localhost credentials from /etc/mysql/debian.cnf: succeeded. 601s dbconfig-common: writing config to /etc/dbconfig-common/tango-db.conf 601s Creating config file /etc/dbconfig-common/tango-db.conf with new version 601s Creating config file /var/lib/tango/.my.cnf with new version 601s checking privileges on database tango for tango@localhost: user creation needed. 601s granting access to database tango for tango@localhost: success. 601s verifying access for tango@localhost: success. 601s creating database tango: success. 601s verifying database tango exists: success. 601s populating database via sql... done. 601s dbconfig-common: flushing administrative password 602s Created symlink '/etc/systemd/system/multi-user.target.wants/tango-db.service' → '/usr/lib/systemd/system/tango-db.service'. 602s Processing triggers for systemd (259-1ubuntu2) ... 602s Processing triggers for man-db (2.13.1-1) ... 602s Processing triggers for libc-bin (2.42-2ubuntu4) ... 604s autopkgtest [13:27:09]: test command2: set -efu ; for py in $(py3versions -r 2>/dev/null) ; do cd "$AUTOPKGTEST_TMP" ; echo "Testing with $py:" ; $py -c "import tango; print(tango.Database().get_info())" ; done 604s autopkgtest [13:27:09]: test command2: [----------------------- 604s Testing with python3.13: 604s TANGO Database sys/database/2 604s 604s Running since 2026-01-24 13:27:07 604s 604s Devices defined = 8 604s Devices exported = 2 604s Device servers defined = 4 604s Device servers exported = 1 604s 604s Device properties defined = 0 [History lgth = 0] 604s Class properties defined = 67 [History lgth = 0] 604s Device attribute properties defined = 0 [History lgth = 0] 604s Class attribute properties defined = 0 [History lgth = 0] 604s Object properties defined = 0 [History lgth = 0] 604s 604s Testing with python3.14: 604s TANGO Database sys/database/2 604s 604s Running since 2026-01-24 13:27:07 604s 604s Devices defined = 8 604s Devices exported = 2 604s Device servers defined = 4 604s Device servers exported = 1 604s 604s Device properties defined = 0 [History lgth = 0] 604s Class properties defined = 67 [History lgth = 0] 604s Device attribute properties defined = 0 [History lgth = 0] 604s Class attribute properties defined = 0 [History lgth = 0] 604s Object properties defined = 0 [History lgth = 0] 604s 606s bash: line 1: 3800 Segmentation fault (core dumped) $py -c "import tango; print(tango.Database().get_info())" 606s autopkgtest [13:27:11]: test command2: -----------------------] 606s command2 FLAKY non-zero exit status 139 606s autopkgtest [13:27:11]: test command2: - - - - - - - - - - results - - - - - - - - - - 606s autopkgtest [13:27:11]: @@@@@@@@@@@@@@@@@@@@ summary 606s command1 FAIL non-zero exit status 139 606s command2 FLAKY non-zero exit status 139