0s autopkgtest [02:43:03]: starting date and time: 2026-02-04 02:43:03+0000 0s autopkgtest [02:43:03]: git checkout: 4b346b80 nova: make wait_reboot return success even when a no-op 0s autopkgtest [02:43:03]: host juju-7f2275-prod-proposed-migration-environment-20; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.dglci7wj/out --timeout-copy=6000 --needs-internet=try --setup-commands /home/ubuntu/autopkgtest-cloud/worker-config-production/setup-canonical.sh --apt-pocket=proposed=src:tango,src:sphinx-rtd-theme --apt-upgrade pytango --timeout-short=300 --timeout-copy=20000 --timeout-test=20000 --timeout-build=20000 '--env=ADT_TEST_TRIGGERS=tango/10.0.2+dfsg1-4build1 sphinx-rtd-theme/3.1.0+dfsg-1' -- ssh -s /home/ubuntu/autopkgtest/ssh-setup/nova -- --flavor autopkgtest-cpu4-ram16-disk100-arm64 --security-groups autopkgtest-juju-7f2275-prod-proposed-migration-environment-20@sto01-arm64-4.secgroup --name adt-resolute-arm64-pytango-20260204-024303-juju-7f2275-prod-proposed-migration-environment-20-26e86fd2-b7d6-4497-9ce9-a1b8b266918e --image adt/ubuntu-resolute-arm64-server --keyname testbed-juju-7f2275-prod-proposed-migration-environment-20 --net-id=net_prod-autopkgtest-workers-arm64 -e TERM=linux --mirror=http://ftpmaster.internal/ubuntu/ 3s Creating nova instance adt-resolute-arm64-pytango-20260204-024303-juju-7f2275-prod-proposed-migration-environment-20-26e86fd2-b7d6-4497-9ce9-a1b8b266918e from image adt/ubuntu-resolute-arm64-server-20260203.img (UUID fd4bac28-a946-4216-8755-72db0faf84da)... 52s autopkgtest [02:43:55]: testbed dpkg architecture: arm64 52s autopkgtest [02:43:55]: testbed apt version: 3.1.14 53s autopkgtest [02:43:56]: @@@@@@@@@@@@@@@@@@@@ test bed setup 53s autopkgtest [02:43:56]: testbed release detected to be: None 54s autopkgtest [02:43:57]: updating testbed package index (apt update) 54s Get:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease [124 kB] 54s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 54s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 54s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 54s Get:5 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse Sources [35.1 kB] 54s Get:6 http://ftpmaster.internal/ubuntu resolute-proposed/restricted Sources [5260 B] 54s Get:7 http://ftpmaster.internal/ubuntu resolute-proposed/main Sources [234 kB] 54s Get:8 http://ftpmaster.internal/ubuntu resolute-proposed/universe Sources [1714 kB] 54s Get:9 http://ftpmaster.internal/ubuntu resolute-proposed/main arm64 Packages [297 kB] 55s Get:10 http://ftpmaster.internal/ubuntu resolute-proposed/main arm64 c-n-f Metadata [7024 B] 55s Get:11 http://ftpmaster.internal/ubuntu resolute-proposed/restricted arm64 Packages [52.9 kB] 55s Get:12 http://ftpmaster.internal/ubuntu resolute-proposed/restricted arm64 c-n-f Metadata [328 B] 55s Get:13 http://ftpmaster.internal/ubuntu resolute-proposed/universe arm64 Packages [1512 kB] 55s Get:14 http://ftpmaster.internal/ubuntu resolute-proposed/universe arm64 c-n-f Metadata [31.7 kB] 55s Get:15 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse arm64 Packages [22.4 kB] 55s Get:16 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse arm64 c-n-f Metadata [744 B] 58s Fetched 4036 kB in 1s (4797 kB/s) 58s Reading package lists... 59s Hit:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease 59s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 59s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 59s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 60s Reading package lists... 60s Reading package lists... 61s Building dependency tree... 61s Reading state information... 61s Calculating upgrade... 61s The following packages will be upgraded: 61s firmware-sof-signed htop libzstd1 mtd-utils powermgmt-base 61s python3-lazr.restfulclient zstd 61s 7 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 61s Need to get 3270 kB of archives. 61s After this operation, 63.5 kB disk space will be freed. 61s Get:1 http://ftpmaster.internal/ubuntu resolute/main arm64 firmware-sof-signed all 2025.05.1-1build1 [1696 kB] 61s Get:2 http://ftpmaster.internal/ubuntu resolute/main arm64 libzstd1 arm64 1.5.7+dfsg-3 [277 kB] 61s Get:3 http://ftpmaster.internal/ubuntu resolute/main arm64 powermgmt-base all 1.38ubuntu2 [7878 B] 61s Get:4 http://ftpmaster.internal/ubuntu resolute/main arm64 htop arm64 3.4.1-5build2 [175 kB] 61s Get:5 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-lazr.restfulclient all 0.14.6-3build1 [51.1 kB] 61s Get:6 http://ftpmaster.internal/ubuntu resolute/main arm64 zstd arm64 1.5.7+dfsg-3 [596 kB] 61s Get:7 http://ftpmaster.internal/ubuntu resolute/main arm64 mtd-utils arm64 1:2.3.0-1ubuntu2 [466 kB] 62s dpkg-preconfigure: unable to re-open stdin: No such file or directory 62s Fetched 3270 kB in 0s (22.3 MB/s) 62s (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 ... 89360 files and directories currently installed.) 62s Preparing to unpack .../firmware-sof-signed_2025.05.1-1build1_all.deb ... 62s Unpacking firmware-sof-signed (2025.05.1-1build1) over (2025.05.1-1) ... 62s Preparing to unpack .../libzstd1_1.5.7+dfsg-3_arm64.deb ... 62s Unpacking libzstd1:arm64 (1.5.7+dfsg-3) over (1.5.7+dfsg-2) ... 62s Setting up libzstd1:arm64 (1.5.7+dfsg-3) ... 62s (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 ... 89360 files and directories currently installed.) 62s Preparing to unpack .../powermgmt-base_1.38ubuntu2_all.deb ... 62s Unpacking powermgmt-base (1.38ubuntu2) over (1.38ubuntu1) ... 63s Preparing to unpack .../htop_3.4.1-5build2_arm64.deb ... 63s Unpacking htop (3.4.1-5build2) over (3.4.1-5build1) ... 63s Preparing to unpack .../python3-lazr.restfulclient_0.14.6-3build1_all.deb ... 63s Unpacking python3-lazr.restfulclient (0.14.6-3build1) over (0.14.6-3) ... 63s Preparing to unpack .../zstd_1.5.7+dfsg-3_arm64.deb ... 63s Unpacking zstd (1.5.7+dfsg-3) over (1.5.7+dfsg-2) ... 63s Preparing to unpack .../mtd-utils_1%3a2.3.0-1ubuntu2_arm64.deb ... 63s Unpacking mtd-utils (1:2.3.0-1ubuntu2) over (1:2.3.0-1ubuntu1) ... 63s Setting up powermgmt-base (1.38ubuntu2) ... 63s Setting up htop (3.4.1-5build2) ... 63s Setting up firmware-sof-signed (2025.05.1-1build1) ... 63s Setting up mtd-utils (1:2.3.0-1ubuntu2) ... 63s Setting up python3-lazr.restfulclient (0.14.6-3build1) ... 63s Setting up zstd (1.5.7+dfsg-3) ... 63s Processing triggers for man-db (2.13.1-1) ... 64s Processing triggers for libc-bin (2.42-2ubuntu4) ... 64s autopkgtest [02:44:07]: upgrading testbed (apt dist-upgrade and autopurge) 64s Reading package lists... 65s Building dependency tree... 65s Reading state information... 65s Calculating upgrade... 65s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 66s Reading package lists... 66s Building dependency tree... 66s Reading state information... 66s Solving dependencies... 66s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 69s autopkgtest [02:44:12]: testbed running kernel: Linux 6.18.0-9-generic #9-Ubuntu SMP PREEMPT_DYNAMIC Mon Jan 12 16:41:39 UTC 2026 69s autopkgtest [02:44:12]: @@@@@@@@@@@@@@@@@@@@ apt-source pytango 71s Get:1 http://ftpmaster.internal/ubuntu resolute/universe pytango 10.0.2-3 (dsc) [3646 B] 71s Get:2 http://ftpmaster.internal/ubuntu resolute/universe pytango 10.0.2-3 (tar) [4854 kB] 71s Get:3 http://ftpmaster.internal/ubuntu resolute/universe pytango 10.0.2-3 (diff) [13.6 kB] 71s gpgv: Signature made Thu Oct 2 15:09:36 2025 UTC 71s gpgv: using RSA key 9B03EBB98300DF97C2B123BFCC8C6BDD1403F4CA 71s gpgv: issuer "roehling@debian.org" 71s gpgv: Can't check signature: No public key 71s dpkg-source: warning: cannot verify inline signature for ./pytango_10.0.2-3.dsc: no acceptable signature found 71s autopkgtest [02:44:14]: testing package pytango version 10.0.2-3 72s autopkgtest [02:44:15]: build not needed 72s autopkgtest [02:44:15]: test command1: preparing testbed 72s Reading package lists... 73s Building dependency tree... 73s Reading state information... 73s Solving dependencies... 73s The following NEW packages will be installed: 73s libabsl20240722 libabsl20260107 libblas3 libboost-python1.88.0 libc-dev-bin 73s libc6-dev libcares2 libcos4-3 libcrypt-dev libev4t64 libexpat1-dev 73s libgfortran5 libgrpc++1.51t64 libgrpc29t64 libjpeg-turbo8 libjpeg8 73s liblapack3 libnorm1t64 libomniorb4-3t64 libomnithread4 libpgm-5.3-0t64 73s libprotobuf32t64 libprotoc32t64 libpython3-all-dev libpython3-dev 73s libpython3.13-dev libpython3.14 libpython3.14-dev libpython3.14-minimal 73s libpython3.14-stdlib libre2-11 libsodium23 libtango-tools libtango10 libzmq5 73s linux-libc-dev opentelemetry-cpp python3-all python3-all-dev python3-dev 73s python3-gevent python3-greenlet python3-iniconfig python3-numpy 73s python3-numpy-dev python3-pluggy python3-psutil python3-py python3-pytest 73s python3-pytest-asyncio python3-pytest-forked python3-pytest-rerunfailures 73s python3-tango python3-zope.event python3-zope.interface python3.13-dev 73s python3.14 python3.14-dev python3.14-minimal rpcsvc-proto tango-common 73s tango-starter tango-test zlib1g-dev 73s 0 upgraded, 64 newly installed, 0 to remove and 0 not upgraded. 73s Need to get 52.8 MB of archives. 73s After this operation, 260 MB of additional disk space will be used. 73s Get:1 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-numpy-dev arm64 1:2.3.5+ds-3 [366 kB] 73s Get:2 http://ftpmaster.internal/ubuntu resolute/main arm64 libblas3 arm64 3.12.1-7ubuntu1 [181 kB] 73s Get:3 http://ftpmaster.internal/ubuntu resolute/main arm64 libgfortran5 arm64 15.2.0-12ubuntu1 [451 kB] 73s Get:4 http://ftpmaster.internal/ubuntu resolute/main arm64 liblapack3 arm64 3.12.1-7ubuntu1 [2299 kB] 74s Get:5 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-numpy arm64 1:2.3.5+ds-3 [4569 kB] 74s Get:6 http://ftpmaster.internal/ubuntu resolute/main arm64 libpython3.14-minimal arm64 3.14.2-1 [917 kB] 74s Get:7 http://ftpmaster.internal/ubuntu resolute/main arm64 python3.14-minimal arm64 3.14.2-1 [2548 kB] 74s Get:8 http://ftpmaster.internal/ubuntu resolute/universe arm64 libomnithread4 arm64 4.3.3+ds1-1 [12.6 kB] 74s Get:9 http://ftpmaster.internal/ubuntu resolute/universe arm64 libomniorb4-3t64 arm64 4.3.3+ds1-1 [1220 kB] 74s Get:10 http://ftpmaster.internal/ubuntu resolute/main arm64 libabsl20260107 arm64 20260107.0-0ubuntu2 [563 kB] 74s Get:11 http://ftpmaster.internal/ubuntu resolute/main arm64 libabsl20240722 arm64 20240722.0-4ubuntu1 [508 kB] 74s Get:12 http://ftpmaster.internal/ubuntu resolute/main arm64 libcares2 arm64 1.34.6-1 [100 kB] 74s Get:13 http://ftpmaster.internal/ubuntu resolute/main arm64 libprotobuf32t64 arm64 3.21.12-15 [868 kB] 74s Get:14 http://ftpmaster.internal/ubuntu resolute/main arm64 libprotoc32t64 arm64 3.21.12-15 [633 kB] 74s Get:15 http://ftpmaster.internal/ubuntu resolute/main arm64 libre2-11 arm64 20250805-1build1 [169 kB] 74s Get:16 http://ftpmaster.internal/ubuntu resolute/universe arm64 libgrpc29t64 arm64 1.51.1-7 [2705 kB] 74s Get:17 http://ftpmaster.internal/ubuntu resolute/universe arm64 libgrpc++1.51t64 arm64 1.51.1-7 [466 kB] 74s Get:18 http://ftpmaster.internal/ubuntu resolute/universe arm64 opentelemetry-cpp arm64 1.23.0-3build1 [596 kB] 74s Get:19 http://ftpmaster.internal/ubuntu resolute-proposed/universe arm64 tango-common all 10.0.2+dfsg1-4build1 [8608 B] 74s Get:20 http://ftpmaster.internal/ubuntu resolute/universe arm64 libcos4-3 arm64 4.3.3+ds1-1 [1300 kB] 74s Get:21 http://ftpmaster.internal/ubuntu resolute/main arm64 libjpeg-turbo8 arm64 2.1.5-4ubuntu2 [165 kB] 74s Get:22 http://ftpmaster.internal/ubuntu resolute/main arm64 libjpeg8 arm64 8c-2ubuntu11 [2148 B] 74s Get:23 http://ftpmaster.internal/ubuntu resolute/universe arm64 libnorm1t64 arm64 1.5.9+dfsg-4 [152 kB] 74s Get:24 http://ftpmaster.internal/ubuntu resolute/universe arm64 libpgm-5.3-0t64 arm64 5.3.128~dfsg-2.1build2 [161 kB] 74s Get:25 http://ftpmaster.internal/ubuntu resolute/main arm64 libsodium23 arm64 1.0.18-2 [120 kB] 74s Get:26 http://ftpmaster.internal/ubuntu resolute/universe arm64 libzmq5 arm64 4.3.5-1build3 [244 kB] 74s Get:27 http://ftpmaster.internal/ubuntu resolute-proposed/universe arm64 libtango10 arm64 10.0.2+dfsg1-4build1 [1900 kB] 75s Get:28 http://ftpmaster.internal/ubuntu resolute-proposed/universe arm64 libtango-tools arm64 10.0.2+dfsg1-4build1 [25.5 kB] 75s Get:29 http://ftpmaster.internal/ubuntu resolute-proposed/universe arm64 tango-starter arm64 10.0.2+dfsg1-4build1 [80.1 kB] 75s Get:30 http://ftpmaster.internal/ubuntu resolute/main arm64 libboost-python1.88.0 arm64 1.88.0-1.4ubuntu3 [350 kB] 75s Get:31 http://ftpmaster.internal/ubuntu resolute/main arm64 libc-dev-bin arm64 2.42-2ubuntu4 [22.5 kB] 75s Get:32 http://ftpmaster.internal/ubuntu resolute/main arm64 linux-libc-dev arm64 6.18.0-9.9 [1834 kB] 75s Get:33 http://ftpmaster.internal/ubuntu resolute/main arm64 libcrypt-dev arm64 1:4.5.1-1 [123 kB] 75s Get:34 http://ftpmaster.internal/ubuntu resolute/main arm64 rpcsvc-proto arm64 1.4.3-1build1 [65.6 kB] 75s Get:35 http://ftpmaster.internal/ubuntu resolute/main arm64 libc6-dev arm64 2.42-2ubuntu4 [1765 kB] 75s Get:36 http://ftpmaster.internal/ubuntu resolute/universe arm64 libev4t64 arm64 1:4.33-2.1build2 [30.7 kB] 75s Get:37 http://ftpmaster.internal/ubuntu resolute/main arm64 libexpat1-dev arm64 2.7.4-1 [134 kB] 75s Get:38 http://ftpmaster.internal/ubuntu resolute/main arm64 zlib1g-dev arm64 1:1.3.dfsg+really1.3.1-1ubuntu2 [899 kB] 75s Get:39 http://ftpmaster.internal/ubuntu resolute/main arm64 libpython3.13-dev arm64 3.13.11-1 [5810 kB] 75s Get:40 http://ftpmaster.internal/ubuntu resolute/main arm64 libpython3-dev arm64 3.13.9-3 [11.2 kB] 75s Get:41 http://ftpmaster.internal/ubuntu resolute/main arm64 libpython3.14-stdlib arm64 3.14.2-1 [2351 kB] 75s Get:42 http://ftpmaster.internal/ubuntu resolute/main arm64 libpython3.14 arm64 3.14.2-1 [2593 kB] 75s Get:43 http://ftpmaster.internal/ubuntu resolute/main arm64 libpython3.14-dev arm64 3.14.2-1 [5984 kB] 75s Get:44 http://ftpmaster.internal/ubuntu resolute/main arm64 libpython3-all-dev arm64 3.13.9-3 [916 B] 75s Get:45 http://ftpmaster.internal/ubuntu resolute/main arm64 python3.14 arm64 3.14.2-1 [816 kB] 75s Get:46 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-all arm64 3.13.9-3 [890 B] 75s Get:47 http://ftpmaster.internal/ubuntu resolute/main arm64 python3.13-dev arm64 3.13.11-1 [508 kB] 75s Get:48 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-dev arm64 3.13.9-3 [26.6 kB] 75s Get:49 http://ftpmaster.internal/ubuntu resolute/main arm64 python3.14-dev arm64 3.14.2-1 [510 kB] 75s Get:50 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-all-dev arm64 3.13.9-3 [914 B] 75s Get:51 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-iniconfig all 2.1.0-2 [6962 B] 75s Get:52 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-pluggy all 1.6.0-2 [21.1 kB] 75s Get:53 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-psutil arm64 7.1.0-1ubuntu1 [191 kB] 75s Get:54 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-py all 1.11.0-6 [72.9 kB] 75s Get:55 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-pytest all 9.0.2-2 [277 kB] 75s Get:56 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-pytest-asyncio all 1.3.0-1 [13.8 kB] 75s Get:57 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-pytest-forked all 1.6.0-5 [7758 B] 75s Get:58 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-pytest-rerunfailures all 16.1-1 [14.9 kB] 75s Get:59 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-zope.event all 6.0-2 [7710 B] 75s Get:60 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-zope.interface arm64 8.2-1 [145 kB] 75s Get:61 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-greenlet arm64 3.2.4-3 [178 kB] 75s Get:62 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-gevent arm64 24.11.1-1build2 [1126 kB] 75s Get:63 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-tango arm64 10.0.2-3 [3452 kB] 76s Get:64 http://ftpmaster.internal/ubuntu resolute-proposed/universe arm64 tango-test arm64 10.0.2+dfsg1-4build1 [116 kB] 76s Preconfiguring packages ... 76s Fetched 52.8 MB in 2s (23.9 MB/s) 76s Selecting previously unselected package python3-numpy-dev:arm64. 76s (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 ... 89360 files and directories currently installed.) 76s Preparing to unpack .../00-python3-numpy-dev_1%3a2.3.5+ds-3_arm64.deb ... 76s Unpacking python3-numpy-dev:arm64 (1:2.3.5+ds-3) ... 76s Selecting previously unselected package libblas3:arm64. 76s Preparing to unpack .../01-libblas3_3.12.1-7ubuntu1_arm64.deb ... 76s Unpacking libblas3:arm64 (3.12.1-7ubuntu1) ... 76s Selecting previously unselected package libgfortran5:arm64. 76s Preparing to unpack .../02-libgfortran5_15.2.0-12ubuntu1_arm64.deb ... 76s Unpacking libgfortran5:arm64 (15.2.0-12ubuntu1) ... 76s Selecting previously unselected package liblapack3:arm64. 76s Preparing to unpack .../03-liblapack3_3.12.1-7ubuntu1_arm64.deb ... 76s Unpacking liblapack3:arm64 (3.12.1-7ubuntu1) ... 76s Selecting previously unselected package python3-numpy. 76s Preparing to unpack .../04-python3-numpy_1%3a2.3.5+ds-3_arm64.deb ... 76s Unpacking python3-numpy (1:2.3.5+ds-3) ... 77s Selecting previously unselected package libpython3.14-minimal:arm64. 77s Preparing to unpack .../05-libpython3.14-minimal_3.14.2-1_arm64.deb ... 77s Unpacking libpython3.14-minimal:arm64 (3.14.2-1) ... 77s Selecting previously unselected package python3.14-minimal. 77s Preparing to unpack .../06-python3.14-minimal_3.14.2-1_arm64.deb ... 77s Unpacking python3.14-minimal (3.14.2-1) ... 77s Selecting previously unselected package libomnithread4:arm64. 77s Preparing to unpack .../07-libomnithread4_4.3.3+ds1-1_arm64.deb ... 77s Unpacking libomnithread4:arm64 (4.3.3+ds1-1) ... 77s Selecting previously unselected package libomniorb4-3t64:arm64. 77s Preparing to unpack .../08-libomniorb4-3t64_4.3.3+ds1-1_arm64.deb ... 77s Unpacking libomniorb4-3t64:arm64 (4.3.3+ds1-1) ... 77s Selecting previously unselected package libabsl20260107:arm64. 77s Preparing to unpack .../09-libabsl20260107_20260107.0-0ubuntu2_arm64.deb ... 77s Unpacking libabsl20260107:arm64 (20260107.0-0ubuntu2) ... 77s Selecting previously unselected package libabsl20240722:arm64. 77s Preparing to unpack .../10-libabsl20240722_20240722.0-4ubuntu1_arm64.deb ... 77s Unpacking libabsl20240722:arm64 (20240722.0-4ubuntu1) ... 77s Selecting previously unselected package libcares2:arm64. 77s Preparing to unpack .../11-libcares2_1.34.6-1_arm64.deb ... 77s Unpacking libcares2:arm64 (1.34.6-1) ... 77s Selecting previously unselected package libprotobuf32t64:arm64. 77s Preparing to unpack .../12-libprotobuf32t64_3.21.12-15_arm64.deb ... 77s Unpacking libprotobuf32t64:arm64 (3.21.12-15) ... 77s Selecting previously unselected package libprotoc32t64:arm64. 77s Preparing to unpack .../13-libprotoc32t64_3.21.12-15_arm64.deb ... 77s Unpacking libprotoc32t64:arm64 (3.21.12-15) ... 77s Selecting previously unselected package libre2-11:arm64. 77s Preparing to unpack .../14-libre2-11_20250805-1build1_arm64.deb ... 77s Unpacking libre2-11:arm64 (20250805-1build1) ... 77s Selecting previously unselected package libgrpc29t64:arm64. 77s Preparing to unpack .../15-libgrpc29t64_1.51.1-7_arm64.deb ... 77s Unpacking libgrpc29t64:arm64 (1.51.1-7) ... 77s Selecting previously unselected package libgrpc++1.51t64:arm64. 77s Preparing to unpack .../16-libgrpc++1.51t64_1.51.1-7_arm64.deb ... 77s Unpacking libgrpc++1.51t64:arm64 (1.51.1-7) ... 77s Selecting previously unselected package opentelemetry-cpp:arm64. 77s Preparing to unpack .../17-opentelemetry-cpp_1.23.0-3build1_arm64.deb ... 77s Unpacking opentelemetry-cpp:arm64 (1.23.0-3build1) ... 77s Selecting previously unselected package tango-common. 77s Preparing to unpack .../18-tango-common_10.0.2+dfsg1-4build1_all.deb ... 77s Unpacking tango-common (10.0.2+dfsg1-4build1) ... 77s Selecting previously unselected package libcos4-3:arm64. 77s Preparing to unpack .../19-libcos4-3_4.3.3+ds1-1_arm64.deb ... 77s Unpacking libcos4-3:arm64 (4.3.3+ds1-1) ... 77s Selecting previously unselected package libjpeg-turbo8:arm64. 77s Preparing to unpack .../20-libjpeg-turbo8_2.1.5-4ubuntu2_arm64.deb ... 77s Unpacking libjpeg-turbo8:arm64 (2.1.5-4ubuntu2) ... 77s Selecting previously unselected package libjpeg8:arm64. 77s Preparing to unpack .../21-libjpeg8_8c-2ubuntu11_arm64.deb ... 77s Unpacking libjpeg8:arm64 (8c-2ubuntu11) ... 77s Selecting previously unselected package libnorm1t64:arm64. 77s Preparing to unpack .../22-libnorm1t64_1.5.9+dfsg-4_arm64.deb ... 77s Unpacking libnorm1t64:arm64 (1.5.9+dfsg-4) ... 77s Selecting previously unselected package libpgm-5.3-0t64:arm64. 77s Preparing to unpack .../23-libpgm-5.3-0t64_5.3.128~dfsg-2.1build2_arm64.deb ... 77s Unpacking libpgm-5.3-0t64:arm64 (5.3.128~dfsg-2.1build2) ... 77s Selecting previously unselected package libsodium23:arm64. 78s Preparing to unpack .../24-libsodium23_1.0.18-2_arm64.deb ... 78s Unpacking libsodium23:arm64 (1.0.18-2) ... 78s Selecting previously unselected package libzmq5:arm64. 78s Preparing to unpack .../25-libzmq5_4.3.5-1build3_arm64.deb ... 78s Unpacking libzmq5:arm64 (4.3.5-1build3) ... 78s Selecting previously unselected package libtango10:arm64. 78s Preparing to unpack .../26-libtango10_10.0.2+dfsg1-4build1_arm64.deb ... 78s Unpacking libtango10:arm64 (10.0.2+dfsg1-4build1) ... 78s Selecting previously unselected package libtango-tools. 78s Preparing to unpack .../27-libtango-tools_10.0.2+dfsg1-4build1_arm64.deb ... 78s Unpacking libtango-tools (10.0.2+dfsg1-4build1) ... 78s Selecting previously unselected package tango-starter. 78s Preparing to unpack .../28-tango-starter_10.0.2+dfsg1-4build1_arm64.deb ... 78s Unpacking tango-starter (10.0.2+dfsg1-4build1) ... 78s Selecting previously unselected package libboost-python1.88.0. 78s Preparing to unpack .../29-libboost-python1.88.0_1.88.0-1.4ubuntu3_arm64.deb ... 78s Unpacking libboost-python1.88.0 (1.88.0-1.4ubuntu3) ... 78s Selecting previously unselected package libc-dev-bin. 78s Preparing to unpack .../30-libc-dev-bin_2.42-2ubuntu4_arm64.deb ... 78s Unpacking libc-dev-bin (2.42-2ubuntu4) ... 78s Selecting previously unselected package linux-libc-dev:arm64. 78s Preparing to unpack .../31-linux-libc-dev_6.18.0-9.9_arm64.deb ... 78s Unpacking linux-libc-dev:arm64 (6.18.0-9.9) ... 78s Selecting previously unselected package libcrypt-dev:arm64. 78s Preparing to unpack .../32-libcrypt-dev_1%3a4.5.1-1_arm64.deb ... 78s Unpacking libcrypt-dev:arm64 (1:4.5.1-1) ... 78s Selecting previously unselected package rpcsvc-proto. 78s Preparing to unpack .../33-rpcsvc-proto_1.4.3-1build1_arm64.deb ... 78s Unpacking rpcsvc-proto (1.4.3-1build1) ... 78s Selecting previously unselected package libc6-dev:arm64. 78s Preparing to unpack .../34-libc6-dev_2.42-2ubuntu4_arm64.deb ... 78s Unpacking libc6-dev:arm64 (2.42-2ubuntu4) ... 78s Selecting previously unselected package libev4t64:arm64. 78s Preparing to unpack .../35-libev4t64_1%3a4.33-2.1build2_arm64.deb ... 78s Unpacking libev4t64:arm64 (1:4.33-2.1build2) ... 78s Selecting previously unselected package libexpat1-dev:arm64. 78s Preparing to unpack .../36-libexpat1-dev_2.7.4-1_arm64.deb ... 78s Unpacking libexpat1-dev:arm64 (2.7.4-1) ... 78s Selecting previously unselected package zlib1g-dev:arm64. 78s Preparing to unpack .../37-zlib1g-dev_1%3a1.3.dfsg+really1.3.1-1ubuntu2_arm64.deb ... 78s Unpacking zlib1g-dev:arm64 (1:1.3.dfsg+really1.3.1-1ubuntu2) ... 78s Selecting previously unselected package libpython3.13-dev:arm64. 78s Preparing to unpack .../38-libpython3.13-dev_3.13.11-1_arm64.deb ... 78s Unpacking libpython3.13-dev:arm64 (3.13.11-1) ... 79s Selecting previously unselected package libpython3-dev:arm64. 79s Preparing to unpack .../39-libpython3-dev_3.13.9-3_arm64.deb ... 79s Unpacking libpython3-dev:arm64 (3.13.9-3) ... 79s Selecting previously unselected package libpython3.14-stdlib:arm64. 79s Preparing to unpack .../40-libpython3.14-stdlib_3.14.2-1_arm64.deb ... 79s Unpacking libpython3.14-stdlib:arm64 (3.14.2-1) ... 79s Selecting previously unselected package libpython3.14:arm64. 79s Preparing to unpack .../41-libpython3.14_3.14.2-1_arm64.deb ... 79s Unpacking libpython3.14:arm64 (3.14.2-1) ... 79s Selecting previously unselected package libpython3.14-dev:arm64. 79s Preparing to unpack .../42-libpython3.14-dev_3.14.2-1_arm64.deb ... 79s Unpacking libpython3.14-dev:arm64 (3.14.2-1) ... 79s Selecting previously unselected package libpython3-all-dev:arm64. 79s Preparing to unpack .../43-libpython3-all-dev_3.13.9-3_arm64.deb ... 79s Unpacking libpython3-all-dev:arm64 (3.13.9-3) ... 79s Selecting previously unselected package python3.14. 79s Preparing to unpack .../44-python3.14_3.14.2-1_arm64.deb ... 79s Unpacking python3.14 (3.14.2-1) ... 79s Selecting previously unselected package python3-all. 79s Preparing to unpack .../45-python3-all_3.13.9-3_arm64.deb ... 79s Unpacking python3-all (3.13.9-3) ... 79s Selecting previously unselected package python3.13-dev. 79s Preparing to unpack .../46-python3.13-dev_3.13.11-1_arm64.deb ... 79s Unpacking python3.13-dev (3.13.11-1) ... 79s Selecting previously unselected package python3-dev. 79s Preparing to unpack .../47-python3-dev_3.13.9-3_arm64.deb ... 79s Unpacking python3-dev (3.13.9-3) ... 79s Selecting previously unselected package python3.14-dev. 79s Preparing to unpack .../48-python3.14-dev_3.14.2-1_arm64.deb ... 79s Unpacking python3.14-dev (3.14.2-1) ... 79s Selecting previously unselected package python3-all-dev. 79s Preparing to unpack .../49-python3-all-dev_3.13.9-3_arm64.deb ... 79s Unpacking python3-all-dev (3.13.9-3) ... 79s Selecting previously unselected package python3-iniconfig. 79s Preparing to unpack .../50-python3-iniconfig_2.1.0-2_all.deb ... 79s Unpacking python3-iniconfig (2.1.0-2) ... 79s Selecting previously unselected package python3-pluggy. 79s Preparing to unpack .../51-python3-pluggy_1.6.0-2_all.deb ... 79s Unpacking python3-pluggy (1.6.0-2) ... 79s Selecting previously unselected package python3-psutil. 79s Preparing to unpack .../52-python3-psutil_7.1.0-1ubuntu1_arm64.deb ... 79s Unpacking python3-psutil (7.1.0-1ubuntu1) ... 79s Selecting previously unselected package python3-py. 79s Preparing to unpack .../53-python3-py_1.11.0-6_all.deb ... 79s Unpacking python3-py (1.11.0-6) ... 79s Selecting previously unselected package python3-pytest. 79s Preparing to unpack .../54-python3-pytest_9.0.2-2_all.deb ... 79s Unpacking python3-pytest (9.0.2-2) ... 79s Selecting previously unselected package python3-pytest-asyncio. 79s Preparing to unpack .../55-python3-pytest-asyncio_1.3.0-1_all.deb ... 79s Unpacking python3-pytest-asyncio (1.3.0-1) ... 79s Selecting previously unselected package python3-pytest-forked. 79s Preparing to unpack .../56-python3-pytest-forked_1.6.0-5_all.deb ... 79s Unpacking python3-pytest-forked (1.6.0-5) ... 79s Selecting previously unselected package python3-pytest-rerunfailures. 79s Preparing to unpack .../57-python3-pytest-rerunfailures_16.1-1_all.deb ... 79s Unpacking python3-pytest-rerunfailures (16.1-1) ... 79s Selecting previously unselected package python3-zope.event. 79s Preparing to unpack .../58-python3-zope.event_6.0-2_all.deb ... 79s Unpacking python3-zope.event (6.0-2) ... 79s Selecting previously unselected package python3-zope.interface. 80s Preparing to unpack .../59-python3-zope.interface_8.2-1_arm64.deb ... 80s Unpacking python3-zope.interface (8.2-1) ... 80s Selecting previously unselected package python3-greenlet. 80s Preparing to unpack .../60-python3-greenlet_3.2.4-3_arm64.deb ... 80s Unpacking python3-greenlet (3.2.4-3) ... 80s Selecting previously unselected package python3-gevent. 80s Preparing to unpack .../61-python3-gevent_24.11.1-1build2_arm64.deb ... 80s Unpacking python3-gevent (24.11.1-1build2) ... 80s Selecting previously unselected package python3-tango. 80s Preparing to unpack .../62-python3-tango_10.0.2-3_arm64.deb ... 80s Unpacking python3-tango (10.0.2-3) ... 80s Selecting previously unselected package tango-test. 80s Preparing to unpack .../63-tango-test_10.0.2+dfsg1-4build1_arm64.deb ... 80s Unpacking tango-test (10.0.2+dfsg1-4build1) ... 80s Setting up python3-iniconfig (2.1.0-2) ... 80s Setting up libev4t64:arm64 (1:4.33-2.1build2) ... 80s Setting up libnorm1t64:arm64 (1.5.9+dfsg-4) ... 80s Setting up libprotobuf32t64:arm64 (3.21.12-15) ... 80s Setting up libboost-python1.88.0 (1.88.0-1.4ubuntu3) ... 80s Setting up libsodium23:arm64 (1.0.18-2) ... 80s Setting up python3-py (1.11.0-6) ... 81s Setting up python3-zope.event (6.0-2) ... 81s Setting up python3-zope.interface (8.2-1) ... 81s Setting up libpython3.14-minimal:arm64 (3.14.2-1) ... 81s Setting up linux-libc-dev:arm64 (6.18.0-9.9) ... 81s Setting up libabsl20240722:arm64 (20240722.0-4ubuntu1) ... 81s Setting up python3-psutil (7.1.0-1ubuntu1) ... 82s Setting up libpgm-5.3-0t64:arm64 (5.3.128~dfsg-2.1build2) ... 82s Setting up libblas3:arm64 (3.12.1-7ubuntu1) ... 82s update-alternatives: using /usr/lib/aarch64-linux-gnu/blas/libblas.so.3 to provide /usr/lib/aarch64-linux-gnu/libblas.so.3 (libblas.so.3-aarch64-linux-gnu) in auto mode 82s Setting up rpcsvc-proto (1.4.3-1build1) ... 82s Setting up python3-greenlet (3.2.4-3) ... 82s Setting up libcares2:arm64 (1.34.6-1) ... 82s Setting up python3-numpy-dev:arm64 (1:2.3.5+ds-3) ... 82s Setting up libjpeg-turbo8:arm64 (2.1.5-4ubuntu2) ... 82s Setting up libomnithread4:arm64 (4.3.3+ds1-1) ... 82s Setting up libgfortran5:arm64 (15.2.0-12ubuntu1) ... 82s Setting up python3-pluggy (1.6.0-2) ... 82s Setting up libcrypt-dev:arm64 (1:4.5.1-1) ... 82s Setting up libabsl20260107:arm64 (20260107.0-0ubuntu2) ... 82s Setting up libprotoc32t64:arm64 (3.21.12-15) ... 82s Setting up libc-dev-bin (2.42-2ubuntu4) ... 82s Setting up python3.14-minimal (3.14.2-1) ... 83s Setting up libjpeg8:arm64 (8c-2ubuntu11) ... 83s Setting up libre2-11:arm64 (20250805-1build1) ... 83s Setting up liblapack3:arm64 (3.12.1-7ubuntu1) ... 83s update-alternatives: using /usr/lib/aarch64-linux-gnu/lapack/liblapack.so.3 to provide /usr/lib/aarch64-linux-gnu/liblapack.so.3 (liblapack.so.3-aarch64-linux-gnu) in auto mode 83s Setting up libzmq5:arm64 (4.3.5-1build3) ... 83s Setting up libomniorb4-3t64:arm64 (4.3.3+ds1-1) ... 83s Setting up libpython3.14-stdlib:arm64 (3.14.2-1) ... 83s Setting up python3-pytest (9.0.2-2) ... 84s Setting up python3-gevent (24.11.1-1build2) ... 84s /usr/lib/python3/dist-packages/gevent/_ffi/loop.py:226: SyntaxWarning: 'return' in a 'finally' block 84s return # pylint:disable=lost-exception,return-in-finally 84s Setting up python3-pytest-forked (1.6.0-5) ... 85s Setting up libgrpc29t64:arm64 (1.51.1-7) ... 85s Setting up python3-numpy (1:2.3.5+ds-3) ... 89s Setting up python3-pytest-asyncio (1.3.0-1) ... 89s Setting up libpython3.14:arm64 (3.14.2-1) ... 89s Setting up libc6-dev:arm64 (2.42-2ubuntu4) ... 89s Setting up libcos4-3:arm64 (4.3.3+ds1-1) ... 89s Setting up python3.14 (3.14.2-1) ... 90s Setting up python3-pytest-rerunfailures (16.1-1) ... 90s Setting up libgrpc++1.51t64:arm64 (1.51.1-7) ... 90s Setting up python3-all (3.13.9-3) ... 90s Setting up libexpat1-dev:arm64 (2.7.4-1) ... 90s Setting up opentelemetry-cpp:arm64 (1.23.0-3build1) ... 90s Setting up zlib1g-dev:arm64 (1:1.3.dfsg+really1.3.1-1ubuntu2) ... 90s Setting up libpython3.14-dev:arm64 (3.14.2-1) ... 90s Setting up tango-common (10.0.2+dfsg1-4build1) ... 90s Adding group tango....done 90s Adding system user tango....done 91s Setting up libtango10:arm64 (10.0.2+dfsg1-4build1) ... 91s Setting up python3.14-dev (3.14.2-1) ... 91s Setting up libtango-tools (10.0.2+dfsg1-4build1) ... 91s Setting up python3-tango (10.0.2-3) ... 91s Setting up libpython3.13-dev:arm64 (3.13.11-1) ... 91s Setting up tango-starter (10.0.2+dfsg1-4build1) ... 91s Created symlink '/etc/systemd/system/multi-user.target.wants/tango-starter.service' → '/usr/lib/systemd/system/tango-starter.service'. 92s Failed to start tango-starter.service: Unit tango-db.service not found. 92s Could not execute systemctl: at /usr/bin/deb-systemd-invoke line 148. 92s Setting up libpython3-dev:arm64 (3.13.9-3) ... 92s Setting up tango-test (10.0.2+dfsg1-4build1) ... 92s Setting up python3.13-dev (3.13.11-1) ... 92s Setting up libpython3-all-dev:arm64 (3.13.9-3) ... 92s Setting up python3-dev (3.13.9-3) ... 92s Setting up python3-all-dev (3.13.9-3) ... 92s Processing triggers for systemd (259-1ubuntu3) ... 92s Processing triggers for man-db (2.13.1-1) ... 92s Processing triggers for libc-bin (2.42-2ubuntu4) ... 93s autopkgtest [02:44:36]: 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 93s autopkgtest [02:44:36]: test command1: [----------------------- 93s Testing with python3.14: 94s ============================= test session starts ============================== 94s platform linux -- Python 3.14.2, pytest-9.0.2, pluggy-1.6.0 -- /usr/bin/python3.14 94s cachedir: .pytest_cache 94s rootdir: /tmp/autopkgtest.ikLEMg/autopkgtest_tmp 94s plugins: forked-1.6.0, typeguard-4.4.4, rerunfailures-16.1, asyncio-1.3.0 94s asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function 95s collecting ... collected 1170 items 95s 95s tests/test_api_util.py::test_get_env_var PASSED [ 0%] 95s tests/test_async.py::test_green_mode_kwarg_for_proxy_methods FAILED [ 0%] 96s tests/test_async.py::test_async_attribute_polled PASSED [ 0%] 96s tests/test_async.py::test_async_attribute_with_callback[poll] SKIPPED [ 0%] 96s tests/test_async.py::test_async_attribute_with_callback[push] SKIPPED [ 0%] 96s tests/test_async.py::test_async_command_polled PASSED [ 0%] 96s tests/test_async.py::test_async_command_with_polled_callback[cmd_ok-123-123-False] PASSED [ 0%] 97s tests/test_async.py::test_async_command_with_polled_callback[cmd_timeout-123-None-True] PASSED [ 0%] 98s tests/test_async.py::test_async_command_with_polled_callback[cmd_exception-123-None-True] PASSED [ 0%] 98s tests/test_async.py::test_async_attribute_read_with_polled_callback[attr_ok-argout0-False] PASSED [ 0%] 99s tests/test_async.py::test_async_attribute_read_with_polled_callback[attr_timeout-None-True] PASSED [ 0%] 100s tests/test_async.py::test_async_attribute_read_with_polled_callback[attr_exception-argout2-False] PASSED [ 1%] 100s tests/test_async.py::test_async_attribute_write_with_polled_callback[attr_ok-False] PASSED [ 1%] 101s tests/test_async.py::test_async_attribute_write_with_polled_callback[attr_timeout-True] PASSED [ 1%] 102s tests/test_async.py::test_async_attribute_write_with_polled_callback[attr_exception-False] PASSED [ 1%] 102s tests/test_async.py::test_async_command_with_pushed_callback[cmd_ok-123-123-False] PASSED [ 1%] 103s tests/test_async.py::test_async_command_with_pushed_callback[cmd_timeout-123-None-True] PASSED [ 1%] 104s tests/test_async.py::test_async_command_with_pushed_callback[cmd_exception-123-None-True] PASSED [ 1%] 105s tests/test_async.py::test_async_attribute_read_with_pushed_callback[attr_ok-argout0-False] PASSED [ 1%] 105s tests/test_async.py::test_async_attribute_read_with_pushed_callback[attr_timeout-None-True] PASSED [ 1%] 106s tests/test_async.py::test_async_attribute_read_with_pushed_callback[attr_exception-argout2-False] PASSED [ 1%] 107s tests/test_async.py::test_async_attribute_write_with_pushed_callback[attr_ok-False] PASSED [ 1%] 107s tests/test_async.py::test_async_attribute_write_with_pushed_callback[attr_timeout-True] PASSED [ 1%] 108s tests/test_async.py::test_async_attribute_write_with_pushed_callback[attr_exception-False] PASSED [ 2%] 108s tests/test_async.py::test_async_exception_in_callback PASSED [ 2%] 110s tests/test_attrconfeventdata.py::test_attribute_configuration_event PASSED [ 2%] 110s tests/test_attrconfeventdata.py::test_attribute_configuration_event_set_errors PASSED [ 2%] 110s tests/test_attribute_proxy.py::test_ping[scalar_int] PASSED [ 2%] 110s tests/test_attribute_proxy.py::test_ping[spectrum_str] PASSED [ 2%] 110s tests/test_attribute_proxy.py::test_ping[image_float] PASSED [ 2%] 110s tests/test_attribute_proxy.py::test_state_status[scalar_int] PASSED [ 2%] 110s tests/test_attribute_proxy.py::test_state_status[spectrum_str] PASSED [ 2%] 110s tests/test_attribute_proxy.py::test_state_status[image_float] PASSED [ 2%] 110s tests/test_attribute_proxy.py::test_read_write_attribute[scalar_int] PASSED [ 2%] 110s tests/test_attribute_proxy.py::test_read_write_attribute[spectrum_str] PASSED [ 2%] 110s tests/test_attribute_proxy.py::test_read_write_attribute[image_float] PASSED [ 3%] 111s tests/test_attribute_proxy.py::test_attribute_poll[scalar_int] PASSED [ 3%] 112s tests/test_attribute_proxy.py::test_attribute_poll[spectrum_str] PASSED [ 3%] 113s tests/test_attribute_proxy.py::test_attribute_poll[image_float] PASSED [ 3%] 113s tests/test_attribute_proxy.py::test_read_write_attribute_async[scalar_int] PASSED [ 3%] 113s tests/test_attribute_proxy.py::test_read_write_attribute_async[spectrum_str] PASSED [ 3%] 113s tests/test_attribute_proxy.py::test_read_write_attribute_async[image_float] PASSED [ 3%] 113s tests/test_attribute_proxy.py::test_event[Synchronous] SKIPPED (This...) [ 3%] 113s tests/test_attribute_proxy.py::test_event[Futures] SKIPPED (This tes...) [ 3%] 113s tests/test_attribute_proxy.py::test_event[Gevent] SKIPPED (This test...) [ 3%] 113s tests/test_attribute_proxy.py::test_event[Asyncio] SKIPPED (This tes...) [ 3%] 113s tests/test_attributes.py::test_read_write_attribute[int-Synchronous] PASSED [ 4%] 114s tests/test_attributes.py::test_read_write_attribute[int-Asyncio] FAILED [ 4%] 114s tests/test_attributes.py::test_read_write_attribute[int-Gevent] PASSED [ 4%] 114s tests/test_attributes.py::test_read_write_attribute[float-Synchronous] PASSED [ 4%] 114s tests/test_attributes.py::test_read_write_attribute[float-Asyncio] FAILED [ 4%] 114s tests/test_attributes.py::test_read_write_attribute[float-Gevent] PASSED [ 4%] 114s tests/test_attributes.py::test_read_write_attribute[str-Synchronous] PASSED [ 4%] 114s tests/test_attributes.py::test_read_write_attribute[str-Asyncio] FAILED [ 4%] 115s tests/test_attributes.py::test_read_write_attribute[str-Gevent] PASSED [ 4%] 115s tests/test_attributes.py::test_read_write_attribute[bool-Synchronous] PASSED [ 4%] 115s tests/test_attributes.py::test_read_write_attribute[bool-Asyncio] FAILED [ 4%] 115s tests/test_attributes.py::test_read_write_attribute[bool-Gevent] PASSED [ 4%] 115s tests/test_attributes.py::test_read_write_attribute[(int,)-Synchronous] PASSED [ 5%] 115s tests/test_attributes.py::test_read_write_attribute[(int,)-Asyncio] FAILED [ 5%] 115s tests/test_attributes.py::test_read_write_attribute[(int,)-Gevent] PASSED [ 5%] 115s tests/test_attributes.py::test_read_write_attribute[(float,)-Synchronous] PASSED [ 5%] 116s tests/test_attributes.py::test_read_write_attribute[(float,)-Asyncio] FAILED [ 5%] 116s tests/test_attributes.py::test_read_write_attribute[(float,)-Gevent] PASSED [ 5%] 116s tests/test_attributes.py::test_read_write_attribute[(str,)-Synchronous] PASSED [ 5%] 116s tests/test_attributes.py::test_read_write_attribute[(str,)-Asyncio] FAILED [ 5%] 116s tests/test_attributes.py::test_read_write_attribute[(str,)-Gevent] PASSED [ 5%] 116s tests/test_attributes.py::test_read_write_attribute[(bool,)-Synchronous] PASSED [ 5%] 116s tests/test_attributes.py::test_read_write_attribute[(bool,)-Asyncio] FAILED [ 5%] 116s tests/test_attributes.py::test_read_write_attribute[(bool,)-Gevent] PASSED [ 5%] 116s tests/test_attributes.py::test_read_write_attribute[((int,),)-Synchronous] PASSED [ 6%] 117s tests/test_attributes.py::test_read_write_attribute[((int,),)-Asyncio] FAILED [ 6%] 117s tests/test_attributes.py::test_read_write_attribute[((int,),)-Gevent] PASSED [ 6%] 117s tests/test_attributes.py::test_read_write_attribute[((float,),)-Synchronous] PASSED [ 6%] 117s tests/test_attributes.py::test_read_write_attribute[((float,),)-Asyncio] FAILED [ 6%] 117s tests/test_attributes.py::test_read_write_attribute[((float,),)-Gevent] PASSED [ 6%] 117s tests/test_attributes.py::test_read_write_attribute[((str,),)-Synchronous] PASSED [ 6%] 117s tests/test_attributes.py::test_read_write_attribute[((str,),)-Asyncio] FAILED [ 6%] 118s tests/test_attributes.py::test_read_write_attribute[((str,),)-Gevent] PASSED [ 6%] 118s tests/test_attributes.py::test_read_write_attribute[((bool,),)-Synchronous] PASSED [ 6%] 118s tests/test_attributes.py::test_read_write_attribute[((bool,),)-Asyncio] FAILED [ 6%] 118s tests/test_attributes.py::test_read_write_attribute[((bool,),)-Gevent] PASSED [ 7%] 118s tests/test_attributes.py::test_wrong_encoding_string PASSED [ 7%] 118s tests/test_attributes.py::test_attribute_declared_with_typing[int-True] PASSED [ 7%] 118s tests/test_attributes.py::test_attribute_declared_with_typing[int-False] PASSED [ 7%] 118s tests/test_attributes.py::test_attribute_declared_with_typing[float-True] PASSED [ 7%] 118s tests/test_attributes.py::test_attribute_declared_with_typing[float-False] PASSED [ 7%] 118s tests/test_attributes.py::test_attribute_declared_with_typing[str-True] PASSED [ 7%] 118s tests/test_attributes.py::test_attribute_declared_with_typing[str-False] PASSED [ 7%] 118s tests/test_attributes.py::test_attribute_declared_with_typing[bool-True] PASSED [ 7%] 118s tests/test_attributes.py::test_attribute_declared_with_typing[bool-False] PASSED [ 7%] 118s tests/test_attributes.py::test_attribute_declared_with_typing[(int,)-True] PASSED [ 7%] 119s tests/test_attributes.py::test_attribute_declared_with_typing[(int,)-False] PASSED [ 7%] 119s tests/test_attributes.py::test_attribute_declared_with_typing[(float,)-True] PASSED [ 8%] 119s tests/test_attributes.py::test_attribute_declared_with_typing[(float,)-False] PASSED [ 8%] 119s tests/test_attributes.py::test_attribute_declared_with_typing[(str,)-True] PASSED [ 8%] 119s tests/test_attributes.py::test_attribute_declared_with_typing[(str,)-False] PASSED [ 8%] 119s tests/test_attributes.py::test_attribute_declared_with_typing[(bool,)-True] PASSED [ 8%] 119s tests/test_attributes.py::test_attribute_declared_with_typing[(bool,)-False] PASSED [ 8%] 119s tests/test_attributes.py::test_attribute_declared_with_typing[((int,),)-True] PASSED [ 8%] 119s tests/test_attributes.py::test_attribute_declared_with_typing[((int,),)-False] PASSED [ 8%] 119s tests/test_attributes.py::test_attribute_declared_with_typing[((float,),)-True] PASSED [ 8%] 119s tests/test_attributes.py::test_attribute_declared_with_typing[((float,),)-False] PASSED [ 8%] 119s tests/test_attributes.py::test_attribute_declared_with_typing[((str,),)-True] PASSED [ 8%] 119s tests/test_attributes.py::test_attribute_declared_with_typing[((str,),)-False] PASSED [ 8%] 119s tests/test_attributes.py::test_attribute_declared_with_typing[((bool,),)-True] PASSED [ 9%] 119s tests/test_attributes.py::test_attribute_declared_with_typing[((bool,),)-False] PASSED [ 9%] 119s tests/test_attributes.py::test_attribute_self_typed_with_not_defined_name PASSED [ 9%] 120s tests/test_attributes.py::test_read_write_attribute_with_unbound_functions PASSED [ 9%] 120s tests/test_attributes.py::test_read_write_attribute_decorated_methods[Synchronous] PASSED [ 9%] 120s tests/test_attributes.py::test_read_write_attribute_decorated_methods[Asyncio] FAILED [ 9%] 120s tests/test_attributes.py::test_read_write_attribute_decorated_methods[Gevent] PASSED [ 9%] 120s tests/test_attributes.py::test_read_write_wvalue_attribute[int-True] PASSED [ 9%] 120s tests/test_attributes.py::test_read_write_wvalue_attribute[int-False] PASSED [ 9%] 120s tests/test_attributes.py::test_read_write_wvalue_attribute[float-True] PASSED [ 9%] 120s tests/test_attributes.py::test_read_write_wvalue_attribute[float-False] PASSED [ 9%] 120s tests/test_attributes.py::test_read_write_wvalue_attribute[str-True] PASSED [ 10%] 120s tests/test_attributes.py::test_read_write_wvalue_attribute[str-False] PASSED [ 10%] 120s tests/test_attributes.py::test_read_write_wvalue_attribute[bool-True] PASSED [ 10%] 120s tests/test_attributes.py::test_read_write_wvalue_attribute[bool-False] PASSED [ 10%] 120s tests/test_attributes.py::test_read_write_wvalue_attribute[(int,)-True] PASSED [ 10%] 120s tests/test_attributes.py::test_read_write_wvalue_attribute[(int,)-False] PASSED [ 10%] 120s tests/test_attributes.py::test_read_write_wvalue_attribute[(float,)-True] PASSED [ 10%] 120s tests/test_attributes.py::test_read_write_wvalue_attribute[(float,)-False] PASSED [ 10%] 121s tests/test_attributes.py::test_read_write_wvalue_attribute[(str,)-True] PASSED [ 10%] 121s tests/test_attributes.py::test_read_write_wvalue_attribute[(str,)-False] PASSED [ 10%] 121s tests/test_attributes.py::test_read_write_wvalue_attribute[(bool,)-True] PASSED [ 10%] 121s tests/test_attributes.py::test_read_write_wvalue_attribute[(bool,)-False] PASSED [ 10%] 121s tests/test_attributes.py::test_read_write_wvalue_attribute[((int,),)-True] PASSED [ 11%] 121s tests/test_attributes.py::test_read_write_wvalue_attribute[((int,),)-False] PASSED [ 11%] 121s tests/test_attributes.py::test_read_write_wvalue_attribute[((float,),)-True] PASSED [ 11%] 121s tests/test_attributes.py::test_read_write_wvalue_attribute[((float,),)-False] PASSED [ 11%] 121s tests/test_attributes.py::test_read_write_wvalue_attribute[((str,),)-True] PASSED [ 11%] 121s tests/test_attributes.py::test_read_write_wvalue_attribute[((str,),)-False] PASSED [ 11%] 121s tests/test_attributes.py::test_read_write_wvalue_attribute[((bool,),)-True] PASSED [ 11%] 121s tests/test_attributes.py::test_read_write_wvalue_attribute[((bool,),)-False] PASSED [ 11%] 121s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Numpy-float] PASSED [ 11%] 121s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Numpy-int] PASSED [ 11%] 121s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Numpy-str] PASSED [ 11%] 121s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Numpy-bool] PASSED [ 11%] 121s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Tuple-float] PASSED [ 12%] 121s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Tuple-int] PASSED [ 12%] 121s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Tuple-str] PASSED [ 12%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Tuple-bool] PASSED [ 12%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.List-float] PASSED [ 12%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.List-int] PASSED [ 12%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.List-str] PASSED [ 12%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.List-bool] PASSED [ 12%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Bytes-float] PASSED [ 12%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Bytes-int] PASSED [ 12%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Bytes-str] XFAIL [ 12%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Bytes-bool] PASSED [ 12%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.ByteArray-float] PASSED [ 13%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.ByteArray-int] PASSED [ 13%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.ByteArray-str] XFAIL [ 13%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.ByteArray-bool] PASSED [ 13%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.String-float] PASSED [ 13%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.String-int] PASSED [ 13%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.String-str] XFAIL [ 13%] 122s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.String-bool] PASSED [ 13%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-float-Device_4Impl] PASSED [ 13%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-float-Device_5Impl] PASSED [ 13%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-float-Device_6Impl] PASSED [ 13%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-float-LatestDeviceImpl] PASSED [ 14%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-int-Device_4Impl] PASSED [ 14%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-int-Device_5Impl] PASSED [ 14%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-int-Device_6Impl] PASSED [ 14%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-int-LatestDeviceImpl] PASSED [ 14%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-str-Device_4Impl] PASSED [ 14%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-str-Device_5Impl] PASSED [ 14%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-str-Device_6Impl] PASSED [ 14%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-str-LatestDeviceImpl] PASSED [ 14%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-bool-Device_4Impl] PASSED [ 14%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-bool-Device_5Impl] PASSED [ 14%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-bool-Device_6Impl] PASSED [ 14%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-bool-LatestDeviceImpl] PASSED [ 15%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-float-Device_4Impl] PASSED [ 15%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-float-Device_5Impl] PASSED [ 15%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-float-Device_6Impl] PASSED [ 15%] 123s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-float-LatestDeviceImpl] PASSED [ 15%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-int-Device_4Impl] PASSED [ 15%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-int-Device_5Impl] PASSED [ 15%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-int-Device_6Impl] PASSED [ 15%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-int-LatestDeviceImpl] PASSED [ 15%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-str-Device_4Impl] PASSED [ 15%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-str-Device_5Impl] PASSED [ 15%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-str-Device_6Impl] PASSED [ 15%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-str-LatestDeviceImpl] PASSED [ 16%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-bool-Device_4Impl] PASSED [ 16%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-bool-Device_5Impl] PASSED [ 16%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-bool-Device_6Impl] PASSED [ 16%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-bool-LatestDeviceImpl] PASSED [ 16%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-float-Device_4Impl] PASSED [ 16%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-float-Device_5Impl] PASSED [ 16%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-float-Device_6Impl] PASSED [ 16%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-float-LatestDeviceImpl] PASSED [ 16%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-int-Device_4Impl] PASSED [ 16%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-int-Device_5Impl] PASSED [ 16%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-int-Device_6Impl] PASSED [ 17%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-int-LatestDeviceImpl] PASSED [ 17%] 124s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-str-Device_4Impl] PASSED [ 17%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-str-Device_5Impl] PASSED [ 17%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-str-Device_6Impl] PASSED [ 17%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-str-LatestDeviceImpl] PASSED [ 17%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-bool-Device_4Impl] PASSED [ 17%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-bool-Device_5Impl] PASSED [ 17%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-bool-Device_6Impl] PASSED [ 17%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-bool-LatestDeviceImpl] PASSED [ 17%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-float-Device_4Impl] PASSED [ 17%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-float-Device_5Impl] PASSED [ 17%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-float-Device_6Impl] PASSED [ 18%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-float-LatestDeviceImpl] PASSED [ 18%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-int-Device_4Impl] PASSED [ 18%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-int-Device_5Impl] PASSED [ 18%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-int-Device_6Impl] PASSED [ 18%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-int-LatestDeviceImpl] PASSED [ 18%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-str-Device_4Impl] XFAIL [ 18%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-str-Device_5Impl] XFAIL [ 18%] 125s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-str-Device_6Impl] XFAIL [ 18%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-str-LatestDeviceImpl] XFAIL [ 18%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-bool-Device_4Impl] PASSED [ 18%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-bool-Device_5Impl] PASSED [ 18%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-bool-Device_6Impl] PASSED [ 19%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-bool-LatestDeviceImpl] PASSED [ 19%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-float-Device_4Impl] PASSED [ 19%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-float-Device_5Impl] PASSED [ 19%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-float-Device_6Impl] PASSED [ 19%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-float-LatestDeviceImpl] PASSED [ 19%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-int-Device_4Impl] PASSED [ 19%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-int-Device_5Impl] PASSED [ 19%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-int-Device_6Impl] PASSED [ 19%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-int-LatestDeviceImpl] PASSED [ 19%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-str-Device_4Impl] XFAIL [ 19%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-str-Device_5Impl] XFAIL [ 20%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-str-Device_6Impl] XFAIL [ 20%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-str-LatestDeviceImpl] XFAIL [ 20%] 126s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-bool-Device_4Impl] PASSED [ 20%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-bool-Device_5Impl] PASSED [ 20%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-bool-Device_6Impl] PASSED [ 20%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-bool-LatestDeviceImpl] PASSED [ 20%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-float-Device_4Impl] PASSED [ 20%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-float-Device_5Impl] PASSED [ 20%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-float-Device_6Impl] PASSED [ 20%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-float-LatestDeviceImpl] PASSED [ 20%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-int-Device_4Impl] PASSED [ 20%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-int-Device_5Impl] PASSED [ 21%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-int-Device_6Impl] PASSED [ 21%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-int-LatestDeviceImpl] PASSED [ 21%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-str-Device_4Impl] XFAIL [ 21%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-str-Device_5Impl] XFAIL [ 21%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-str-Device_6Impl] XFAIL [ 21%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-str-LatestDeviceImpl] XFAIL [ 21%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-bool-Device_4Impl] PASSED [ 21%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-bool-Device_5Impl] PASSED [ 21%] 127s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-bool-Device_6Impl] PASSED [ 21%] 128s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-bool-LatestDeviceImpl] PASSED [ 21%] 128s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SCALAR-state] PASSED [ 21%] 128s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SCALAR-DevState0] PASSED [ 22%] 128s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SCALAR-DevState1] PASSED [ 22%] 128s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SPECTRUM-state] PASSED [ 22%] 128s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SPECTRUM-DevState0] PASSED [ 22%] 128s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SPECTRUM-DevState1] PASSED [ 22%] 128s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[IMAGE-state] PASSED [ 22%] 128s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[IMAGE-DevState0] PASSED [ 22%] 128s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[IMAGE-DevState1] PASSED [ 22%] 128s tests/test_attributes.py::test_read_write_attribute_enum[SCALAR] PASSED [ 22%] 128s tests/test_attributes.py::test_read_write_attribute_enum[SPECTRUM] PASSED [ 22%] 128s tests/test_attributes.py::test_read_write_attribute_enum[IMAGE] PASSED [ 22%] 128s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[SCALAR-DevState] PASSED [ 22%] 128s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[SCALAR-GoodEnum] PASSED [ 23%] 128s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[SPECTRUM-DevState] PASSED [ 23%] 128s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[SPECTRUM-GoodEnum] PASSED [ 23%] 128s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[IMAGE-DevState] PASSED [ 23%] 128s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[IMAGE-GoodEnum] PASSED [ 23%] 129s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[int] PASSED [ 23%] 129s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[float] PASSED [ 23%] 129s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[str] PASSED [ 23%] 129s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[bool] PASSED [ 23%] 129s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[(int,)] PASSED [ 23%] 129s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[(float,)] PASSED [ 23%] 129s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[(str,)] PASSED [ 24%] 129s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[(bool,)] PASSED [ 24%] 129s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[((int,),)] PASSED [ 24%] 129s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[((float,),)] PASSED [ 24%] 129s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[((str,),)] PASSED [ 24%] 129s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[((bool,),)] PASSED [ 24%] 129s tests/test_attributes.py::test_read_enum_attribute_with_invalid_quality_is_none PASSED [ 24%] 129s tests/test_attributes.py::test_wrong_attribute_read PASSED [ 24%] 129s tests/test_attributes.py::test_attribute_access_with_default_method_names PASSED [ 24%] 129s tests/test_attributes.py::test_read_write_dynamic_attribute[low_level_read-Synchronous] PASSED [ 24%] 130s tests/test_attributes.py::test_read_write_dynamic_attribute[low_level_read-Asyncio] FAILED [ 24%] 130s tests/test_attributes.py::test_read_write_dynamic_attribute[low_level_read-Gevent] PASSED [ 24%] 130s tests/test_attributes.py::test_read_write_dynamic_attribute[high_level_read-Synchronous] PASSED [ 25%] 130s tests/test_attributes.py::test_read_write_dynamic_attribute[high_level_read-Asyncio] FAILED [ 25%] 130s tests/test_attributes.py::test_read_write_dynamic_attribute[high_level_read-Gevent] PASSED [ 25%] 130s tests/test_attributes.py::test_async_add_remove_dynamic_attribute FAILED [ 25%] 130s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[int] PASSED [ 25%] 130s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[float] PASSED [ 25%] 130s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[str] PASSED [ 25%] 130s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[bool] PASSED [ 25%] 131s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[(int,)] PASSED [ 25%] 131s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[(float,)] PASSED [ 25%] 131s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[(str,)] PASSED [ 25%] 131s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[(bool,)] PASSED [ 25%] 131s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[((int,),)] PASSED [ 26%] 131s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[((float,),)] PASSED [ 26%] 131s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[((str,),)] PASSED [ 26%] 131s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[((bool,),)] PASSED [ 26%] 131s tests/test_attributes.py::test_dynamic_attribute_self_typed_with_not_defined_name PASSED [ 26%] 131s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[bool, SCALAR] PASSED [ 26%] 131s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[bool], SPECTRUM] PASSED [ 26%] 131s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[uint8, SCALAR] PASSED [ 26%] 131s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[uint8], SPECTRUM] PASSED [ 26%] 131s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[int16, SCALAR] PASSED [ 26%] 131s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[int16], SPECTRUM] PASSED [ 26%] 131s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[uint16, SCALAR] PASSED [ 27%] 131s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[uint16], SPECTRUM] PASSED [ 27%] 131s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[int32, SCALAR] PASSED [ 27%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[int32], SPECTRUM] PASSED [ 27%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[uint32, SCALAR] PASSED [ 27%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[uint32], SPECTRUM] PASSED [ 27%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[int64, SCALAR] PASSED [ 27%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[int64], SPECTRUM] PASSED [ 27%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[uint64, SCALAR] PASSED [ 27%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[uint64], SPECTRUM] PASSED [ 27%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[float64, SCALAR] PASSED [ 27%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[float64], SPECTRUM] PASSED [ 27%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[float32, SCALAR] PASSED [ 28%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[float32], SPECTRUM] PASSED [ 28%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[bool], IMAGE] PASSED [ 28%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[uint8], IMAGE] PASSED [ 28%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[int16], IMAGE] PASSED [ 28%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[uint16], IMAGE] PASSED [ 28%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[int32], IMAGE] PASSED [ 28%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[uint32], IMAGE] PASSED [ 28%] 132s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[int64], IMAGE] PASSED [ 28%] 133s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[uint64], IMAGE] PASSED [ 28%] 133s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[float64], IMAGE] PASSED [ 28%] 133s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[float32], IMAGE] PASSED [ 28%] 133s tests/test_attributes.py::test_attribute_wrong_declared_with_numpy_typing[RuntimeError: AttrDataFormat has to be specified] PASSED [ 29%] 133s tests/test_attributes.py::test_attribute_wrong_declared_with_numpy_typing[DevFailed: Maximum y dim. wrongly defined] PASSED [ 29%] 133s tests/test_attributes.py::test_attribute_wrong_declared_with_numpy_typing[TypeError: No registered converter] PASSED [ 29%] 133s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_default_names[Synchronous] PASSED [ 29%] 133s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_default_names[Asyncio] FAILED [ 29%] 133s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_default_names[Gevent] PASSED [ 29%] 133s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_user_names[Synchronous] PASSED [ 29%] 133s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_user_names[Asyncio] FAILED [ 29%] 133s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_user_names[Gevent] PASSED [ 29%] 134s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_shared_user_functions PASSED [ 29%] 134s tests/test_attributes.py::test_read_write_dynamic_attribute_enum[SCALAR] PASSED [ 29%] 134s tests/test_attributes.py::test_read_write_dynamic_attribute_enum[SPECTRUM] PASSED [ 30%] 134s tests/test_attributes.py::test_read_write_dynamic_attribute_enum[IMAGE] PASSED [ 30%] 134s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[SCALAR-DevState] PASSED [ 30%] 134s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[SCALAR-GoodEnum] PASSED [ 30%] 134s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[SPECTRUM-DevState] PASSED [ 30%] 134s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[SPECTRUM-GoodEnum] PASSED [ 30%] 134s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[IMAGE-DevState] PASSED [ 30%] 134s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[IMAGE-GoodEnum] PASSED [ 30%] 134s tests/test_attributes.py::test_read_write_dynamic_attribute_is_allowed_with_async[Synchronous] PASSED [ 30%] 134s tests/test_attributes.py::test_read_write_dynamic_attribute_is_allowed_with_async[Asyncio] FAILED [ 30%] 134s tests/test_attributes.py::test_read_write_dynamic_attribute_is_allowed_with_async[Gevent] PASSED [ 30%] 134s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Synchronous-True] PASSED [ 30%] 134s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Synchronous-False] PASSED [ 31%] 135s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Asyncio-True] FAILED [ 31%] 135s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Asyncio-False] FAILED [ 31%] 135s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Gevent-True] PASSED [ 31%] 135s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Gevent-False] PASSED [ 31%] 135s tests/test_attributes.py::test_dynamic_attribute_using_classic_api_like_sardana[Device_4Impl] PASSED [ 31%] 135s tests/test_attributes.py::test_dynamic_attribute_using_classic_api_like_sardana[Device_5Impl] PASSED [ 31%] 135s tests/test_attributes.py::test_dynamic_attribute_using_classic_api_like_sardana[Device_6Impl] PASSED [ 31%] 135s tests/test_attributes.py::test_dynamic_attribute_using_classic_api_like_sardana[LatestDeviceImpl] PASSED [ 31%] 135s tests/test_attributes.py::test_dynamic_attribute_with_unbound_functions[True-low_level] PASSED [ 31%] 135s tests/test_attributes.py::test_dynamic_attribute_with_unbound_functions[True-high_level] PASSED [ 31%] 135s tests/test_attributes.py::test_dynamic_attribute_with_unbound_functions[False-low_level] PASSED [ 31%] 136s tests/test_attributes.py::test_dynamic_attribute_with_unbound_functions[False-high_level] PASSED [ 32%] 136s tests/test_attributes.py::test_attribute_decorators[Synchronous] PASSED [ 32%] 136s tests/test_attributes.py::test_attribute_decorators[Asyncio] FAILED [ 32%] 136s tests/test_attributes.py::test_attribute_decorators[Gevent] PASSED [ 32%] 136s tests/test_attributes.py::test_attribute_info_description PASSED [ 32%] 136s tests/test_attributes.py::test_read_only_dynamic_attribute_with_dummy_write_method[low_level_read] PASSED [ 32%] 136s tests/test_attributes.py::test_read_only_dynamic_attribute_with_dummy_write_method[high_level_read] PASSED [ 32%] 136s tests/test_attributes.py::test_dynamic_attribute_with_method_in_other_class PASSED [ 32%] 136s tests/test_attributes.py::test_polled_attribute[Synchronous] PASSED [ 32%] 136s tests/test_attributes.py::test_polled_attribute[Asyncio] FAILED [ 32%] 136s tests/test_attributes.py::test_polled_attribute[Gevent] PASSED [ 32%] 136s tests/test_attributes.py::test_read_write_dev_encoded[str] PASSED [ 32%] 137s tests/test_attributes.py::test_read_write_dev_encoded[bytes] PASSED [ 33%] 137s tests/test_attributes.py::test_read_write_dev_encoded[bytearray] PASSED [ 33%] 137s tests/test_attributes.py::test_dev_encoded_wrong_encoding PASSED [ 33%] 137s tests/test_attributes.py::test_set_value_None PASSED [ 33%] 137s tests/test_attributes.py::test_encoded_attribute[gray8] PASSED [ 33%] 137s tests/test_attributes.py::test_encoded_attribute[gray16] PASSED [ 33%] 137s tests/test_attributes.py::test_encoded_attribute[rgb24] PASSED [ 33%] 137s tests/test_attributes.py::test_encoded_attribute[jpeg_gray8] PASSED [ 33%] 137s tests/test_attributes.py::test_encoded_attribute[jpeg_rgb24] PASSED [ 33%] 137s tests/test_attributes.py::test_encoded_attribute[jpeg_rgb32] XFAIL (...) [ 33%] 140s tests/test_attributes.py::test_dev_encoded_memory_usage PASSED [ 33%] 140s tests/test_attributes.py::test_attribute_list PASSED [ 34%] 140s tests/test_auto_tango_allow_threads.py::test_dont_crash_with_nested_tango_allow_threads PASSED [ 34%] 140s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_DEVICE-True] PASSED [ 34%] 143s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_DEVICE-False] PASSED [ 34%] 143s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_CLASS-True] XFAIL [ 34%] 146s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_CLASS-False] PASSED [ 34%] 147s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_PROCESS-True] XFAIL [ 34%] 150s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_PROCESS-False] PASSED [ 34%] 150s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-NO_SYNC-True] PASSED [ 34%] 150s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-NO_SYNC-False] PASSED [ 34%] 150s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_DEVICE-True] PASSED [ 34%] 153s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_DEVICE-False] PASSED [ 34%] 153s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_CLASS-True] XFAIL [ 35%] 157s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_CLASS-False] PASSED [ 35%] 157s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_PROCESS-True] XFAIL [ 35%] 160s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_PROCESS-False] PASSED [ 35%] 160s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-NO_SYNC-True] PASSED [ 35%] 160s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-NO_SYNC-False] PASSED [ 35%] 160s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_DEVICE-True] PASSED [ 35%] 163s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_DEVICE-False] PASSED [ 35%] 163s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_CLASS-True] XFAIL [ 35%] 167s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_CLASS-False] PASSED [ 35%] 167s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_PROCESS-True] XFAIL [ 35%] 170s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_PROCESS-False] PASSED [ 35%] 170s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-NO_SYNC-True] PASSED [ 36%] 170s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-NO_SYNC-False] PASSED [ 36%] 173s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_DEVICE-True] PASSED [ 36%] 177s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_DEVICE-False] PASSED [ 36%] 180s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_CLASS-True] PASSED [ 36%] 183s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_CLASS-False] PASSED [ 36%] 186s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_PROCESS-True] PASSED [ 36%] 190s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_PROCESS-False] PASSED [ 36%] 190s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-NO_SYNC-True] PASSED [ 36%] 190s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-NO_SYNC-False] PASSED [ 36%] 193s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_DEVICE-True] PASSED [ 36%] 196s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_DEVICE-False] PASSED [ 37%] 200s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_CLASS-True] PASSED [ 37%] 203s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_CLASS-False] PASSED [ 37%] 206s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_PROCESS-True] PASSED [ 37%] 209s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_PROCESS-False] PASSED [ 37%] 209s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-NO_SYNC-True] PASSED [ 37%] 209s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-NO_SYNC-False] PASSED [ 37%] 213s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_DEVICE-True] PASSED [ 37%] 216s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_DEVICE-False] PASSED [ 37%] 219s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_CLASS-True] PASSED [ 37%] 222s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_CLASS-False] PASSED [ 37%] 226s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_PROCESS-True] PASSED [ 37%] 229s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_PROCESS-False] PASSED [ 38%] 229s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-NO_SYNC-True] PASSED [ 38%] 229s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-NO_SYNC-False] PASSED [ 38%] 229s tests/test_commands.py::test_identity_command[int-Synchronous] PASSED [ 38%] 229s tests/test_commands.py::test_identity_command[int-Asyncio] FAILED [ 38%] 229s tests/test_commands.py::test_identity_command[int-Gevent] PASSED [ 38%] 230s tests/test_commands.py::test_identity_command[float-Synchronous] PASSED [ 38%] 230s tests/test_commands.py::test_identity_command[float-Asyncio] FAILED [ 38%] 230s tests/test_commands.py::test_identity_command[float-Gevent] PASSED [ 38%] 230s tests/test_commands.py::test_identity_command[str-Synchronous] PASSED [ 38%] 230s tests/test_commands.py::test_identity_command[str-Asyncio] FAILED [ 38%] 230s tests/test_commands.py::test_identity_command[str-Gevent] PASSED [ 38%] 230s tests/test_commands.py::test_identity_command[bool-Synchronous] PASSED [ 39%] 230s tests/test_commands.py::test_identity_command[bool-Asyncio] FAILED [ 39%] 230s tests/test_commands.py::test_identity_command[bool-Gevent] PASSED [ 39%] 230s tests/test_commands.py::test_identity_command[(int,)-Synchronous] PASSED [ 39%] 231s tests/test_commands.py::test_identity_command[(int,)-Asyncio] FAILED [ 39%] 231s tests/test_commands.py::test_identity_command[(int,)-Gevent] PASSED [ 39%] 231s tests/test_commands.py::test_identity_command[(float,)-Synchronous] PASSED [ 39%] 231s tests/test_commands.py::test_identity_command[(float,)-Asyncio] FAILED [ 39%] 231s tests/test_commands.py::test_identity_command[(float,)-Gevent] PASSED [ 39%] 231s tests/test_commands.py::test_identity_command[(str,)-Synchronous] PASSED [ 39%] 231s tests/test_commands.py::test_identity_command[(str,)-Asyncio] FAILED [ 39%] 231s tests/test_commands.py::test_identity_command[(str,)-Gevent] PASSED [ 40%] 231s tests/test_commands.py::test_identity_command[(bool,)-Synchronous] XFAIL [ 40%] 231s tests/test_commands.py::test_identity_command[(bool,)-Asyncio] XFAIL [ 40%] 232s tests/test_commands.py::test_identity_command[(bool,)-Gevent] XFAIL [ 40%] 232s tests/test_commands.py::test_identity_command[DevVarLongStringArray-Synchronous] PASSED [ 40%] 232s tests/test_commands.py::test_identity_command[DevVarLongStringArray-Asyncio] FAILED [ 40%] 232s tests/test_commands.py::test_identity_command[DevVarLongStringArray-Gevent] PASSED [ 40%] 232s tests/test_commands.py::test_identity_command[DevVarDoubleStringArray-Synchronous] PASSED [ 40%] 232s tests/test_commands.py::test_identity_command[DevVarDoubleStringArray-Asyncio] FAILED [ 40%] 232s tests/test_commands.py::test_identity_command[DevVarDoubleStringArray-Gevent] PASSED [ 40%] 232s tests/test_commands.py::test_identity_command_with_typing[int] PASSED [ 40%] 232s tests/test_commands.py::test_identity_command_with_typing[float] PASSED [ 40%] 232s tests/test_commands.py::test_identity_command_with_typing[str] PASSED [ 41%] 232s tests/test_commands.py::test_identity_command_with_typing[bool] PASSED [ 41%] 232s tests/test_commands.py::test_identity_command_with_typing[(int,)] PASSED [ 41%] 232s tests/test_commands.py::test_identity_command_with_typing[(float,)] PASSED [ 41%] 233s tests/test_commands.py::test_identity_command_with_typing[(str,)] PASSED [ 41%] 233s tests/test_commands.py::test_identity_command_with_typing[(bool,)] XFAIL [ 41%] 233s tests/test_commands.py::test_identity_command_with_typing[DevVarLongStringArray] PASSED [ 41%] 233s tests/test_commands.py::test_identity_command_with_typing[DevVarDoubleStringArray] PASSED [ 41%] 233s tests/test_commands.py::test_devstate_command_with_typing PASSED [ 41%] 233s tests/test_commands.py::test_command_self_typed_with_not_defined_name PASSED [ 41%] 233s tests/test_commands.py::test_decorated_command[Synchronous] PASSED [ 41%] 233s tests/test_commands.py::test_decorated_command[Asyncio] FAILED [ 41%] 233s tests/test_commands.py::test_decorated_command[Gevent] PASSED [ 42%] 233s tests/test_commands.py::test_command_isallowed[Synchronous] PASSED [ 42%] 233s tests/test_commands.py::test_command_isallowed[Asyncio] FAILED [ 42%] 233s tests/test_commands.py::test_command_isallowed[Gevent] PASSED [ 42%] 233s tests/test_commands.py::test_dynamic_command[Synchronous-True] PASSED [ 42%] 234s tests/test_commands.py::test_dynamic_command[Synchronous-False] PASSED [ 42%] 234s tests/test_commands.py::test_dynamic_command[Asyncio-True] FAILED [ 42%] 234s tests/test_commands.py::test_dynamic_command[Asyncio-False] FAILED [ 42%] 234s tests/test_commands.py::test_dynamic_command[Gevent-True] PASSED [ 42%] 234s tests/test_commands.py::test_dynamic_command[Gevent-False] PASSED [ 42%] 234s tests/test_commands.py::test_identity_dynamic_command_with_typing[int] PASSED [ 42%] 234s tests/test_commands.py::test_identity_dynamic_command_with_typing[float] PASSED [ 42%] 234s tests/test_commands.py::test_identity_dynamic_command_with_typing[str] PASSED [ 43%] 234s tests/test_commands.py::test_identity_dynamic_command_with_typing[bool] PASSED [ 43%] 234s tests/test_commands.py::test_identity_dynamic_command_with_typing[(int,)] PASSED [ 43%] 234s tests/test_commands.py::test_identity_dynamic_command_with_typing[(float,)] PASSED [ 43%] 234s tests/test_commands.py::test_identity_dynamic_command_with_typing[(str,)] PASSED [ 43%] 234s tests/test_commands.py::test_identity_dynamic_command_with_typing[(bool,)] XFAIL [ 43%] 235s tests/test_commands.py::test_identity_dynamic_command_with_typing[DevVarLongStringArray] PASSED [ 43%] 235s tests/test_commands.py::test_identity_dynamic_command_with_typing[DevVarDoubleStringArray] PASSED [ 43%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[bool, SCALAR] PASSED [ 43%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[bool], SPECTRUM] PASSED [ 43%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[uint8, SCALAR] XFAIL [ 43%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[uint8], SPECTRUM] PASSED [ 44%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[int16, SCALAR] PASSED [ 44%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[int16], SPECTRUM] PASSED [ 44%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[uint16, SCALAR] PASSED [ 44%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[uint16], SPECTRUM] PASSED [ 44%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[int32, SCALAR] PASSED [ 44%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[int32], SPECTRUM] PASSED [ 44%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[uint32, SCALAR] PASSED [ 44%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[uint32], SPECTRUM] PASSED [ 44%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[int64, SCALAR] PASSED [ 44%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[int64], SPECTRUM] PASSED [ 44%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[uint64, SCALAR] PASSED [ 44%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[uint64], SPECTRUM] PASSED [ 45%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[float64, SCALAR] PASSED [ 45%] 235s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[float64], SPECTRUM] PASSED [ 45%] 236s tests/test_commands.py::test_identity_commands_with_numpy_typing[float32, SCALAR] PASSED [ 45%] 236s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[float32], SPECTRUM] PASSED [ 45%] 236s tests/test_commands.py::test_polled_command PASSED [ 45%] 236s tests/test_commands.py::test_wrong_command_result PASSED [ 45%] 236s tests/test_commands.py::test_command_info PASSED [ 45%] 236s tests/test_database.py::test_put_remove_attribute_properties PASSED [ 45%] 236s tests/test_databaseds.py::test_ping SKIPPED (This test is failing wh...) [ 45%] 236s tests/test_databaseds.py::test_status SKIPPED (This test is failing ...) [ 45%] 236s tests/test_databaseds.py::test_state SKIPPED (This test is failing w...) [ 45%] 236s tests/test_databaseds.py::test_device_property SKIPPED (This test is...) [ 46%] 236s tests/test_databaseds.py::test_info SKIPPED (This test is failing wh...) [ 46%] 236s tests/test_device_proxy.py::test_ping PASSED [ 46%] 236s tests/test_device_proxy.py::test_info PASSED [ 46%] 236s tests/test_device_proxy.py::test_read_attribute[State] PASSED [ 46%] 236s tests/test_device_proxy.py::test_read_attribute[Status] PASSED [ 46%] 236s tests/test_device_proxy.py::test_read_attribute[ampli] PASSED [ 46%] 236s tests/test_device_proxy.py::test_read_attribute[boolean_image] PASSED [ 46%] 237s tests/test_device_proxy.py::test_read_attribute[boolean_image_ro] PASSED [ 46%] 237s tests/test_device_proxy.py::test_read_attribute[boolean_scalar] PASSED [ 46%] 237s tests/test_device_proxy.py::test_read_attribute[boolean_spectrum] PASSED [ 46%] 237s tests/test_device_proxy.py::test_read_attribute[boolean_spectrum_ro] PASSED [ 47%] 237s tests/test_device_proxy.py::test_read_attribute[double_image] PASSED [ 47%] 237s tests/test_device_proxy.py::test_read_attribute[double_image_ro] PASSED [ 47%] 237s tests/test_device_proxy.py::test_read_attribute[double_scalar] PASSED [ 47%] 237s tests/test_device_proxy.py::test_read_attribute[double_scalar_rww] PASSED [ 47%] 237s tests/test_device_proxy.py::test_read_attribute[double_scalar_w] PASSED [ 47%] 237s tests/test_device_proxy.py::test_read_attribute[double_spectrum] PASSED [ 47%] 237s tests/test_device_proxy.py::test_read_attribute[double_spectrum_ro] PASSED [ 47%] 237s tests/test_device_proxy.py::test_read_attribute[echo_mode] SKIPPED (...) [ 47%] 238s tests/test_device_proxy.py::test_read_attribute[enum_image] PASSED [ 47%] 238s tests/test_device_proxy.py::test_read_attribute[enum_image_ro] PASSED [ 47%] 238s tests/test_device_proxy.py::test_read_attribute[enum_scalar] PASSED [ 47%] 238s tests/test_device_proxy.py::test_read_attribute[enum_scalar_ro] PASSED [ 48%] 238s tests/test_device_proxy.py::test_read_attribute[enum_spectrum] PASSED [ 48%] 238s tests/test_device_proxy.py::test_read_attribute[enum_spectrum_ro] PASSED [ 48%] 238s tests/test_device_proxy.py::test_read_attribute[float_image] PASSED [ 48%] 238s tests/test_device_proxy.py::test_read_attribute[float_image_ro] PASSED [ 48%] 238s tests/test_device_proxy.py::test_read_attribute[float_scalar] PASSED [ 48%] 238s tests/test_device_proxy.py::test_read_attribute[float_spectrum] PASSED [ 48%] 239s tests/test_device_proxy.py::test_read_attribute[float_spectrum_ro] PASSED [ 48%] 239s tests/test_device_proxy.py::test_read_attribute[freq] PASSED [ 48%] 239s tests/test_device_proxy.py::test_read_attribute[long64_image_ro] PASSED [ 48%] 239s tests/test_device_proxy.py::test_read_attribute[long64_scalar] PASSED [ 48%] 239s tests/test_device_proxy.py::test_read_attribute[long64_spectrum_ro] PASSED [ 48%] 239s tests/test_device_proxy.py::test_read_attribute[long_image] PASSED [ 49%] 239s tests/test_device_proxy.py::test_read_attribute[long_image_ro] PASSED [ 49%] 239s tests/test_device_proxy.py::test_read_attribute[long_scalar] PASSED [ 49%] 239s tests/test_device_proxy.py::test_read_attribute[long_scalar_rww] PASSED [ 49%] 239s tests/test_device_proxy.py::test_read_attribute[long_scalar_w] PASSED [ 49%] 239s tests/test_device_proxy.py::test_read_attribute[long_spectrum] PASSED [ 49%] 240s tests/test_device_proxy.py::test_read_attribute[long_spectrum_ro] PASSED [ 49%] 240s tests/test_device_proxy.py::test_read_attribute[short_image] PASSED [ 49%] 240s tests/test_device_proxy.py::test_read_attribute[short_image_ro] PASSED [ 49%] 240s tests/test_device_proxy.py::test_read_attribute[short_scalar] PASSED [ 49%] 240s tests/test_device_proxy.py::test_read_attribute[short_scalar_ro] PASSED [ 49%] 240s tests/test_device_proxy.py::test_read_attribute[short_scalar_rww] PASSED [ 50%] 240s tests/test_device_proxy.py::test_read_attribute[short_scalar_w] PASSED [ 50%] 240s tests/test_device_proxy.py::test_read_attribute[short_spectrum] PASSED [ 50%] 240s tests/test_device_proxy.py::test_read_attribute[short_spectrum_ro] PASSED [ 50%] 240s tests/test_device_proxy.py::test_read_attribute[string_image] PASSED [ 50%] 240s tests/test_device_proxy.py::test_read_attribute[string_image_ro] XFAIL [ 50%] 241s tests/test_device_proxy.py::test_read_attribute[string_scalar] PASSED [ 50%] 241s tests/test_device_proxy.py::test_read_attribute[string_spectrum] PASSED [ 50%] 241s tests/test_device_proxy.py::test_read_attribute[string_spectrum_ro] XFAIL [ 50%] 241s tests/test_device_proxy.py::test_read_attribute[uchar_image] PASSED [ 50%] 241s tests/test_device_proxy.py::test_read_attribute[uchar_image_ro] PASSED [ 50%] 241s tests/test_device_proxy.py::test_read_attribute[uchar_scalar] PASSED [ 50%] 241s tests/test_device_proxy.py::test_read_attribute[uchar_spectrum] PASSED [ 51%] 241s tests/test_device_proxy.py::test_read_attribute[uchar_spectrum_ro] PASSED [ 51%] 241s tests/test_device_proxy.py::test_read_attribute[ulong64_image_ro] PASSED [ 51%] 241s tests/test_device_proxy.py::test_read_attribute[ulong64_scalar] PASSED [ 51%] 241s tests/test_device_proxy.py::test_read_attribute[ulong64_spectrum_ro] PASSED [ 51%] 242s tests/test_device_proxy.py::test_read_attribute[ulong_image_ro] PASSED [ 51%] 242s tests/test_device_proxy.py::test_read_attribute[ulong_scalar] PASSED [ 51%] 242s tests/test_device_proxy.py::test_read_attribute[ulong_spectrum_ro] PASSED [ 51%] 242s tests/test_device_proxy.py::test_read_attribute[ushort_image] PASSED [ 51%] 242s tests/test_device_proxy.py::test_read_attribute[ushort_image_ro] PASSED [ 51%] 242s tests/test_device_proxy.py::test_read_attribute[ushort_scalar] PASSED [ 51%] 242s tests/test_device_proxy.py::test_read_attribute[ushort_spectrum] PASSED [ 51%] 242s tests/test_device_proxy.py::test_read_attribute[ushort_spectrum_ro] PASSED [ 52%] 242s tests/test_device_proxy.py::test_read_attribute[wave] PASSED [ 52%] 242s tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Synchronous] PASSED [ 52%] 243s tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Futures] PASSED [ 52%] 243s tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Gevent] PASSED [ 52%] 243s tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Asyncio] ERROR [ 52%] 243s tests/test_device_proxy.py::test_high_level_api_for_asyncio FAILED [ 52%] 243s tests/test_device_proxy.py::test_write_scalar_attribute[boolean_scalar] PASSED [ 52%] 243s tests/test_device_proxy.py::test_write_scalar_attribute[double_scalar] PASSED [ 52%] 243s tests/test_device_proxy.py::test_write_scalar_attribute[double_scalar_w] PASSED [ 52%] 243s tests/test_device_proxy.py::test_write_scalar_attribute[enum_scalar] XFAIL [ 52%] 244s tests/test_device_proxy.py::test_write_scalar_attribute[float_scalar] PASSED [ 52%] 244s tests/test_device_proxy.py::test_write_scalar_attribute[long64_scalar] PASSED [ 53%] 244s tests/test_device_proxy.py::test_write_scalar_attribute[long_scalar] PASSED [ 53%] 244s tests/test_device_proxy.py::test_write_scalar_attribute[long_scalar_w] PASSED [ 53%] 244s tests/test_device_proxy.py::test_write_scalar_attribute[short_scalar] PASSED [ 53%] 244s tests/test_device_proxy.py::test_write_scalar_attribute[short_scalar_w] PASSED [ 53%] 244s tests/test_device_proxy.py::test_write_scalar_attribute[string_scalar] PASSED [ 53%] 244s tests/test_device_proxy.py::test_write_scalar_attribute[uchar_scalar] XFAIL [ 53%] 244s tests/test_device_proxy.py::test_write_scalar_attribute[ulong64_scalar] PASSED [ 53%] 244s tests/test_device_proxy.py::test_write_scalar_attribute[ulong_scalar] PASSED [ 53%] 245s tests/test_device_proxy.py::test_write_scalar_attribute[ushort_scalar] PASSED [ 53%] 245s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.Numpy] PASSED [ 53%] 245s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.Tuple] PASSED [ 54%] 245s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.List] PASSED [ 54%] 245s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.Bytes] PASSED [ 54%] 245s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.ByteArray] PASSED [ 54%] 245s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.String] PASSED [ 54%] 245s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.Numpy] PASSED [ 54%] 245s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.Tuple] PASSED [ 54%] 245s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.List] PASSED [ 54%] 245s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.Bytes] PASSED [ 54%] 246s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.ByteArray] PASSED [ 54%] 246s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.String] PASSED [ 54%] 246s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.Numpy] XFAIL [ 54%] 246s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.Tuple] XFAIL [ 55%] 246s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.List] XFAIL [ 55%] 246s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.Bytes] XFAIL [ 55%] 246s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.ByteArray] XFAIL [ 55%] 246s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.String] XFAIL [ 55%] 246s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.Numpy] PASSED [ 55%] 247s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.Tuple] PASSED [ 55%] 247s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.List] PASSED [ 55%] 247s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.Bytes] PASSED [ 55%] 247s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.ByteArray] PASSED [ 55%] 247s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.String] PASSED [ 55%] 247s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.Numpy] PASSED [ 55%] 247s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.Tuple] PASSED [ 56%] 247s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.List] PASSED [ 56%] 247s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.Bytes] PASSED [ 56%] 247s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.ByteArray] PASSED [ 56%] 247s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.String] PASSED [ 56%] 248s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.Numpy] PASSED [ 56%] 248s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.Tuple] PASSED [ 56%] 248s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.List] PASSED [ 56%] 248s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.Bytes] PASSED [ 56%] 248s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.ByteArray] PASSED [ 56%] 248s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.String] PASSED [ 56%] 248s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.Numpy] PASSED [ 57%] 248s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.Tuple] PASSED [ 57%] 248s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.List] PASSED [ 57%] 248s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.Bytes] XFAIL [ 57%] 249s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.ByteArray] XFAIL [ 57%] 249s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.String] XFAIL [ 57%] 249s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.Numpy] XFAIL [ 57%] 249s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.Tuple] XFAIL [ 57%] 249s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.List] XFAIL [ 57%] 249s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.Bytes] XFAIL [ 57%] 249s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.ByteArray] XFAIL [ 57%] 249s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.String] XFAIL [ 57%] 250s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.Numpy] PASSED [ 58%] 250s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.Tuple] PASSED [ 58%] 250s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.List] PASSED [ 58%] 250s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.Bytes] PASSED [ 58%] 250s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.ByteArray] PASSED [ 58%] 250s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.String] PASSED [ 58%] 250s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[boolean_spectrum] PASSED [ 58%] 250s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[double_spectrum] PASSED [ 58%] 250s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[enum_spectrum] PASSED [ 58%] 250s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[float_spectrum] PASSED [ 58%] 251s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[long_spectrum] PASSED [ 58%] 251s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[short_spectrum] PASSED [ 58%] 251s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[string_spectrum] XFAIL [ 59%] 251s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[uchar_spectrum] PASSED [ 59%] 251s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[ushort_spectrum] PASSED [ 59%] 251s tests/test_device_proxy.py::test_write_read_string_attribute PASSED [ 59%] 251s tests/test_device_proxy.py::test_set_non_existent_attribute_raises_by_default PASSED [ 59%] 251s tests/test_device_proxy.py::test_set_non_existent_attribute_allowed_if_dynamic_interface_unfrozen PASSED [ 59%] 251s tests/test_device_proxy.py::test_dynamic_interface_can_be_toggled PASSED [ 59%] 252s tests/test_device_proxy.py::test_dynamic_interface_flag_can_be_read PASSED [ 59%] 252s tests/test_device_proxy.py::test_dynamic_interface_only_applies_to_device_proxy_instance PASSED [ 59%] 252s tests/test_device_proxy.py::test_dynamic_interface_unfreeze_generates_a_user_warning PASSED [ 59%] 252s tests/test_device_proxy.py::test_read_attribute_config SKIPPED (This...) [ 59%] 252s tests/test_device_proxy.py::test_read_attribute_config_ex PASSED [ 60%] 252s tests/test_device_proxy.py::test_attribute_list_query SKIPPED (This ...) [ 60%] 252s tests/test_device_proxy.py::test_attribute_list_query_ex SKIPPED (Th...) [ 60%] 252s tests/test_device_proxy.py::test_device_proxy_dir_method PASSED [ 60%] 252s tests/test_device_proxy.py::test_device_polling_command PASSED [ 60%] 252s tests/test_device_proxy.py::test_device_polling_attribute PASSED [ 60%] 252s tests/test_device_proxy.py::test_command_string PASSED [ 60%] 252s tests/test_device_proxy.py::test_command_raises_type_error_for_bad_input PASSED [ 60%] 252s tests/test_device_proxy.py::test_repr_uses_info[Synchronous] PASSED [ 60%] 253s tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Synchronous] PASSED [ 60%] 253s tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Synchronous] PASSED [ 60%] 253s tests/test_device_proxy.py::test_no_memory_leak_for_repr[Synchronous] PASSED [ 60%] 253s tests/test_device_proxy.py::test_no_memory_leak_for_str[Synchronous] PASSED [ 61%] 253s tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Synchronous] PASSED [ 61%] 253s tests/test_device_proxy.py::test_repr_uses_info[Futures] PASSED [ 61%] 253s tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Futures] PASSED [ 61%] 253s tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Futures] PASSED [ 61%] 253s tests/test_device_proxy.py::test_no_memory_leak_for_repr[Futures] PASSED [ 61%] 253s tests/test_device_proxy.py::test_no_memory_leak_for_str[Futures] PASSED [ 61%] 253s tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Futures] PASSED [ 61%] 253s tests/test_device_proxy.py::test_repr_uses_info[Gevent] PASSED [ 61%] 253s tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Gevent] PASSED [ 61%] 254s tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Gevent] PASSED [ 61%] 254s tests/test_device_proxy.py::test_no_memory_leak_for_repr[Gevent] PASSED [ 61%] 254s tests/test_device_proxy.py::test_no_memory_leak_for_str[Gevent] PASSED [ 62%] 254s tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Gevent] PASSED [ 62%] 254s tests/test_device_proxy.py::test_repr_uses_info[Asyncio] FAILED [ 62%] 254s tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Asyncio] FAILED [ 62%] 254s tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Asyncio] FAILED [ 62%] 254s tests/test_device_proxy.py::test_no_memory_leak_for_repr[Asyncio] FAILED [ 62%] 255s tests/test_device_proxy.py::test_no_memory_leak_for_str[Asyncio] FAILED [ 62%] 255s tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Asyncio] FAILED [ 62%] 255s tests/test_device_proxy.py::test_client_destructor_does_not_deadlock[group_client_lifecycle] SKIPPED [ 62%] 255s tests/test_device_proxy.py::test_client_destructor_does_not_deadlock[device_proxy_lifecycle] SKIPPED [ 62%] 255s tests/test_group.py::test_nested_multi_group PASSED [ 62%] 255s tests/test_group.py::test_read_write_attribute PASSED [ 62%] 255s tests/test_group.py::test_command PASSED [ 63%] 255s tests/test_log.py::test_logging_decorators PASSED [ 63%] 255s tests/test_log.py::test_async_logging_decorators FAILED [ 63%] 255s tests/test_log.py::test_tango_stream PASSED [ 63%] 255s tests/test_log.py::test_logging[Synchronous] PASSED [ 63%] 256s tests/test_log.py::test_logging[Asyncio] FAILED [ 63%] 256s tests/test_log.py::test_logging[Gevent] PASSED [ 63%] 256s tests/test_log.py::test_decorator_logging_source_location[Synchronous] SKIPPED [ 63%] 256s tests/test_log.py::test_decorator_logging_source_location[Asyncio] SKIPPED [ 63%] 256s tests/test_log.py::test_decorator_logging_source_location[Gevent] SKIPPED [ 63%] 256s tests/test_log.py::test_stream_logging_source_location[Synchronous] SKIPPED [ 63%] 256s tests/test_log.py::test_stream_logging_source_location[Asyncio] SKIPPED [ 64%] 256s tests/test_log.py::test_stream_logging_source_location[Gevent] SKIPPED [ 64%] 256s tests/test_multi_attr_prop.py::test_stuff PASSED [ 64%] 256s tests/test_properties.py::test_device_property_no_default[int] PASSED [ 64%] 256s tests/test_properties.py::test_device_property_no_default[float] PASSED [ 64%] 256s tests/test_properties.py::test_device_property_no_default[str] PASSED [ 64%] 256s tests/test_properties.py::test_device_property_no_default[bool] PASSED [ 64%] 256s tests/test_properties.py::test_device_property_no_default[(int,)] PASSED [ 64%] 256s tests/test_properties.py::test_device_property_no_default[(float,)] PASSED [ 64%] 256s tests/test_properties.py::test_device_property_no_default[(str,)] PASSED [ 64%] 256s tests/test_properties.py::test_device_property_no_default[(bool,)] PASSED [ 64%] 256s tests/test_properties.py::test_device_property_with_typing[int] PASSED [ 64%] 256s tests/test_properties.py::test_device_property_with_typing[float] PASSED [ 65%] 257s tests/test_properties.py::test_device_property_with_typing[str] PASSED [ 65%] 257s tests/test_properties.py::test_device_property_with_typing[bool] PASSED [ 65%] 257s tests/test_properties.py::test_device_property_with_typing[(int,)] PASSED [ 65%] 257s tests/test_properties.py::test_device_property_with_typing[(float,)] PASSED [ 65%] 257s tests/test_properties.py::test_device_property_with_typing[(str,)] PASSED [ 65%] 257s tests/test_properties.py::test_device_property_with_typing[(bool,)] PASSED [ 65%] 257s tests/test_properties.py::test_device_property_with_numpy_typing[bool, SCALAR] PASSED [ 65%] 257s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[bool], SPECTRUM] PASSED [ 65%] 257s tests/test_properties.py::test_device_property_with_numpy_typing[uint8, SCALAR] XFAIL [ 65%] 257s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[uint8], SPECTRUM] XFAIL [ 65%] 257s tests/test_properties.py::test_device_property_with_numpy_typing[int16, SCALAR] PASSED [ 65%] 257s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[int16], SPECTRUM] PASSED [ 66%] 257s tests/test_properties.py::test_device_property_with_numpy_typing[uint16, SCALAR] PASSED [ 66%] 257s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[uint16], SPECTRUM] PASSED [ 66%] 257s tests/test_properties.py::test_device_property_with_numpy_typing[int32, SCALAR] PASSED [ 66%] 257s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[int32], SPECTRUM] PASSED [ 66%] 257s tests/test_properties.py::test_device_property_with_numpy_typing[uint32, SCALAR] PASSED [ 66%] 257s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[uint32], SPECTRUM] PASSED [ 66%] 257s tests/test_properties.py::test_device_property_with_numpy_typing[int64, SCALAR] PASSED [ 66%] 258s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[int64], SPECTRUM] PASSED [ 66%] 258s tests/test_properties.py::test_device_property_with_numpy_typing[uint64, SCALAR] PASSED [ 66%] 258s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[uint64], SPECTRUM] PASSED [ 66%] 258s tests/test_properties.py::test_device_property_with_numpy_typing[float64, SCALAR] PASSED [ 67%] 258s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[float64], SPECTRUM] PASSED [ 67%] 258s tests/test_properties.py::test_device_property_with_numpy_typing[float32, SCALAR] PASSED [ 67%] 258s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[float32], SPECTRUM] PASSED [ 67%] 258s tests/test_properties.py::test_device_property_with_default_value[int] PASSED [ 67%] 258s tests/test_properties.py::test_device_property_with_default_value[float] PASSED [ 67%] 258s tests/test_properties.py::test_device_property_with_default_value[str] PASSED [ 67%] 258s tests/test_properties.py::test_device_property_with_default_value[bool] PASSED [ 67%] 258s tests/test_properties.py::test_device_property_with_default_value[(int,)] PASSED [ 67%] 258s tests/test_properties.py::test_device_property_with_default_value[(float,)] PASSED [ 67%] 258s tests/test_properties.py::test_device_property_with_default_value[(str,)] PASSED [ 67%] 258s tests/test_properties.py::test_device_property_with_default_value[(bool,)] PASSED [ 67%] 258s tests/test_properties.py::test_device_get_device_properties_when_init_device PASSED [ 68%] 258s tests/test_properties.py::test_mandatory_device_property_with_db_value_succeeds[True] PASSED [ 68%] 258s tests/test_properties.py::test_mandatory_device_property_with_db_value_succeeds[False] PASSED [ 68%] 258s tests/test_server.py::test_uncorrect_typing_hints[property-tuple-Property does not support IMAGE type0] PASSED [ 68%] 258s tests/test_server.py::test_uncorrect_typing_hints[property-tuple-Property does not support IMAGE type1] PASSED [ 68%] 259s tests/test_server.py::test_uncorrect_typing_hints[property-tuple-PyTango does not support mixed types] PASSED [ 68%] 259s tests/test_server.py::test_uncorrect_typing_hints[attribute-tuple-PyTango does not support mixed types0] PASSED [ 68%] 259s tests/test_server.py::test_uncorrect_typing_hints[attribute-tuple-PyTango does not support mixed types1] PASSED [ 68%] 259s tests/test_server.py::test_uncorrect_typing_hints[attribute-tuple-PyTango does not support mixed types2] PASSED [ 68%] 259s tests/test_server.py::test_uncorrect_typing_hints[attribute-Callable-Cannot translate] PASSED [ 68%] 259s tests/test_server.py::test_get_enum_labels_success[GoodEnum] PASSED [ 68%] 259s tests/test_server.py::test_get_enum_labels_fail[BadEnumNonZero] PASSED [ 68%] 259s tests/test_server.py::test_get_enum_labels_fail[BadEnumSkipValues] PASSED [ 69%] 259s tests/test_server.py::test_get_enum_labels_fail[BadEnumDuplicates] PASSED [ 69%] 259s tests/test_server.py::test_device_classes_use_latest_implementation PASSED [ 69%] 259s tests/test_server.py::test_empty_device[Synchronous] PASSED [ 69%] 259s tests/test_server.py::test_empty_device[Asyncio] FAILED [ 69%] 259s tests/test_server.py::test_empty_device[Gevent] PASSED [ 69%] 259s tests/test_server.py::test_set_desc_status_state_at_init[doc] PASSED [ 69%] 259s tests/test_server.py::test_set_desc_status_state_at_init[description] PASSED [ 69%] 259s tests/test_server.py::test_set_state_status[ON-Synchronous-False] PASSED [ 69%] 259s tests/test_server.py::test_set_state_status[ON-Synchronous-True] PASSED [ 69%] 260s tests/test_server.py::test_set_state_status[ON-Asyncio-False] FAILED [ 69%] 260s tests/test_server.py::test_set_state_status[ON-Asyncio-True] FAILED [ 70%] 260s tests/test_server.py::test_set_state_status[ON-Gevent-False] PASSED [ 70%] 260s tests/test_server.py::test_set_state_status[ON-Gevent-True] PASSED [ 70%] 260s tests/test_server.py::test_set_state_status[OFF-Synchronous-False] PASSED [ 70%] 260s tests/test_server.py::test_set_state_status[OFF-Synchronous-True] PASSED [ 70%] 260s tests/test_server.py::test_set_state_status[OFF-Asyncio-False] FAILED [ 70%] 260s tests/test_server.py::test_set_state_status[OFF-Asyncio-True] FAILED [ 70%] 260s tests/test_server.py::test_set_state_status[OFF-Gevent-False] PASSED [ 70%] 261s tests/test_server.py::test_set_state_status[OFF-Gevent-True] PASSED [ 70%] 261s tests/test_server.py::test_set_state_status[CLOSE-Synchronous-False] PASSED [ 70%] 261s tests/test_server.py::test_set_state_status[CLOSE-Synchronous-True] PASSED [ 70%] 261s tests/test_server.py::test_set_state_status[CLOSE-Asyncio-False] FAILED [ 70%] 261s tests/test_server.py::test_set_state_status[CLOSE-Asyncio-True] FAILED [ 71%] 261s tests/test_server.py::test_set_state_status[CLOSE-Gevent-False] PASSED [ 71%] 261s tests/test_server.py::test_set_state_status[CLOSE-Gevent-True] PASSED [ 71%] 261s tests/test_server.py::test_set_state_status[OPEN-Synchronous-False] PASSED [ 71%] 261s tests/test_server.py::test_set_state_status[OPEN-Synchronous-True] PASSED [ 71%] 261s tests/test_server.py::test_set_state_status[OPEN-Asyncio-False] FAILED [ 71%] 262s tests/test_server.py::test_set_state_status[OPEN-Asyncio-True] FAILED [ 71%] 262s tests/test_server.py::test_set_state_status[OPEN-Gevent-False] PASSED [ 71%] 262s tests/test_server.py::test_set_state_status[OPEN-Gevent-True] PASSED [ 71%] 262s tests/test_server.py::test_set_state_status[INSERT-Synchronous-False] PASSED [ 71%] 262s tests/test_server.py::test_set_state_status[INSERT-Synchronous-True] PASSED [ 71%] 262s tests/test_server.py::test_set_state_status[INSERT-Asyncio-False] FAILED [ 71%] 262s tests/test_server.py::test_set_state_status[INSERT-Asyncio-True] FAILED [ 72%] 262s tests/test_server.py::test_set_state_status[INSERT-Gevent-False] PASSED [ 72%] 262s tests/test_server.py::test_set_state_status[INSERT-Gevent-True] PASSED [ 72%] 263s tests/test_server.py::test_set_state_status[EXTRACT-Synchronous-False] PASSED [ 72%] 263s tests/test_server.py::test_set_state_status[EXTRACT-Synchronous-True] PASSED [ 72%] 263s tests/test_server.py::test_set_state_status[EXTRACT-Asyncio-False] FAILED [ 72%] 263s tests/test_server.py::test_set_state_status[EXTRACT-Asyncio-True] FAILED [ 72%] 263s tests/test_server.py::test_set_state_status[EXTRACT-Gevent-False] PASSED [ 72%] 263s tests/test_server.py::test_set_state_status[EXTRACT-Gevent-True] PASSED [ 72%] 263s tests/test_server.py::test_set_state_status[MOVING-Synchronous-False] PASSED [ 72%] 263s tests/test_server.py::test_set_state_status[MOVING-Synchronous-True] PASSED [ 72%] 263s tests/test_server.py::test_set_state_status[MOVING-Asyncio-False] FAILED [ 72%] 264s tests/test_server.py::test_set_state_status[MOVING-Asyncio-True] FAILED [ 73%] 264s tests/test_server.py::test_set_state_status[MOVING-Gevent-False] PASSED [ 73%] 264s tests/test_server.py::test_set_state_status[MOVING-Gevent-True] PASSED [ 73%] 264s tests/test_server.py::test_set_state_status[STANDBY-Synchronous-False] PASSED [ 73%] 264s tests/test_server.py::test_set_state_status[STANDBY-Synchronous-True] PASSED [ 73%] 264s tests/test_server.py::test_set_state_status[STANDBY-Asyncio-False] FAILED [ 73%] 264s tests/test_server.py::test_set_state_status[STANDBY-Asyncio-True] FAILED [ 73%] 264s tests/test_server.py::test_set_state_status[STANDBY-Gevent-False] PASSED [ 73%] 264s tests/test_server.py::test_set_state_status[STANDBY-Gevent-True] PASSED [ 73%] 265s tests/test_server.py::test_set_state_status[FAULT-Synchronous-False] PASSED [ 73%] 265s tests/test_server.py::test_set_state_status[FAULT-Synchronous-True] PASSED [ 73%] 265s tests/test_server.py::test_set_state_status[FAULT-Asyncio-False] FAILED [ 74%] 265s tests/test_server.py::test_set_state_status[FAULT-Asyncio-True] FAILED [ 74%] 265s tests/test_server.py::test_set_state_status[FAULT-Gevent-False] PASSED [ 74%] 265s tests/test_server.py::test_set_state_status[FAULT-Gevent-True] PASSED [ 74%] 265s tests/test_server.py::test_set_state_status[INIT-Synchronous-False] PASSED [ 74%] 265s tests/test_server.py::test_set_state_status[INIT-Synchronous-True] PASSED [ 74%] 266s tests/test_server.py::test_set_state_status[INIT-Asyncio-False] FAILED [ 74%] 266s tests/test_server.py::test_set_state_status[INIT-Asyncio-True] FAILED [ 74%] 266s tests/test_server.py::test_set_state_status[INIT-Gevent-False] PASSED [ 74%] 266s tests/test_server.py::test_set_state_status[INIT-Gevent-True] PASSED [ 74%] 266s tests/test_server.py::test_set_state_status[RUNNING-Synchronous-False] PASSED [ 74%] 266s tests/test_server.py::test_set_state_status[RUNNING-Synchronous-True] PASSED [ 74%] 266s tests/test_server.py::test_set_state_status[RUNNING-Asyncio-False] FAILED [ 75%] 266s tests/test_server.py::test_set_state_status[RUNNING-Asyncio-True] FAILED [ 75%] 266s tests/test_server.py::test_set_state_status[RUNNING-Gevent-False] PASSED [ 75%] 267s tests/test_server.py::test_set_state_status[RUNNING-Gevent-True] PASSED [ 75%] 267s tests/test_server.py::test_set_state_status[ALARM-Synchronous-False] PASSED [ 75%] 267s tests/test_server.py::test_set_state_status[ALARM-Synchronous-True] PASSED [ 75%] 267s tests/test_server.py::test_set_state_status[ALARM-Asyncio-False] FAILED [ 75%] 267s tests/test_server.py::test_set_state_status[ALARM-Asyncio-True] FAILED [ 75%] 267s tests/test_server.py::test_set_state_status[ALARM-Gevent-False] PASSED [ 75%] 267s tests/test_server.py::test_set_state_status[ALARM-Gevent-True] PASSED [ 75%] 267s tests/test_server.py::test_set_state_status[DISABLE-Synchronous-False] PASSED [ 75%] 267s tests/test_server.py::test_set_state_status[DISABLE-Synchronous-True] PASSED [ 75%] 268s tests/test_server.py::test_set_state_status[DISABLE-Asyncio-False] FAILED [ 76%] 268s tests/test_server.py::test_set_state_status[DISABLE-Asyncio-True] FAILED [ 76%] 268s tests/test_server.py::test_set_state_status[DISABLE-Gevent-False] PASSED [ 76%] 268s tests/test_server.py::test_set_state_status[DISABLE-Gevent-True] PASSED [ 76%] 268s tests/test_server.py::test_set_state_status[UNKNOWN-Synchronous-False] PASSED [ 76%] 268s tests/test_server.py::test_set_state_status[UNKNOWN-Synchronous-True] PASSED [ 76%] 268s tests/test_server.py::test_set_state_status[UNKNOWN-Asyncio-False] FAILED [ 76%] 268s tests/test_server.py::test_set_state_status[UNKNOWN-Asyncio-True] FAILED [ 76%] 268s tests/test_server.py::test_set_state_status[UNKNOWN-Gevent-False] PASSED [ 76%] 269s tests/test_server.py::test_set_state_status[UNKNOWN-Gevent-True] PASSED [ 76%] 269s tests/test_server.py::test_user_dev_state_status[Synchronous] PASSED [ 76%] 269s tests/test_server.py::test_user_dev_state_status[Asyncio] FAILED [ 77%] 269s tests/test_server.py::test_user_dev_state_status[Gevent] PASSED [ 77%] 269s tests/test_server.py::test_attr_quality_checked_with_state[Synchronous] PASSED [ 77%] 269s tests/test_server.py::test_attr_quality_checked_with_state[Asyncio] FAILED [ 77%] 269s tests/test_server.py::test_attr_quality_checked_with_state[Gevent] PASSED [ 77%] 269s tests/test_server.py::test_device_get_attr_config[Synchronous] PASSED [ 77%] 269s tests/test_server.py::test_device_get_attr_config[Asyncio] FAILED [ 77%] 270s tests/test_server.py::test_device_get_attr_config[Gevent] PASSED [ 77%] 270s tests/test_server.py::test_device_set_attr_config[Synchronous] PASSED [ 77%] 270s tests/test_server.py::test_device_set_attr_config[Asyncio] FAILED [ 77%] 270s tests/test_server.py::test_device_set_attr_config[Gevent] PASSED [ 77%] 270s tests/test_server.py::test_default_units PASSED [ 77%] 270s tests/test_server.py::test_custom_units PASSED [ 78%] 270s tests/test_server.py::test_inheritance_overrides_a_property PASSED [ 78%] 270s tests/test_server.py::test_inheritance_override_dev_status PASSED [ 78%] 270s tests/test_server.py::test_inheritance_init_device PASSED [ 78%] 270s tests/test_server.py::test_inheritance_with_decorated_attributes PASSED [ 78%] 270s tests/test_server.py::test_inheritance_with_undecorated_attributes PASSED [ 78%] 270s tests/test_server.py::test_inheritance_with_undecorated_attribute_and_bound_methods PASSED [ 78%] 270s tests/test_server.py::test_inheritance_with_undecorated_attributes_and_unbound_functions PASSED [ 78%] 270s tests/test_server.py::test_inheritance_command_is_allowed_by_naming_convention PASSED [ 78%] 270s tests/test_server.py::test_inheritance_command_is_allowed_by_kwarg_method PASSED [ 78%] 270s tests/test_server.py::test_inheritance_command_is_allowed_by_kwarg_unbound_function PASSED [ 78%] 271s tests/test_server.py::test_exception_propagation[Synchronous] PASSED [ 78%] 271s tests/test_server.py::test_exception_propagation[Asyncio] FAILED [ 79%] 271s tests/test_server.py::test_exception_propagation[Gevent] PASSED [ 79%] 271s tests/test_server.py::test_arguments[linux-applicable_os0-MyDs instance --nodb --port 1234-expected_output0] PASSED [ 79%] 271s tests/test_server.py::test_arguments[linux-applicable_os1-MyDs -port 1234 -host myhost instance-expected_output1] PASSED [ 79%] 271s tests/test_server.py::test_arguments[linux-applicable_os2-MyDs instance --ORBendPoint giop:tcp:_:1234-expected_output2] PASSED [ 79%] 271s 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%] 271s tests/test_server.py::test_arguments[linux-applicable_os4-MyDs instance -file a/b/c-expected_output4] PASSED [ 79%] 271s tests/test_server.py::test_arguments[linux-applicable_os5-MyDs instance -nodb-expected_output5] PASSED [ 79%] 271s tests/test_server.py::test_arguments[linux-applicable_os6-MyDs instance -dlist a/b/c;d/e/f-expected_output6] PASSED [ 79%] 271s tests/test_server.py::test_arguments[linux-applicable_os7-MyDs instance -vvvv-expected_output7] PASSED [ 79%] 271s tests/test_server.py::test_arguments[linux-applicable_os8-MyDs instance --verbose --verbose --verbose --verbose-expected_output8] PASSED [ 79%] 271s tests/test_server.py::test_arguments[linux-applicable_os9-MyDs instance -v4-expected_output9] PASSED [ 80%] 271s tests/test_server.py::test_arguments[linux-applicable_os10-MyDs instance -v 4-expected_output10] PASSED [ 80%] 271s tests/test_server.py::test_arguments[linux-applicable_os11-MyDs instance -dbg -i -s -u-expected_output11] PASSED [ 80%] 271s tests/test_server.py::test_arguments[linux-applicable_os12-MyDs instance -ORBtest1 test1 --ORBtest2 test2-expected_output12] PASSED [ 80%] 271s tests/test_server.py::test_arguments[linux-applicable_os13-MyDs ORBinstance -ORBtest myORBparam-expected_output13] PASSED [ 80%] 271s 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%] 271s tests/test_server.py::test_arguments[linux-applicable_os15-MyDs instance -ORBtest1 test1 --orbinvalid value-expected_output15] PASSED [ 80%] 271s tests/test_server.py::test_arguments[win-applicable_os0-MyDs instance --nodb --port 1234-expected_output0] PASSED [ 80%] 271s tests/test_server.py::test_arguments[win-applicable_os1-MyDs -port 1234 -host myhost instance-expected_output1] PASSED [ 80%] 271s tests/test_server.py::test_arguments[win-applicable_os2-MyDs instance --ORBendPoint giop:tcp:_:1234-expected_output2] PASSED [ 80%] 271s 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%] 271s tests/test_server.py::test_arguments[win-applicable_os4-MyDs instance -file a/b/c-expected_output4] PASSED [ 80%] 271s tests/test_server.py::test_arguments[win-applicable_os5-MyDs instance -nodb-expected_output5] PASSED [ 81%] 271s tests/test_server.py::test_arguments[win-applicable_os6-MyDs instance -dlist a/b/c;d/e/f-expected_output6] PASSED [ 81%] 271s tests/test_server.py::test_arguments[win-applicable_os7-MyDs instance -vvvv-expected_output7] PASSED [ 81%] 271s tests/test_server.py::test_arguments[win-applicable_os8-MyDs instance --verbose --verbose --verbose --verbose-expected_output8] PASSED [ 81%] 271s tests/test_server.py::test_arguments[win-applicable_os9-MyDs instance -v4-expected_output9] PASSED [ 81%] 271s tests/test_server.py::test_arguments[win-applicable_os10-MyDs instance -v 4-expected_output10] PASSED [ 81%] 271s tests/test_server.py::test_arguments[win-applicable_os11-MyDs instance -dbg -i -s -u-expected_output11] PASSED [ 81%] 271s tests/test_server.py::test_arguments[win-applicable_os12-MyDs instance -ORBtest1 test1 --ORBtest2 test2-expected_output12] PASSED [ 81%] 271s tests/test_server.py::test_arguments[win-applicable_os13-MyDs ORBinstance -ORBtest myORBparam-expected_output13] PASSED [ 81%] 272s 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%] 272s tests/test_server.py::test_arguments[win-applicable_os15-MyDs instance -ORBtest1 test1 --orbinvalid value-expected_output15] PASSED [ 81%] 272s tests/test_server.py::test_server_init_hook_called[Synchronous] PASSED [ 81%] 272s tests/test_server.py::test_server_init_hook_called[Asyncio] SKIPPED [ 82%] 272s tests/test_server.py::test_server_init_hook_called[Gevent] PASSED [ 82%] 272s tests/test_server.py::test_server_init_hook_change_state PASSED [ 82%] 272s tests/test_server.py::test_asyncio_server_init_hook_change_state FAILED [ 82%] 272s tests/test_server.py::test_server_init_hook_called_after_init PASSED [ 82%] 272s tests/test_server.py::test_async_server_init_hook_called_after_init FAILED [ 82%] 272s tests/test_server.py::test_server_init_hook_exception PASSED [ 82%] 273s tests/test_server.py::test_asyncio_server_init_hook_exception FAILED [ 82%] 273s tests/test_server.py::test_server_init_hook_with_low_level_api_called PASSED [ 82%] 273s tests/test_server.py::test_server_init_hook_with_low_level_api_change_state PASSED [ 82%] 273s tests/test_server.py::test_server_init_hook_with_low_level_api_called_after_init PASSED [ 82%] 273s tests/test_server.py::test_server_init_hook_with_low_level_api_exception PASSED [ 82%] 273s tests/test_server.py::test_server_init_multiple_devices PASSED [ 83%] 273s tests/test_server.py::test_server_init_hook_subscribe_event_multiple_devices XFAIL [ 83%] 273s tests/test_server.py::test_deprecation_warning_for_sync_attr_com_methods_in_asyncio_device FAILED [ 83%] 273s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[init_device] FAILED [ 83%] 274s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[delete_device] FAILED [ 83%] 274s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_state] FAILED [ 83%] 274s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_status] FAILED [ 83%] 274s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[read_attr_hardware] FAILED [ 83%] 274s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[always_executed_hook] FAILED [ 83%] 275s tests/test_server.py::test_no_sync_attribute_locks[Synchronous] SKIPPED [ 83%] 275s tests/test_server.py::test_no_sync_attribute_locks[Asyncio] SKIPPED [ 83%] 275s tests/test_server.py::test_no_sync_attribute_locks[Gevent] SKIPPED (...) [ 84%] 275s tests/test_server.py::test_read_slow_and_fast_attributes_with_asyncio SKIPPED [ 84%] 275s tests/test_server.py::test_get_version_info_classic_api PASSED [ 84%] 275s tests/test_server.py::test_get_version_info_high_level_api PASSED [ 84%] 275s tests/test_server.py::test_add_version_info_classic_api PASSED [ 84%] 275s tests/test_server.py::test_add_version_info_high_level_api PASSED [ 84%] 275s tests/test_server.py::test_restart_server_command_cpp_and_py SKIPPED [ 84%] 275s tests/test_server.py::test_attr_data_default_fwd_properties PASSED [ 84%] 275s tests/test_server.py::test_attr_data_default_properties PASSED [ 84%] 275s tests/test_server.py::test_attr_data_default_properties_throws_on_unknown PASSED [ 84%] 275s tests/test_server.py::test_attr_data_enum_labels PASSED [ 84%] 275s tests/test_server.py::test_attr_data_to_attr PASSED [ 84%] 275s tests/test_server.py::test_from_attr_info_exceptions[some string-Wrong data type for value for describing attribute] PASSED [ 85%] 275s tests/test_server.py::test_from_attr_info_exceptions[attr_info1-Wrong number of argument for describing attribute] PASSED [ 85%] 275s tests/test_server.py::test_from_attr_info_exceptions[attr_info2-Wrong number of argument for describing attribute] PASSED [ 85%] 275s tests/test_server.py::test_from_attr_info_exceptions[attr_info3-Wrong data type for describing mandatory information] PASSED [ 85%] 275s tests/test_server.py::test_from_attr_info_exceptions[attr_info4-Wrong data type for describing mandatory information] PASSED [ 85%] 275s tests/test_server.py::test_from_attr_info_exceptions[attr_info5-Wrong data type in attribute argument for attribute] PASSED [ 85%] 275s tests/test_server.py::test_from_attr_info_exceptions[attr_info6-Wrong data format in attribute argument for attribute] PASSED [ 85%] 275s 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%] 275s 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%] 275s 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%] 275s 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%] 275s 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%] 275s 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%] 275s tests/test_server.py::test_from_attr_info_exceptions[attr_info13-Wrong data write type in attribute argument] PASSED [ 86%] 275s tests/test_server.py::test_from_attr_info_exceptions[attr_info14-Wrong display level] PASSED [ 86%] 275s tests/test_server.py::test_from_attr_info_exceptions[attr_info15-Wrong polling period] PASSED [ 86%] 275s tests/test_server.py::test_from_attr_info_exceptions[attr_info16-Wrong memorized value] PASSED [ 86%] 275s tests/test_server.py::test_from_attr_info_exceptions[attr_info17-Missing 'enum_labels' key in attr_list definition] PASSED [ 86%] 275s tests/test_server.py::test_from_attr_info_hw_memorized PASSED [ 86%] 275s tests/test_server.py::test_from_attr_info_memorized PASSED [ 86%] 275s tests/test_server.py::test_device_repr_does_not_segfault_with_pytest PASSED [ 86%] 275s tests/test_telemetry.py::test_telemetry_available_constant_exists PASSED [ 86%] 275s tests/test_telemetry.py::test_telemetry_packages_available_if_telemetry_active SKIPPED [ 86%] 275s tests/test_telemetry.py::test_init_device_and_basic_span_details[Synchronous] SKIPPED [ 87%] 275s tests/test_telemetry.py::test_init_device_and_basic_span_details[Asyncio] SKIPPED [ 87%] 275s tests/test_telemetry.py::test_init_device_and_basic_span_details[Gevent] SKIPPED [ 87%] 275s tests/test_telemetry.py::test_delete_device[Synchronous] SKIPPED (Te...) [ 87%] 275s tests/test_telemetry.py::test_delete_device[Asyncio] SKIPPED (Teleme...) [ 87%] 275s tests/test_telemetry.py::test_delete_device[Gevent] SKIPPED (Telemet...) [ 87%] 275s tests/test_telemetry.py::test_state[Synchronous] SKIPPED (Telemetry ...) [ 87%] 275s tests/test_telemetry.py::test_state[Asyncio] SKIPPED (Telemetry not ...) [ 87%] 275s tests/test_telemetry.py::test_state[Gevent] SKIPPED (Telemetry not a...) [ 87%] 275s tests/test_telemetry.py::test_static_command[Synchronous] SKIPPED (T...) [ 87%] 275s tests/test_telemetry.py::test_static_command[Asyncio] SKIPPED (Telem...) [ 87%] 276s tests/test_telemetry.py::test_static_command[Gevent] SKIPPED (Teleme...) [ 87%] 276s tests/test_telemetry.py::test_static_attribute[Synchronous] SKIPPED [ 88%] 276s tests/test_telemetry.py::test_static_attribute[Asyncio] SKIPPED (Tel...) [ 88%] 276s tests/test_telemetry.py::test_static_attribute[Gevent] SKIPPED (Tele...) [ 88%] 276s tests/test_telemetry.py::test_user_span_traceid_propagates_to_tango[Synchronous] SKIPPED [ 88%] 276s tests/test_telemetry.py::test_user_span_traceid_propagates_to_tango[Asyncio] SKIPPED [ 88%] 276s tests/test_telemetry.py::test_user_span_traceid_propagates_to_tango[Gevent] SKIPPED [ 88%] 276s tests/test_telemetry.py::test_base_device_kernel_tracing_disabled_by_default SKIPPED [ 88%] 276s tests/test_telemetry.py::test_base_device_traces_if_kernel_tracing_enabled[Synchronous] SKIPPED [ 88%] 276s tests/test_telemetry.py::test_base_device_traces_if_kernel_tracing_enabled[Asyncio] SKIPPED [ 88%] 276s tests/test_telemetry.py::test_base_device_traces_if_kernel_tracing_enabled[Gevent] SKIPPED [ 88%] 276s tests/test_telemetry.py::test_no_device_traces_if_device_tracing_disabled[Synchronous] SKIPPED [ 88%] 276s tests/test_telemetry.py::test_no_device_traces_if_device_tracing_disabled[Asyncio] SKIPPED [ 88%] 276s tests/test_telemetry.py::test_no_device_traces_if_device_tracing_disabled[Gevent] SKIPPED [ 89%] 276s tests/test_test_context.py::test_no_warnings_in_test_context PASSED [ 89%] 276s tests/test_test_context.py::test_single_device[Synchronous] PASSED [ 89%] 276s tests/test_test_context.py::test_single_device[Asyncio] FAILED [ 89%] 276s tests/test_test_context.py::test_single_device[Gevent] PASSED [ 89%] 276s tests/test_test_context.py::test_single_device_old_api PASSED [ 89%] 276s tests/test_test_context.py::test_nested_single_device_in_same_process_failure SKIPPED [ 89%] 277s tests/test_test_context.py::test_nested_single_device_in_different_processes_success_without_short_names PASSED [ 89%] 278s tests/test_test_context.py::test_nested_single_device_in_different_processes_failure_with_short_names PASSED [ 89%] 278s tests/test_test_context.py::test_multi_devices_info[SimpleDevice-SimpleDevice] PASSED [ 89%] 278s tests/test_test_context.py::test_multi_devices_info[tango.test_utils.SimpleDevice-SimpleDevice] PASSED [ 89%] 278s tests/test_test_context.py::test_multi_devices_info[class_field2-ClassicAPISimpleDeviceImpl] PASSED [ 90%] 278s tests/test_test_context.py::test_multi_devices_info[class_field3-ClassicAPISimpleDeviceImpl] PASSED [ 90%] 279s tests/test_test_context.py::test_multi_devices_info[class_field4-ClassicAPISimpleDeviceImpl] PASSED [ 90%] 279s tests/test_test_context.py::test_multi_devices_info[class_field5-ClassicAPISimpleDeviceImpl] PASSED [ 90%] 279s tests/test_test_context.py::test_multi_with_single_device[Synchronous] PASSED [ 90%] 279s tests/test_test_context.py::test_multi_with_single_device[Asyncio] FAILED [ 90%] 279s tests/test_test_context.py::test_multi_with_single_device[Gevent] PASSED [ 90%] 279s tests/test_test_context.py::test_multi_with_single_device_old_api PASSED [ 90%] 279s tests/test_test_context.py::test_multi_with_two_devices[Synchronous] PASSED [ 90%] 279s tests/test_test_context.py::test_multi_with_two_devices[Asyncio] FAILED [ 90%] 279s tests/test_test_context.py::test_multi_with_two_devices[Gevent] PASSED [ 90%] 279s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1GreenModeUnspecified-Device2GreenModeUnspecified-None] PASSED [ 90%] 279s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1GreenModeUnspecified-Device2Synchronous-None] PASSED [ 91%] 279s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1GreenModeUnspecified-Device2Gevent-ValueError] PASSED [ 91%] 279s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1GreenModeUnspecified-Device2Asyncio-ValueError] PASSED [ 91%] 279s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Synchronous-Device2GreenModeUnspecified-None] PASSED [ 91%] 280s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Synchronous-Device2Synchronous-None] PASSED [ 91%] 280s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Synchronous-Device2Gevent-ValueError] PASSED [ 91%] 280s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Synchronous-Device2Asyncio-ValueError] PASSED [ 91%] 280s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2GreenModeUnspecified-ValueError] PASSED [ 91%] 280s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Synchronous-ValueError] PASSED [ 91%] 280s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Gevent-ValueError] PASSED [ 91%] 280s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Asyncio-None] FAILED [ 91%] 280s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Gevent-Device2GreenModeUnspecified-ValueError] PASSED [ 91%] 280s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Gevent-Device2Synchronous-ValueError] PASSED [ 92%] 280s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Gevent-Device2Gevent-None] PASSED [ 92%] 280s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Gevent-Device2Asyncio-ValueError] PASSED [ 92%] 280s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Synchronous-Asyncio-Asyncio-None-SynchronousExecutor] FAILED [ 92%] 280s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Synchronous-Gevent-Gevent-None-SynchronousExecutor] PASSED [ 92%] 280s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Synchronous-Synchronous-None-AsyncioExecutor] FAILED [ 92%] 281s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Gevent-Gevent-None-AsyncioExecutor] FAILED [ 92%] 281s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Gevent-Synchronous-Synchronous-None-GeventExecutor] PASSED [ 92%] 281s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Gevent-Asyncio-Asyncio-None-GeventExecutor] FAILED [ 92%] 281s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Synchronous-Asyncio-None-SynchronousExecutor] FAILED [ 92%] 281s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Synchronous-Gevent-None-SynchronousExecutor] PASSED [ 92%] 281s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Gevent-Synchronous-None-GeventExecutor] PASSED [ 92%] 281s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Gevent-Asyncio-None-GeventExecutor] FAILED [ 93%] 281s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-None-Synchronous-None-SynchronousExecutor] PASSED [ 93%] 282s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Synchronous-DeprecationWarning-AsyncioExecutor] FAILED [ 93%] 282s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Gevent-DeprecationWarning-AsyncioExecutor] FAILED [ 93%] 282s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-None-Asyncio-RuntimeError-AsyncioExecutor] PASSED [ 93%] 283s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-None-Gevent-RuntimeError-GeventExecutor] PASSED [ 93%] 283s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-None-Asyncio-RuntimeError-AsyncioExecutor] PASSED [ 93%] 284s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Gevent-None-Gevent-RuntimeError-GeventExecutor] PASSED [ 93%] 284s tests/test_test_context.py::test_multi_with_async_devices_initialised FAILED [ 93%] 284s tests/test_test_context.py::test_multi_device_access_via_test_context_methods PASSED [ 93%] 285s tests/test_test_context.py::test_multi_short_name_device_proxy_access_without_tango_db PASSED [ 93%] 285s tests/test_test_context.py::test_multi_short_name_device_proxy_with_dependencies_access_without_tango_db PASSED [ 94%] 285s tests/test_test_context.py::test_multi_short_name_attribute_proxy_access_without_tango_db PASSED [ 94%] 285s tests/test_test_context.py::test_single_short_name_device_proxy_access_without_tango_db PASSED [ 94%] 285s tests/test_test_context.py::test_single_short_name_attribute_proxy_access_without_tango_db PASSED [ 94%] 286s tests/test_test_context.py::test_multi_short_name_access_fails_if_override_disabled PASSED [ 94%] 286s tests/test_test_context.py::test_multi_device_proxy_cached PASSED [ 94%] 286s tests/test_test_context.py::test_multi_with_two_devices_with_properties[Synchronous] PASSED [ 94%] 286s tests/test_test_context.py::test_multi_with_two_devices_with_properties[Asyncio] FAILED [ 94%] 286s tests/test_test_context.py::test_multi_with_two_devices_with_properties[Gevent] PASSED [ 94%] 286s tests/test_test_context.py::test_multi_raises_on_invalid_file_database_properties PASSED [ 94%] 286s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config0] PASSED [ 94%] 286s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config1] PASSED [ 94%] 286s 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%] 287s tests/test_test_context.py::test_multi_with_memorized_attribute_values[False-None-0] PASSED [ 95%] 287s tests/test_test_context.py::test_multi_with_memorized_attribute_values[False-1-0] PASSED [ 95%] 287s tests/test_test_context.py::test_multi_with_memorized_attribute_values[True-None-0] PASSED [ 95%] 287s tests/test_test_context.py::test_multi_with_memorized_attribute_values[True-1-1] PASSED [ 95%] 287s tests/test_test_context.py::test_single_with_memorized_attribute_values[False-None-0] PASSED [ 95%] 287s tests/test_test_context.py::test_single_with_memorized_attribute_values[False-1-0] PASSED [ 95%] 287s tests/test_test_context.py::test_single_with_memorized_attribute_values[True-None-0] PASSED [ 95%] 287s tests/test_test_context.py::test_single_with_memorized_attribute_values[True-1-1] PASSED [ 96%] 287s tests/test_test_context.py::test_empty_string_property_bug[str-property_value0- ] PASSED [ 96%] 287s tests/test_test_context.py::test_empty_string_property_bug[property_type1-property_value1-expected_outcome1] PASSED [ 96%] 287s 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] FAILED [ 96%] 288s tests/test_test_context.py::test_test_context_async_device_proxy[False] FAILED [ 96%] 288s tests/test_test_context.py::test_test_context_multi_async_device_proxy[True] FAILED [ 96%] 289s tests/test_test_context.py::test_test_context_multi_async_device_proxy[False] FAILED [ 96%] 289s tests/test_test_context.py::test_test_context_future_and_gevent_device_proxy[True-Futures] PASSED [ 96%] 290s tests/test_test_context.py::test_test_context_future_and_gevent_device_proxy[True-Gevent] PASSED [ 96%] 290s tests/test_test_context.py::test_test_context_future_and_gevent_device_proxy[False-Futures] PASSED [ 96%] 290s tests/test_test_context.py::test_test_context_future_and_gevent_device_proxy[False-Gevent] PASSED [ 97%] 290s tests/test_test_context.py::test_forwarded_attributes[True] XFAIL (D...) [ 97%] 290s tests/test_test_context.py::test_forwarded_attributes[False] XFAIL (...) [ 97%] 290s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[None-a/b/c-a/b/c] PASSED [ 97%] 290s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[None-a/b/c/d-a/b/c/d] PASSED [ 97%] 290s 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%] 290s 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%] 290s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[None-no://trl/validation-no://trl/validation] PASSED [ 97%] 290s 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%] 290s 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%] 290s 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%] 290s 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%] 290s 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%] 290s 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%] 290s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[host:123-a/b/c] PASSED [ 98%] 290s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://-a/b/c] PASSED [ 98%] 290s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://:123-a/b/c] PASSED [ 98%] 290s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host-a/b/c] PASSED [ 98%] 290s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host:0-a/b/c] PASSED [ 98%] 290s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host:12/path-a/b/c] PASSED [ 98%] 290s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host:123?query=1-a/b/c] PASSED [ 98%] 290s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host:123#dbase=invalid-a/b/c] PASSED [ 98%] 290s tests/test_utils.py::test_global_state_default_set_and_clear PASSED [ 98%] 290s tests/test_utils.py::test_clear_global_var_without_set_does_not_raise PASSED [ 98%] 290s tests/test_utils.py::test_get_tango_type_valid PASSED [ 99%] 290s tests/test_utils.py::test_get_tango_type_invalid_raises_type_error PASSED [ 99%] 291s tests/test_utils.py::test_sequence_to_string_vector_and_back PASSED [ 99%] 291s tests/test_utils.py::test_sequence_to_double_vector_and_back PASSED [ 99%] 291s tests/test_utils.py::test_sequence_to_dbdevinfo_vector_and_back PASSED [ 99%] 291s tests/test_utils.py::test_sequence_to_dbdevexportinfo_vector_and_back PASSED [ 99%] 291s tests/test_utils.py::test_sequence_to_dbdata_vector_and_back PASSED [ 99%] 291s tests/test_utils.py::test_sequence_to_dbdevimport_vector_and_back PASSED [ 99%] 291s tests/test_utils.py::test_sequence_to_dbhistorylist_vector_and_back PASSED [ 99%] 291s tests/test_utils.py::test_sequence_to_devicedatalist_vector_and_back PASSED [ 99%] 291s tests/test_utils.py::test_sequence_to_devicedatahistorylist_vector_and_back PASSED [ 99%] 291s tests/test_zzz_deprecated_pytango_module.py::test_import_aliased_module PASSED [100%] 291s 291s ==================================== ERRORS ==================================== 291s ____ ERROR at setup of test_read_write_attribute_with_green_modes[Asyncio] _____ 291s fixturedef = 291s request = > 291s 291s @pytest.hookimpl(wrapper=True) 291s def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None: 291s asyncio_mode = _get_asyncio_mode(request.config) 291s if not _is_asyncio_fixture_function(fixturedef.func): 291s if asyncio_mode == Mode.STRICT: 291s # Ignore async fixtures without explicit asyncio mark in strict mode 291s # This applies to pytest_trio fixtures, for example 291s > return (yield) 291s ^^^^^ 291s 291s /usr/lib/python3/dist-packages/pytest_asyncio/plugin.py:728: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s tests/conftest.py:201: in tango_test_with_green_modes 291s proxy = wait_for_proxy(host, proc, device, green_mode) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s tests/conftest.py:176: in wait_for_proxy 291s proxy = get_proxy(host, port, device, green_mode) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s tests/conftest.py:167: in get_proxy 291s return device_proxy_map[green_mode](access) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 291s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ---------------------------- Captured stdout setup ----------------------------- 291s Ready to accept request 291s =================================== FAILURES =================================== 291s ___________________ test_green_mode_kwarg_for_proxy_methods ____________________ 291s @pytest.mark.asyncio 291s async def test_green_mode_kwarg_for_proxy_methods(): 291s with DeviceTestContext(ServerTest, device_name="test/test_device/1"): 291s > dev = await get_device_proxy("test/test_device/1", green_mode=GreenMode.Asyncio) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_async.py:41: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 291s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stdout call ----------------------------- 291s Ready to accept request 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ____________________ test_read_write_attribute[int-Asyncio] ____________________ 291s attribute_typed_values = (, (1, 2, -65535, 23), . at 0xf99e5668fd70>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_attribute(attribute_typed_values, server_green_mode): 291s dtype, values, expected = attribute_typed_values 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s async def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s async def attr(self, value): 291s self.attr_value = value 291s 291s async def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s def attr(self, value): 291s self.attr_value = value 291s 291s def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:131: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ___________________ test_read_write_attribute[float-Asyncio] ___________________ 291s attribute_typed_values = (, (2.71, 3.14, -3.4678e-09, 1.2678e+16), . at 0xf99e566ac460>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_attribute(attribute_typed_values, server_green_mode): 291s dtype, values, expected = attribute_typed_values 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s async def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s async def attr(self, value): 291s self.attr_value = value 291s 291s async def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s def attr(self, value): 291s self.attr_value = value 291s 291s def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:131: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ____________________ test_read_write_attribute[str-Asyncio] ____________________ 291s 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 0xf99e566aca90>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_attribute(attribute_typed_values, server_green_mode): 291s dtype, values, expected = attribute_typed_values 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s async def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s async def attr(self, value): 291s self.attr_value = value 291s 291s async def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s def attr(self, value): 291s self.attr_value = value 291s 291s def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:131: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ___________________ test_read_write_attribute[bool-Asyncio] ____________________ 291s attribute_typed_values = (, (False, True, True, False), . at 0xf99e566ad0c0>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_attribute(attribute_typed_values, server_green_mode): 291s dtype, values, expected = attribute_typed_values 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s async def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s async def attr(self, value): 291s self.attr_value = value 291s 291s async def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s def attr(self, value): 291s self.attr_value = value 291s 291s def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:131: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________ test_read_write_attribute[(int,)-Asyncio] ___________________ 291s attribute_typed_values = ((,), (array([1, 2]), (1, 2, 3), [9, 8, 7], [-65535, 2224], [0, 0]), . at 0xf99e566ad6f0>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_attribute(attribute_typed_values, server_green_mode): 291s dtype, values, expected = attribute_typed_values 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s async def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s async def attr(self, value): 291s self.attr_value = value 291s 291s async def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s def attr(self, value): 291s self.attr_value = value 291s 291s def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:131: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________ test_read_write_attribute[(float,)-Asyncio] __________________ 291s 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 0xf99e566add20>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_attribute(attribute_typed_values, server_green_mode): 291s dtype, values, expected = attribute_typed_values 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s async def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s async def attr(self, value): 291s self.attr_value = value 291s 291s async def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s def attr(self, value): 291s self.attr_value = value 291s 291s def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:131: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________ test_read_write_attribute[(str,)-Asyncio] ___________________ 291s attribute_typed_values = ((,), (array(['foo', 'bar'], dtype='. at 0xf99e566ae350>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_attribute(attribute_typed_values, server_green_mode): 291s dtype, values, expected = attribute_typed_values 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s async def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s async def attr(self, value): 291s self.attr_value = value 291s 291s async def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s def attr(self, value): 291s self.attr_value = value 291s 291s def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:131: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________ test_read_write_attribute[(bool,)-Asyncio] __________________ 291s attribute_typed_values = ((,), (array([ True, False]), [False, False, True], [True, False, False], [False], [True]), . at 0xf99e566ae980>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_attribute(attribute_typed_values, server_green_mode): 291s dtype, values, expected = attribute_typed_values 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s async def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s async def attr(self, value): 291s self.attr_value = value 291s 291s async def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s def attr(self, value): 291s self.attr_value = value 291s 291s def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:131: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________ test_read_write_attribute[((int,),)-Asyncio] _________________ 291s attribute_typed_values = (((,),), (array([[1, 2], 291s [3, 4]]), ((1, 2, 3), (4, 5, 6)), [[-65535, 2224], [-65535, 2224]]), . at 0xf99e566aefb0>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_attribute(attribute_typed_values, server_green_mode): 291s dtype, values, expected = attribute_typed_values 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s async def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s async def attr(self, value): 291s self.attr_value = value 291s 291s async def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s def attr(self, value): 291s self.attr_value = value 291s 291s def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:131: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ________________ test_read_write_attribute[((float,),)-Asyncio] ________________ 291s attribute_typed_values = (((,),), (array([[0.1, 0.2], 291s [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 0xf99e566af5e0>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_attribute(attribute_typed_values, server_green_mode): 291s dtype, values, expected = attribute_typed_values 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s async def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s async def attr(self, value): 291s self.attr_value = value 291s 291s async def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s def attr(self, value): 291s self.attr_value = value 291s 291s def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:131: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________ test_read_write_attribute[((str,),)-Asyncio] _________________ 291s attribute_typed_values = (((,),), (array([['hi-hi', 'ha-ha'], 291s ['hu-hu', 'yuhuu']], dtype='. at 0xf99e566afc10>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_attribute(attribute_typed_values, server_green_mode): 291s dtype, values, expected = attribute_typed_values 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s async def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s async def attr(self, value): 291s self.attr_value = value 291s 291s async def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s def attr(self, value): 291s self.attr_value = value 291s 291s def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:131: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ________________ test_read_write_attribute[((bool,),)-Asyncio] _________________ 291s attribute_typed_values = (((,),), (array([[ True, False], 291s [False, True]]), [[False, False, True], [True, False, False]], [[False]], [[True]]), . at 0xf99e5660c300>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_attribute(attribute_typed_values, server_green_mode): 291s dtype, values, expected = attribute_typed_values 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s async def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s async def attr(self, value): 291s self.attr_value = value 291s 291s async def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s _is_allowed = None 291s 291s @attribute( 291s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 291s ) 291s def attr(self): 291s return self.attr_value 291s 291s @attr.write 291s def attr(self, value): 291s self.attr_value = value 291s 291s def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self._is_allowed 291s 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:131: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _____________ test_read_write_attribute_decorated_methods[Asyncio] _____________ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_attribute_decorated_methods(server_green_mode): 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class BaseTestDevice(Device): 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self.is_allowed = yesno 291s 291s else: 291s 291s class BaseTestDevice(Device): 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self.is_allowed = yesno 291s 291s class TestDevice(BaseTestDevice): 291s green_mode = server_green_mode 291s 291s attr_value = None 291s is_allowed = None 291s 291s attr = attribute(dtype=int, access=AttrWriteType.READ_WRITE) 291s 291s sync_code = textwrap.dedent( 291s """ 291s @general_decorator 291s def read_attr(self): 291s return self.attr_value 291s 291s @general_decorator 291s def write_attr(self, value): 291s self.attr_value = value 291s 291s @general_decorator 291s def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self.is_allowed 291s """ 291s ) 291s 291s if server_green_mode == GreenMode.Asyncio: 291s exec( 291s sync_code.replace("def", "async def").replace( 291s "general_decorator", "general_asyncio_decorator" 291s ) 291s ) 291s else: 291s exec(sync_code) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:421: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________ test_read_write_dynamic_attribute[low_level_read-Asyncio] ___________ 291s dynamic_attribute_read_function = 'def read_dyn_attr(self, attr):\n attr.set_value(self.attr_value)\n' 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_dynamic_attribute( 291s dynamic_attribute_read_function, server_green_mode 291s ): 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s attr_value = None 291s 291s @command 291s async def add_dyn_attr(self): 291s attr = attribute( 291s name="dyn_attr", 291s dtype=int, 291s access=AttrWriteType.READ_WRITE, 291s fget=self.read_dyn_attr, 291s fset=self.write_dyn_attr, 291s ) 291s await self.async_add_attribute(attr) 291s 291s @command 291s async def delete_dyn_attr(self): 291s await self.async_remove_attribute("dyn_attr") 291s 291s async def write_dyn_attr(self, attr): 291s self.attr_value = attr.get_write_value() 291s 291s exec(dynamic_attribute_read_function.replace("def ", "async def ")) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s attr_value = None 291s 291s @command 291s def add_dyn_attr(self): 291s attr = attribute( 291s name="dyn_attr", 291s dtype=int, 291s access=AttrWriteType.READ_WRITE, 291s fget=self.read_dyn_attr, 291s fset=self.write_dyn_attr, 291s ) 291s self.add_attribute(attr) 291s 291s @command 291s def delete_dyn_attr(self): 291s self.remove_attribute("dyn_attr") 291s 291s def write_dyn_attr(self, attr): 291s self.attr_value = attr.get_write_value() 291s 291s exec(dynamic_attribute_read_function) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:918: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________ test_read_write_dynamic_attribute[high_level_read-Asyncio] __________ 291s dynamic_attribute_read_function = 'def read_dyn_attr(self, attr):\n return self.attr_value\n' 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_dynamic_attribute( 291s dynamic_attribute_read_function, server_green_mode 291s ): 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s attr_value = None 291s 291s @command 291s async def add_dyn_attr(self): 291s attr = attribute( 291s name="dyn_attr", 291s dtype=int, 291s access=AttrWriteType.READ_WRITE, 291s fget=self.read_dyn_attr, 291s fset=self.write_dyn_attr, 291s ) 291s await self.async_add_attribute(attr) 291s 291s @command 291s async def delete_dyn_attr(self): 291s await self.async_remove_attribute("dyn_attr") 291s 291s async def write_dyn_attr(self, attr): 291s self.attr_value = attr.get_write_value() 291s 291s exec(dynamic_attribute_read_function.replace("def ", "async def ")) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s attr_value = None 291s 291s @command 291s def add_dyn_attr(self): 291s attr = attribute( 291s name="dyn_attr", 291s dtype=int, 291s access=AttrWriteType.READ_WRITE, 291s fget=self.read_dyn_attr, 291s fset=self.write_dyn_attr, 291s ) 291s self.add_attribute(attr) 291s 291s @command 291s def delete_dyn_attr(self): 291s self.remove_attribute("dyn_attr") 291s 291s def write_dyn_attr(self, attr): 291s self.attr_value = attr.get_write_value() 291s 291s exec(dynamic_attribute_read_function) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:918: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ___________________ test_async_add_remove_dynamic_attribute ____________________ 291s def test_async_add_remove_dynamic_attribute(): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s 291s def __init__(self, *args, **kwargs): 291s super().__init__(*args, **kwargs) 291s self.attr_value = None 291s 291s @command 291s async def add_dyn_attr(self): 291s attr = attribute( 291s name="dyn_attr", 291s dtype=int, 291s access=AttrWriteType.READ_WRITE, 291s fget=self.read_dyn_attr, 291s fset=self.write_dyn_attr, 291s ) 291s self.add_attribute(attr) 291s 291s @command 291s async def delete_dyn_attr(self): 291s self.remove_attribute("dyn_attr") 291s 291s @command 291s async def async_add_dyn_attr(self): 291s attr = attribute( 291s name="dyn_attr", 291s dtype=int, 291s access=AttrWriteType.READ_WRITE, 291s fget=self.read_dyn_attr, 291s fset=self.write_dyn_attr, 291s ) 291s await self.async_add_attribute(attr) 291s 291s @command 291s async def async_delete_dyn_attr(self): 291s await self.async_remove_attribute("dyn_attr") 291s 291s async def write_dyn_attr(self, attr): 291s self.attr_value = attr.get_write_value() 291s 291s async def read_dyn_attr(self, attr): 291s return self.attr_value 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:970: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __ test_read_write_dynamic_attribute_decorated_methods_default_names[Asyncio] __ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_dynamic_attribute_decorated_methods_default_names( 291s server_green_mode, 291s ): 291s 291s is_allowed = True 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s attr_value = None 291s is_allowed = None 291s 291s def initialize_dynamic_attributes(self): 291s attr = attribute(name="attr", dtype=int, access=AttrWriteType.READ_WRITE) 291s self.add_attribute(attr) 291s 291s def allowed(self): 291s return is_allowed 291s 291s sync_code = textwrap.dedent( 291s """\ 291s @general_decorator 291s def read_attr(self, attr): 291s return self.attr_value 291s 291s @general_decorator 291s def write_attr(self, attr): 291s self.attr_value = attr.get_write_value() 291s 291s @general_decorator 291s def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self.allowed() 291s """ 291s ) 291s 291s if server_green_mode != GreenMode.Asyncio: 291s exec(sync_code) 291s else: 291s exec( 291s sync_code.replace("def ", "async def ").replace( 291s "general_decorator", "general_asyncio_decorator" 291s ) 291s ) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:1291: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ___ test_read_write_dynamic_attribute_decorated_methods_user_names[Asyncio] ____ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_dynamic_attribute_decorated_methods_user_names(server_green_mode): 291s 291s is_allowed = True 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s attr_value = None 291s is_allowed = None 291s 291s def initialize_dynamic_attributes(self): 291s attr = attribute( 291s name="attr", 291s dtype=int, 291s access=AttrWriteType.READ_WRITE, 291s fget=self.user_read, 291s fset=self.user_write, 291s fisallowed=self.user_is_allowed, 291s ) 291s self.add_attribute(attr) 291s 291s def allowed(self): 291s return is_allowed 291s 291s sync_code = textwrap.dedent( 291s """\ 291s @general_decorator 291s def user_read(self, attr): 291s return self.attr_value 291s 291s @general_decorator 291s def user_write(self, attr): 291s self.attr_value = attr.get_write_value() 291s 291s @general_decorator 291s def user_is_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self.allowed() 291s """ 291s ) 291s 291s if server_green_mode != GreenMode.Asyncio: 291s exec(sync_code) 291s else: 291s exec( 291s sync_code.replace("def ", "async def ").replace( 291s "general_decorator", "general_asyncio_decorator" 291s ) 291s ) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:1352: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _______ test_read_write_dynamic_attribute_is_allowed_with_async[Asyncio] _______ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_read_write_dynamic_attribute_is_allowed_with_async(server_green_mode): 291s DYN_ATTRS_END_RANGE = 9 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class BaseTestDevice(Device): 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s for att_num in range(1, DYN_ATTRS_END_RANGE): 291s setattr(self, f"attr{att_num}_allowed", yesno) 291s 291s else: 291s 291s class BaseTestDevice(Device): 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s for att_num in range(1, DYN_ATTRS_END_RANGE): 291s setattr(self, f"attr{att_num}_allowed", yesno) 291s 291s class TestDevice(BaseTestDevice): 291s green_mode = server_green_mode 291s 291s def __init__(self, *args, **kwargs): 291s super().__init__(*args, **kwargs) 291s for att_num in range(1, DYN_ATTRS_END_RANGE): 291s setattr(self, f"attr{att_num}_allowed", True) 291s for att_num in range(1, DYN_ATTRS_END_RANGE): 291s setattr(self, f"attr{att_num}_value", None) 291s 291s def initialize_dynamic_attributes(self): 291s # recommended approach: using attribute() and bound methods: 291s attr = attribute( 291s name="dyn_attr1", 291s dtype=int, 291s access=AttrWriteType.READ_WRITE, 291s fget=self.read_dyn_attr1, 291s fset=self.write_dyn_attr1, 291s fisallowed=self.is_attr1_allowed, 291s ) 291s self.add_attribute(attr) 291s 291s # not recommended: using attribute() with unbound methods: 291s attr = attribute( 291s name="dyn_attr2", 291s dtype=int, 291s access=AttrWriteType.READ_WRITE, 291s fget=TestDevice.read_dyn_attr2, 291s fset=TestDevice.write_dyn_attr2, 291s fisallowed=TestDevice.is_attr2_allowed, 291s ) 291s self.add_attribute(attr) 291s 291s # possible approach: using attribute() with method name strings: 291s attr = attribute( 291s name="dyn_attr3", 291s dtype=int, 291s access=AttrWriteType.READ_WRITE, 291s fget="read_dyn_attr3", 291s fset="write_dyn_attr3", 291s fisallowed="is_attr3_allowed", 291s ) 291s self.add_attribute(attr) 291s 291s # old approach: using tango.AttrData with bound methods: 291s attr_name = "dyn_attr4" 291s data_info = self._get_attr_data_info() 291s dev_class = self.get_device_class() 291s attr_data = AttrData(attr_name, dev_class.get_name(), data_info) 291s self.add_attribute( 291s attr_data, 291s self.read_dyn_attr4, 291s self.write_dyn_attr4, 291s self.is_attr4_allowed, 291s ) 291s 291s # old approach: using tango.AttrData with unbound methods: 291s attr_name = "dyn_attr5" 291s attr_data = AttrData(attr_name, dev_class.get_name(), data_info) 291s self.add_attribute( 291s attr_data, 291s TestDevice.read_dyn_attr5, 291s TestDevice.write_dyn_attr5, 291s TestDevice.is_attr5_allowed, 291s ) 291s 291s # old approach: using tango.AttrData with default method names 291s attr_name = "dyn_attr6" 291s attr_data = AttrData(attr_name, dev_class.get_name(), data_info) 291s self.add_attribute(attr_data) 291s 291s # old approach: using tango.AttrData filled from dictionary 291s attr_name = "dyn_attr7" 291s d = { 291s "name": attr_name, 291s "class_name": dev_class.get_name(), 291s # not setting access explicitly 291s "fread": "read_dyn_attr7", 291s "fwrite": "write_dyn_attr7", 291s "fisallowed": self.is_attr7_allowed, 291s } 291s attr_data = AttrData.from_dict(d) 291s self.add_attribute(attr_data) 291s 291s # not recommened: implicit access level 291s attr = attribute( 291s name="dyn_attr8", 291s fset=self.write_dyn_attr8, 291s fisallowed=self.is_attr8_allowed, 291s ) 291s self.add_attribute(attr) 291s 291s def _get_attr_data_info(self): 291s simple_type, fmt = get_tango_type_format(int) 291s data_info = [[simple_type, fmt, READ_WRITE]] 291s return data_info 291s 291s # the following methods are written in plain text which looks 291s # weird. This is done so that it is easy to change for async 291s # tests without duplicating all the code. 291s read_code = textwrap.dedent( 291s """ 291s def read_dyn_attr(self, attr): 291s return self.attr_value 291s """ 291s ) 291s 291s write_code = textwrap.dedent( 291s """ 291s def write_dyn_attr(self, attr): 291s self.attr_value = attr.get_write_value() 291s """ 291s ) 291s 291s is_allowed_code = textwrap.dedent( 291s """ 291s def is_attr_allowed(self, req_type): 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return self.attr_allowed 291s """ 291s ) 291s 291s for attr_num in range(1, DYN_ATTRS_END_RANGE): 291s read_method = read_code.replace("read_dyn_attr", f"read_dyn_attr{attr_num}") 291s read_method = read_method.replace("attr_value", f"attr{attr_num}_value") 291s write_method = write_code.replace( 291s "write_dyn_attr", f"write_dyn_attr{attr_num}" 291s ) 291s write_method = write_method.replace("attr_value", f"attr{attr_num}_value") 291s if attr_num != 6: 291s is_allowed_method = is_allowed_code.replace( 291s "is_attr_allowed", f"is_attr{attr_num}_allowed" 291s ) 291s else: 291s # default name differs 291s is_allowed_method = is_allowed_code.replace( 291s "is_attr_allowed", f"is_dyn_attr{attr_num}_allowed" 291s ) 291s is_allowed_method = is_allowed_method.replace( 291s "self.attr_allowed", f"self.attr{attr_num}_allowed" 291s ) 291s 291s if server_green_mode != GreenMode.Asyncio: 291s exec(read_method) 291s exec(write_method) 291s exec(is_allowed_method) 291s else: 291s exec(read_method.replace("def ", "async def ")) 291s exec(write_method.replace("def ", "async def ")) 291s exec(is_allowed_method.replace("def ", "async def ")) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:1702: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _____________ test_dynamic_attribute_with_green_mode[Asyncio-True] _____________ 291s use_green_mode = True, server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s @pytest.mark.parametrize("use_green_mode", [True, False]) 291s def test_dynamic_attribute_with_green_mode(use_green_mode, server_green_mode): 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s attr_value = 123 291s 291s def initialize_dynamic_attributes(self): 291s global executor 291s executor = get_executor(server_green_mode) 291s attr = attribute( 291s name="attr_r", 291s dtype=int, 291s access=AttrWriteType.READ, 291s fget=self.user_read, 291s read_green_mode=use_green_mode, 291s ) 291s self.add_attribute(attr) 291s attr = attribute( 291s name="attr_rw", 291s dtype=int, 291s access=AttrWriteType.READ_WRITE, 291s fget=self.user_read, 291s fset=self.user_write, 291s read_green_mode=use_green_mode, 291s write_green_mode=use_green_mode, 291s ) 291s self.add_attribute(attr) 291s attr = attribute( 291s name="attr_ia", 291s dtype=int, 291s access=AttrWriteType.READ, 291s fget=self.user_read, 291s fisallowed=self.user_is_allowed, 291s read_green_mode=use_green_mode, 291s isallowed_green_mode=use_green_mode, 291s ) 291s self.add_attribute(attr) 291s attr = attribute( 291s name="attr_rw_always_ok", 291s dtype=int, 291s access=AttrWriteType.READ_WRITE, 291s fget=self.user_read, 291s fset=self.user_write, 291s green_mode=True, 291s ) 291s self.add_attribute(attr) 291s 291s sync_code = textwrap.dedent( 291s """ 291s def user_read(self, attr): 291s self.assert_executor_context_correct(attr.get_name()) 291s return self.attr_value 291s 291s def user_write(self, attr): 291s self.assert_executor_context_correct(attr.get_name()) 291s self.attr_value = attr.get_write_value() 291s 291s def user_is_allowed(self, req_type): 291s self.assert_executor_context_correct() 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return True 291s 291s """ 291s ) 291s 291s def assert_executor_context_correct(self, attr_name=""): 291s check_required = attr_name != "attr_rw_always_ok" 291s if check_required and executor.asynchronous: 291s assert executor.in_executor_context() == use_green_mode 291s 291s if server_green_mode == GreenMode.Asyncio and use_green_mode: 291s exec(sync_code.replace("def", "async def")) 291s else: 291s exec(sync_code) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:1799: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ____________ test_dynamic_attribute_with_green_mode[Asyncio-False] _____________ 291s use_green_mode = False, server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s @pytest.mark.parametrize("use_green_mode", [True, False]) 291s def test_dynamic_attribute_with_green_mode(use_green_mode, server_green_mode): 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s attr_value = 123 291s 291s def initialize_dynamic_attributes(self): 291s global executor 291s executor = get_executor(server_green_mode) 291s attr = attribute( 291s name="attr_r", 291s dtype=int, 291s access=AttrWriteType.READ, 291s fget=self.user_read, 291s read_green_mode=use_green_mode, 291s ) 291s self.add_attribute(attr) 291s attr = attribute( 291s name="attr_rw", 291s dtype=int, 291s access=AttrWriteType.READ_WRITE, 291s fget=self.user_read, 291s fset=self.user_write, 291s read_green_mode=use_green_mode, 291s write_green_mode=use_green_mode, 291s ) 291s self.add_attribute(attr) 291s attr = attribute( 291s name="attr_ia", 291s dtype=int, 291s access=AttrWriteType.READ, 291s fget=self.user_read, 291s fisallowed=self.user_is_allowed, 291s read_green_mode=use_green_mode, 291s isallowed_green_mode=use_green_mode, 291s ) 291s self.add_attribute(attr) 291s attr = attribute( 291s name="attr_rw_always_ok", 291s dtype=int, 291s access=AttrWriteType.READ_WRITE, 291s fget=self.user_read, 291s fset=self.user_write, 291s green_mode=True, 291s ) 291s self.add_attribute(attr) 291s 291s sync_code = textwrap.dedent( 291s """ 291s def user_read(self, attr): 291s self.assert_executor_context_correct(attr.get_name()) 291s return self.attr_value 291s 291s def user_write(self, attr): 291s self.assert_executor_context_correct(attr.get_name()) 291s self.attr_value = attr.get_write_value() 291s 291s def user_is_allowed(self, req_type): 291s self.assert_executor_context_correct() 291s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 291s return True 291s 291s """ 291s ) 291s 291s def assert_executor_context_correct(self, attr_name=""): 291s check_required = attr_name != "attr_rw_always_ok" 291s if check_required and executor.asynchronous: 291s assert executor.in_executor_context() == use_green_mode 291s 291s if server_green_mode == GreenMode.Asyncio and use_green_mode: 291s exec(sync_code.replace("def", "async def")) 291s else: 291s exec(sync_code) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:1799: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ______________________ test_attribute_decorators[Asyncio] ______________________ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_attribute_decorators(server_green_mode): 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class BaseTestDevice(Device): 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self.is_allowed = yesno 291s 291s else: 291s 291s class BaseTestDevice(Device): 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self.is_allowed = yesno 291s 291s class TestDevice(BaseTestDevice): 291s green_mode = server_green_mode 291s current_value = None 291s voltage_value = None 291s is_allowed = None 291s 291s current = attribute(label="Current", unit="mA", dtype=float) 291s voltage = attribute(label="Voltage", unit="V", dtype=float) 291s 291s sync_code = textwrap.dedent( 291s """ 291s @current.getter 291s def cur_read(self): 291s return self.current_value 291s 291s @current.setter 291s def cur_write(self, current): 291s self.current_value = current 291s 291s @current.is_allowed 291s def cur_allo(self, req_type): 291s return self.is_allowed 291s 291s @voltage.read 291s def vol_read(self): 291s return self.voltage_value 291s 291s @voltage.write 291s def vol_write(self, voltage): 291s self.voltage_value = voltage 291s 291s @voltage.is_allowed 291s def vol_allo(self, req_type): 291s return self.is_allowed 291s """ 291s ) 291s 291s if server_green_mode == GreenMode.Asyncio: 291s exec(sync_code.replace("def ", "async def ")) 291s else: 291s exec(sync_code) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:2013: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ________________________ test_polled_attribute[Asyncio] ________________________ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_polled_attribute(server_green_mode): 291s dct = {"PolledAttribute1": 100, "PolledAttribute2": 100000, "PolledAttribute3": 500} 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @attribute(polling_period=dct["PolledAttribute1"]) 291s def PolledAttribute1(self): 291s return 42.0 291s 291s @attribute(polling_period=dct["PolledAttribute2"]) 291s def PolledAttribute2(self): 291s return 43.0 291s 291s @attribute(polling_period=dct["PolledAttribute3"]) 291s def PolledAttribute3(self): 291s return 44.0 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_attributes.py:2164: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ______________________ test_identity_command[int-Asyncio] ______________________ 291s command_typed_values = (, (1, 2, -65535, 23), . at 0xf99e5659c720>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_identity_command(command_typed_values, server_green_mode): 291s dtype, values, expected = command_typed_values 291s 291s if dtype == (bool,): 291s pytest.xfail("Not supported for some reasons") 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s async def identity(self, arg): 291s return arg 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s def identity(self, arg): 291s return arg 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_commands.py:57: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _____________________ test_identity_command[float-Asyncio] _____________________ 291s command_typed_values = (, (2.71, 3.14, -3.4678e-09, 1.2678e+16), . at 0xf99e5659cd50>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_identity_command(command_typed_values, server_green_mode): 291s dtype, values, expected = command_typed_values 291s 291s if dtype == (bool,): 291s pytest.xfail("Not supported for some reasons") 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s async def identity(self, arg): 291s return arg 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s def identity(self, arg): 291s return arg 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_commands.py:57: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ______________________ test_identity_command[str-Asyncio] ______________________ 291s 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 0xf99e5659d380>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_identity_command(command_typed_values, server_green_mode): 291s dtype, values, expected = command_typed_values 291s 291s if dtype == (bool,): 291s pytest.xfail("Not supported for some reasons") 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s async def identity(self, arg): 291s return arg 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s def identity(self, arg): 291s return arg 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_commands.py:57: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _____________________ test_identity_command[bool-Asyncio] ______________________ 291s command_typed_values = (, (False, True, True, False), . at 0xf99e5659d9b0>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_identity_command(command_typed_values, server_green_mode): 291s dtype, values, expected = command_typed_values 291s 291s if dtype == (bool,): 291s pytest.xfail("Not supported for some reasons") 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s async def identity(self, arg): 291s return arg 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s def identity(self, arg): 291s return arg 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_commands.py:57: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ____________________ test_identity_command[(int,)-Asyncio] _____________________ 291s command_typed_values = ((,), (array([1, 2]), (1, 2, 3), [9, 8, 7], [-65535, 2224], [0, 0]), . at 0xf99e5659dfe0>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_identity_command(command_typed_values, server_green_mode): 291s dtype, values, expected = command_typed_values 291s 291s if dtype == (bool,): 291s pytest.xfail("Not supported for some reasons") 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s async def identity(self, arg): 291s return arg 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s def identity(self, arg): 291s return arg 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_commands.py:57: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ___________________ test_identity_command[(float,)-Asyncio] ____________________ 291s 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 0xf99e5659e610>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_identity_command(command_typed_values, server_green_mode): 291s dtype, values, expected = command_typed_values 291s 291s if dtype == (bool,): 291s pytest.xfail("Not supported for some reasons") 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s async def identity(self, arg): 291s return arg 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s def identity(self, arg): 291s return arg 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_commands.py:57: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ____________________ test_identity_command[(str,)-Asyncio] _____________________ 291s command_typed_values = ((,), (array(['foo', 'bar'], dtype='. at 0xf99e5659ec40>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_identity_command(command_typed_values, server_green_mode): 291s dtype, values, expected = command_typed_values 291s 291s if dtype == (bool,): 291s pytest.xfail("Not supported for some reasons") 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s async def identity(self, arg): 291s return arg 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s def identity(self, arg): 291s return arg 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_commands.py:57: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _____________ test_identity_command[DevVarLongStringArray-Asyncio] _____________ 291s command_typed_values = (tango._tango.CmdArgType.DevVarLongStringArray, ([[1, 2, 3], ['foo', 'bar', 'hmm']],), . at 0xf99e5659f8a0>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_identity_command(command_typed_values, server_green_mode): 291s dtype, values, expected = command_typed_values 291s 291s if dtype == (bool,): 291s pytest.xfail("Not supported for some reasons") 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s async def identity(self, arg): 291s return arg 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s def identity(self, arg): 291s return arg 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_commands.py:57: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ____________ test_identity_command[DevVarDoubleStringArray-Asyncio] ____________ 291s command_typed_values = (tango._tango.CmdArgType.DevVarDoubleStringArray, ([[1.1, 2.2, 3.3], ['foo', 'bar', 'hmm']],), . at 0xf99e5659fed0>) 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_identity_command(command_typed_values, server_green_mode): 291s dtype, values, expected = command_typed_values 291s 291s if dtype == (bool,): 291s pytest.xfail("Not supported for some reasons") 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s async def identity(self, arg): 291s return arg 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @command(dtype_in=dtype, dtype_out=dtype) 291s def identity(self, arg): 291s return arg 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_commands.py:57: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _______________________ test_decorated_command[Asyncio] ________________________ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_decorated_command(server_green_mode): 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s is_allowed = None 291s 291s @command(dtype_in=int, dtype_out=int) 291s @general_asyncio_decorator() 291s async def identity(self, arg): 291s return arg 291s 291s @general_asyncio_decorator 291s async def is_identity_allowed(self): 291s return self.is_allowed 291s 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self.is_allowed = yesno 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s is_allowed = None 291s 291s @command(dtype_in=int, dtype_out=int) 291s @general_decorator() 291s def identity(self, arg): 291s return arg 291s 291s @general_decorator 291s def is_identity_allowed(self): 291s return self.is_allowed 291s 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self.is_allowed = yesno 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_commands.py:158: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _______________________ test_command_isallowed[Asyncio] ________________________ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_command_isallowed(server_green_mode): 291s is_allowed = None 291s 291s def sync_allowed(device): 291s assert isinstance(device, TestDevice) 291s return is_allowed 291s 291s async def async_allowed(device): 291s assert isinstance(device, TestDevice) 291s return is_allowed 291s 291s class IsAllowedCallableClass: 291s def __init__(self): 291s self._is_allowed = None 291s 291s def __call__(self, device): 291s assert isinstance(device, TestDevice) 291s return self._is_allowed 291s 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s is_allowed_callable_class = IsAllowedCallableClass() 291s 291s class AsyncIsAllowedCallableClass(IsAllowedCallableClass): 291s async def __call__(self, device): 291s assert isinstance(device, TestDevice) 291s return self._is_allowed 291s 291s async_is_allowed_callable_class = AsyncIsAllowedCallableClass() 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def __init__(self, *args, **kwargs): 291s super().__init__(*args, **kwargs) 291s self._is_allowed = True 291s 291s @command(dtype_in=int, dtype_out=int) 291s async def identity(self, arg): 291s return arg 291s 291s @command(dtype_in=int, dtype_out=int, fisallowed="is_identity_allowed") 291s async def identity_kwarg_string(self, arg): 291s return arg 291s 291s @command( 291s dtype_in=int, 291s dtype_out=int, 291s fisallowed=async_allowed, 291s ) 291s async def identity_kwarg_callable(self, arg): 291s return arg 291s 291s @command( 291s dtype_in=int, dtype_out=int, fisallowed=async_is_allowed_callable_class 291s ) 291s async def identity_kwarg_callable_class(self, arg): 291s return arg 291s 291s @command(dtype_in=int, dtype_out=int) 291s async def identity_always_allowed(self, arg): 291s return arg 291s 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s async def is_identity_allowed(self): 291s return self._is_allowed 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def __init__(self, *args, **kwargs): 291s super().__init__(*args, **kwargs) 291s self._is_allowed = True 291s 291s @command(dtype_in=int, dtype_out=int) 291s def identity(self, arg): 291s return arg 291s 291s @command(dtype_in=int, dtype_out=int, fisallowed="is_identity_allowed") 291s def identity_kwarg_string(self, arg): 291s return arg 291s 291s @command(dtype_in=int, dtype_out=int, fisallowed=sync_allowed) 291s def identity_kwarg_callable(self, arg): 291s return arg 291s 291s @command(dtype_in=int, dtype_out=int, fisallowed=is_allowed_callable_class) 291s def identity_kwarg_callable_class(self, arg): 291s return arg 291s 291s @command(dtype_in=int, dtype_out=int) 291s def identity_always_allowed(self, arg): 291s return arg 291s 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s def is_identity_allowed(self): 291s return self._is_allowed 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_commands.py:276: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ______________________ test_dynamic_command[Asyncio-True] ______________________ 291s device_command_level = True, server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s @pytest.mark.parametrize("device_command_level", [True, False]) 291s def test_dynamic_command(device_command_level, server_green_mode): 291s is_allowed = None 291s 291s def sync_allowed(device): 291s assert isinstance(device, TestDevice) 291s return is_allowed 291s 291s async def async_allowed(device): 291s assert isinstance(device, TestDevice) 291s return is_allowed 291s 291s class IsAllowedCallable: 291s def __init__(self): 291s self._is_allowed = None 291s 291s def __call__(self, device): 291s assert isinstance(device, TestDevice) 291s return self._is_allowed 291s 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s class AsyncIsAllowedCallable(IsAllowedCallable): 291s async def __call__(self, device): 291s assert isinstance(device, TestDevice) 291s return self._is_allowed 291s 291s is_allowed_callable_class = IsAllowedCallable() 291s async_is_allowed_callable_class = AsyncIsAllowedCallable() 291s 291s class BaseTestDevice(Device): 291s green_mode = server_green_mode 291s 291s def __init__(self, *args, **kwargs): 291s super().__init__(*args, **kwargs) 291s self._is_allowed = True 291s 291s def _add_dyn_cmd(self): 291s cmd = command(f=self.identity, dtype_in=int, dtype_out=int) 291s self.add_command(cmd, device_command_level) 291s 291s cmd = command( 291s f=self.identity_kwarg_string, 291s dtype_in=int, 291s dtype_out=int, 291s fisallowed="is_identity_allowed", 291s ) 291s self.add_command(cmd, device_command_level) 291s 291s cmd = command( 291s f=self.identity_kwarg_callable, 291s dtype_in=int, 291s dtype_out=int, 291s fisallowed=self.is_identity_allowed, 291s ) 291s self.add_command(cmd, device_command_level) 291s 291s cmd = command( 291s f=self.identity_kwarg_callable_outside_class, 291s dtype_in=int, 291s dtype_out=int, 291s fisallowed=( 291s sync_allowed 291s if server_green_mode != GreenMode.Asyncio 291s else async_allowed 291s ), 291s ) 291s self.add_command(cmd, device_command_level) 291s 291s cmd = command( 291s f=self.identity_kwarg_callable_class, 291s dtype_in=int, 291s dtype_out=int, 291s fisallowed=( 291s is_allowed_callable_class 291s if server_green_mode != GreenMode.Asyncio 291s else async_is_allowed_callable_class 291s ), 291s ) 291s self.add_command(cmd, device_command_level) 291s 291s cmd = command(f=self.identity_always_allowed, dtype_in=int, dtype_out=int) 291s self.add_command(cmd, device_command_level) 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(BaseTestDevice): 291s async def identity(self, arg): 291s return arg 291s 291s async def identity_kwarg_string(self, arg): 291s return arg 291s 291s async def identity_kwarg_callable(self, arg): 291s return arg 291s 291s async def identity_kwarg_callable_outside_class(self, arg): 291s return arg 291s 291s async def identity_kwarg_callable_class(self, arg): 291s return arg 291s 291s async def identity_always_allowed(self, arg): 291s return arg 291s 291s @command() 291s async def add_dyn_cmd(self): 291s self._add_dyn_cmd() 291s 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s async def is_identity_allowed(self): 291s return self._is_allowed 291s 291s else: 291s 291s class TestDevice(BaseTestDevice): 291s def identity(self, arg): 291s return arg 291s 291s def identity_kwarg_string(self, arg): 291s return arg 291s 291s def identity_kwarg_callable(self, arg): 291s return arg 291s 291s def identity_kwarg_callable_outside_class(self, arg): 291s return arg 291s 291s def identity_kwarg_callable_class(self, arg): 291s return arg 291s 291s def identity_always_allowed(self, arg): 291s return arg 291s 291s @command() 291s def add_dyn_cmd(self): 291s self._add_dyn_cmd() 291s 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s def is_identity_allowed(self): 291s return self._is_allowed 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_commands.py:457: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _____________________ test_dynamic_command[Asyncio-False] ______________________ 291s device_command_level = False, server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s @pytest.mark.parametrize("device_command_level", [True, False]) 291s def test_dynamic_command(device_command_level, server_green_mode): 291s is_allowed = None 291s 291s def sync_allowed(device): 291s assert isinstance(device, TestDevice) 291s return is_allowed 291s 291s async def async_allowed(device): 291s assert isinstance(device, TestDevice) 291s return is_allowed 291s 291s class IsAllowedCallable: 291s def __init__(self): 291s self._is_allowed = None 291s 291s def __call__(self, device): 291s assert isinstance(device, TestDevice) 291s return self._is_allowed 291s 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s class AsyncIsAllowedCallable(IsAllowedCallable): 291s async def __call__(self, device): 291s assert isinstance(device, TestDevice) 291s return self._is_allowed 291s 291s is_allowed_callable_class = IsAllowedCallable() 291s async_is_allowed_callable_class = AsyncIsAllowedCallable() 291s 291s class BaseTestDevice(Device): 291s green_mode = server_green_mode 291s 291s def __init__(self, *args, **kwargs): 291s super().__init__(*args, **kwargs) 291s self._is_allowed = True 291s 291s def _add_dyn_cmd(self): 291s cmd = command(f=self.identity, dtype_in=int, dtype_out=int) 291s self.add_command(cmd, device_command_level) 291s 291s cmd = command( 291s f=self.identity_kwarg_string, 291s dtype_in=int, 291s dtype_out=int, 291s fisallowed="is_identity_allowed", 291s ) 291s self.add_command(cmd, device_command_level) 291s 291s cmd = command( 291s f=self.identity_kwarg_callable, 291s dtype_in=int, 291s dtype_out=int, 291s fisallowed=self.is_identity_allowed, 291s ) 291s self.add_command(cmd, device_command_level) 291s 291s cmd = command( 291s f=self.identity_kwarg_callable_outside_class, 291s dtype_in=int, 291s dtype_out=int, 291s fisallowed=( 291s sync_allowed 291s if server_green_mode != GreenMode.Asyncio 291s else async_allowed 291s ), 291s ) 291s self.add_command(cmd, device_command_level) 291s 291s cmd = command( 291s f=self.identity_kwarg_callable_class, 291s dtype_in=int, 291s dtype_out=int, 291s fisallowed=( 291s is_allowed_callable_class 291s if server_green_mode != GreenMode.Asyncio 291s else async_is_allowed_callable_class 291s ), 291s ) 291s self.add_command(cmd, device_command_level) 291s 291s cmd = command(f=self.identity_always_allowed, dtype_in=int, dtype_out=int) 291s self.add_command(cmd, device_command_level) 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(BaseTestDevice): 291s async def identity(self, arg): 291s return arg 291s 291s async def identity_kwarg_string(self, arg): 291s return arg 291s 291s async def identity_kwarg_callable(self, arg): 291s return arg 291s 291s async def identity_kwarg_callable_outside_class(self, arg): 291s return arg 291s 291s async def identity_kwarg_callable_class(self, arg): 291s return arg 291s 291s async def identity_always_allowed(self, arg): 291s return arg 291s 291s @command() 291s async def add_dyn_cmd(self): 291s self._add_dyn_cmd() 291s 291s @command(dtype_in=bool) 291s async def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s async def is_identity_allowed(self): 291s return self._is_allowed 291s 291s else: 291s 291s class TestDevice(BaseTestDevice): 291s def identity(self, arg): 291s return arg 291s 291s def identity_kwarg_string(self, arg): 291s return arg 291s 291s def identity_kwarg_callable(self, arg): 291s return arg 291s 291s def identity_kwarg_callable_outside_class(self, arg): 291s return arg 291s 291s def identity_kwarg_callable_class(self, arg): 291s return arg 291s 291s def identity_always_allowed(self, arg): 291s return arg 291s 291s @command() 291s def add_dyn_cmd(self): 291s self._add_dyn_cmd() 291s 291s @command(dtype_in=bool) 291s def make_allowed(self, yesno): 291s self._is_allowed = yesno 291s 291s def is_identity_allowed(self): 291s return self._is_allowed 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_commands.py:457: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _______________________ test_high_level_api_for_asyncio ________________________ 291s tango_test = TangoTest(sys/tg_test/17) 291s 291s @pytest.mark.asyncio 291s async def test_high_level_api_for_asyncio(tango_test): 291s tango_test.set_green_mode(GreenMode.Asyncio) 291s > _ = await tango_test.long_scalar 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_device_proxy.py:234: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/device_proxy.py:387: in __async_get_attribute_value 291s attr_value = await self.read_attribute(name) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 291s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ---------------------------- Captured stdout setup ----------------------------- 291s Ready to accept request 291s _________________________ test_repr_uses_info[Asyncio] _________________________ 291s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 291s simple_device_fqdn = 'tango://127.0.0.1:36493/test/nodb/testdevice#dbase=no' 291s 291s def test_repr_uses_info(green_mode_device_proxy, simple_device_fqdn): 291s > proxy = green_mode_device_proxy(simple_device_fqdn) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_device_proxy.py:578: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 291s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ---------------------------- Captured stdout setup ----------------------------- 291s Ready to accept request 291s ---------------------------- Captured stderr setup ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ________________ test_repr_default_if_info_unavailable[Asyncio] ________________ 291s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 291s simple_device_fqdn = 'tango://127.0.0.1:41585/test/nodb/testdevice#dbase=no' 291s 291s def test_repr_default_if_info_unavailable(green_mode_device_proxy, simple_device_fqdn): 291s > proxy = green_mode_device_proxy(simple_device_fqdn) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_device_proxy.py:583: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 291s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ---------------------------- Captured stdout setup ----------------------------- 291s Ready to accept request 291s ---------------------------- Captured stderr setup ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ____________ test_multiple_repr_calls_only_call_info_once[Asyncio] _____________ 291s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 291s simple_device_fqdn = 'tango://127.0.0.1:41235/test/nodb/testdevice#dbase=no' 291s 291s def test_multiple_repr_calls_only_call_info_once( 291s green_mode_device_proxy, simple_device_fqdn 291s ): 291s > proxy = green_mode_device_proxy(simple_device_fqdn) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_device_proxy.py:596: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 291s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ---------------------------- Captured stdout setup ----------------------------- 291s Ready to accept request 291s ---------------------------- Captured stderr setup ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ____________________ test_no_memory_leak_for_repr[Asyncio] _____________________ 291s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 291s simple_device_fqdn = 'tango://127.0.0.1:43541/test/nodb/testdevice#dbase=no' 291s 291s def test_no_memory_leak_for_repr(green_mode_device_proxy, simple_device_fqdn): 291s > proxy = green_mode_device_proxy(simple_device_fqdn) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_device_proxy.py:613: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 291s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ---------------------------- Captured stdout setup ----------------------------- 291s Ready to accept request 291s ---------------------------- Captured stderr setup ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _____________________ test_no_memory_leak_for_str[Asyncio] _____________________ 291s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 291s simple_device_fqdn = 'tango://127.0.0.1:45005/test/nodb/testdevice#dbase=no' 291s 291s def test_no_memory_leak_for_str(green_mode_device_proxy, simple_device_fqdn): 291s > proxy = green_mode_device_proxy(simple_device_fqdn) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_device_proxy.py:625: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 291s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ---------------------------- Captured stdout setup ----------------------------- 291s Ready to accept request 291s ---------------------------- Captured stderr setup ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ____________________ test_no_cyclic_ref_for_proxy[Asyncio] _____________________ 291s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 291s simple_device_fqdn = 'tango://127.0.0.1:60663/test/nodb/testdevice#dbase=no' 291s 291s def test_no_cyclic_ref_for_proxy(green_mode_device_proxy, simple_device_fqdn): 291s > proxy = green_mode_device_proxy(simple_device_fqdn) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_device_proxy.py:637: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 291s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ---------------------------- Captured stdout setup ----------------------------- 291s Ready to accept request 291s ---------------------------- Captured stderr setup ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ________________________ test_async_logging_decorators _________________________ 291s def test_async_logging_decorators(): 291s > with MultiDeviceTestContext(async_devices_info) as context: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_log.py:279: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ____________________________ test_logging[Asyncio] _____________________________ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_logging(server_green_mode): 291s log_received = threading.Event() 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class LogSourceDevice(Device): 291s green_mode = server_green_mode 291s _last_log_time = 0.0 291s 291s @command(dtype_in=("str",)) 291s async def log_fatal_message(self, msg): 291s self._last_log_time = time.time() 291s if len(msg) > 1: 291s self.fatal_stream(msg[0], msg[1]) 291s else: 291s self.fatal_stream(msg[0]) 291s 291s @command(dtype_in=("str",)) 291s async def log_error_message(self, msg): 291s self._last_log_time = time.time() 291s if len(msg) > 1: 291s self.error_stream(msg[0], msg[1]) 291s else: 291s self.error_stream(msg[0]) 291s 291s @command(dtype_in=("str",)) 291s async def log_warn_message(self, msg): 291s self._last_log_time = time.time() 291s if len(msg) > 1: 291s self.warn_stream(msg[0], msg[1]) 291s else: 291s self.warn_stream(msg[0]) 291s 291s @command(dtype_in=("str",)) 291s async def log_info_message(self, msg): 291s self._last_log_time = time.time() 291s if len(msg) > 1: 291s self.info_stream(msg[0], msg[1]) 291s else: 291s self.info_stream(msg[0]) 291s 291s @command(dtype_in=("str",)) 291s async def log_debug_message(self, msg): 291s self._last_log_time = time.time() 291s if len(msg) > 1: 291s self.debug_stream(msg[0], msg[1]) 291s else: 291s self.debug_stream(msg[0]) 291s 291s @attribute(dtype=float) 291s async def last_log_time(self): 291s return self._last_log_time 291s 291s class LogConsumerDevice(Device): 291s green_mode = server_green_mode 291s _last_log_data = [] 291s 291s @command(dtype_in=("str",)) 291s async def Log(self, argin): 291s self._last_log_data = argin 291s log_received.set() 291s 291s @attribute(dtype=int) 291s async def last_log_timestamp_ms(self): 291s return int(self._last_log_data[0]) 291s 291s @attribute(dtype=str) 291s async def last_log_level(self): 291s return self._last_log_data[1] 291s 291s @attribute(dtype=str) 291s async def last_log_source(self): 291s return self._last_log_data[2] 291s 291s @attribute(dtype=str) 291s async def last_log_message(self): 291s return self._last_log_data[3] 291s 291s @attribute(dtype=str) 291s async def last_log_context_unused(self): 291s return self._last_log_data[4] 291s 291s @attribute(dtype=str) 291s async def last_log_thread_id(self): 291s return self._last_log_data[5] 291s 291s else: 291s 291s class LogSourceDevice(Device): 291s green_mode = server_green_mode 291s _last_log_time = 0.0 291s 291s @command(dtype_in=("str",)) 291s def log_fatal_message(self, msg): 291s self._last_log_time = time.time() 291s if len(msg) > 1: 291s self.fatal_stream(msg[0], msg[1]) 291s else: 291s self.fatal_stream(msg[0]) 291s 291s @command(dtype_in=("str",)) 291s def log_error_message(self, msg): 291s self._last_log_time = time.time() 291s if len(msg) > 1: 291s self.error_stream(msg[0], msg[1]) 291s else: 291s self.error_stream(msg[0]) 291s 291s @command(dtype_in=("str",)) 291s def log_warn_message(self, msg): 291s self._last_log_time = time.time() 291s if len(msg) > 1: 291s self.warn_stream(msg[0], msg[1]) 291s else: 291s self.warn_stream(msg[0]) 291s 291s @command(dtype_in=("str",)) 291s def log_info_message(self, msg): 291s self._last_log_time = time.time() 291s if len(msg) > 1: 291s self.info_stream(msg[0], msg[1]) 291s else: 291s self.info_stream(msg[0]) 291s 291s @command(dtype_in=("str",)) 291s def log_debug_message(self, msg): 291s self._last_log_time = time.time() 291s if len(msg) > 1: 291s self.debug_stream(msg[0], msg[1]) 291s else: 291s self.debug_stream(msg[0]) 291s 291s @attribute(dtype=float) 291s def last_log_time(self): 291s return self._last_log_time 291s 291s class LogConsumerDevice(Device): 291s green_mode = server_green_mode 291s _last_log_data = [] 291s 291s @command(dtype_in=("str",)) 291s def Log(self, argin): 291s self._last_log_data = argin 291s log_received.set() 291s 291s @attribute(dtype=int) 291s def last_log_timestamp_ms(self): 291s return int(self._last_log_data[0]) 291s 291s @attribute(dtype=str) 291s def last_log_level(self): 291s return self._last_log_data[1] 291s 291s @attribute(dtype=str) 291s def last_log_source(self): 291s return self._last_log_data[2] 291s 291s @attribute(dtype=str) 291s def last_log_message(self): 291s return self._last_log_data[3] 291s 291s @attribute(dtype=str) 291s def last_log_context_unused(self): 291s return self._last_log_data[4] 291s 291s @attribute(dtype=str) 291s def last_log_thread_id(self): 291s return self._last_log_data[5] 291s 291s def assert_log_details_correct(level, msg): 291s assert log_received.wait(0.5) 291s _assert_log_time_close_enough() 291s _assert_log_fields_correct_for_level(level, msg) 291s log_received.clear() 291s 291s def _assert_log_time_close_enough(): 291s log_emit_time = proxy_source.last_log_time 291s log_receive_time = proxy_consumer.last_log_timestamp_ms / 1000.0 291s now = time.time() 291s # cppTango logger time function may use a different 291s # implementation to CPython's time.time(). This is 291s # especially noticeable on Windows platforms. 291s timer_implementation_tolerance = 0.020 if WINDOWS else 0.001 291s min_time = log_emit_time - timer_implementation_tolerance 291s max_time = now + timer_implementation_tolerance 291s assert min_time <= log_receive_time <= max_time 291s 291s def _assert_log_fields_correct_for_level(level, msg): 291s assert proxy_consumer.last_log_level == level.upper() 291s assert proxy_consumer.last_log_source == "test/log/source" 291s assert proxy_consumer.last_log_message == msg 291s assert proxy_consumer.last_log_context_unused == "" 291s assert len(proxy_consumer.last_log_thread_id) > 0 291s 291s devices_info = ( 291s {"class": LogSourceDevice, "devices": [{"name": "test/log/source"}]}, 291s {"class": LogConsumerDevice, "devices": [{"name": "test/log/consumer"}]}, 291s ) 291s 291s > with MultiDeviceTestContext(devices_info) as context: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_log.py:528: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________________ test_empty_device[Asyncio] __________________________ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_empty_device(server_green_mode): 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:133: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ___________________ test_set_state_status[ON-Asyncio-False] ____________________ 291s state = tango._tango.DevState.ON 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ____________________ test_set_state_status[ON-Asyncio-True] ____________________ 291s state = tango._tango.DevState.ON 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ___________________ test_set_state_status[OFF-Asyncio-False] ___________________ 291s state = tango._tango.DevState.OFF 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ___________________ test_set_state_status[OFF-Asyncio-True] ____________________ 291s state = tango._tango.DevState.OFF 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________ test_set_state_status[CLOSE-Asyncio-False] __________________ 291s state = tango._tango.DevState.CLOSE 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________ test_set_state_status[CLOSE-Asyncio-True] ___________________ 291s state = tango._tango.DevState.CLOSE 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________ test_set_state_status[OPEN-Asyncio-False] ___________________ 291s state = tango._tango.DevState.OPEN 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ___________________ test_set_state_status[OPEN-Asyncio-True] ___________________ 291s state = tango._tango.DevState.OPEN 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________ test_set_state_status[INSERT-Asyncio-False] __________________ 291s state = tango._tango.DevState.INSERT 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________ test_set_state_status[INSERT-Asyncio-True] __________________ 291s state = tango._tango.DevState.INSERT 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________ test_set_state_status[EXTRACT-Asyncio-False] _________________ 291s state = tango._tango.DevState.EXTRACT 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________ test_set_state_status[EXTRACT-Asyncio-True] __________________ 291s state = tango._tango.DevState.EXTRACT 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________ test_set_state_status[MOVING-Asyncio-False] __________________ 291s state = tango._tango.DevState.MOVING 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________ test_set_state_status[MOVING-Asyncio-True] __________________ 291s state = tango._tango.DevState.MOVING 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________ test_set_state_status[STANDBY-Asyncio-False] _________________ 291s state = tango._tango.DevState.STANDBY 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________ test_set_state_status[STANDBY-Asyncio-True] __________________ 291s state = tango._tango.DevState.STANDBY 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________ test_set_state_status[FAULT-Asyncio-False] __________________ 291s state = tango._tango.DevState.FAULT 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________ test_set_state_status[FAULT-Asyncio-True] ___________________ 291s state = tango._tango.DevState.FAULT 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________ test_set_state_status[INIT-Asyncio-False] ___________________ 291s state = tango._tango.DevState.INIT 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ___________________ test_set_state_status[INIT-Asyncio-True] ___________________ 291s state = tango._tango.DevState.INIT 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________ test_set_state_status[RUNNING-Asyncio-False] _________________ 291s state = tango._tango.DevState.RUNNING 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________ test_set_state_status[RUNNING-Asyncio-True] __________________ 291s state = tango._tango.DevState.RUNNING 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________ test_set_state_status[ALARM-Asyncio-False] __________________ 291s state = tango._tango.DevState.ALARM 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________ test_set_state_status[ALARM-Asyncio-True] ___________________ 291s state = tango._tango.DevState.ALARM 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________ test_set_state_status[DISABLE-Asyncio-False] _________________ 291s state = tango._tango.DevState.DISABLE 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________ test_set_state_status[DISABLE-Asyncio-True] __________________ 291s state = tango._tango.DevState.DISABLE 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________ test_set_state_status[UNKNOWN-Asyncio-False] _________________ 291s state = tango._tango.DevState.UNKNOWN 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________ test_set_state_status[UNKNOWN-Asyncio-True] __________________ 291s state = tango._tango.DevState.UNKNOWN 291s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 291s 291s @pytest.mark.parametrize("force_user_status", [False, True]) 291s def test_set_state_status(state, server_green_mode, force_user_status): 291s if force_user_status: 291s status = "\n".join( 291s ( 291s "This is a multiline status", 291s "with special characters such as", 291s "Café à la crème", 291s ) 291s ) 291s else: 291s status = f"The device is in {state!s} state." 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def init_device(self): 291s self.set_state(state) 291s if force_user_status: 291s self.set_status(status) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:215: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _____________________ test_user_dev_state_status[Asyncio] ______________________ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_user_dev_state_status(server_green_mode): 291s state = DevState.MOVING 291s status = "Device is MOVING" 291s 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s async def dev_state(self): 291s return state 291s 291s async def dev_status(self): 291s return status 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s def dev_state(self): 291s return state 291s 291s def dev_status(self): 291s return status 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:246: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ________________ test_attr_quality_checked_with_state[Asyncio] _________________ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_attr_quality_checked_with_state(server_green_mode): 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class BaseTestDevice(Device): 291s @command(dtype_out=bool) 291s async def check_sub_function_was_called(self): 291s return ( 291s self.read_attr_hardware_was_called 291s and self.always_executed_hook_was_called 291s ) 291s 291s else: 291s 291s class BaseTestDevice(Device): 291s @command(dtype_out=bool) 291s def check_sub_function_was_called(self): 291s return ( 291s self.read_attr_hardware_was_called 291s and self.always_executed_hook_was_called 291s ) 291s 291s class TestDevice(BaseTestDevice): 291s green_mode = server_green_mode 291s 291s read_attr_hardware_was_called = False 291s always_executed_hook_was_called = False 291s 291s sync_code = textwrap.dedent( 291s """ 291s def init_device(self): 291s Device.init_device(self) 291s self.set_state(DevState.ON) 291s 291s def read_attr_hardware(self, attr_list): 291s self.read_attr_hardware_was_called = True 291s return Device.read_attr_hardware(self, attr_list) 291s 291s def always_executed_hook(self): 291s self.always_executed_hook_was_called = True 291s 291s @attribute(max_alarm=0) 291s def test_attribute(self): 291s return 42 291s """ 291s ) 291s 291s if server_green_mode == GreenMode.Asyncio: 291s exec( 291s sync_code.replace("def", "async def").replace("Device", "await Device") 291s ) 291s else: 291s exec(sync_code) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:304: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _____________________ test_device_get_attr_config[Asyncio] _____________________ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_device_get_attr_config(server_green_mode): 291s class TestDevice(Device): 291s # green mode matters to check deadlocks in async modes 291s green_mode = server_green_mode 291s 291s sync_code = textwrap.dedent( 291s """ 291s @attribute(dtype=bool) 291s def attr_config_ok(self): 291s # testing that call to get_attribute_config for all types of 291s # input arguments gives same result and doesn't raise an exception 291s ac1 = self.get_attribute_config(b"attr_config_ok") 291s ac2 = self.get_attribute_config("attr_config_ok") 291s ac3 = self.get_attribute_config(["attr_config_ok"]) 291s return repr(ac1) == repr(ac2) == repr(ac3) 291s """ 291s ) 291s 291s if server_green_mode == GreenMode.Asyncio: 291s exec(sync_code.replace("def", "async def")) 291s else: 291s exec(sync_code) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:332: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _____________________ test_device_set_attr_config[Asyncio] _____________________ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_device_set_attr_config(server_green_mode): 291s class TestDevice(Device): 291s # green mode matters to check deadlocks in async modes 291s green_mode = server_green_mode 291s 291s sync_code = textwrap.dedent( 291s """ 291s @attribute(dtype=int) 291s def attr(self): 291s attr_config = self.get_attribute_config("attr") 291s attr_config[0].min_value = "-7" 291s attr_config[0].min_alarm = "-6" 291s 291s attr_config[0].max_alarm = "6" 291s attr_config[0].max_value = "7" 291s 291s self.set_attribute_config(attr_config) 291s assert repr(attr_config) == repr(self.get_attribute_config("attr")) 291s 291s with pytest.warns(PyTangoUserWarning, match="is not supported by Tango IDL"): 291s attr_config[0].lala = "7" 291s 291s attr_config = self.get_attribute_config_3("attr") 291s attr_config[0].min_value = "-5" 291s attr_config[0].att_alarm.min_alarm = "-4" 291s attr_config[0].att_alarm.min_warning = "-3" 291s 291s attr_config[0].att_alarm.max_warning = "3" 291s attr_config[0].att_alarm.max_alarm = "4" 291s attr_config[0].max_value = "5" 291s 291s self.set_attribute_config_3(attr_config) 291s assert repr(attr_config) == repr(self.get_attribute_config_3("attr")) 291s 291s with pytest.warns(PyTangoUserWarning, match="is not supported by Tango IDL"): 291s attr_config[0].lala = "7" 291s 291s attr = self.get_device_attr().get_attr_by_name("attr") 291s 291s val = -2 291s for f in ["min_alarm", "min_warning", "max_warning", "max_alarm"]: 291s getattr(attr, f"set_{f}")(val) 291s assert val == getattr(attr, f"get_{f}")() 291s val += 1 291s 291s return 1 291s """ 291s ) 291s 291s if server_green_mode == GreenMode.Asyncio: 291s exec(sync_code.replace("def", "async def")) 291s else: 291s exec(sync_code) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:390: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _____________________ test_exception_propagation[Asyncio] ______________________ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_exception_propagation(server_green_mode): 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @attribute 291s async def attr(self): 291s 1 / 0 # pylint: disable=pointless-statement 291s 291s @command 291s async def cmd(self): 291s 1 / 0 # pylint: disable=pointless-statement 291s 291s else: 291s 291s class TestDevice(Device): 291s green_mode = server_green_mode 291s 291s @attribute 291s def attr(self): 291s 1 / 0 # pylint: disable=pointless-statement 291s 291s @command 291s def cmd(self): 291s 1 / 0 # pylint: disable=pointless-statement 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:873: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________ test_asyncio_server_init_hook_change_state __________________ 291s def test_asyncio_server_init_hook_change_state(): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s 291s async def server_init_hook(self): 291s await asyncio.sleep(0.01) 291s self.set_state(DevState.ON) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:959: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ________________ test_async_server_init_hook_called_after_init _________________ 291s def test_async_server_init_hook_called_after_init(): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s 291s async def init_device(self): 291s await asyncio.sleep(0.01) 291s self.set_state(DevState.INIT) 291s 291s async def server_init_hook(self): 291s await asyncio.sleep(0.01) 291s self.set_state(DevState.ON) 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:987: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ___________________ test_asyncio_server_init_hook_exception ____________________ 291s def test_asyncio_server_init_hook_exception(): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s 291s async def server_init_hook(self): 291s await asyncio.sleep(0.01) 291s raise RuntimeError("Force exception for test") 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:1010: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _____ test_deprecation_warning_for_sync_attr_com_methods_in_asyncio_device _____ 291s def test_deprecation_warning_for_sync_attr_com_methods_in_asyncio_device(): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s attr_value = 1 291s 291s # static attributes and commands 291s 291s @attribute(access=AttrWriteType.READ_WRITE) 291s async def attr_all_methods_async(self) -> int: 291s return self.attr_value 291s 291s @attr_all_methods_async.write 291s async def attr_all_methods_async(self, value): 291s self.attr_value = value 291s 291s @attr_all_methods_async.is_allowed 291s async def attr_all_methods_async(self, req_type): 291s return True 291s 291s @attribute(access=AttrWriteType.READ_WRITE) 291s def attr_sync_read_write(self) -> int: 291s return self.attr_value 291s 291s @attr_sync_read_write.write 291s def set_attr_sync_read_write(self, value): 291s self.attr_value = value 291s 291s @attribute 291s async def attr_sync_is_allowed(self) -> int: 291s return self.attr_value 291s 291s @attr_sync_is_allowed.is_allowed 291s def is_attr_sync_is_allowed(self, req_type): 291s return True 291s 291s @command(dtype_out=int) 291s async def cmd_all_methods_async(self, val_in: int) -> int: 291s return val_in 291s 291s async def is_cmd_all_methods_async_allowed(self): 291s return True 291s 291s @command(dtype_out=int) 291s def cmd_sync_func(self, val_in: int) -> int: 291s return val_in 291s 291s @command(dtype_out=int) 291s async def cmd_sync_is_allowed(self, val_in: int) -> int: 291s return val_in 291s 291s def is_cmd_sync_is_allowed_allowed(self): 291s return True 291s 291s # dynamic attributes and commands 291s 291s @command 291s async def add_dynamic_cmd_attr(self): 291s attr = attribute( 291s name="dyn_attr_all_methods_async", 291s access=AttrWriteType.READ_WRITE, 291s fget=self.dyn_attr_all_methods_async, 291s fset=self.dyn_set_attr_all_methods_async, 291s fisallowed=self.is_dyn_attr_all_methods_async_allowed, 291s ) 291s self.add_attribute(attr) 291s 291s attr = attribute( 291s name="dyn_attr_sync_read_write", 291s access=AttrWriteType.READ_WRITE, 291s fget=self.dyn_attr_sync_read_write, 291s fset=self.dyn_set_attr_sync_read_write, 291s ) 291s self.add_attribute(attr) 291s 291s attr = attribute( 291s name="dyn_attr_sync_is_allowed", 291s access=AttrWriteType.READ, 291s fget=self.dyn_attr_sync_is_allowed, 291s fisallowed=self.is_dyn_attr_sync_is_allowed, 291s ) 291s self.add_attribute(attr) 291s 291s cmd = command( 291s f=self.dyn_cmd_all_methods_async, 291s fisallowed=self.is_dyn_cmd_all_methods_async_allowed, 291s ) 291s self.add_command(cmd) 291s 291s cmd = command(f=self.dyn_cmd_sync_func) 291s self.add_command(cmd) 291s 291s cmd = command( 291s f=self.dyn_cmd_sync_is_allowed, 291s fisallowed=self.is_dyn_cmd_sync_is_allowed_allowed, 291s ) 291s self.add_command(cmd) 291s 291s async def dyn_attr_all_methods_async(self, attr) -> int: 291s return self.attr_value 291s 291s async def dyn_set_attr_all_methods_async(self, attr): 291s self.attr_value = attr.get_write_value() 291s 291s async def is_dyn_attr_all_methods_async_allowed(self, req_type): 291s return True 291s 291s def dyn_attr_sync_read_write(self, attr) -> int: 291s return self.attr_value 291s 291s def dyn_set_attr_sync_read_write(self, attr): 291s self.attr_value = attr.get_write_value() 291s 291s async def dyn_attr_sync_is_allowed(self, attr) -> int: 291s return self.attr_value 291s 291s def is_dyn_attr_sync_is_allowed(self, req_type): 291s return True 291s 291s async def dyn_cmd_all_methods_async(self, val_in: int) -> int: 291s return val_in 291s 291s async def is_dyn_cmd_all_methods_async_allowed(self): 291s return True 291s 291s def dyn_cmd_sync_func(self, val_in: int) -> int: 291s return val_in 291s 291s async def dyn_cmd_sync_is_allowed(self, val_in: int) -> int: 291s return val_in 291s 291s def is_dyn_cmd_sync_is_allowed_allowed(self): 291s return True 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:1286: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _ test_deprecation_warning_for_standard_methods_in_asyncio_device[init_device] _ 291s method = 'init_device' 291s 291s @pytest.mark.parametrize( 291s "method", 291s [ 291s "init_device", 291s "delete_device", 291s "dev_state", 291s "dev_status", 291s "read_attr_hardware", 291s "always_executed_hook", 291s ], 291s ) 291s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s 291s @attribute 291s async def attr(self) -> int: 291s return 1 291s 291s async_code = textwrap.dedent( 291s """ 291s async def init_device(self): 291s pass 291s 291s async def delete_device(self): 291s pass 291s 291s async def dev_state(self): 291s return DevState.ON 291s 291s async def dev_status(self): 291s return "All good" 291s 291s async def read_attr_hardware(self, attr_list): 291s pass 291s 291s async def always_executed_hook(self): 291s pass 291s """ 291s ) 291s 291s exec(async_code.replace(f"async def {method}", f"def {method}")) 291s 291s with pytest.warns(DeprecationWarning, match=method): 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:1374: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s 291s During handling of the above exception, another exception occurred: 291s 291s method = 'init_device' 291s 291s @pytest.mark.parametrize( 291s "method", 291s [ 291s "init_device", 291s "delete_device", 291s "dev_state", 291s "dev_status", 291s "read_attr_hardware", 291s "always_executed_hook", 291s ], 291s ) 291s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s 291s @attribute 291s async def attr(self) -> int: 291s return 1 291s 291s async_code = textwrap.dedent( 291s """ 291s async def init_device(self): 291s pass 291s 291s async def delete_device(self): 291s pass 291s 291s async def dev_state(self): 291s return DevState.ON 291s 291s async def dev_status(self): 291s return "All good" 291s 291s async def read_attr_hardware(self, attr_list): 291s pass 291s 291s async def always_executed_hook(self): 291s pass 291s """ 291s ) 291s 291s exec(async_code.replace(f"async def {method}", f"def {method}")) 291s 291s > with pytest.warns(DeprecationWarning, match=method): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 291s E Emitted warnings: []. 291s 291s tests/test_server.py:1373: Failed 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _ test_deprecation_warning_for_standard_methods_in_asyncio_device[delete_device] _ 291s method = 'delete_device' 291s 291s @pytest.mark.parametrize( 291s "method", 291s [ 291s "init_device", 291s "delete_device", 291s "dev_state", 291s "dev_status", 291s "read_attr_hardware", 291s "always_executed_hook", 291s ], 291s ) 291s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s 291s @attribute 291s async def attr(self) -> int: 291s return 1 291s 291s async_code = textwrap.dedent( 291s """ 291s async def init_device(self): 291s pass 291s 291s async def delete_device(self): 291s pass 291s 291s async def dev_state(self): 291s return DevState.ON 291s 291s async def dev_status(self): 291s return "All good" 291s 291s async def read_attr_hardware(self, attr_list): 291s pass 291s 291s async def always_executed_hook(self): 291s pass 291s """ 291s ) 291s 291s exec(async_code.replace(f"async def {method}", f"def {method}")) 291s 291s with pytest.warns(DeprecationWarning, match=method): 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:1374: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s 291s During handling of the above exception, another exception occurred: 291s 291s method = 'delete_device' 291s 291s @pytest.mark.parametrize( 291s "method", 291s [ 291s "init_device", 291s "delete_device", 291s "dev_state", 291s "dev_status", 291s "read_attr_hardware", 291s "always_executed_hook", 291s ], 291s ) 291s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s 291s @attribute 291s async def attr(self) -> int: 291s return 1 291s 291s async_code = textwrap.dedent( 291s """ 291s async def init_device(self): 291s pass 291s 291s async def delete_device(self): 291s pass 291s 291s async def dev_state(self): 291s return DevState.ON 291s 291s async def dev_status(self): 291s return "All good" 291s 291s async def read_attr_hardware(self, attr_list): 291s pass 291s 291s async def always_executed_hook(self): 291s pass 291s """ 291s ) 291s 291s exec(async_code.replace(f"async def {method}", f"def {method}")) 291s 291s > with pytest.warns(DeprecationWarning, match=method): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 291s E Emitted warnings: []. 291s 291s tests/test_server.py:1373: Failed 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __ test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_state] __ 291s method = 'dev_state' 291s 291s @pytest.mark.parametrize( 291s "method", 291s [ 291s "init_device", 291s "delete_device", 291s "dev_state", 291s "dev_status", 291s "read_attr_hardware", 291s "always_executed_hook", 291s ], 291s ) 291s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s 291s @attribute 291s async def attr(self) -> int: 291s return 1 291s 291s async_code = textwrap.dedent( 291s """ 291s async def init_device(self): 291s pass 291s 291s async def delete_device(self): 291s pass 291s 291s async def dev_state(self): 291s return DevState.ON 291s 291s async def dev_status(self): 291s return "All good" 291s 291s async def read_attr_hardware(self, attr_list): 291s pass 291s 291s async def always_executed_hook(self): 291s pass 291s """ 291s ) 291s 291s exec(async_code.replace(f"async def {method}", f"def {method}")) 291s 291s with pytest.warns(DeprecationWarning, match=method): 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:1374: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s 291s During handling of the above exception, another exception occurred: 291s 291s method = 'dev_state' 291s 291s @pytest.mark.parametrize( 291s "method", 291s [ 291s "init_device", 291s "delete_device", 291s "dev_state", 291s "dev_status", 291s "read_attr_hardware", 291s "always_executed_hook", 291s ], 291s ) 291s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s 291s @attribute 291s async def attr(self) -> int: 291s return 1 291s 291s async_code = textwrap.dedent( 291s """ 291s async def init_device(self): 291s pass 291s 291s async def delete_device(self): 291s pass 291s 291s async def dev_state(self): 291s return DevState.ON 291s 291s async def dev_status(self): 291s return "All good" 291s 291s async def read_attr_hardware(self, attr_list): 291s pass 291s 291s async def always_executed_hook(self): 291s pass 291s """ 291s ) 291s 291s exec(async_code.replace(f"async def {method}", f"def {method}")) 291s 291s > with pytest.warns(DeprecationWarning, match=method): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 291s E Emitted warnings: []. 291s 291s tests/test_server.py:1373: Failed 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _ test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_status] __ 291s method = 'dev_status' 291s 291s @pytest.mark.parametrize( 291s "method", 291s [ 291s "init_device", 291s "delete_device", 291s "dev_state", 291s "dev_status", 291s "read_attr_hardware", 291s "always_executed_hook", 291s ], 291s ) 291s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s 291s @attribute 291s async def attr(self) -> int: 291s return 1 291s 291s async_code = textwrap.dedent( 291s """ 291s async def init_device(self): 291s pass 291s 291s async def delete_device(self): 291s pass 291s 291s async def dev_state(self): 291s return DevState.ON 291s 291s async def dev_status(self): 291s return "All good" 291s 291s async def read_attr_hardware(self, attr_list): 291s pass 291s 291s async def always_executed_hook(self): 291s pass 291s """ 291s ) 291s 291s exec(async_code.replace(f"async def {method}", f"def {method}")) 291s 291s with pytest.warns(DeprecationWarning, match=method): 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:1374: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s 291s During handling of the above exception, another exception occurred: 291s 291s method = 'dev_status' 291s 291s @pytest.mark.parametrize( 291s "method", 291s [ 291s "init_device", 291s "delete_device", 291s "dev_state", 291s "dev_status", 291s "read_attr_hardware", 291s "always_executed_hook", 291s ], 291s ) 291s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s 291s @attribute 291s async def attr(self) -> int: 291s return 1 291s 291s async_code = textwrap.dedent( 291s """ 291s async def init_device(self): 291s pass 291s 291s async def delete_device(self): 291s pass 291s 291s async def dev_state(self): 291s return DevState.ON 291s 291s async def dev_status(self): 291s return "All good" 291s 291s async def read_attr_hardware(self, attr_list): 291s pass 291s 291s async def always_executed_hook(self): 291s pass 291s """ 291s ) 291s 291s exec(async_code.replace(f"async def {method}", f"def {method}")) 291s 291s > with pytest.warns(DeprecationWarning, match=method): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 291s E Emitted warnings: []. 291s 291s tests/test_server.py:1373: Failed 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _ test_deprecation_warning_for_standard_methods_in_asyncio_device[read_attr_hardware] _ 291s method = 'read_attr_hardware' 291s 291s @pytest.mark.parametrize( 291s "method", 291s [ 291s "init_device", 291s "delete_device", 291s "dev_state", 291s "dev_status", 291s "read_attr_hardware", 291s "always_executed_hook", 291s ], 291s ) 291s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s 291s @attribute 291s async def attr(self) -> int: 291s return 1 291s 291s async_code = textwrap.dedent( 291s """ 291s async def init_device(self): 291s pass 291s 291s async def delete_device(self): 291s pass 291s 291s async def dev_state(self): 291s return DevState.ON 291s 291s async def dev_status(self): 291s return "All good" 291s 291s async def read_attr_hardware(self, attr_list): 291s pass 291s 291s async def always_executed_hook(self): 291s pass 291s """ 291s ) 291s 291s exec(async_code.replace(f"async def {method}", f"def {method}")) 291s 291s with pytest.warns(DeprecationWarning, match=method): 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:1374: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s 291s During handling of the above exception, another exception occurred: 291s 291s method = 'read_attr_hardware' 291s 291s @pytest.mark.parametrize( 291s "method", 291s [ 291s "init_device", 291s "delete_device", 291s "dev_state", 291s "dev_status", 291s "read_attr_hardware", 291s "always_executed_hook", 291s ], 291s ) 291s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s 291s @attribute 291s async def attr(self) -> int: 291s return 1 291s 291s async_code = textwrap.dedent( 291s """ 291s async def init_device(self): 291s pass 291s 291s async def delete_device(self): 291s pass 291s 291s async def dev_state(self): 291s return DevState.ON 291s 291s async def dev_status(self): 291s return "All good" 291s 291s async def read_attr_hardware(self, attr_list): 291s pass 291s 291s async def always_executed_hook(self): 291s pass 291s """ 291s ) 291s 291s exec(async_code.replace(f"async def {method}", f"def {method}")) 291s 291s > with pytest.warns(DeprecationWarning, match=method): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 291s E Emitted warnings: []. 291s 291s tests/test_server.py:1373: Failed 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _ test_deprecation_warning_for_standard_methods_in_asyncio_device[always_executed_hook] _ 291s method = 'always_executed_hook' 291s 291s @pytest.mark.parametrize( 291s "method", 291s [ 291s "init_device", 291s "delete_device", 291s "dev_state", 291s "dev_status", 291s "read_attr_hardware", 291s "always_executed_hook", 291s ], 291s ) 291s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s 291s @attribute 291s async def attr(self) -> int: 291s return 1 291s 291s async_code = textwrap.dedent( 291s """ 291s async def init_device(self): 291s pass 291s 291s async def delete_device(self): 291s pass 291s 291s async def dev_state(self): 291s return DevState.ON 291s 291s async def dev_status(self): 291s return "All good" 291s 291s async def read_attr_hardware(self, attr_list): 291s pass 291s 291s async def always_executed_hook(self): 291s pass 291s """ 291s ) 291s 291s exec(async_code.replace(f"async def {method}", f"def {method}")) 291s 291s with pytest.warns(DeprecationWarning, match=method): 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_server.py:1374: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s 291s During handling of the above exception, another exception occurred: 291s 291s method = 'always_executed_hook' 291s 291s @pytest.mark.parametrize( 291s "method", 291s [ 291s "init_device", 291s "delete_device", 291s "dev_state", 291s "dev_status", 291s "read_attr_hardware", 291s "always_executed_hook", 291s ], 291s ) 291s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 291s class TestDevice(Device): 291s green_mode = GreenMode.Asyncio 291s 291s @attribute 291s async def attr(self) -> int: 291s return 1 291s 291s async_code = textwrap.dedent( 291s """ 291s async def init_device(self): 291s pass 291s 291s async def delete_device(self): 291s pass 291s 291s async def dev_state(self): 291s return DevState.ON 291s 291s async def dev_status(self): 291s return "All good" 291s 291s async def read_attr_hardware(self, attr_list): 291s pass 291s 291s async def always_executed_hook(self): 291s pass 291s """ 291s ) 291s 291s exec(async_code.replace(f"async def {method}", f"def {method}")) 291s 291s > with pytest.warns(DeprecationWarning, match=method): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 291s E Emitted warnings: []. 291s 291s tests/test_server.py:1373: Failed 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________________ test_single_device[Asyncio] __________________________ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_single_device(server_green_mode): 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device1Asyncio): 291s pass 291s 291s else: 291s 291s class TestDevice(Device1): 291s green_mode = server_green_mode 291s 291s > with DeviceTestContext(TestDevice) as proxy: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:144: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ____________________ test_multi_with_single_device[Asyncio] ____________________ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_multi_with_single_device(server_green_mode): 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice(Device1Asyncio): 291s pass 291s 291s else: 291s 291s class TestDevice(Device1): 291s green_mode = server_green_mode 291s 291s devices_info = ({"class": TestDevice, "devices": [{"name": "test/device1/1"}]},) 291s 291s > with MultiDeviceTestContext(devices_info) as context: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:235: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _____________________ test_multi_with_two_devices[Asyncio] _____________________ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_multi_with_two_devices(server_green_mode): 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice1(Device1Asyncio): 291s pass 291s 291s class TestDevice2(Device2Asyncio): 291s pass 291s 291s else: 291s 291s class TestDevice1(Device1): 291s green_mode = server_green_mode 291s 291s class TestDevice2(Device2): 291s green_mode = server_green_mode 291s 291s devices_info = ( 291s {"class": TestDevice1, "devices": [{"name": "test/device1/1"}]}, 291s {"class": TestDevice2, "devices": [{"name": "test/device2/1"}]}, 291s ) 291s 291s > with MultiDeviceTestContext(devices_info) as context: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:275: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _ test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Asyncio-None] _ 291s first_type = 291s second_type = , exception_type = None 291s 291s @pytest.mark.parametrize( 291s "first_type, second_type, exception_type", 291s [ 291s (Device1GreenModeUnspecified, Device2GreenModeUnspecified, None), 291s (Device1GreenModeUnspecified, Device2Synchronous, None), 291s (Device1GreenModeUnspecified, Device2Gevent, ValueError), 291s (Device1GreenModeUnspecified, Device2Asyncio, ValueError), 291s (Device1Synchronous, Device2GreenModeUnspecified, None), 291s (Device1Synchronous, Device2Synchronous, None), 291s (Device1Synchronous, Device2Gevent, ValueError), 291s (Device1Synchronous, Device2Asyncio, ValueError), 291s (Device1Asyncio, Device2GreenModeUnspecified, ValueError), 291s (Device1Asyncio, Device2Synchronous, ValueError), 291s (Device1Asyncio, Device2Gevent, ValueError), 291s (Device1Asyncio, Device2Asyncio, None), 291s (Device1Gevent, Device2GreenModeUnspecified, ValueError), 291s (Device1Gevent, Device2Synchronous, ValueError), 291s (Device1Gevent, Device2Gevent, None), 291s (Device1Gevent, Device2Asyncio, ValueError), 291s ], 291s ) 291s def test_multi_with_mixed_device_green_modes(first_type, second_type, exception_type): 291s devices_info = ( 291s {"class": first_type, "devices": [{"name": "test/device1/1"}]}, 291s {"class": second_type, "devices": [{"name": "test/device2/1"}]}, 291s ) 291s 291s if exception_type is None: 291s > with MultiDeviceTestContext(devices_info): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:312: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _ test_green_modes_in_device_kwarg_and_global[Device1Synchronous-Asyncio-Asyncio-None-SynchronousExecutor] _ 291s device_type = 291s green_mode = tango._tango.GreenMode.Asyncio 291s global_mode = tango._tango.GreenMode.Asyncio, exception_type = None 291s executor_type = 291s 291s @pytest.mark.parametrize( 291s "device_type, green_mode, global_mode, exception_type, executor_type", 291s [ 291s # If a device specifies its green mode explicitly, then both 291s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 291s ( 291s Device1Synchronous, 291s GreenMode.Asyncio, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Synchronous, 291s GreenMode.Gevent, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Asyncio, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s AsyncioExecutor, 291s ), 291s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 291s ( 291s Device1Gevent, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 291s # If device doesn't specify its green mode, but green_mode kwarg is provided, 291s # then we use green_mode kwarg 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Asyncio, 291s None, 291s GeventExecutor, 291s ), 291s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 291s # (currently only works for synchronous mode - see unsupported modes below) 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Synchronous, 291s None, 291s SynchronousExecutor, 291s ), 291s # Deprecated modes - starting from PyTango 10 it is deprecated 291s # to modify sync servers to async "on the fly". 291s # All base methods should be defined with "async def" instead. 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Synchronous, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Gevent, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s # Unsupported modes - device servers with the following combinations 291s # fail to start up. The cause is unknown. This could be fixed in the future. 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Asyncio, 291s RuntimeError, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Gevent, 291s RuntimeError, 291s GeventExecutor, 291s ), 291s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 291s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 291s ], 291s ) 291s def test_green_modes_in_device_kwarg_and_global( 291s device_type, green_mode, global_mode, exception_type, executor_type 291s ): 291s if WINDOWS and exception_type is not None: 291s pytest.skip("Skip test that hangs on Windows") 291s 291s old_green_mode = tango.get_green_mode() 291s try: 291s tango.set_green_mode(global_mode) 291s 291s if exception_type is None: 291s > with DeviceTestContext(device_type, green_mode=green_mode): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:442: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:669: in connect 291s self.server.ping() 291s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 291s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stdout call ----------------------------- 291s Ready to accept request 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _ test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Synchronous-Synchronous-None-AsyncioExecutor] _ 291s device_type = 291s green_mode = tango._tango.GreenMode.Synchronous 291s global_mode = tango._tango.GreenMode.Synchronous, exception_type = None 291s executor_type = 291s 291s @pytest.mark.parametrize( 291s "device_type, green_mode, global_mode, exception_type, executor_type", 291s [ 291s # If a device specifies its green mode explicitly, then both 291s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 291s ( 291s Device1Synchronous, 291s GreenMode.Asyncio, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Synchronous, 291s GreenMode.Gevent, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Asyncio, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s AsyncioExecutor, 291s ), 291s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 291s ( 291s Device1Gevent, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 291s # If device doesn't specify its green mode, but green_mode kwarg is provided, 291s # then we use green_mode kwarg 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Asyncio, 291s None, 291s GeventExecutor, 291s ), 291s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 291s # (currently only works for synchronous mode - see unsupported modes below) 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Synchronous, 291s None, 291s SynchronousExecutor, 291s ), 291s # Deprecated modes - starting from PyTango 10 it is deprecated 291s # to modify sync servers to async "on the fly". 291s # All base methods should be defined with "async def" instead. 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Synchronous, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Gevent, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s # Unsupported modes - device servers with the following combinations 291s # fail to start up. The cause is unknown. This could be fixed in the future. 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Asyncio, 291s RuntimeError, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Gevent, 291s RuntimeError, 291s GeventExecutor, 291s ), 291s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 291s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 291s ], 291s ) 291s def test_green_modes_in_device_kwarg_and_global( 291s device_type, green_mode, global_mode, exception_type, executor_type 291s ): 291s if WINDOWS and exception_type is not None: 291s pytest.skip("Skip test that hangs on Windows") 291s 291s old_green_mode = tango.get_green_mode() 291s try: 291s tango.set_green_mode(global_mode) 291s 291s if exception_type is None: 291s > with DeviceTestContext(device_type, green_mode=green_mode): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:442: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _ test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Gevent-Gevent-None-AsyncioExecutor] _ 291s device_type = 291s green_mode = tango._tango.GreenMode.Gevent 291s global_mode = tango._tango.GreenMode.Gevent, exception_type = None 291s executor_type = 291s 291s @pytest.mark.parametrize( 291s "device_type, green_mode, global_mode, exception_type, executor_type", 291s [ 291s # If a device specifies its green mode explicitly, then both 291s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 291s ( 291s Device1Synchronous, 291s GreenMode.Asyncio, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Synchronous, 291s GreenMode.Gevent, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Asyncio, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s AsyncioExecutor, 291s ), 291s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 291s ( 291s Device1Gevent, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 291s # If device doesn't specify its green mode, but green_mode kwarg is provided, 291s # then we use green_mode kwarg 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Asyncio, 291s None, 291s GeventExecutor, 291s ), 291s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 291s # (currently only works for synchronous mode - see unsupported modes below) 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Synchronous, 291s None, 291s SynchronousExecutor, 291s ), 291s # Deprecated modes - starting from PyTango 10 it is deprecated 291s # to modify sync servers to async "on the fly". 291s # All base methods should be defined with "async def" instead. 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Synchronous, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Gevent, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s # Unsupported modes - device servers with the following combinations 291s # fail to start up. The cause is unknown. This could be fixed in the future. 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Asyncio, 291s RuntimeError, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Gevent, 291s RuntimeError, 291s GeventExecutor, 291s ), 291s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 291s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 291s ], 291s ) 291s def test_green_modes_in_device_kwarg_and_global( 291s device_type, green_mode, global_mode, exception_type, executor_type 291s ): 291s if WINDOWS and exception_type is not None: 291s pytest.skip("Skip test that hangs on Windows") 291s 291s old_green_mode = tango.get_green_mode() 291s try: 291s tango.set_green_mode(global_mode) 291s 291s if exception_type is None: 291s > with DeviceTestContext(device_type, green_mode=green_mode): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:442: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _ test_green_modes_in_device_kwarg_and_global[Device1Gevent-Asyncio-Asyncio-None-GeventExecutor] _ 291s device_type = 291s green_mode = tango._tango.GreenMode.Asyncio 291s global_mode = tango._tango.GreenMode.Asyncio, exception_type = None 291s executor_type = 291s 291s @pytest.mark.parametrize( 291s "device_type, green_mode, global_mode, exception_type, executor_type", 291s [ 291s # If a device specifies its green mode explicitly, then both 291s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 291s ( 291s Device1Synchronous, 291s GreenMode.Asyncio, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Synchronous, 291s GreenMode.Gevent, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Asyncio, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s AsyncioExecutor, 291s ), 291s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 291s ( 291s Device1Gevent, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 291s # If device doesn't specify its green mode, but green_mode kwarg is provided, 291s # then we use green_mode kwarg 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Asyncio, 291s None, 291s GeventExecutor, 291s ), 291s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 291s # (currently only works for synchronous mode - see unsupported modes below) 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Synchronous, 291s None, 291s SynchronousExecutor, 291s ), 291s # Deprecated modes - starting from PyTango 10 it is deprecated 291s # to modify sync servers to async "on the fly". 291s # All base methods should be defined with "async def" instead. 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Synchronous, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Gevent, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s # Unsupported modes - device servers with the following combinations 291s # fail to start up. The cause is unknown. This could be fixed in the future. 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Asyncio, 291s RuntimeError, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Gevent, 291s RuntimeError, 291s GeventExecutor, 291s ), 291s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 291s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 291s ], 291s ) 291s def test_green_modes_in_device_kwarg_and_global( 291s device_type, green_mode, global_mode, exception_type, executor_type 291s ): 291s if WINDOWS and exception_type is not None: 291s pytest.skip("Skip test that hangs on Windows") 291s 291s old_green_mode = tango.get_green_mode() 291s try: 291s tango.set_green_mode(global_mode) 291s 291s if exception_type is None: 291s > with DeviceTestContext(device_type, green_mode=green_mode): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:442: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:669: in connect 291s self.server.ping() 291s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 291s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stdout call ----------------------------- 291s Ready to accept request 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _ test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Synchronous-Asyncio-None-SynchronousExecutor] _ 291s device_type = 291s green_mode = tango._tango.GreenMode.Synchronous 291s global_mode = tango._tango.GreenMode.Asyncio, exception_type = None 291s executor_type = 291s 291s @pytest.mark.parametrize( 291s "device_type, green_mode, global_mode, exception_type, executor_type", 291s [ 291s # If a device specifies its green mode explicitly, then both 291s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 291s ( 291s Device1Synchronous, 291s GreenMode.Asyncio, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Synchronous, 291s GreenMode.Gevent, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Asyncio, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s AsyncioExecutor, 291s ), 291s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 291s ( 291s Device1Gevent, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 291s # If device doesn't specify its green mode, but green_mode kwarg is provided, 291s # then we use green_mode kwarg 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Asyncio, 291s None, 291s GeventExecutor, 291s ), 291s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 291s # (currently only works for synchronous mode - see unsupported modes below) 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Synchronous, 291s None, 291s SynchronousExecutor, 291s ), 291s # Deprecated modes - starting from PyTango 10 it is deprecated 291s # to modify sync servers to async "on the fly". 291s # All base methods should be defined with "async def" instead. 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Synchronous, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Gevent, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s # Unsupported modes - device servers with the following combinations 291s # fail to start up. The cause is unknown. This could be fixed in the future. 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Asyncio, 291s RuntimeError, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Gevent, 291s RuntimeError, 291s GeventExecutor, 291s ), 291s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 291s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 291s ], 291s ) 291s def test_green_modes_in_device_kwarg_and_global( 291s device_type, green_mode, global_mode, exception_type, executor_type 291s ): 291s if WINDOWS and exception_type is not None: 291s pytest.skip("Skip test that hangs on Windows") 291s 291s old_green_mode = tango.get_green_mode() 291s try: 291s tango.set_green_mode(global_mode) 291s 291s if exception_type is None: 291s > with DeviceTestContext(device_type, green_mode=green_mode): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:442: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:669: in connect 291s self.server.ping() 291s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 291s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stdout call ----------------------------- 291s Ready to accept request 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _ test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Gevent-Asyncio-None-GeventExecutor] _ 291s device_type = 291s green_mode = tango._tango.GreenMode.Gevent 291s global_mode = tango._tango.GreenMode.Asyncio, exception_type = None 291s executor_type = 291s 291s @pytest.mark.parametrize( 291s "device_type, green_mode, global_mode, exception_type, executor_type", 291s [ 291s # If a device specifies its green mode explicitly, then both 291s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 291s ( 291s Device1Synchronous, 291s GreenMode.Asyncio, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Synchronous, 291s GreenMode.Gevent, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Asyncio, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s AsyncioExecutor, 291s ), 291s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 291s ( 291s Device1Gevent, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 291s # If device doesn't specify its green mode, but green_mode kwarg is provided, 291s # then we use green_mode kwarg 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Asyncio, 291s None, 291s GeventExecutor, 291s ), 291s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 291s # (currently only works for synchronous mode - see unsupported modes below) 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Synchronous, 291s None, 291s SynchronousExecutor, 291s ), 291s # Deprecated modes - starting from PyTango 10 it is deprecated 291s # to modify sync servers to async "on the fly". 291s # All base methods should be defined with "async def" instead. 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Synchronous, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Gevent, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s # Unsupported modes - device servers with the following combinations 291s # fail to start up. The cause is unknown. This could be fixed in the future. 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Asyncio, 291s RuntimeError, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Gevent, 291s RuntimeError, 291s GeventExecutor, 291s ), 291s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 291s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 291s ], 291s ) 291s def test_green_modes_in_device_kwarg_and_global( 291s device_type, green_mode, global_mode, exception_type, executor_type 291s ): 291s if WINDOWS and exception_type is not None: 291s pytest.skip("Skip test that hangs on Windows") 291s 291s old_green_mode = tango.get_green_mode() 291s try: 291s tango.set_green_mode(global_mode) 291s 291s if exception_type is None: 291s > with DeviceTestContext(device_type, green_mode=green_mode): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:442: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:669: in connect 291s self.server.ping() 291s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 291s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stdout call ----------------------------- 291s Ready to accept request 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _ test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Synchronous-DeprecationWarning-AsyncioExecutor] _ 291s device_type = 291s green_mode = tango._tango.GreenMode.Asyncio 291s global_mode = tango._tango.GreenMode.Synchronous 291s exception_type = 291s executor_type = 291s 291s @pytest.mark.parametrize( 291s "device_type, green_mode, global_mode, exception_type, executor_type", 291s [ 291s # If a device specifies its green mode explicitly, then both 291s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 291s ( 291s Device1Synchronous, 291s GreenMode.Asyncio, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Synchronous, 291s GreenMode.Gevent, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Asyncio, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s AsyncioExecutor, 291s ), 291s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 291s ( 291s Device1Gevent, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 291s # If device doesn't specify its green mode, but green_mode kwarg is provided, 291s # then we use green_mode kwarg 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Asyncio, 291s None, 291s GeventExecutor, 291s ), 291s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 291s # (currently only works for synchronous mode - see unsupported modes below) 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Synchronous, 291s None, 291s SynchronousExecutor, 291s ), 291s # Deprecated modes - starting from PyTango 10 it is deprecated 291s # to modify sync servers to async "on the fly". 291s # All base methods should be defined with "async def" instead. 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Synchronous, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Gevent, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s # Unsupported modes - device servers with the following combinations 291s # fail to start up. The cause is unknown. This could be fixed in the future. 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Asyncio, 291s RuntimeError, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Gevent, 291s RuntimeError, 291s GeventExecutor, 291s ), 291s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 291s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 291s ], 291s ) 291s def test_green_modes_in_device_kwarg_and_global( 291s device_type, green_mode, global_mode, exception_type, executor_type 291s ): 291s if WINDOWS and exception_type is not None: 291s pytest.skip("Skip test that hangs on Windows") 291s 291s old_green_mode = tango.get_green_mode() 291s try: 291s tango.set_green_mode(global_mode) 291s 291s if exception_type is None: 291s with DeviceTestContext(device_type, green_mode=green_mode): 291s pass 291s elif exception_type is DeprecationWarning: 291s with pytest.warns((DeprecationWarning, RuntimeWarning)): 291s > with DeviceTestContext(device_type, green_mode=green_mode): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:446: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s 291s During handling of the above exception, another exception occurred: 291s 291s device_type = 291s green_mode = tango._tango.GreenMode.Asyncio 291s global_mode = tango._tango.GreenMode.Synchronous 291s exception_type = 291s executor_type = 291s 291s @pytest.mark.parametrize( 291s "device_type, green_mode, global_mode, exception_type, executor_type", 291s [ 291s # If a device specifies its green mode explicitly, then both 291s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 291s ( 291s Device1Synchronous, 291s GreenMode.Asyncio, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Synchronous, 291s GreenMode.Gevent, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Asyncio, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s AsyncioExecutor, 291s ), 291s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 291s ( 291s Device1Gevent, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 291s # If device doesn't specify its green mode, but green_mode kwarg is provided, 291s # then we use green_mode kwarg 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Asyncio, 291s None, 291s GeventExecutor, 291s ), 291s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 291s # (currently only works for synchronous mode - see unsupported modes below) 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Synchronous, 291s None, 291s SynchronousExecutor, 291s ), 291s # Deprecated modes - starting from PyTango 10 it is deprecated 291s # to modify sync servers to async "on the fly". 291s # All base methods should be defined with "async def" instead. 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Synchronous, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Gevent, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s # Unsupported modes - device servers with the following combinations 291s # fail to start up. The cause is unknown. This could be fixed in the future. 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Asyncio, 291s RuntimeError, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Gevent, 291s RuntimeError, 291s GeventExecutor, 291s ), 291s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 291s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 291s ], 291s ) 291s def test_green_modes_in_device_kwarg_and_global( 291s device_type, green_mode, global_mode, exception_type, executor_type 291s ): 291s if WINDOWS and exception_type is not None: 291s pytest.skip("Skip test that hangs on Windows") 291s 291s old_green_mode = tango.get_green_mode() 291s try: 291s tango.set_green_mode(global_mode) 291s 291s if exception_type is None: 291s with DeviceTestContext(device_type, green_mode=green_mode): 291s pass 291s elif exception_type is DeprecationWarning: 291s > with pytest.warns((DeprecationWarning, RuntimeWarning)): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s E Failed: DID NOT WARN. No warnings of type (, ) were emitted. 291s E Emitted warnings: []. 291s 291s tests/test_test_context.py:445: Failed 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _ test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Gevent-DeprecationWarning-AsyncioExecutor] _ 291s device_type = 291s green_mode = tango._tango.GreenMode.Asyncio 291s global_mode = tango._tango.GreenMode.Gevent 291s exception_type = 291s executor_type = 291s 291s @pytest.mark.parametrize( 291s "device_type, green_mode, global_mode, exception_type, executor_type", 291s [ 291s # If a device specifies its green mode explicitly, then both 291s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 291s ( 291s Device1Synchronous, 291s GreenMode.Asyncio, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Synchronous, 291s GreenMode.Gevent, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Asyncio, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s AsyncioExecutor, 291s ), 291s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 291s ( 291s Device1Gevent, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 291s # If device doesn't specify its green mode, but green_mode kwarg is provided, 291s # then we use green_mode kwarg 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Asyncio, 291s None, 291s GeventExecutor, 291s ), 291s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 291s # (currently only works for synchronous mode - see unsupported modes below) 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Synchronous, 291s None, 291s SynchronousExecutor, 291s ), 291s # Deprecated modes - starting from PyTango 10 it is deprecated 291s # to modify sync servers to async "on the fly". 291s # All base methods should be defined with "async def" instead. 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Synchronous, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Gevent, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s # Unsupported modes - device servers with the following combinations 291s # fail to start up. The cause is unknown. This could be fixed in the future. 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Asyncio, 291s RuntimeError, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Gevent, 291s RuntimeError, 291s GeventExecutor, 291s ), 291s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 291s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 291s ], 291s ) 291s def test_green_modes_in_device_kwarg_and_global( 291s device_type, green_mode, global_mode, exception_type, executor_type 291s ): 291s if WINDOWS and exception_type is not None: 291s pytest.skip("Skip test that hangs on Windows") 291s 291s old_green_mode = tango.get_green_mode() 291s try: 291s tango.set_green_mode(global_mode) 291s 291s if exception_type is None: 291s with DeviceTestContext(device_type, green_mode=green_mode): 291s pass 291s elif exception_type is DeprecationWarning: 291s with pytest.warns((DeprecationWarning, RuntimeWarning)): 291s > with DeviceTestContext(device_type, green_mode=green_mode): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:446: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 291s super().connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s 291s During handling of the above exception, another exception occurred: 291s 291s device_type = 291s green_mode = tango._tango.GreenMode.Asyncio 291s global_mode = tango._tango.GreenMode.Gevent 291s exception_type = 291s executor_type = 291s 291s @pytest.mark.parametrize( 291s "device_type, green_mode, global_mode, exception_type, executor_type", 291s [ 291s # If a device specifies its green mode explicitly, then both 291s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 291s ( 291s Device1Synchronous, 291s GreenMode.Asyncio, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Synchronous, 291s GreenMode.Gevent, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1Asyncio, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s AsyncioExecutor, 291s ), 291s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 291s ( 291s Device1Gevent, 291s GreenMode.Synchronous, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 291s # If device doesn't specify its green mode, but green_mode kwarg is provided, 291s # then we use green_mode kwarg 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Asyncio, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Synchronous, 291s GreenMode.Gevent, 291s None, 291s SynchronousExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Synchronous, 291s None, 291s GeventExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Gevent, 291s GreenMode.Asyncio, 291s None, 291s GeventExecutor, 291s ), 291s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 291s # (currently only works for synchronous mode - see unsupported modes below) 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Synchronous, 291s None, 291s SynchronousExecutor, 291s ), 291s # Deprecated modes - starting from PyTango 10 it is deprecated 291s # to modify sync servers to async "on the fly". 291s # All base methods should be defined with "async def" instead. 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Synchronous, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s GreenMode.Asyncio, 291s GreenMode.Gevent, 291s DeprecationWarning, 291s AsyncioExecutor, 291s ), 291s # Unsupported modes - device servers with the following combinations 291s # fail to start up. The cause is unknown. This could be fixed in the future. 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Asyncio, 291s RuntimeError, 291s AsyncioExecutor, 291s ), 291s ( 291s Device1GreenModeUnspecified, 291s None, 291s GreenMode.Gevent, 291s RuntimeError, 291s GeventExecutor, 291s ), 291s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 291s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 291s ], 291s ) 291s def test_green_modes_in_device_kwarg_and_global( 291s device_type, green_mode, global_mode, exception_type, executor_type 291s ): 291s if WINDOWS and exception_type is not None: 291s pytest.skip("Skip test that hangs on Windows") 291s 291s old_green_mode = tango.get_green_mode() 291s try: 291s tango.set_green_mode(global_mode) 291s 291s if exception_type is None: 291s with DeviceTestContext(device_type, green_mode=green_mode): 291s pass 291s elif exception_type is DeprecationWarning: 291s > with pytest.warns((DeprecationWarning, RuntimeWarning)): 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s E Failed: DID NOT WARN. No warnings of type (, ) were emitted. 291s E Emitted warnings: []. 291s 291s tests/test_test_context.py:445: Failed 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________ test_multi_with_async_devices_initialised ___________________ 291s def test_multi_with_async_devices_initialised(): 291s devices_info = ( 291s {"class": Device1Asyncio, "devices": [{"name": "test/device1/1"}]}, 291s {"class": Device2Asyncio, "devices": [{"name": "test/device2/1"}]}, 291s ) 291s 291s > with MultiDeviceTestContext(devices_info) as context: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:464: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _____________ test_multi_with_two_devices_with_properties[Asyncio] _____________ 291s server_green_mode = tango._tango.GreenMode.Asyncio 291s 291s def test_multi_with_two_devices_with_properties(server_green_mode): 291s if server_green_mode == GreenMode.Asyncio: 291s 291s class TestDevice1(Device): 291s green_mode = server_green_mode 291s 291s prop1 = device_property(dtype=str) 291s 291s @command(dtype_out=str) 291s async def get_prop1(self): 291s return self.prop1 291s 291s class TestDevice2(Device): 291s green_mode = server_green_mode 291s 291s prop2 = device_property(dtype=int) 291s 291s @command(dtype_out=int) 291s async def get_prop2(self): 291s return self.prop2 291s 291s else: 291s 291s class TestDevice1(Device): 291s green_mode = server_green_mode 291s 291s prop1 = device_property(dtype=str) 291s 291s @command(dtype_out=str) 291s def get_prop1(self): 291s return self.prop1 291s 291s class TestDevice2(Device): 291s green_mode = server_green_mode 291s 291s prop2 = device_property(dtype=int) 291s 291s @command(dtype_out=int) 291s def get_prop2(self): 291s return self.prop2 291s 291s devices_info = ( 291s { 291s "class": TestDevice1, 291s "devices": [{"name": "test/device1/1", "properties": {"prop1": "abcd"}}], 291s }, 291s { 291s "class": TestDevice2, 291s "devices": [{"name": "test/device2/2", "properties": {"prop2": 5555}}], 291s }, 291s ) 291s 291s > with MultiDeviceTestContext(devices_info) as context: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:617: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s __________________ test_test_context_async_device_proxy[True] __________________ 291s process = True 291s 291s @pytest.mark.asyncio 291s @pytest.mark.parametrize("process", [True, False]) 291s async def test_test_context_async_device_proxy(process): 291s config = ({"class": AsyncDevice, "devices": [{"name": "test/device/1"}]},) 291s 291s > with MultiDeviceTestContext(config, process=process) as context: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:825: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def connect(self): 291s try: 291s self._wait_until_port_is_known() 291s self._wait_until_startup_status_is_known() 291s except RuntimeError: 291s if self.thread.is_alive(): 291s raise RuntimeError( 291s "The server appears to be stuck at initialization. " 291s "Check stdout/stderr for more information." 291s ) 291s elif hasattr(self.thread, "exitcode"): 291s raise RuntimeError( 291s f"The server process stopped with exitcode {self.thread.exitcode}. " 291s f"Check stdout/stderr for more information." 291s ) 291s else: 291s raise RuntimeError( 291s "The server stopped without reporting. " 291s "Check stdout/stderr for more information." 291s ) 291s 291s if self._startup_exception: 291s > raise self._startup_exception 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s _________________ test_test_context_async_device_proxy[False] __________________ 291s process = False 291s 291s @pytest.mark.asyncio 291s @pytest.mark.parametrize("process", [True, False]) 291s async def test_test_context_async_device_proxy(process): 291s config = ({"class": AsyncDevice, "devices": [{"name": "test/device/1"}]},) 291s 291s > with MultiDeviceTestContext(config, process=process) as context: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:825: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s --------------------------- Captured stderr teardown --------------------------- 291s /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-bnxumnkp', '/mp-yes7cvpa', '/mp-l4z5oats', '/mp-cmwgjwdf', '/mp-pvnmcdo2', '/mp-nh00xpxr', '/mp-i7dj0t7l', '/mp-7rxpd1by', '/mp-7ac54c18', '/mp-j77so9wb', '/mp-p504sd_z'} 291s warnings.warn( 291s _______________ test_test_context_multi_async_device_proxy[True] _______________ 291s process = True 291s 291s @pytest.mark.asyncio 291s @pytest.mark.parametrize("process", [True, False]) 291s async def test_test_context_multi_async_device_proxy(process): 291s config = ( 291s { 291s "class": AsyncDevice, 291s "devices": [{"name": "test/device/main"}, {"name": "test/device/child"}], 291s }, 291s ) 291s 291s > with MultiDeviceTestContext(config, process=process) as context: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:855: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def connect(self): 291s try: 291s self._wait_until_port_is_known() 291s self._wait_until_startup_status_is_known() 291s except RuntimeError: 291s if self.thread.is_alive(): 291s raise RuntimeError( 291s "The server appears to be stuck at initialization. " 291s "Check stdout/stderr for more information." 291s ) 291s elif hasattr(self.thread, "exitcode"): 291s raise RuntimeError( 291s f"The server process stopped with exitcode {self.thread.exitcode}. " 291s f"Check stdout/stderr for more information." 291s ) 291s else: 291s raise RuntimeError( 291s "The server stopped without reporting. " 291s "Check stdout/stderr for more information." 291s ) 291s 291s if self._startup_exception: 291s > raise self._startup_exception 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s ______________ test_test_context_multi_async_device_proxy[False] _______________ 291s process = False 291s 291s @pytest.mark.asyncio 291s @pytest.mark.parametrize("process", [True, False]) 291s async def test_test_context_multi_async_device_proxy(process): 291s config = ( 291s { 291s "class": AsyncDevice, 291s "devices": [{"name": "test/device/main"}, {"name": "test/device/child"}], 291s }, 291s ) 291s 291s > with MultiDeviceTestContext(config, process=process) as context: 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s 291s tests/test_test_context.py:855: 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 291s self.start() 291s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 291s self.connect() 291s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 291s raise self._startup_exception 291s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 291s runserver( 291s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 291s return run((cls,), args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 291s return server_run() 291s ^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 291s worker.run(tango_loop, wait=True) 291s /usr/lib/python3/dist-packages/tango/green.py:118: in run 291s accessor = self.delegate(fn, *args, **kwargs) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 291s coro = self.loop.run_in_executor(self.subexecutor, callback) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 291s executor.submit(func, *args), loop=self) 291s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 291s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 291s self._adjust_thread_count() 291s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 291s 291s self = 291s 291s def _adjust_thread_count(self): 291s # if idle threads are available, don't spin new threads 291s if self._idle_semaphore.acquire(timeout=0): 291s return 291s 291s # When the executor gets lost, the weakref callback will wake up 291s # the worker threads. 291s def weakref_cb(_, q=self._work_queue): 291s q.put(None) 291s 291s num_threads = len(self._threads) 291s if num_threads < self._max_workers: 291s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 291s t = threading.Thread( 291s name=thread_name, 291s target=_thread_pool_executor_worker, 291s args=( 291s weakref.ref(self, weakref_cb), 291s self._work_queue, 291s > self._initializer, 291s ^^^^^^^^^^^^^^^^^ 291s self._initargs, 291s ), 291s ) 291s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 291s 291s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 291s ----------------------------- Captured stderr call ----------------------------- 291s Can't create notifd event supplier. Notifd event not available 291s --------------------------- Captured stderr teardown --------------------------- 291s /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-mt7lfjcf', '/mp-0qxibrgw', '/mp-6x4iit10', '/mp-wdc8mwh5', '/mp-je3w8rr5', '/mp-2qz3a9rq', '/mp-r96p0fpk', '/mp-8zjz815i', '/mp-sw__6l1g', '/mp-o0e3a5m_', '/mp-5bhqa853'} 291s warnings.warn( 291s =========================== short test summary info ============================ 291s FAILED tests/test_async.py::test_green_mode_kwarg_for_proxy_methods - @pytest... 291s FAILED tests/test_attributes.py::test_read_write_attribute[int-Asyncio] - att... 291s FAILED tests/test_attributes.py::test_read_write_attribute[float-Asyncio] - a... 291s FAILED tests/test_attributes.py::test_read_write_attribute[str-Asyncio] - att... 291s FAILED tests/test_attributes.py::test_read_write_attribute[bool-Asyncio] - at... 291s FAILED tests/test_attributes.py::test_read_write_attribute[(int,)-Asyncio] - ... 291s FAILED tests/test_attributes.py::test_read_write_attribute[(float,)-Asyncio] 291s FAILED tests/test_attributes.py::test_read_write_attribute[(str,)-Asyncio] - ... 291s FAILED tests/test_attributes.py::test_read_write_attribute[(bool,)-Asyncio] 291s FAILED tests/test_attributes.py::test_read_write_attribute[((int,),)-Asyncio] 291s FAILED tests/test_attributes.py::test_read_write_attribute[((float,),)-Asyncio] 291s FAILED tests/test_attributes.py::test_read_write_attribute[((str,),)-Asyncio] 291s FAILED tests/test_attributes.py::test_read_write_attribute[((bool,),)-Asyncio] 291s FAILED tests/test_attributes.py::test_read_write_attribute_decorated_methods[Asyncio] 291s FAILED tests/test_attributes.py::test_read_write_dynamic_attribute[low_level_read-Asyncio] 291s FAILED tests/test_attributes.py::test_read_write_dynamic_attribute[high_level_read-Asyncio] 291s FAILED tests/test_attributes.py::test_async_add_remove_dynamic_attribute - de... 291s FAILED tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_default_names[Asyncio] 291s FAILED tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_user_names[Asyncio] 291s FAILED tests/test_attributes.py::test_read_write_dynamic_attribute_is_allowed_with_async[Asyncio] 291s FAILED tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Asyncio-True] 291s FAILED tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Asyncio-False] 291s FAILED tests/test_attributes.py::test_attribute_decorators[Asyncio] - server_... 291s FAILED tests/test_attributes.py::test_polled_attribute[Asyncio] - server_gree... 291s FAILED tests/test_commands.py::test_identity_command[int-Asyncio] - command_t... 291s FAILED tests/test_commands.py::test_identity_command[float-Asyncio] - command... 291s FAILED tests/test_commands.py::test_identity_command[str-Asyncio] - command_t... 291s FAILED tests/test_commands.py::test_identity_command[bool-Asyncio] - command_... 291s FAILED tests/test_commands.py::test_identity_command[(int,)-Asyncio] - comman... 291s FAILED tests/test_commands.py::test_identity_command[(float,)-Asyncio] - comm... 291s FAILED tests/test_commands.py::test_identity_command[(str,)-Asyncio] - comman... 291s FAILED tests/test_commands.py::test_identity_command[DevVarLongStringArray-Asyncio] 291s FAILED tests/test_commands.py::test_identity_command[DevVarDoubleStringArray-Asyncio] 291s FAILED tests/test_commands.py::test_decorated_command[Asyncio] - server_green... 291s FAILED tests/test_commands.py::test_command_isallowed[Asyncio] - server_green... 291s FAILED tests/test_commands.py::test_dynamic_command[Asyncio-True] - device_co... 291s FAILED tests/test_commands.py::test_dynamic_command[Asyncio-False] - device_c... 291s FAILED tests/test_device_proxy.py::test_high_level_api_for_asyncio - tango_te... 291s FAILED tests/test_device_proxy.py::test_repr_uses_info[Asyncio] - green_mode_... 291s FAILED tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Asyncio] 291s FAILED tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Asyncio] 291s FAILED tests/test_device_proxy.py::test_no_memory_leak_for_repr[Asyncio] - gr... 291s FAILED tests/test_device_proxy.py::test_no_memory_leak_for_str[Asyncio] - gre... 291s FAILED tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Asyncio] - gr... 291s FAILED tests/test_log.py::test_async_logging_decorators - def test_async_logg... 291s FAILED tests/test_log.py::test_logging[Asyncio] - server_green_mode = tango._... 291s FAILED tests/test_server.py::test_empty_device[Asyncio] - server_green_mode =... 291s FAILED tests/test_server.py::test_set_state_status[ON-Asyncio-False] - state ... 291s FAILED tests/test_server.py::test_set_state_status[ON-Asyncio-True] - state =... 291s FAILED tests/test_server.py::test_set_state_status[OFF-Asyncio-False] - state... 291s FAILED tests/test_server.py::test_set_state_status[OFF-Asyncio-True] - state ... 291s FAILED tests/test_server.py::test_set_state_status[CLOSE-Asyncio-False] - sta... 291s FAILED tests/test_server.py::test_set_state_status[CLOSE-Asyncio-True] - stat... 291s FAILED tests/test_server.py::test_set_state_status[OPEN-Asyncio-False] - stat... 291s FAILED tests/test_server.py::test_set_state_status[OPEN-Asyncio-True] - state... 291s FAILED tests/test_server.py::test_set_state_status[INSERT-Asyncio-False] - st... 291s FAILED tests/test_server.py::test_set_state_status[INSERT-Asyncio-True] - sta... 291s FAILED tests/test_server.py::test_set_state_status[EXTRACT-Asyncio-False] - s... 291s FAILED tests/test_server.py::test_set_state_status[EXTRACT-Asyncio-True] - st... 291s FAILED tests/test_server.py::test_set_state_status[MOVING-Asyncio-False] - st... 291s FAILED tests/test_server.py::test_set_state_status[MOVING-Asyncio-True] - sta... 291s FAILED tests/test_server.py::test_set_state_status[STANDBY-Asyncio-False] - s... 291s FAILED tests/test_server.py::test_set_state_status[STANDBY-Asyncio-True] - st... 291s FAILED tests/test_server.py::test_set_state_status[FAULT-Asyncio-False] - sta... 291s FAILED tests/test_server.py::test_set_state_status[FAULT-Asyncio-True] - stat... 291s FAILED tests/test_server.py::test_set_state_status[INIT-Asyncio-False] - stat... 291s FAILED tests/test_server.py::test_set_state_status[INIT-Asyncio-True] - state... 291s FAILED tests/test_server.py::test_set_state_status[RUNNING-Asyncio-False] - s... 291s FAILED tests/test_server.py::test_set_state_status[RUNNING-Asyncio-True] - st... 291s FAILED tests/test_server.py::test_set_state_status[ALARM-Asyncio-False] - sta... 291s FAILED tests/test_server.py::test_set_state_status[ALARM-Asyncio-True] - stat... 291s FAILED tests/test_server.py::test_set_state_status[DISABLE-Asyncio-False] - s... 291s FAILED tests/test_server.py::test_set_state_status[DISABLE-Asyncio-True] - st... 291s FAILED tests/test_server.py::test_set_state_status[UNKNOWN-Asyncio-False] - s... 291s FAILED tests/test_server.py::test_set_state_status[UNKNOWN-Asyncio-True] - st... 291s FAILED tests/test_server.py::test_user_dev_state_status[Asyncio] - server_gre... 291s FAILED tests/test_server.py::test_attr_quality_checked_with_state[Asyncio] - ... 291s FAILED tests/test_server.py::test_device_get_attr_config[Asyncio] - server_gr... 291s FAILED tests/test_server.py::test_device_set_attr_config[Asyncio] - server_gr... 291s FAILED tests/test_server.py::test_exception_propagation[Asyncio] - server_gre... 291s FAILED tests/test_server.py::test_asyncio_server_init_hook_change_state - def... 291s FAILED tests/test_server.py::test_async_server_init_hook_called_after_init - ... 291s FAILED tests/test_server.py::test_asyncio_server_init_hook_exception - def te... 291s FAILED tests/test_server.py::test_deprecation_warning_for_sync_attr_com_methods_in_asyncio_device 291s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[init_device] 291s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[delete_device] 291s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_state] 291s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_status] 291s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[read_attr_hardware] 291s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[always_executed_hook] 291s FAILED tests/test_test_context.py::test_single_device[Asyncio] - server_green... 291s FAILED tests/test_test_context.py::test_multi_with_single_device[Asyncio] - s... 291s FAILED tests/test_test_context.py::test_multi_with_two_devices[Asyncio] - ser... 291s FAILED tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Asyncio-None] 291s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Synchronous-Asyncio-Asyncio-None-SynchronousExecutor] 291s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Synchronous-Synchronous-None-AsyncioExecutor] 291s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Gevent-Gevent-None-AsyncioExecutor] 291s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Gevent-Asyncio-Asyncio-None-GeventExecutor] 291s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Synchronous-Asyncio-None-SynchronousExecutor] 291s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Gevent-Asyncio-None-GeventExecutor] 291s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Synchronous-DeprecationWarning-AsyncioExecutor] 291s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Gevent-DeprecationWarning-AsyncioExecutor] 291s FAILED tests/test_test_context.py::test_multi_with_async_devices_initialised 291s FAILED tests/test_test_context.py::test_multi_with_two_devices_with_properties[Asyncio] 291s FAILED tests/test_test_context.py::test_test_context_async_device_proxy[True] 291s FAILED tests/test_test_context.py::test_test_context_async_device_proxy[False] 291s FAILED tests/test_test_context.py::test_test_context_multi_async_device_proxy[True] 291s FAILED tests/test_test_context.py::test_test_context_multi_async_device_proxy[False] 291s ERROR tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Asyncio] 291s = 108 failed, 952 passed, 56 skipped, 53 xfailed, 1 error in 196.55s (0:03:16) = 293s bash: line 1: 3068 Segmentation fault (core dumped) PATH=/usr/lib/tango/:$PATH $py -m pytest tests -v --forked --ignore tests/test_event.py --reruns 5 294s autopkgtest [02:47:57]: test command1: -----------------------] 294s command1 FAIL non-zero exit status 139 294s autopkgtest [02:47:57]: test command1: - - - - - - - - - - results - - - - - - - - - - 295s autopkgtest [02:47:58]: test command2: preparing testbed 313s Creating nova instance adt-resolute-arm64-pytango-20260204-024303-juju-7f2275-prod-proposed-migration-environment-20-26e86fd2-b7d6-4497-9ce9-a1b8b266918e from image adt/ubuntu-resolute-arm64-server-20260203.img (UUID fd4bac28-a946-4216-8755-72db0faf84da)... 367s autopkgtest [02:49:10]: testbed dpkg architecture: arm64 368s autopkgtest [02:49:11]: testbed apt version: 3.1.14 368s autopkgtest [02:49:11]: @@@@@@@@@@@@@@@@@@@@ test bed setup 368s autopkgtest [02:49:11]: testbed release detected to be: resolute 369s autopkgtest [02:49:12]: updating testbed package index (apt update) 369s Get:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease [124 kB] 369s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 369s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 369s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 369s Get:5 http://ftpmaster.internal/ubuntu resolute-proposed/restricted Sources [5260 B] 369s Get:6 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse Sources [35.1 kB] 369s Get:7 http://ftpmaster.internal/ubuntu resolute-proposed/universe Sources [1714 kB] 370s Get:8 http://ftpmaster.internal/ubuntu resolute-proposed/main Sources [234 kB] 370s Get:9 http://ftpmaster.internal/ubuntu resolute-proposed/main arm64 Packages [297 kB] 370s Get:10 http://ftpmaster.internal/ubuntu resolute-proposed/main arm64 c-n-f Metadata [7024 B] 370s Get:11 http://ftpmaster.internal/ubuntu resolute-proposed/restricted arm64 Packages [52.9 kB] 370s Get:12 http://ftpmaster.internal/ubuntu resolute-proposed/restricted arm64 c-n-f Metadata [328 B] 370s Get:13 http://ftpmaster.internal/ubuntu resolute-proposed/universe arm64 Packages [1512 kB] 370s Get:14 http://ftpmaster.internal/ubuntu resolute-proposed/universe arm64 c-n-f Metadata [31.7 kB] 370s Get:15 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse arm64 Packages [22.4 kB] 370s Get:16 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse arm64 c-n-f Metadata [744 B] 373s Fetched 4036 kB in 1s (4716 kB/s) 373s Reading package lists... 374s Hit:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease 374s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 374s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 374s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 375s Reading package lists... 375s Reading package lists... 375s Building dependency tree... 375s Reading state information... 376s Calculating upgrade... 376s The following packages will be upgraded: 376s firmware-sof-signed htop libzstd1 mtd-utils powermgmt-base 376s python3-lazr.restfulclient zstd 376s 7 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 376s Need to get 3270 kB of archives. 376s After this operation, 63.5 kB disk space will be freed. 376s Get:1 http://ftpmaster.internal/ubuntu resolute/main arm64 firmware-sof-signed all 2025.05.1-1build1 [1696 kB] 376s Get:2 http://ftpmaster.internal/ubuntu resolute/main arm64 libzstd1 arm64 1.5.7+dfsg-3 [277 kB] 376s Get:3 http://ftpmaster.internal/ubuntu resolute/main arm64 powermgmt-base all 1.38ubuntu2 [7878 B] 376s Get:4 http://ftpmaster.internal/ubuntu resolute/main arm64 htop arm64 3.4.1-5build2 [175 kB] 376s Get:5 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-lazr.restfulclient all 0.14.6-3build1 [51.1 kB] 376s Get:6 http://ftpmaster.internal/ubuntu resolute/main arm64 zstd arm64 1.5.7+dfsg-3 [596 kB] 376s Get:7 http://ftpmaster.internal/ubuntu resolute/main arm64 mtd-utils arm64 1:2.3.0-1ubuntu2 [466 kB] 377s dpkg-preconfigure: unable to re-open stdin: No such file or directory 377s Fetched 3270 kB in 0s (9429 kB/s) 377s (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 ... 89360 files and directories currently installed.) 377s Preparing to unpack .../firmware-sof-signed_2025.05.1-1build1_all.deb ... 377s Unpacking firmware-sof-signed (2025.05.1-1build1) over (2025.05.1-1) ... 377s Preparing to unpack .../libzstd1_1.5.7+dfsg-3_arm64.deb ... 377s Unpacking libzstd1:arm64 (1.5.7+dfsg-3) over (1.5.7+dfsg-2) ... 377s Setting up libzstd1:arm64 (1.5.7+dfsg-3) ... 377s (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 ... 89360 files and directories currently installed.) 377s Preparing to unpack .../powermgmt-base_1.38ubuntu2_all.deb ... 377s Unpacking powermgmt-base (1.38ubuntu2) over (1.38ubuntu1) ... 378s Preparing to unpack .../htop_3.4.1-5build2_arm64.deb ... 378s Unpacking htop (3.4.1-5build2) over (3.4.1-5build1) ... 378s Preparing to unpack .../python3-lazr.restfulclient_0.14.6-3build1_all.deb ... 378s Unpacking python3-lazr.restfulclient (0.14.6-3build1) over (0.14.6-3) ... 378s Preparing to unpack .../zstd_1.5.7+dfsg-3_arm64.deb ... 378s Unpacking zstd (1.5.7+dfsg-3) over (1.5.7+dfsg-2) ... 378s Preparing to unpack .../mtd-utils_1%3a2.3.0-1ubuntu2_arm64.deb ... 378s Unpacking mtd-utils (1:2.3.0-1ubuntu2) over (1:2.3.0-1ubuntu1) ... 378s Setting up powermgmt-base (1.38ubuntu2) ... 378s Setting up htop (3.4.1-5build2) ... 378s Setting up firmware-sof-signed (2025.05.1-1build1) ... 378s Setting up mtd-utils (1:2.3.0-1ubuntu2) ... 378s Setting up python3-lazr.restfulclient (0.14.6-3build1) ... 378s Setting up zstd (1.5.7+dfsg-3) ... 378s Processing triggers for man-db (2.13.1-1) ... 379s Processing triggers for libc-bin (2.42-2ubuntu4) ... 379s autopkgtest [02:49:22]: upgrading testbed (apt dist-upgrade and autopurge) 379s Reading package lists... 380s Building dependency tree... 380s Reading state information... 380s Calculating upgrade... 380s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 381s Reading package lists... 381s Building dependency tree... 381s Reading state information... 381s Solving dependencies... 381s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 384s Reading package lists... 384s Building dependency tree... 384s Reading state information... 384s Solving dependencies... 385s The following NEW packages will be installed: 385s dbconfig-common dbconfig-mysql default-mysql-server libabsl20240722 385s libabsl20260107 libblas3 libboost-python1.88.0 libc-dev-bin libc6-dev 385s libcares2 libcos4-3 libcrypt-dev libev4t64 libexpat1-dev libgfortran5 385s libgoogle-perftools4t64 libgrpc++1.51t64 libgrpc29t64 libjpeg-turbo8 385s libjpeg8 liblapack3 libmecab2 libmysqlclient24 libnorm1t64 libomniorb4-3t64 385s libomnithread4 libpgm-5.3-0t64 libprotobuf-lite32t64 libprotobuf32t64 385s libprotoc32t64 libpython3-all-dev libpython3-dev libpython3.13-dev 385s libpython3.14 libpython3.14-dev libpython3.14-minimal libpython3.14-stdlib 385s libre2-11 libsodium23 libtango-tools libtango10 libtcmalloc-minimal4t64 385s libzmq5 linux-libc-dev mysql-client mysql-client-core mysql-common 385s mysql-server mysql-server-core opentelemetry-cpp python3-all python3-all-dev 385s python3-dev python3-gevent python3-greenlet python3-numpy python3-numpy-dev 385s python3-psutil python3-tango python3-zope.event python3-zope.interface 385s python3.13-dev python3.14 python3.14-dev python3.14-minimal rpcsvc-proto 385s tango-common tango-db zlib1g-dev 385s 0 upgraded, 69 newly installed, 0 to remove and 0 not upgraded. 385s Need to get 76.8 MB of archives. 385s After this operation, 447 MB of additional disk space will be used. 385s Get:1 http://ftpmaster.internal/ubuntu resolute/main arm64 mysql-common all 5.8+1.1.1ubuntu2 [7002 B] 385s Get:2 http://ftpmaster.internal/ubuntu resolute/main arm64 libtcmalloc-minimal4t64 arm64 2.16-1build1 [93.5 kB] 385s Get:3 http://ftpmaster.internal/ubuntu resolute/main arm64 libgoogle-perftools4t64 arm64 2.16-1build1 [209 kB] 385s Get:4 http://ftpmaster.internal/ubuntu resolute/main arm64 mysql-client-core arm64 8.4.8-0ubuntu1 [2051 kB] 385s Get:5 http://ftpmaster.internal/ubuntu resolute/main arm64 mysql-client arm64 8.4.8-0ubuntu1 [9124 B] 385s Get:6 http://ftpmaster.internal/ubuntu resolute/main arm64 libmecab2 arm64 0.996-15.1build3 [189 kB] 385s Get:7 http://ftpmaster.internal/ubuntu resolute/main arm64 libprotobuf-lite32t64 arm64 3.21.12-15 [226 kB] 385s Get:8 http://ftpmaster.internal/ubuntu resolute/main arm64 mysql-server-core arm64 8.4.8-0ubuntu1 [18.4 MB] 386s Get:9 http://ftpmaster.internal/ubuntu resolute/main arm64 mysql-server arm64 8.4.8-0ubuntu1 [1355 kB] 386s Get:10 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-numpy-dev arm64 1:2.3.5+ds-3 [366 kB] 386s Get:11 http://ftpmaster.internal/ubuntu resolute/main arm64 libblas3 arm64 3.12.1-7ubuntu1 [181 kB] 386s Get:12 http://ftpmaster.internal/ubuntu resolute/main arm64 libgfortran5 arm64 15.2.0-12ubuntu1 [451 kB] 386s Get:13 http://ftpmaster.internal/ubuntu resolute/main arm64 liblapack3 arm64 3.12.1-7ubuntu1 [2299 kB] 386s Get:14 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-numpy arm64 1:2.3.5+ds-3 [4569 kB] 386s Get:15 http://ftpmaster.internal/ubuntu resolute/main arm64 libpython3.14-minimal arm64 3.14.2-1 [917 kB] 386s Get:16 http://ftpmaster.internal/ubuntu resolute/main arm64 python3.14-minimal arm64 3.14.2-1 [2548 kB] 386s Get:17 http://ftpmaster.internal/ubuntu resolute/universe arm64 dbconfig-common all 2.0.25ubuntu1 [609 kB] 386s Get:18 http://ftpmaster.internal/ubuntu resolute/universe arm64 dbconfig-mysql all 2.0.25ubuntu1 [942 B] 386s Get:19 http://ftpmaster.internal/ubuntu resolute/universe arm64 libomnithread4 arm64 4.3.3+ds1-1 [12.6 kB] 386s Get:20 http://ftpmaster.internal/ubuntu resolute/universe arm64 libomniorb4-3t64 arm64 4.3.3+ds1-1 [1220 kB] 386s Get:21 http://ftpmaster.internal/ubuntu resolute/main arm64 libabsl20260107 arm64 20260107.0-0ubuntu2 [563 kB] 386s Get:22 http://ftpmaster.internal/ubuntu resolute/main arm64 libabsl20240722 arm64 20240722.0-4ubuntu1 [508 kB] 386s Get:23 http://ftpmaster.internal/ubuntu resolute/main arm64 libcares2 arm64 1.34.6-1 [100 kB] 386s Get:24 http://ftpmaster.internal/ubuntu resolute/main arm64 libprotobuf32t64 arm64 3.21.12-15 [868 kB] 386s Get:25 http://ftpmaster.internal/ubuntu resolute/main arm64 libprotoc32t64 arm64 3.21.12-15 [633 kB] 386s Get:26 http://ftpmaster.internal/ubuntu resolute/main arm64 libre2-11 arm64 20250805-1build1 [169 kB] 386s Get:27 http://ftpmaster.internal/ubuntu resolute/universe arm64 libgrpc29t64 arm64 1.51.1-7 [2705 kB] 386s Get:28 http://ftpmaster.internal/ubuntu resolute/universe arm64 libgrpc++1.51t64 arm64 1.51.1-7 [466 kB] 386s Get:29 http://ftpmaster.internal/ubuntu resolute/universe arm64 opentelemetry-cpp arm64 1.23.0-3build1 [596 kB] 386s Get:30 http://ftpmaster.internal/ubuntu resolute-proposed/universe arm64 tango-common all 10.0.2+dfsg1-4build1 [8608 B] 386s Get:31 http://ftpmaster.internal/ubuntu resolute/universe arm64 libcos4-3 arm64 4.3.3+ds1-1 [1300 kB] 386s Get:32 http://ftpmaster.internal/ubuntu resolute/main arm64 libjpeg-turbo8 arm64 2.1.5-4ubuntu2 [165 kB] 386s Get:33 http://ftpmaster.internal/ubuntu resolute/main arm64 libjpeg8 arm64 8c-2ubuntu11 [2148 B] 386s Get:34 http://ftpmaster.internal/ubuntu resolute/universe arm64 libnorm1t64 arm64 1.5.9+dfsg-4 [152 kB] 386s Get:35 http://ftpmaster.internal/ubuntu resolute/universe arm64 libpgm-5.3-0t64 arm64 5.3.128~dfsg-2.1build2 [161 kB] 386s Get:36 http://ftpmaster.internal/ubuntu resolute/main arm64 libsodium23 arm64 1.0.18-2 [120 kB] 386s Get:37 http://ftpmaster.internal/ubuntu resolute/universe arm64 libzmq5 arm64 4.3.5-1build3 [244 kB] 386s Get:38 http://ftpmaster.internal/ubuntu resolute-proposed/universe arm64 libtango10 arm64 10.0.2+dfsg1-4build1 [1900 kB] 386s Get:39 http://ftpmaster.internal/ubuntu resolute-proposed/universe arm64 libtango-tools arm64 10.0.2+dfsg1-4build1 [25.5 kB] 386s Get:40 http://ftpmaster.internal/ubuntu resolute/main arm64 libmysqlclient24 arm64 8.4.8-0ubuntu1 [1244 kB] 387s Get:41 http://ftpmaster.internal/ubuntu resolute-proposed/universe arm64 tango-db arm64 10.0.2+dfsg1-4build1 [198 kB] 387s Get:42 http://ftpmaster.internal/ubuntu resolute/universe arm64 default-mysql-server all 1.1.1ubuntu2 [3168 B] 387s Get:43 http://ftpmaster.internal/ubuntu resolute/main arm64 libboost-python1.88.0 arm64 1.88.0-1.4ubuntu3 [350 kB] 387s Get:44 http://ftpmaster.internal/ubuntu resolute/main arm64 libc-dev-bin arm64 2.42-2ubuntu4 [22.5 kB] 387s Get:45 http://ftpmaster.internal/ubuntu resolute/main arm64 linux-libc-dev arm64 6.18.0-9.9 [1834 kB] 387s Get:46 http://ftpmaster.internal/ubuntu resolute/main arm64 libcrypt-dev arm64 1:4.5.1-1 [123 kB] 387s Get:47 http://ftpmaster.internal/ubuntu resolute/main arm64 rpcsvc-proto arm64 1.4.3-1build1 [65.6 kB] 387s Get:48 http://ftpmaster.internal/ubuntu resolute/main arm64 libc6-dev arm64 2.42-2ubuntu4 [1765 kB] 387s Get:49 http://ftpmaster.internal/ubuntu resolute/universe arm64 libev4t64 arm64 1:4.33-2.1build2 [30.7 kB] 387s Get:50 http://ftpmaster.internal/ubuntu resolute/main arm64 libexpat1-dev arm64 2.7.4-1 [134 kB] 387s Get:51 http://ftpmaster.internal/ubuntu resolute/main arm64 zlib1g-dev arm64 1:1.3.dfsg+really1.3.1-1ubuntu2 [899 kB] 387s Get:52 http://ftpmaster.internal/ubuntu resolute/main arm64 libpython3.13-dev arm64 3.13.11-1 [5810 kB] 387s Get:53 http://ftpmaster.internal/ubuntu resolute/main arm64 libpython3-dev arm64 3.13.9-3 [11.2 kB] 387s Get:54 http://ftpmaster.internal/ubuntu resolute/main arm64 libpython3.14-stdlib arm64 3.14.2-1 [2351 kB] 387s Get:55 http://ftpmaster.internal/ubuntu resolute/main arm64 libpython3.14 arm64 3.14.2-1 [2593 kB] 387s Get:56 http://ftpmaster.internal/ubuntu resolute/main arm64 libpython3.14-dev arm64 3.14.2-1 [5984 kB] 387s Get:57 http://ftpmaster.internal/ubuntu resolute/main arm64 libpython3-all-dev arm64 3.13.9-3 [916 B] 387s Get:58 http://ftpmaster.internal/ubuntu resolute/main arm64 python3.14 arm64 3.14.2-1 [816 kB] 387s Get:59 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-all arm64 3.13.9-3 [890 B] 387s Get:60 http://ftpmaster.internal/ubuntu resolute/main arm64 python3.13-dev arm64 3.13.11-1 [508 kB] 387s Get:61 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-dev arm64 3.13.9-3 [26.6 kB] 387s Get:62 http://ftpmaster.internal/ubuntu resolute/main arm64 python3.14-dev arm64 3.14.2-1 [510 kB] 387s Get:63 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-all-dev arm64 3.13.9-3 [914 B] 387s Get:64 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-psutil arm64 7.1.0-1ubuntu1 [191 kB] 387s Get:65 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-zope.event all 6.0-2 [7710 B] 387s Get:66 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-zope.interface arm64 8.2-1 [145 kB] 387s Get:67 http://ftpmaster.internal/ubuntu resolute/main arm64 python3-greenlet arm64 3.2.4-3 [178 kB] 387s Get:68 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-gevent arm64 24.11.1-1build2 [1126 kB] 387s Get:69 http://ftpmaster.internal/ubuntu resolute/universe arm64 python3-tango arm64 10.0.2-3 [3452 kB] 388s Preconfiguring packages ... 388s Fetched 76.8 MB in 2s (31.7 MB/s) 388s Selecting previously unselected package mysql-common. 388s (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 ... 89360 files and directories currently installed.) 388s Preparing to unpack .../0-mysql-common_5.8+1.1.1ubuntu2_all.deb ... 388s Unpacking mysql-common (5.8+1.1.1ubuntu2) ... 388s Selecting previously unselected package libtcmalloc-minimal4t64:arm64. 388s Preparing to unpack .../1-libtcmalloc-minimal4t64_2.16-1build1_arm64.deb ... 388s Unpacking libtcmalloc-minimal4t64:arm64 (2.16-1build1) ... 388s Selecting previously unselected package libgoogle-perftools4t64:arm64. 388s Preparing to unpack .../2-libgoogle-perftools4t64_2.16-1build1_arm64.deb ... 388s Unpacking libgoogle-perftools4t64:arm64 (2.16-1build1) ... 388s Selecting previously unselected package mysql-client-core. 388s Preparing to unpack .../3-mysql-client-core_8.4.8-0ubuntu1_arm64.deb ... 388s Unpacking mysql-client-core (8.4.8-0ubuntu1) ... 388s Selecting previously unselected package mysql-client. 388s Preparing to unpack .../4-mysql-client_8.4.8-0ubuntu1_arm64.deb ... 388s Unpacking mysql-client (8.4.8-0ubuntu1) ... 388s Selecting previously unselected package libmecab2:arm64. 388s Preparing to unpack .../5-libmecab2_0.996-15.1build3_arm64.deb ... 388s Unpacking libmecab2:arm64 (0.996-15.1build3) ... 388s Selecting previously unselected package libprotobuf-lite32t64:arm64. 388s Preparing to unpack .../6-libprotobuf-lite32t64_3.21.12-15_arm64.deb ... 388s Unpacking libprotobuf-lite32t64:arm64 (3.21.12-15) ... 388s Selecting previously unselected package mysql-server-core. 388s Preparing to unpack .../7-mysql-server-core_8.4.8-0ubuntu1_arm64.deb ... 388s Unpacking mysql-server-core (8.4.8-0ubuntu1) ... 389s Setting up mysql-common (5.8+1.1.1ubuntu2) ... 389s update-alternatives: using /etc/mysql/my.cnf.fallback to provide /etc/mysql/my.cnf (my.cnf) in auto mode 389s Selecting previously unselected package mysql-server. 389s (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 ... 89579 files and directories currently installed.) 389s Preparing to unpack .../00-mysql-server_8.4.8-0ubuntu1_arm64.deb ... 389s Unpacking mysql-server (8.4.8-0ubuntu1) ... 389s Selecting previously unselected package python3-numpy-dev:arm64. 389s Preparing to unpack .../01-python3-numpy-dev_1%3a2.3.5+ds-3_arm64.deb ... 389s Unpacking python3-numpy-dev:arm64 (1:2.3.5+ds-3) ... 389s Selecting previously unselected package libblas3:arm64. 389s Preparing to unpack .../02-libblas3_3.12.1-7ubuntu1_arm64.deb ... 389s Unpacking libblas3:arm64 (3.12.1-7ubuntu1) ... 389s Selecting previously unselected package libgfortran5:arm64. 389s Preparing to unpack .../03-libgfortran5_15.2.0-12ubuntu1_arm64.deb ... 389s Unpacking libgfortran5:arm64 (15.2.0-12ubuntu1) ... 389s Selecting previously unselected package liblapack3:arm64. 389s Preparing to unpack .../04-liblapack3_3.12.1-7ubuntu1_arm64.deb ... 389s Unpacking liblapack3:arm64 (3.12.1-7ubuntu1) ... 389s Selecting previously unselected package python3-numpy. 389s Preparing to unpack .../05-python3-numpy_1%3a2.3.5+ds-3_arm64.deb ... 389s Unpacking python3-numpy (1:2.3.5+ds-3) ... 390s Selecting previously unselected package libpython3.14-minimal:arm64. 390s Preparing to unpack .../06-libpython3.14-minimal_3.14.2-1_arm64.deb ... 390s Unpacking libpython3.14-minimal:arm64 (3.14.2-1) ... 390s Selecting previously unselected package python3.14-minimal. 390s Preparing to unpack .../07-python3.14-minimal_3.14.2-1_arm64.deb ... 390s Unpacking python3.14-minimal (3.14.2-1) ... 390s Selecting previously unselected package dbconfig-common. 390s Preparing to unpack .../08-dbconfig-common_2.0.25ubuntu1_all.deb ... 390s Unpacking dbconfig-common (2.0.25ubuntu1) ... 390s Selecting previously unselected package dbconfig-mysql. 390s Preparing to unpack .../09-dbconfig-mysql_2.0.25ubuntu1_all.deb ... 390s Unpacking dbconfig-mysql (2.0.25ubuntu1) ... 390s Selecting previously unselected package libomnithread4:arm64. 390s Preparing to unpack .../10-libomnithread4_4.3.3+ds1-1_arm64.deb ... 390s Unpacking libomnithread4:arm64 (4.3.3+ds1-1) ... 390s Selecting previously unselected package libomniorb4-3t64:arm64. 390s Preparing to unpack .../11-libomniorb4-3t64_4.3.3+ds1-1_arm64.deb ... 390s Unpacking libomniorb4-3t64:arm64 (4.3.3+ds1-1) ... 390s Selecting previously unselected package libabsl20260107:arm64. 390s Preparing to unpack .../12-libabsl20260107_20260107.0-0ubuntu2_arm64.deb ... 390s Unpacking libabsl20260107:arm64 (20260107.0-0ubuntu2) ... 390s Selecting previously unselected package libabsl20240722:arm64. 390s Preparing to unpack .../13-libabsl20240722_20240722.0-4ubuntu1_arm64.deb ... 390s Unpacking libabsl20240722:arm64 (20240722.0-4ubuntu1) ... 390s Selecting previously unselected package libcares2:arm64. 390s Preparing to unpack .../14-libcares2_1.34.6-1_arm64.deb ... 390s Unpacking libcares2:arm64 (1.34.6-1) ... 390s Selecting previously unselected package libprotobuf32t64:arm64. 390s Preparing to unpack .../15-libprotobuf32t64_3.21.12-15_arm64.deb ... 390s Unpacking libprotobuf32t64:arm64 (3.21.12-15) ... 390s Selecting previously unselected package libprotoc32t64:arm64. 390s Preparing to unpack .../16-libprotoc32t64_3.21.12-15_arm64.deb ... 390s Unpacking libprotoc32t64:arm64 (3.21.12-15) ... 390s Selecting previously unselected package libre2-11:arm64. 390s Preparing to unpack .../17-libre2-11_20250805-1build1_arm64.deb ... 390s Unpacking libre2-11:arm64 (20250805-1build1) ... 390s Selecting previously unselected package libgrpc29t64:arm64. 390s Preparing to unpack .../18-libgrpc29t64_1.51.1-7_arm64.deb ... 390s Unpacking libgrpc29t64:arm64 (1.51.1-7) ... 390s Selecting previously unselected package libgrpc++1.51t64:arm64. 390s Preparing to unpack .../19-libgrpc++1.51t64_1.51.1-7_arm64.deb ... 390s Unpacking libgrpc++1.51t64:arm64 (1.51.1-7) ... 390s Selecting previously unselected package opentelemetry-cpp:arm64. 390s Preparing to unpack .../20-opentelemetry-cpp_1.23.0-3build1_arm64.deb ... 390s Unpacking opentelemetry-cpp:arm64 (1.23.0-3build1) ... 390s Selecting previously unselected package tango-common. 390s Preparing to unpack .../21-tango-common_10.0.2+dfsg1-4build1_all.deb ... 390s Unpacking tango-common (10.0.2+dfsg1-4build1) ... 390s Selecting previously unselected package libcos4-3:arm64. 391s Preparing to unpack .../22-libcos4-3_4.3.3+ds1-1_arm64.deb ... 391s Unpacking libcos4-3:arm64 (4.3.3+ds1-1) ... 391s Selecting previously unselected package libjpeg-turbo8:arm64. 391s Preparing to unpack .../23-libjpeg-turbo8_2.1.5-4ubuntu2_arm64.deb ... 391s Unpacking libjpeg-turbo8:arm64 (2.1.5-4ubuntu2) ... 391s Selecting previously unselected package libjpeg8:arm64. 391s Preparing to unpack .../24-libjpeg8_8c-2ubuntu11_arm64.deb ... 391s Unpacking libjpeg8:arm64 (8c-2ubuntu11) ... 391s Selecting previously unselected package libnorm1t64:arm64. 391s Preparing to unpack .../25-libnorm1t64_1.5.9+dfsg-4_arm64.deb ... 391s Unpacking libnorm1t64:arm64 (1.5.9+dfsg-4) ... 391s Selecting previously unselected package libpgm-5.3-0t64:arm64. 391s Preparing to unpack .../26-libpgm-5.3-0t64_5.3.128~dfsg-2.1build2_arm64.deb ... 391s Unpacking libpgm-5.3-0t64:arm64 (5.3.128~dfsg-2.1build2) ... 391s Selecting previously unselected package libsodium23:arm64. 391s Preparing to unpack .../27-libsodium23_1.0.18-2_arm64.deb ... 391s Unpacking libsodium23:arm64 (1.0.18-2) ... 391s Selecting previously unselected package libzmq5:arm64. 391s Preparing to unpack .../28-libzmq5_4.3.5-1build3_arm64.deb ... 391s Unpacking libzmq5:arm64 (4.3.5-1build3) ... 391s Selecting previously unselected package libtango10:arm64. 391s Preparing to unpack .../29-libtango10_10.0.2+dfsg1-4build1_arm64.deb ... 391s Unpacking libtango10:arm64 (10.0.2+dfsg1-4build1) ... 391s Selecting previously unselected package libtango-tools. 391s Preparing to unpack .../30-libtango-tools_10.0.2+dfsg1-4build1_arm64.deb ... 391s Unpacking libtango-tools (10.0.2+dfsg1-4build1) ... 391s Selecting previously unselected package libmysqlclient24:arm64. 391s Preparing to unpack .../31-libmysqlclient24_8.4.8-0ubuntu1_arm64.deb ... 391s Unpacking libmysqlclient24:arm64 (8.4.8-0ubuntu1) ... 391s Selecting previously unselected package tango-db. 391s Preparing to unpack .../32-tango-db_10.0.2+dfsg1-4build1_arm64.deb ... 391s Unpacking tango-db (10.0.2+dfsg1-4build1) ... 391s Selecting previously unselected package default-mysql-server. 391s Preparing to unpack .../33-default-mysql-server_1.1.1ubuntu2_all.deb ... 391s Unpacking default-mysql-server (1.1.1ubuntu2) ... 391s Selecting previously unselected package libboost-python1.88.0. 391s Preparing to unpack .../34-libboost-python1.88.0_1.88.0-1.4ubuntu3_arm64.deb ... 391s Unpacking libboost-python1.88.0 (1.88.0-1.4ubuntu3) ... 391s Selecting previously unselected package libc-dev-bin. 391s Preparing to unpack .../35-libc-dev-bin_2.42-2ubuntu4_arm64.deb ... 391s Unpacking libc-dev-bin (2.42-2ubuntu4) ... 391s Selecting previously unselected package linux-libc-dev:arm64. 391s Preparing to unpack .../36-linux-libc-dev_6.18.0-9.9_arm64.deb ... 391s Unpacking linux-libc-dev:arm64 (6.18.0-9.9) ... 391s Selecting previously unselected package libcrypt-dev:arm64. 391s Preparing to unpack .../37-libcrypt-dev_1%3a4.5.1-1_arm64.deb ... 391s Unpacking libcrypt-dev:arm64 (1:4.5.1-1) ... 391s Selecting previously unselected package rpcsvc-proto. 391s Preparing to unpack .../38-rpcsvc-proto_1.4.3-1build1_arm64.deb ... 391s Unpacking rpcsvc-proto (1.4.3-1build1) ... 391s Selecting previously unselected package libc6-dev:arm64. 391s Preparing to unpack .../39-libc6-dev_2.42-2ubuntu4_arm64.deb ... 391s Unpacking libc6-dev:arm64 (2.42-2ubuntu4) ... 391s Selecting previously unselected package libev4t64:arm64. 391s Preparing to unpack .../40-libev4t64_1%3a4.33-2.1build2_arm64.deb ... 391s Unpacking libev4t64:arm64 (1:4.33-2.1build2) ... 391s Selecting previously unselected package libexpat1-dev:arm64. 391s Preparing to unpack .../41-libexpat1-dev_2.7.4-1_arm64.deb ... 391s Unpacking libexpat1-dev:arm64 (2.7.4-1) ... 391s Selecting previously unselected package zlib1g-dev:arm64. 391s Preparing to unpack .../42-zlib1g-dev_1%3a1.3.dfsg+really1.3.1-1ubuntu2_arm64.deb ... 391s Unpacking zlib1g-dev:arm64 (1:1.3.dfsg+really1.3.1-1ubuntu2) ... 392s Selecting previously unselected package libpython3.13-dev:arm64. 392s Preparing to unpack .../43-libpython3.13-dev_3.13.11-1_arm64.deb ... 392s Unpacking libpython3.13-dev:arm64 (3.13.11-1) ... 392s Selecting previously unselected package libpython3-dev:arm64. 392s Preparing to unpack .../44-libpython3-dev_3.13.9-3_arm64.deb ... 392s Unpacking libpython3-dev:arm64 (3.13.9-3) ... 392s Selecting previously unselected package libpython3.14-stdlib:arm64. 392s Preparing to unpack .../45-libpython3.14-stdlib_3.14.2-1_arm64.deb ... 392s Unpacking libpython3.14-stdlib:arm64 (3.14.2-1) ... 392s Selecting previously unselected package libpython3.14:arm64. 392s Preparing to unpack .../46-libpython3.14_3.14.2-1_arm64.deb ... 392s Unpacking libpython3.14:arm64 (3.14.2-1) ... 392s Selecting previously unselected package libpython3.14-dev:arm64. 392s Preparing to unpack .../47-libpython3.14-dev_3.14.2-1_arm64.deb ... 392s Unpacking libpython3.14-dev:arm64 (3.14.2-1) ... 392s Selecting previously unselected package libpython3-all-dev:arm64. 392s Preparing to unpack .../48-libpython3-all-dev_3.13.9-3_arm64.deb ... 392s Unpacking libpython3-all-dev:arm64 (3.13.9-3) ... 392s Selecting previously unselected package python3.14. 392s Preparing to unpack .../49-python3.14_3.14.2-1_arm64.deb ... 392s Unpacking python3.14 (3.14.2-1) ... 392s Selecting previously unselected package python3-all. 392s Preparing to unpack .../50-python3-all_3.13.9-3_arm64.deb ... 392s Unpacking python3-all (3.13.9-3) ... 392s Selecting previously unselected package python3.13-dev. 392s Preparing to unpack .../51-python3.13-dev_3.13.11-1_arm64.deb ... 392s Unpacking python3.13-dev (3.13.11-1) ... 392s Selecting previously unselected package python3-dev. 392s Preparing to unpack .../52-python3-dev_3.13.9-3_arm64.deb ... 392s Unpacking python3-dev (3.13.9-3) ... 392s Selecting previously unselected package python3.14-dev. 392s Preparing to unpack .../53-python3.14-dev_3.14.2-1_arm64.deb ... 392s Unpacking python3.14-dev (3.14.2-1) ... 392s Selecting previously unselected package python3-all-dev. 392s Preparing to unpack .../54-python3-all-dev_3.13.9-3_arm64.deb ... 392s Unpacking python3-all-dev (3.13.9-3) ... 392s Selecting previously unselected package python3-psutil. 392s Preparing to unpack .../55-python3-psutil_7.1.0-1ubuntu1_arm64.deb ... 392s Unpacking python3-psutil (7.1.0-1ubuntu1) ... 392s Selecting previously unselected package python3-zope.event. 392s Preparing to unpack .../56-python3-zope.event_6.0-2_all.deb ... 392s Unpacking python3-zope.event (6.0-2) ... 392s Selecting previously unselected package python3-zope.interface. 392s Preparing to unpack .../57-python3-zope.interface_8.2-1_arm64.deb ... 392s Unpacking python3-zope.interface (8.2-1) ... 392s Selecting previously unselected package python3-greenlet. 392s Preparing to unpack .../58-python3-greenlet_3.2.4-3_arm64.deb ... 392s Unpacking python3-greenlet (3.2.4-3) ... 393s Selecting previously unselected package python3-gevent. 393s Preparing to unpack .../59-python3-gevent_24.11.1-1build2_arm64.deb ... 393s Unpacking python3-gevent (24.11.1-1build2) ... 393s Selecting previously unselected package python3-tango. 393s Preparing to unpack .../60-python3-tango_10.0.2-3_arm64.deb ... 393s Unpacking python3-tango (10.0.2-3) ... 393s Setting up libprotobuf-lite32t64:arm64 (3.21.12-15) ... 393s Setting up libev4t64:arm64 (1:4.33-2.1build2) ... 393s Setting up libnorm1t64:arm64 (1.5.9+dfsg-4) ... 393s Setting up libmecab2:arm64 (0.996-15.1build3) ... 393s Setting up libprotobuf32t64:arm64 (3.21.12-15) ... 393s Setting up libboost-python1.88.0 (1.88.0-1.4ubuntu3) ... 393s Setting up libsodium23:arm64 (1.0.18-2) ... 393s Setting up python3-zope.event (6.0-2) ... 393s Setting up python3-zope.interface (8.2-1) ... 394s Setting up libpython3.14-minimal:arm64 (3.14.2-1) ... 394s Setting up linux-libc-dev:arm64 (6.18.0-9.9) ... 394s Setting up dbconfig-common (2.0.25ubuntu1) ... 394s Creating config file /etc/dbconfig-common/config with new version 394s Setting up libabsl20240722:arm64 (20240722.0-4ubuntu1) ... 394s Setting up libmysqlclient24:arm64 (8.4.8-0ubuntu1) ... 394s Setting up python3-psutil (7.1.0-1ubuntu1) ... 394s Setting up libpgm-5.3-0t64:arm64 (5.3.128~dfsg-2.1build2) ... 394s Setting up libblas3:arm64 (3.12.1-7ubuntu1) ... 394s update-alternatives: using /usr/lib/aarch64-linux-gnu/blas/libblas.so.3 to provide /usr/lib/aarch64-linux-gnu/libblas.so.3 (libblas.so.3-aarch64-linux-gnu) in auto mode 394s Setting up rpcsvc-proto (1.4.3-1build1) ... 394s Setting up python3-greenlet (3.2.4-3) ... 395s Setting up libcares2:arm64 (1.34.6-1) ... 395s Setting up python3-numpy-dev:arm64 (1:2.3.5+ds-3) ... 395s Setting up libtcmalloc-minimal4t64:arm64 (2.16-1build1) ... 395s Setting up libjpeg-turbo8:arm64 (2.1.5-4ubuntu2) ... 395s Setting up libomnithread4:arm64 (4.3.3+ds1-1) ... 395s Setting up libgfortran5:arm64 (15.2.0-12ubuntu1) ... 395s Setting up libcrypt-dev:arm64 (1:4.5.1-1) ... 395s Setting up libabsl20260107:arm64 (20260107.0-0ubuntu2) ... 395s Setting up libprotoc32t64:arm64 (3.21.12-15) ... 395s Setting up libc-dev-bin (2.42-2ubuntu4) ... 395s Setting up python3.14-minimal (3.14.2-1) ... 395s Setting up libjpeg8:arm64 (8c-2ubuntu11) ... 395s Setting up libre2-11:arm64 (20250805-1build1) ... 395s Setting up liblapack3:arm64 (3.12.1-7ubuntu1) ... 395s update-alternatives: using /usr/lib/aarch64-linux-gnu/lapack/liblapack.so.3 to provide /usr/lib/aarch64-linux-gnu/liblapack.so.3 (liblapack.so.3-aarch64-linux-gnu) in auto mode 396s Setting up libzmq5:arm64 (4.3.5-1build3) ... 396s Setting up libgoogle-perftools4t64:arm64 (2.16-1build1) ... 396s Setting up libomniorb4-3t64:arm64 (4.3.3+ds1-1) ... 396s Setting up libpython3.14-stdlib:arm64 (3.14.2-1) ... 396s Setting up python3-gevent (24.11.1-1build2) ... 396s /usr/lib/python3/dist-packages/gevent/_ffi/loop.py:226: SyntaxWarning: 'return' in a 'finally' block 396s return # pylint:disable=lost-exception,return-in-finally 396s Setting up mysql-server-core (8.4.8-0ubuntu1) ... 396s Setting up libgrpc29t64:arm64 (1.51.1-7) ... 396s Setting up python3-numpy (1:2.3.5+ds-3) ... 400s Setting up mysql-client-core (8.4.8-0ubuntu1) ... 400s Setting up libpython3.14:arm64 (3.14.2-1) ... 400s Setting up libc6-dev:arm64 (2.42-2ubuntu4) ... 400s Setting up libcos4-3:arm64 (4.3.3+ds1-1) ... 400s Setting up python3.14 (3.14.2-1) ... 401s Setting up mysql-client (8.4.8-0ubuntu1) ... 401s Setting up dbconfig-mysql (2.0.25ubuntu1) ... 401s Setting up libgrpc++1.51t64:arm64 (1.51.1-7) ... 401s Setting up python3-all (3.13.9-3) ... 401s Setting up libexpat1-dev:arm64 (2.7.4-1) ... 401s Setting up opentelemetry-cpp:arm64 (1.23.0-3build1) ... 401s Setting up zlib1g-dev:arm64 (1:1.3.dfsg+really1.3.1-1ubuntu2) ... 401s Setting up libpython3.14-dev:arm64 (3.14.2-1) ... 401s Setting up tango-common (10.0.2+dfsg1-4build1) ... 401s Adding group tango....done 401s Adding system user tango....done 401s Setting up mysql-server (8.4.8-0ubuntu1) ... 401s update-alternatives: using /etc/mysql/mysql.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode 401s Renaming removed key_buffer and myisam-recover options (if present) 408s Created symlink '/etc/systemd/system/multi-user.target.wants/mysql.service' → '/usr/lib/systemd/system/mysql.service'. 409s Setting up libtango10:arm64 (10.0.2+dfsg1-4build1) ... 409s Setting up python3.14-dev (3.14.2-1) ... 409s Setting up libtango-tools (10.0.2+dfsg1-4build1) ... 409s Setting up default-mysql-server (1.1.1ubuntu2) ... 409s Setting up python3-tango (10.0.2-3) ... 409s Setting up libpython3.13-dev:arm64 (3.13.11-1) ... 409s Setting up tango-db (10.0.2+dfsg1-4build1) ... 410s Determining localhost credentials from /etc/mysql/debian.cnf: succeeded. 410s dbconfig-common: writing config to /etc/dbconfig-common/tango-db.conf 410s Creating config file /etc/dbconfig-common/tango-db.conf with new version 410s Creating config file /var/lib/tango/.my.cnf with new version 410s checking privileges on database tango for tango@localhost: user creation needed. 410s granting access to database tango for tango@localhost: success. 410s verifying access for tango@localhost: success. 410s creating database tango: success. 410s verifying database tango exists: success. 411s populating database via sql... done. 411s dbconfig-common: flushing administrative password 412s Created symlink '/etc/systemd/system/multi-user.target.wants/tango-db.service' → '/usr/lib/systemd/system/tango-db.service'. 412s Setting up libpython3-dev:arm64 (3.13.9-3) ... 412s Setting up python3.13-dev (3.13.11-1) ... 412s Setting up libpython3-all-dev:arm64 (3.13.9-3) ... 412s Setting up python3-dev (3.13.9-3) ... 412s Setting up python3-all-dev (3.13.9-3) ... 412s Processing triggers for systemd (259-1ubuntu3) ... 412s Processing triggers for man-db (2.13.1-1) ... 413s Processing triggers for libc-bin (2.42-2ubuntu4) ... 415s autopkgtest [02:49:58]: 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 415s autopkgtest [02:49:58]: test command2: [----------------------- 415s Testing with python3.14: 415s TANGO Database sys/database/2 415s 415s Running since 2026-02-04 02:49:55 415s 415s Devices defined = 8 415s Devices exported = 2 415s Device servers defined = 4 415s Device servers exported = 1 415s 415s Device properties defined = 0 [History lgth = 0] 415s Class properties defined = 67 [History lgth = 0] 415s Device attribute properties defined = 0 [History lgth = 0] 415s Class attribute properties defined = 0 [History lgth = 0] 415s Object properties defined = 0 [History lgth = 0] 415s 417s bash: line 1: 3759 Segmentation fault (core dumped) $py -c "import tango; print(tango.Database().get_info())" 418s autopkgtest [02:50:01]: test command2: -----------------------] 418s command2 FLAKY non-zero exit status 139 418s autopkgtest [02:50:01]: test command2: - - - - - - - - - - results - - - - - - - - - - 418s autopkgtest [02:50:01]: @@@@@@@@@@@@@@@@@@@@ summary 418s command1 FAIL non-zero exit status 139 418s command2 FLAKY non-zero exit status 139