1s autopkgtest [09:07:57]: starting date and time: 2026-02-05 09:07:57+0000 1s autopkgtest [09:07:57]: git checkout: 4b346b80 nova: make wait_reboot return success even when a no-op 1s autopkgtest [09:07:57]: host juju-7f2275-prod-proposed-migration-environment-15; command line: /home/ubuntu/autopkgtest/runner/autopkgtest --output-dir /tmp/autopkgtest-work.52x4fb5v/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-amd64 --security-groups autopkgtest-juju-7f2275-prod-proposed-migration-environment-15@sto01-4.secgroup --name adt-resolute-amd64-pytango-20260205-090753-juju-7f2275-prod-proposed-migration-environment-15-892c9733-4447-4f0d-b8a7-909148c538f6 --image adt/ubuntu-resolute-amd64-server --keyname testbed-juju-7f2275-prod-proposed-migration-environment-15 --net-id=net_prod-autopkgtest-workers-amd64 -e TERM=linux --mirror=http://ftpmaster.internal/ubuntu/ 6s Creating nova instance adt-resolute-amd64-pytango-20260205-090753-juju-7f2275-prod-proposed-migration-environment-15-892c9733-4447-4f0d-b8a7-909148c538f6 from image adt/ubuntu-resolute-amd64-server-20260204.img (UUID fedf54b4-458b-493e-8072-6425c19717b4)... 115s autopkgtest [09:09:52]: testbed dpkg architecture: amd64 115s autopkgtest [09:09:52]: testbed apt version: 3.1.14 115s autopkgtest [09:09:52]: @@@@@@@@@@@@@@@@@@@@ test bed setup 115s autopkgtest [09:09:52]: testbed release detected to be: None 116s autopkgtest [09:09:53]: updating testbed package index (apt update) 116s Get:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease [124 kB] 116s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 116s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 116s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 116s Get:5 http://ftpmaster.internal/ubuntu resolute-proposed/restricted Sources [5260 B] 116s Get:6 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse Sources [35.4 kB] 116s Get:7 http://ftpmaster.internal/ubuntu resolute-proposed/universe Sources [1719 kB] 117s Get:8 http://ftpmaster.internal/ubuntu resolute-proposed/main Sources [228 kB] 117s Get:9 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 Packages [276 kB] 117s Get:10 http://ftpmaster.internal/ubuntu resolute-proposed/main i386 Packages [206 kB] 117s Get:11 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 c-n-f Metadata [7252 B] 117s Get:12 http://ftpmaster.internal/ubuntu resolute-proposed/restricted amd64 Packages [32.9 kB] 117s Get:13 http://ftpmaster.internal/ubuntu resolute-proposed/restricted i386 Packages [3692 B] 117s Get:14 http://ftpmaster.internal/ubuntu resolute-proposed/restricted amd64 c-n-f Metadata [336 B] 117s Get:15 http://ftpmaster.internal/ubuntu resolute-proposed/universe i386 Packages [604 kB] 117s Get:16 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 Packages [1566 kB] 117s Get:17 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 c-n-f Metadata [42.6 kB] 117s Get:18 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse amd64 Packages [30.1 kB] 117s Get:19 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse i386 Packages [4824 B] 117s Get:20 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse amd64 c-n-f Metadata [1116 B] 118s Fetched 4888 kB in 1s (4514 kB/s) 118s Reading package lists... 119s Hit:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease 119s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 119s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 119s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 120s Reading package lists... 120s Reading package lists... 120s Building dependency tree... 120s Reading state information... 120s Calculating upgrade... 120s The following packages will be upgraded: 120s pollinate python3-linkify-it python3-referencing sed 120s 4 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 120s Need to get 251 kB of archives. 120s After this operation, 4096 B disk space will be freed. 120s Get:1 http://ftpmaster.internal/ubuntu resolute/main amd64 sed amd64 4.9-2build3 [195 kB] 120s Get:2 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-linkify-it all 2.0.3-1ubuntu3 [19.4 kB] 120s Get:3 http://ftpmaster.internal/ubuntu resolute/main amd64 pollinate all 4.33-4ubuntu5 [14.0 kB] 120s Get:4 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-referencing all 0.36.2-1ubuntu2 [22.2 kB] 120s dpkg-preconfigure: unable to re-open stdin: No such file or directory 120s Fetched 251 kB in 0s (20.2 MB/s) 120s (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 ... 83957 files and directories currently installed.) 120s Preparing to unpack .../sed_4.9-2build3_amd64.deb ... 120s Unpacking sed (4.9-2build3) over (4.9-2build2) ... 121s Setting up sed (4.9-2build3) ... 121s (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 ... 83957 files and directories currently installed.) 121s Preparing to unpack .../python3-linkify-it_2.0.3-1ubuntu3_all.deb ... 121s Unpacking python3-linkify-it (2.0.3-1ubuntu3) over (2.0.3-1ubuntu2) ... 121s Preparing to unpack .../pollinate_4.33-4ubuntu5_all.deb ... 121s Unpacking pollinate (4.33-4ubuntu5) over (4.33-4ubuntu4) ... 121s Preparing to unpack .../python3-referencing_0.36.2-1ubuntu2_all.deb ... 121s Unpacking python3-referencing (0.36.2-1ubuntu2) over (0.36.2-1ubuntu1) ... 121s Setting up pollinate (4.33-4ubuntu5) ... 131s Setting up python3-linkify-it (2.0.3-1ubuntu3) ... 131s Setting up python3-referencing (0.36.2-1ubuntu2) ... 131s Processing triggers for install-info (7.2-5) ... 131s Processing triggers for man-db (2.13.1-1) ... 132s autopkgtest [09:10:09]: upgrading testbed (apt dist-upgrade and autopurge) 132s Reading package lists... 132s Building dependency tree... 132s Reading state information... 132s Calculating upgrade... 132s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 132s Reading package lists... 133s Building dependency tree... 133s Reading state information... 133s Solving dependencies... 133s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 133s autopkgtest [09:10:10]: rebooting testbed after setup commands that affected boot 162s autopkgtest [09:10:39]: testbed running kernel: Linux 6.18.0-9-generic #9-Ubuntu SMP PREEMPT_DYNAMIC Mon Jan 12 16:49:02 UTC 2026 164s autopkgtest [09:10:41]: @@@@@@@@@@@@@@@@@@@@ apt-source pytango 165s Get:1 http://ftpmaster.internal/ubuntu resolute/universe pytango 10.0.2-3 (dsc) [3646 B] 165s Get:2 http://ftpmaster.internal/ubuntu resolute/universe pytango 10.0.2-3 (tar) [4854 kB] 165s Get:3 http://ftpmaster.internal/ubuntu resolute/universe pytango 10.0.2-3 (diff) [13.6 kB] 166s gpgv: Signature made Thu Oct 2 15:09:36 2025 UTC 166s gpgv: using RSA key 9B03EBB98300DF97C2B123BFCC8C6BDD1403F4CA 166s gpgv: issuer "roehling@debian.org" 166s gpgv: Can't check signature: No public key 166s dpkg-source: warning: cannot verify inline signature for ./pytango_10.0.2-3.dsc: no acceptable signature found 166s autopkgtest [09:10:43]: testing package pytango version 10.0.2-3 166s autopkgtest [09:10:43]: build not needed 167s autopkgtest [09:10:44]: test command1: preparing testbed 167s Reading package lists... 167s Building dependency tree... 167s Reading state information... 167s Solving dependencies... 168s The following NEW packages will be installed: 168s libabsl20240722 libabsl20260107 libblas3 libboost-python1.88.0 libc-dev-bin 168s libc6-dev libcares2 libcos4-3 libcrypt-dev libev4t64 libexpat1-dev 168s libgfortran5 libgrpc++1.51t64 libgrpc29t64 libjpeg-turbo8 libjpeg8 168s liblapack3 libnorm1t64 libomniorb4-3t64 libomnithread4 libpgm-5.3-0t64 168s libprotobuf32t64 libprotoc32t64 libpython3-all-dev libpython3-dev 168s libpython3.13-dev libpython3.14 libpython3.14-dev libpython3.14-minimal 168s libpython3.14-stdlib libre2-11 libsodium23 libtango-tools libtango10 libzmq5 168s linux-libc-dev opentelemetry-cpp python3-all python3-all-dev python3-dev 168s python3-gevent python3-greenlet python3-iniconfig python3-numpy 168s python3-numpy-dev python3-pluggy python3-psutil python3-py python3-pytest 168s python3-pytest-asyncio python3-pytest-forked python3-pytest-rerunfailures 168s python3-tango python3-zope.event python3-zope.interface python3.13-dev 168s python3.14 python3.14-dev python3.14-minimal rpcsvc-proto tango-common 168s tango-starter tango-test zlib1g-dev 168s 0 upgraded, 64 newly installed, 0 to remove and 0 not upgraded. 168s Need to get 59.0 MB of archives. 168s After this operation, 273 MB of additional disk space will be used. 168s Get:1 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-numpy-dev amd64 1:2.3.5+ds-3 [147 kB] 168s Get:2 http://ftpmaster.internal/ubuntu resolute/main amd64 libblas3 amd64 3.12.1-7ubuntu1 [260 kB] 168s Get:3 http://ftpmaster.internal/ubuntu resolute/main amd64 libgfortran5 amd64 15.2.0-12ubuntu1 [939 kB] 168s Get:4 http://ftpmaster.internal/ubuntu resolute/main amd64 liblapack3 amd64 3.12.1-7ubuntu1 [2739 kB] 168s Get:5 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-numpy amd64 1:2.3.5+ds-3 [8129 kB] 168s Get:6 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.14-minimal amd64 3.14.2-1 [920 kB] 168s Get:7 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.14-minimal amd64 3.14.2-1 [2563 kB] 168s Get:8 http://ftpmaster.internal/ubuntu resolute/universe amd64 libomnithread4 amd64 4.3.3+ds1-1 [13.2 kB] 169s Get:9 http://ftpmaster.internal/ubuntu resolute/universe amd64 libomniorb4-3t64 amd64 4.3.3+ds1-1 [1276 kB] 169s Get:10 http://ftpmaster.internal/ubuntu resolute/main amd64 libabsl20260107 amd64 20260107.0-0ubuntu2 [587 kB] 169s Get:11 http://ftpmaster.internal/ubuntu resolute/main amd64 libabsl20240722 amd64 20240722.0-4ubuntu1 [528 kB] 169s Get:12 http://ftpmaster.internal/ubuntu resolute/main amd64 libcares2 amd64 1.34.6-1 [102 kB] 169s Get:13 http://ftpmaster.internal/ubuntu resolute/main amd64 libprotobuf32t64 amd64 3.21.12-15 [955 kB] 169s Get:14 http://ftpmaster.internal/ubuntu resolute/main amd64 libprotoc32t64 amd64 3.21.12-15 [702 kB] 169s Get:15 http://ftpmaster.internal/ubuntu resolute/main amd64 libre2-11 amd64 20250805-1build1 [175 kB] 169s Get:16 http://ftpmaster.internal/ubuntu resolute/universe amd64 libgrpc29t64 amd64 1.51.1-7 [2926 kB] 169s Get:17 http://ftpmaster.internal/ubuntu resolute/universe amd64 libgrpc++1.51t64 amd64 1.51.1-7 [498 kB] 169s Get:18 http://ftpmaster.internal/ubuntu resolute/universe amd64 opentelemetry-cpp amd64 1.23.0-3build1 [634 kB] 169s Get:19 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 tango-common all 10.0.2+dfsg1-4build1 [8608 B] 169s Get:20 http://ftpmaster.internal/ubuntu resolute/universe amd64 libcos4-3 amd64 4.3.3+ds1-1 [1297 kB] 170s Get:21 http://ftpmaster.internal/ubuntu resolute/main amd64 libjpeg-turbo8 amd64 2.1.5-4ubuntu2 [152 kB] 170s Get:22 http://ftpmaster.internal/ubuntu resolute/main amd64 libjpeg8 amd64 8c-2ubuntu11 [2148 B] 170s Get:23 http://ftpmaster.internal/ubuntu resolute/universe amd64 libnorm1t64 amd64 1.5.9+dfsg-4 [158 kB] 170s Get:24 http://ftpmaster.internal/ubuntu resolute/universe amd64 libpgm-5.3-0t64 amd64 5.3.128~dfsg-2.1build2 [168 kB] 170s Get:25 http://ftpmaster.internal/ubuntu resolute/main amd64 libsodium23 amd64 1.0.18-2 [165 kB] 170s Get:26 http://ftpmaster.internal/ubuntu resolute/universe amd64 libzmq5 amd64 4.3.5-1build3 [262 kB] 170s Get:27 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 libtango10 amd64 10.0.2+dfsg1-4build1 [2077 kB] 170s Get:28 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 libtango-tools amd64 10.0.2+dfsg1-4build1 [26.0 kB] 170s Get:29 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 tango-starter amd64 10.0.2+dfsg1-4build1 [84.3 kB] 170s Get:30 http://ftpmaster.internal/ubuntu resolute/main amd64 libboost-python1.88.0 amd64 1.88.0-1.4ubuntu3 [360 kB] 170s Get:31 http://ftpmaster.internal/ubuntu resolute/main amd64 libc-dev-bin amd64 2.42-2ubuntu4 [23.3 kB] 170s Get:32 http://ftpmaster.internal/ubuntu resolute/main amd64 linux-libc-dev amd64 6.18.0-9.9 [1860 kB] 171s Get:33 http://ftpmaster.internal/ubuntu resolute/main amd64 libcrypt-dev amd64 1:4.5.1-1 [122 kB] 171s Get:34 http://ftpmaster.internal/ubuntu resolute/main amd64 rpcsvc-proto amd64 1.4.3-1build1 [68.3 kB] 171s Get:35 http://ftpmaster.internal/ubuntu resolute/main amd64 libc6-dev amd64 2.42-2ubuntu4 [2207 kB] 171s Get:36 http://ftpmaster.internal/ubuntu resolute/universe amd64 libev4t64 amd64 1:4.33-2.1build2 [31.5 kB] 171s Get:37 http://ftpmaster.internal/ubuntu resolute/main amd64 libexpat1-dev amd64 2.7.4-1 [145 kB] 171s Get:38 http://ftpmaster.internal/ubuntu resolute/main amd64 zlib1g-dev amd64 1:1.3.dfsg+really1.3.1-1ubuntu2 [898 kB] 171s Get:39 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.13-dev amd64 3.13.11-1 [5798 kB] 172s Get:40 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3-dev amd64 3.13.9-3 [11.2 kB] 172s Get:41 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.14-stdlib amd64 3.14.2-1 [2398 kB] 173s Get:42 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.14 amd64 3.14.2-1 [2568 kB] 173s Get:43 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.14-dev amd64 3.14.2-1 [5963 kB] 174s Get:44 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3-all-dev amd64 3.13.9-3 [916 B] 174s Get:45 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.14 amd64 3.14.2-1 [816 kB] 174s Get:46 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-all amd64 3.13.9-3 [890 B] 174s Get:47 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.13-dev amd64 3.13.11-1 [508 kB] 174s Get:48 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-dev amd64 3.13.9-3 [26.6 kB] 174s Get:49 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.14-dev amd64 3.14.2-1 [510 kB] 174s Get:50 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-all-dev amd64 3.13.9-3 [914 B] 174s Get:51 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-iniconfig all 2.1.0-2 [6962 B] 174s Get:52 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-pluggy all 1.6.0-2 [21.1 kB] 174s Get:53 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-psutil amd64 7.1.0-1ubuntu1 [191 kB] 174s Get:54 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-py all 1.11.0-6 [72.9 kB] 174s Get:55 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-pytest all 9.0.2-2 [277 kB] 174s Get:56 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-pytest-asyncio all 1.3.0-1 [13.8 kB] 174s Get:57 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-pytest-forked all 1.6.0-5 [7758 B] 174s Get:58 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-pytest-rerunfailures all 16.1-1 [14.9 kB] 174s Get:59 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-zope.event all 6.0-2 [7710 B] 174s Get:60 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-zope.interface amd64 8.2-1 [146 kB] 174s Get:61 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-greenlet amd64 3.2.4-3 [185 kB] 175s Get:62 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-gevent amd64 24.11.1-1build2 [1203 kB] 175s Get:63 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-tango amd64 10.0.2-3 [3945 kB] 176s Get:64 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 tango-test amd64 10.0.2+dfsg1-4build1 [114 kB] 176s Preconfiguring packages ... 176s Fetched 59.0 MB in 8s (7389 kB/s) 176s Selecting previously unselected package python3-numpy-dev:amd64. 176s (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 ... 83957 files and directories currently installed.) 176s Preparing to unpack .../00-python3-numpy-dev_1%3a2.3.5+ds-3_amd64.deb ... 176s Unpacking python3-numpy-dev:amd64 (1:2.3.5+ds-3) ... 176s Selecting previously unselected package libblas3:amd64. 176s Preparing to unpack .../01-libblas3_3.12.1-7ubuntu1_amd64.deb ... 176s Unpacking libblas3:amd64 (3.12.1-7ubuntu1) ... 176s Selecting previously unselected package libgfortran5:amd64. 176s Preparing to unpack .../02-libgfortran5_15.2.0-12ubuntu1_amd64.deb ... 176s Unpacking libgfortran5:amd64 (15.2.0-12ubuntu1) ... 176s Selecting previously unselected package liblapack3:amd64. 176s Preparing to unpack .../03-liblapack3_3.12.1-7ubuntu1_amd64.deb ... 176s Unpacking liblapack3:amd64 (3.12.1-7ubuntu1) ... 176s Selecting previously unselected package python3-numpy. 176s Preparing to unpack .../04-python3-numpy_1%3a2.3.5+ds-3_amd64.deb ... 176s Unpacking python3-numpy (1:2.3.5+ds-3) ... 176s Selecting previously unselected package libpython3.14-minimal:amd64. 176s Preparing to unpack .../05-libpython3.14-minimal_3.14.2-1_amd64.deb ... 176s Unpacking libpython3.14-minimal:amd64 (3.14.2-1) ... 176s Selecting previously unselected package python3.14-minimal. 176s Preparing to unpack .../06-python3.14-minimal_3.14.2-1_amd64.deb ... 176s Unpacking python3.14-minimal (3.14.2-1) ... 176s Selecting previously unselected package libomnithread4:amd64. 176s Preparing to unpack .../07-libomnithread4_4.3.3+ds1-1_amd64.deb ... 176s Unpacking libomnithread4:amd64 (4.3.3+ds1-1) ... 176s Selecting previously unselected package libomniorb4-3t64:amd64. 176s Preparing to unpack .../08-libomniorb4-3t64_4.3.3+ds1-1_amd64.deb ... 176s Unpacking libomniorb4-3t64:amd64 (4.3.3+ds1-1) ... 176s Selecting previously unselected package libabsl20260107:amd64. 176s Preparing to unpack .../09-libabsl20260107_20260107.0-0ubuntu2_amd64.deb ... 176s Unpacking libabsl20260107:amd64 (20260107.0-0ubuntu2) ... 176s Selecting previously unselected package libabsl20240722:amd64. 176s Preparing to unpack .../10-libabsl20240722_20240722.0-4ubuntu1_amd64.deb ... 176s Unpacking libabsl20240722:amd64 (20240722.0-4ubuntu1) ... 176s Selecting previously unselected package libcares2:amd64. 176s Preparing to unpack .../11-libcares2_1.34.6-1_amd64.deb ... 176s Unpacking libcares2:amd64 (1.34.6-1) ... 176s Selecting previously unselected package libprotobuf32t64:amd64. 176s Preparing to unpack .../12-libprotobuf32t64_3.21.12-15_amd64.deb ... 176s Unpacking libprotobuf32t64:amd64 (3.21.12-15) ... 176s Selecting previously unselected package libprotoc32t64:amd64. 176s Preparing to unpack .../13-libprotoc32t64_3.21.12-15_amd64.deb ... 176s Unpacking libprotoc32t64:amd64 (3.21.12-15) ... 176s Selecting previously unselected package libre2-11:amd64. 176s Preparing to unpack .../14-libre2-11_20250805-1build1_amd64.deb ... 176s Unpacking libre2-11:amd64 (20250805-1build1) ... 176s Selecting previously unselected package libgrpc29t64:amd64. 176s Preparing to unpack .../15-libgrpc29t64_1.51.1-7_amd64.deb ... 176s Unpacking libgrpc29t64:amd64 (1.51.1-7) ... 176s Selecting previously unselected package libgrpc++1.51t64:amd64. 176s Preparing to unpack .../16-libgrpc++1.51t64_1.51.1-7_amd64.deb ... 176s Unpacking libgrpc++1.51t64:amd64 (1.51.1-7) ... 176s Selecting previously unselected package opentelemetry-cpp:amd64. 176s Preparing to unpack .../17-opentelemetry-cpp_1.23.0-3build1_amd64.deb ... 176s Unpacking opentelemetry-cpp:amd64 (1.23.0-3build1) ... 176s Selecting previously unselected package tango-common. 176s Preparing to unpack .../18-tango-common_10.0.2+dfsg1-4build1_all.deb ... 176s Unpacking tango-common (10.0.2+dfsg1-4build1) ... 176s Selecting previously unselected package libcos4-3:amd64. 176s Preparing to unpack .../19-libcos4-3_4.3.3+ds1-1_amd64.deb ... 176s Unpacking libcos4-3:amd64 (4.3.3+ds1-1) ... 176s Selecting previously unselected package libjpeg-turbo8:amd64. 176s Preparing to unpack .../20-libjpeg-turbo8_2.1.5-4ubuntu2_amd64.deb ... 176s Unpacking libjpeg-turbo8:amd64 (2.1.5-4ubuntu2) ... 176s Selecting previously unselected package libjpeg8:amd64. 176s Preparing to unpack .../21-libjpeg8_8c-2ubuntu11_amd64.deb ... 176s Unpacking libjpeg8:amd64 (8c-2ubuntu11) ... 176s Selecting previously unselected package libnorm1t64:amd64. 176s Preparing to unpack .../22-libnorm1t64_1.5.9+dfsg-4_amd64.deb ... 176s Unpacking libnorm1t64:amd64 (1.5.9+dfsg-4) ... 176s Selecting previously unselected package libpgm-5.3-0t64:amd64. 177s Preparing to unpack .../23-libpgm-5.3-0t64_5.3.128~dfsg-2.1build2_amd64.deb ... 177s Unpacking libpgm-5.3-0t64:amd64 (5.3.128~dfsg-2.1build2) ... 177s Selecting previously unselected package libsodium23:amd64. 177s Preparing to unpack .../24-libsodium23_1.0.18-2_amd64.deb ... 177s Unpacking libsodium23:amd64 (1.0.18-2) ... 177s Selecting previously unselected package libzmq5:amd64. 177s Preparing to unpack .../25-libzmq5_4.3.5-1build3_amd64.deb ... 177s Unpacking libzmq5:amd64 (4.3.5-1build3) ... 177s Selecting previously unselected package libtango10:amd64. 177s Preparing to unpack .../26-libtango10_10.0.2+dfsg1-4build1_amd64.deb ... 177s Unpacking libtango10:amd64 (10.0.2+dfsg1-4build1) ... 177s Selecting previously unselected package libtango-tools. 177s Preparing to unpack .../27-libtango-tools_10.0.2+dfsg1-4build1_amd64.deb ... 177s Unpacking libtango-tools (10.0.2+dfsg1-4build1) ... 177s Selecting previously unselected package tango-starter. 177s Preparing to unpack .../28-tango-starter_10.0.2+dfsg1-4build1_amd64.deb ... 177s Unpacking tango-starter (10.0.2+dfsg1-4build1) ... 177s Selecting previously unselected package libboost-python1.88.0. 177s Preparing to unpack .../29-libboost-python1.88.0_1.88.0-1.4ubuntu3_amd64.deb ... 177s Unpacking libboost-python1.88.0 (1.88.0-1.4ubuntu3) ... 177s Selecting previously unselected package libc-dev-bin. 177s Preparing to unpack .../30-libc-dev-bin_2.42-2ubuntu4_amd64.deb ... 177s Unpacking libc-dev-bin (2.42-2ubuntu4) ... 177s Selecting previously unselected package linux-libc-dev:amd64. 177s Preparing to unpack .../31-linux-libc-dev_6.18.0-9.9_amd64.deb ... 177s Unpacking linux-libc-dev:amd64 (6.18.0-9.9) ... 177s Selecting previously unselected package libcrypt-dev:amd64. 177s Preparing to unpack .../32-libcrypt-dev_1%3a4.5.1-1_amd64.deb ... 177s Unpacking libcrypt-dev:amd64 (1:4.5.1-1) ... 177s Selecting previously unselected package rpcsvc-proto. 177s Preparing to unpack .../33-rpcsvc-proto_1.4.3-1build1_amd64.deb ... 177s Unpacking rpcsvc-proto (1.4.3-1build1) ... 177s Selecting previously unselected package libc6-dev:amd64. 177s Preparing to unpack .../34-libc6-dev_2.42-2ubuntu4_amd64.deb ... 177s Unpacking libc6-dev:amd64 (2.42-2ubuntu4) ... 177s Selecting previously unselected package libev4t64:amd64. 177s Preparing to unpack .../35-libev4t64_1%3a4.33-2.1build2_amd64.deb ... 177s Unpacking libev4t64:amd64 (1:4.33-2.1build2) ... 177s Selecting previously unselected package libexpat1-dev:amd64. 177s Preparing to unpack .../36-libexpat1-dev_2.7.4-1_amd64.deb ... 177s Unpacking libexpat1-dev:amd64 (2.7.4-1) ... 177s Selecting previously unselected package zlib1g-dev:amd64. 177s Preparing to unpack .../37-zlib1g-dev_1%3a1.3.dfsg+really1.3.1-1ubuntu2_amd64.deb ... 177s Unpacking zlib1g-dev:amd64 (1:1.3.dfsg+really1.3.1-1ubuntu2) ... 177s Selecting previously unselected package libpython3.13-dev:amd64. 177s Preparing to unpack .../38-libpython3.13-dev_3.13.11-1_amd64.deb ... 177s Unpacking libpython3.13-dev:amd64 (3.13.11-1) ... 177s Selecting previously unselected package libpython3-dev:amd64. 177s Preparing to unpack .../39-libpython3-dev_3.13.9-3_amd64.deb ... 177s Unpacking libpython3-dev:amd64 (3.13.9-3) ... 177s Selecting previously unselected package libpython3.14-stdlib:amd64. 177s Preparing to unpack .../40-libpython3.14-stdlib_3.14.2-1_amd64.deb ... 177s Unpacking libpython3.14-stdlib:amd64 (3.14.2-1) ... 177s Selecting previously unselected package libpython3.14:amd64. 177s Preparing to unpack .../41-libpython3.14_3.14.2-1_amd64.deb ... 177s Unpacking libpython3.14:amd64 (3.14.2-1) ... 177s Selecting previously unselected package libpython3.14-dev:amd64. 177s Preparing to unpack .../42-libpython3.14-dev_3.14.2-1_amd64.deb ... 177s Unpacking libpython3.14-dev:amd64 (3.14.2-1) ... 177s Selecting previously unselected package libpython3-all-dev:amd64. 177s Preparing to unpack .../43-libpython3-all-dev_3.13.9-3_amd64.deb ... 177s Unpacking libpython3-all-dev:amd64 (3.13.9-3) ... 177s Selecting previously unselected package python3.14. 177s Preparing to unpack .../44-python3.14_3.14.2-1_amd64.deb ... 177s Unpacking python3.14 (3.14.2-1) ... 177s Selecting previously unselected package python3-all. 177s Preparing to unpack .../45-python3-all_3.13.9-3_amd64.deb ... 177s Unpacking python3-all (3.13.9-3) ... 177s Selecting previously unselected package python3.13-dev. 177s Preparing to unpack .../46-python3.13-dev_3.13.11-1_amd64.deb ... 177s Unpacking python3.13-dev (3.13.11-1) ... 177s Selecting previously unselected package python3-dev. 177s Preparing to unpack .../47-python3-dev_3.13.9-3_amd64.deb ... 177s Unpacking python3-dev (3.13.9-3) ... 177s Selecting previously unselected package python3.14-dev. 177s Preparing to unpack .../48-python3.14-dev_3.14.2-1_amd64.deb ... 177s Unpacking python3.14-dev (3.14.2-1) ... 177s Selecting previously unselected package python3-all-dev. 177s Preparing to unpack .../49-python3-all-dev_3.13.9-3_amd64.deb ... 177s Unpacking python3-all-dev (3.13.9-3) ... 177s Selecting previously unselected package python3-iniconfig. 177s Preparing to unpack .../50-python3-iniconfig_2.1.0-2_all.deb ... 177s Unpacking python3-iniconfig (2.1.0-2) ... 177s Selecting previously unselected package python3-pluggy. 177s Preparing to unpack .../51-python3-pluggy_1.6.0-2_all.deb ... 177s Unpacking python3-pluggy (1.6.0-2) ... 177s Selecting previously unselected package python3-psutil. 177s Preparing to unpack .../52-python3-psutil_7.1.0-1ubuntu1_amd64.deb ... 177s Unpacking python3-psutil (7.1.0-1ubuntu1) ... 177s Selecting previously unselected package python3-py. 177s Preparing to unpack .../53-python3-py_1.11.0-6_all.deb ... 177s Unpacking python3-py (1.11.0-6) ... 177s Selecting previously unselected package python3-pytest. 177s Preparing to unpack .../54-python3-pytest_9.0.2-2_all.deb ... 177s Unpacking python3-pytest (9.0.2-2) ... 177s Selecting previously unselected package python3-pytest-asyncio. 177s Preparing to unpack .../55-python3-pytest-asyncio_1.3.0-1_all.deb ... 177s Unpacking python3-pytest-asyncio (1.3.0-1) ... 177s Selecting previously unselected package python3-pytest-forked. 177s Preparing to unpack .../56-python3-pytest-forked_1.6.0-5_all.deb ... 177s Unpacking python3-pytest-forked (1.6.0-5) ... 177s Selecting previously unselected package python3-pytest-rerunfailures. 177s Preparing to unpack .../57-python3-pytest-rerunfailures_16.1-1_all.deb ... 177s Unpacking python3-pytest-rerunfailures (16.1-1) ... 177s Selecting previously unselected package python3-zope.event. 177s Preparing to unpack .../58-python3-zope.event_6.0-2_all.deb ... 177s Unpacking python3-zope.event (6.0-2) ... 177s Selecting previously unselected package python3-zope.interface. 177s Preparing to unpack .../59-python3-zope.interface_8.2-1_amd64.deb ... 177s Unpacking python3-zope.interface (8.2-1) ... 177s Selecting previously unselected package python3-greenlet. 177s Preparing to unpack .../60-python3-greenlet_3.2.4-3_amd64.deb ... 177s Unpacking python3-greenlet (3.2.4-3) ... 177s Selecting previously unselected package python3-gevent. 177s Preparing to unpack .../61-python3-gevent_24.11.1-1build2_amd64.deb ... 177s Unpacking python3-gevent (24.11.1-1build2) ... 177s Selecting previously unselected package python3-tango. 177s Preparing to unpack .../62-python3-tango_10.0.2-3_amd64.deb ... 177s Unpacking python3-tango (10.0.2-3) ... 178s Selecting previously unselected package tango-test. 178s Preparing to unpack .../63-tango-test_10.0.2+dfsg1-4build1_amd64.deb ... 178s Unpacking tango-test (10.0.2+dfsg1-4build1) ... 178s Setting up python3-iniconfig (2.1.0-2) ... 178s Setting up libev4t64:amd64 (1:4.33-2.1build2) ... 178s Setting up libnorm1t64:amd64 (1.5.9+dfsg-4) ... 178s Setting up libprotobuf32t64:amd64 (3.21.12-15) ... 178s Setting up libboost-python1.88.0 (1.88.0-1.4ubuntu3) ... 178s Setting up libsodium23:amd64 (1.0.18-2) ... 178s Setting up python3-py (1.11.0-6) ... 178s Setting up python3-zope.event (6.0-2) ... 178s Setting up python3-zope.interface (8.2-1) ... 178s Setting up libpython3.14-minimal:amd64 (3.14.2-1) ... 178s Setting up linux-libc-dev:amd64 (6.18.0-9.9) ... 178s Setting up libabsl20240722:amd64 (20240722.0-4ubuntu1) ... 178s Setting up python3-psutil (7.1.0-1ubuntu1) ... 178s Setting up libpgm-5.3-0t64:amd64 (5.3.128~dfsg-2.1build2) ... 178s Setting up libblas3:amd64 (3.12.1-7ubuntu1) ... 178s update-alternatives: using /usr/lib/x86_64-linux-gnu/blas/libblas.so.3 to provide /usr/lib/x86_64-linux-gnu/libblas.so.3 (libblas.so.3-x86_64-linux-gnu) in auto mode 178s Setting up rpcsvc-proto (1.4.3-1build1) ... 178s Setting up python3-greenlet (3.2.4-3) ... 179s Setting up libcares2:amd64 (1.34.6-1) ... 179s Setting up python3-numpy-dev:amd64 (1:2.3.5+ds-3) ... 179s Setting up libjpeg-turbo8:amd64 (2.1.5-4ubuntu2) ... 179s Setting up libomnithread4:amd64 (4.3.3+ds1-1) ... 179s Setting up libgfortran5:amd64 (15.2.0-12ubuntu1) ... 179s Setting up python3-pluggy (1.6.0-2) ... 179s Setting up libcrypt-dev:amd64 (1:4.5.1-1) ... 179s Setting up libabsl20260107:amd64 (20260107.0-0ubuntu2) ... 179s Setting up libprotoc32t64:amd64 (3.21.12-15) ... 179s Setting up libc-dev-bin (2.42-2ubuntu4) ... 179s Setting up python3.14-minimal (3.14.2-1) ... 179s Setting up libjpeg8:amd64 (8c-2ubuntu11) ... 179s Setting up libre2-11:amd64 (20250805-1build1) ... 179s Setting up liblapack3:amd64 (3.12.1-7ubuntu1) ... 179s update-alternatives: using /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3 to provide /usr/lib/x86_64-linux-gnu/liblapack.so.3 (liblapack.so.3-x86_64-linux-gnu) in auto mode 179s Setting up libzmq5:amd64 (4.3.5-1build3) ... 179s Setting up libomniorb4-3t64:amd64 (4.3.3+ds1-1) ... 179s Setting up libpython3.14-stdlib:amd64 (3.14.2-1) ... 179s Setting up python3-pytest (9.0.2-2) ... 180s Setting up python3-gevent (24.11.1-1build2) ... 180s /usr/lib/python3/dist-packages/gevent/_ffi/loop.py:226: SyntaxWarning: 'return' in a 'finally' block 180s return # pylint:disable=lost-exception,return-in-finally 180s Setting up python3-pytest-forked (1.6.0-5) ... 180s Setting up libgrpc29t64:amd64 (1.51.1-7) ... 180s Setting up python3-numpy (1:2.3.5+ds-3) ... 182s Setting up python3-pytest-asyncio (1.3.0-1) ... 182s Setting up libpython3.14:amd64 (3.14.2-1) ... 182s Setting up libc6-dev:amd64 (2.42-2ubuntu4) ... 182s Setting up libcos4-3:amd64 (4.3.3+ds1-1) ... 182s Setting up python3.14 (3.14.2-1) ... 183s Setting up python3-pytest-rerunfailures (16.1-1) ... 183s Setting up libgrpc++1.51t64:amd64 (1.51.1-7) ... 183s Setting up python3-all (3.13.9-3) ... 183s Setting up libexpat1-dev:amd64 (2.7.4-1) ... 183s Setting up opentelemetry-cpp:amd64 (1.23.0-3build1) ... 183s Setting up zlib1g-dev:amd64 (1:1.3.dfsg+really1.3.1-1ubuntu2) ... 183s Setting up libpython3.14-dev:amd64 (3.14.2-1) ... 183s Setting up tango-common (10.0.2+dfsg1-4build1) ... 183s Adding group tango....done 183s Adding system user tango....done 183s Setting up libtango10:amd64 (10.0.2+dfsg1-4build1) ... 183s Setting up python3.14-dev (3.14.2-1) ... 183s Setting up libtango-tools (10.0.2+dfsg1-4build1) ... 183s Setting up python3-tango (10.0.2-3) ... 183s Setting up libpython3.13-dev:amd64 (3.13.11-1) ... 183s Setting up tango-starter (10.0.2+dfsg1-4build1) ... 184s Created symlink '/etc/systemd/system/multi-user.target.wants/tango-starter.service' → '/usr/lib/systemd/system/tango-starter.service'. 184s Failed to start tango-starter.service: Unit tango-db.service not found. 184s Could not execute systemctl: at /usr/bin/deb-systemd-invoke line 148. 184s Setting up libpython3-dev:amd64 (3.13.9-3) ... 184s Setting up tango-test (10.0.2+dfsg1-4build1) ... 184s Setting up python3.13-dev (3.13.11-1) ... 184s Setting up libpython3-all-dev:amd64 (3.13.9-3) ... 184s Setting up python3-dev (3.13.9-3) ... 184s Setting up python3-all-dev (3.13.9-3) ... 184s Processing triggers for systemd (259-1ubuntu3) ... 184s Processing triggers for man-db (2.13.1-1) ... 184s Processing triggers for libc-bin (2.42-2ubuntu4) ... 185s autopkgtest [09:11:02]: 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 185s autopkgtest [09:11:02]: test command1: [----------------------- 185s Testing with python3.14: 186s ============================= test session starts ============================== 186s platform linux -- Python 3.14.2, pytest-9.0.2, pluggy-1.6.0 -- /usr/bin/python3.14 186s cachedir: .pytest_cache 186s rootdir: /tmp/autopkgtest.IkPz9q/autopkgtest_tmp 186s plugins: forked-1.6.0, asyncio-1.3.0, typeguard-4.4.4, rerunfailures-16.1 186s asyncio: mode=Mode.STRICT, debug=False, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function 186s collecting ... collected 1170 items 186s 186s tests/test_api_util.py::test_get_env_var PASSED [ 0%] 186s tests/test_async.py::test_green_mode_kwarg_for_proxy_methods FAILED [ 0%] 186s tests/test_async.py::test_async_attribute_polled PASSED [ 0%] 186s tests/test_async.py::test_async_attribute_with_callback[poll] SKIPPED [ 0%] 186s tests/test_async.py::test_async_attribute_with_callback[push] SKIPPED [ 0%] 186s tests/test_async.py::test_async_command_polled PASSED [ 0%] 187s tests/test_async.py::test_async_command_with_polled_callback[cmd_ok-123-123-False] PASSED [ 0%] 187s tests/test_async.py::test_async_command_with_polled_callback[cmd_timeout-123-None-True] PASSED [ 0%] 188s tests/test_async.py::test_async_command_with_polled_callback[cmd_exception-123-None-True] PASSED [ 0%] 188s tests/test_async.py::test_async_attribute_read_with_polled_callback[attr_ok-argout0-False] PASSED [ 0%] 189s tests/test_async.py::test_async_attribute_read_with_polled_callback[attr_timeout-None-True] PASSED [ 0%] 189s tests/test_async.py::test_async_attribute_read_with_polled_callback[attr_exception-argout2-False] PASSED [ 1%] 189s tests/test_async.py::test_async_attribute_write_with_polled_callback[attr_ok-False] PASSED [ 1%] 190s tests/test_async.py::test_async_attribute_write_with_polled_callback[attr_timeout-True] PASSED [ 1%] 190s tests/test_async.py::test_async_attribute_write_with_polled_callback[attr_exception-False] PASSED [ 1%] 191s tests/test_async.py::test_async_command_with_pushed_callback[cmd_ok-123-123-False] PASSED [ 1%] 191s tests/test_async.py::test_async_command_with_pushed_callback[cmd_timeout-123-None-True] PASSED [ 1%] 192s tests/test_async.py::test_async_command_with_pushed_callback[cmd_exception-123-None-True] PASSED [ 1%] 192s tests/test_async.py::test_async_attribute_read_with_pushed_callback[attr_ok-argout0-False] PASSED [ 1%] 192s tests/test_async.py::test_async_attribute_read_with_pushed_callback[attr_timeout-None-True] PASSED [ 1%] 193s tests/test_async.py::test_async_attribute_read_with_pushed_callback[attr_exception-argout2-False] PASSED [ 1%] 193s tests/test_async.py::test_async_attribute_write_with_pushed_callback[attr_ok-False] PASSED [ 1%] 194s tests/test_async.py::test_async_attribute_write_with_pushed_callback[attr_timeout-True] PASSED [ 1%] 194s tests/test_async.py::test_async_attribute_write_with_pushed_callback[attr_exception-False] PASSED [ 2%] 194s tests/test_async.py::test_async_exception_in_callback PASSED [ 2%] 196s tests/test_attrconfeventdata.py::test_attribute_configuration_event PASSED [ 2%] 196s tests/test_attrconfeventdata.py::test_attribute_configuration_event_set_errors PASSED [ 2%] 196s tests/test_attribute_proxy.py::test_ping[scalar_int] PASSED [ 2%] 196s tests/test_attribute_proxy.py::test_ping[spectrum_str] PASSED [ 2%] 196s tests/test_attribute_proxy.py::test_ping[image_float] PASSED [ 2%] 196s tests/test_attribute_proxy.py::test_state_status[scalar_int] PASSED [ 2%] 196s tests/test_attribute_proxy.py::test_state_status[spectrum_str] PASSED [ 2%] 196s tests/test_attribute_proxy.py::test_state_status[image_float] PASSED [ 2%] 196s tests/test_attribute_proxy.py::test_read_write_attribute[scalar_int] PASSED [ 2%] 196s tests/test_attribute_proxy.py::test_read_write_attribute[spectrum_str] PASSED [ 2%] 196s tests/test_attribute_proxy.py::test_read_write_attribute[image_float] PASSED [ 3%] 196s tests/test_attribute_proxy.py::test_attribute_poll[scalar_int] PASSED [ 3%] 197s tests/test_attribute_proxy.py::test_attribute_poll[spectrum_str] PASSED [ 3%] 198s tests/test_attribute_proxy.py::test_attribute_poll[image_float] PASSED [ 3%] 198s tests/test_attribute_proxy.py::test_read_write_attribute_async[scalar_int] PASSED [ 3%] 198s tests/test_attribute_proxy.py::test_read_write_attribute_async[spectrum_str] PASSED [ 3%] 198s tests/test_attribute_proxy.py::test_read_write_attribute_async[image_float] PASSED [ 3%] 198s tests/test_attribute_proxy.py::test_event[Synchronous] SKIPPED (This...) [ 3%] 198s tests/test_attribute_proxy.py::test_event[Futures] SKIPPED (This tes...) [ 3%] 198s tests/test_attribute_proxy.py::test_event[Gevent] SKIPPED (This test...) [ 3%] 198s tests/test_attribute_proxy.py::test_event[Asyncio] SKIPPED (This tes...) [ 3%] 199s tests/test_attributes.py::test_read_write_attribute[int-Synchronous] PASSED [ 4%] 199s tests/test_attributes.py::test_read_write_attribute[int-Asyncio] FAILED [ 4%] 199s tests/test_attributes.py::test_read_write_attribute[int-Gevent] PASSED [ 4%] 199s tests/test_attributes.py::test_read_write_attribute[float-Synchronous] PASSED [ 4%] 199s tests/test_attributes.py::test_read_write_attribute[float-Asyncio] FAILED [ 4%] 199s tests/test_attributes.py::test_read_write_attribute[float-Gevent] PASSED [ 4%] 199s tests/test_attributes.py::test_read_write_attribute[str-Synchronous] PASSED [ 4%] 199s tests/test_attributes.py::test_read_write_attribute[str-Asyncio] FAILED [ 4%] 199s tests/test_attributes.py::test_read_write_attribute[str-Gevent] PASSED [ 4%] 199s tests/test_attributes.py::test_read_write_attribute[bool-Synchronous] PASSED [ 4%] 199s tests/test_attributes.py::test_read_write_attribute[bool-Asyncio] FAILED [ 4%] 199s tests/test_attributes.py::test_read_write_attribute[bool-Gevent] PASSED [ 4%] 199s tests/test_attributes.py::test_read_write_attribute[(int,)-Synchronous] PASSED [ 5%] 199s tests/test_attributes.py::test_read_write_attribute[(int,)-Asyncio] FAILED [ 5%] 199s tests/test_attributes.py::test_read_write_attribute[(int,)-Gevent] PASSED [ 5%] 199s tests/test_attributes.py::test_read_write_attribute[(float,)-Synchronous] PASSED [ 5%] 200s tests/test_attributes.py::test_read_write_attribute[(float,)-Asyncio] FAILED [ 5%] 200s tests/test_attributes.py::test_read_write_attribute[(float,)-Gevent] PASSED [ 5%] 200s tests/test_attributes.py::test_read_write_attribute[(str,)-Synchronous] PASSED [ 5%] 200s tests/test_attributes.py::test_read_write_attribute[(str,)-Asyncio] FAILED [ 5%] 200s tests/test_attributes.py::test_read_write_attribute[(str,)-Gevent] PASSED [ 5%] 200s tests/test_attributes.py::test_read_write_attribute[(bool,)-Synchronous] PASSED [ 5%] 200s tests/test_attributes.py::test_read_write_attribute[(bool,)-Asyncio] FAILED [ 5%] 200s tests/test_attributes.py::test_read_write_attribute[(bool,)-Gevent] PASSED [ 5%] 200s tests/test_attributes.py::test_read_write_attribute[((int,),)-Synchronous] PASSED [ 6%] 200s tests/test_attributes.py::test_read_write_attribute[((int,),)-Asyncio] FAILED [ 6%] 200s tests/test_attributes.py::test_read_write_attribute[((int,),)-Gevent] PASSED [ 6%] 200s tests/test_attributes.py::test_read_write_attribute[((float,),)-Synchronous] PASSED [ 6%] 200s tests/test_attributes.py::test_read_write_attribute[((float,),)-Asyncio] FAILED [ 6%] 200s tests/test_attributes.py::test_read_write_attribute[((float,),)-Gevent] PASSED [ 6%] 200s tests/test_attributes.py::test_read_write_attribute[((str,),)-Synchronous] PASSED [ 6%] 201s tests/test_attributes.py::test_read_write_attribute[((str,),)-Asyncio] FAILED [ 6%] 201s tests/test_attributes.py::test_read_write_attribute[((str,),)-Gevent] PASSED [ 6%] 201s tests/test_attributes.py::test_read_write_attribute[((bool,),)-Synchronous] PASSED [ 6%] 201s tests/test_attributes.py::test_read_write_attribute[((bool,),)-Asyncio] FAILED [ 6%] 201s tests/test_attributes.py::test_read_write_attribute[((bool,),)-Gevent] PASSED [ 7%] 201s tests/test_attributes.py::test_wrong_encoding_string PASSED [ 7%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[int-True] PASSED [ 7%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[int-False] PASSED [ 7%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[float-True] PASSED [ 7%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[float-False] PASSED [ 7%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[str-True] PASSED [ 7%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[str-False] PASSED [ 7%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[bool-True] PASSED [ 7%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[bool-False] PASSED [ 7%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[(int,)-True] PASSED [ 7%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[(int,)-False] PASSED [ 7%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[(float,)-True] PASSED [ 8%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[(float,)-False] PASSED [ 8%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[(str,)-True] PASSED [ 8%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[(str,)-False] PASSED [ 8%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[(bool,)-True] PASSED [ 8%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[(bool,)-False] PASSED [ 8%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[((int,),)-True] PASSED [ 8%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[((int,),)-False] PASSED [ 8%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[((float,),)-True] PASSED [ 8%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[((float,),)-False] PASSED [ 8%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[((str,),)-True] PASSED [ 8%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[((str,),)-False] PASSED [ 8%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[((bool,),)-True] PASSED [ 9%] 201s tests/test_attributes.py::test_attribute_declared_with_typing[((bool,),)-False] PASSED [ 9%] 201s tests/test_attributes.py::test_attribute_self_typed_with_not_defined_name PASSED [ 9%] 201s tests/test_attributes.py::test_read_write_attribute_with_unbound_functions PASSED [ 9%] 201s tests/test_attributes.py::test_read_write_attribute_decorated_methods[Synchronous] PASSED [ 9%] 201s tests/test_attributes.py::test_read_write_attribute_decorated_methods[Asyncio] FAILED [ 9%] 201s tests/test_attributes.py::test_read_write_attribute_decorated_methods[Gevent] PASSED [ 9%] 201s tests/test_attributes.py::test_read_write_wvalue_attribute[int-True] PASSED [ 9%] 201s tests/test_attributes.py::test_read_write_wvalue_attribute[int-False] PASSED [ 9%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[float-True] PASSED [ 9%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[float-False] PASSED [ 9%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[str-True] PASSED [ 10%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[str-False] PASSED [ 10%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[bool-True] PASSED [ 10%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[bool-False] PASSED [ 10%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[(int,)-True] PASSED [ 10%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[(int,)-False] PASSED [ 10%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[(float,)-True] PASSED [ 10%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[(float,)-False] PASSED [ 10%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[(str,)-True] PASSED [ 10%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[(str,)-False] PASSED [ 10%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[(bool,)-True] PASSED [ 10%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[(bool,)-False] PASSED [ 10%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[((int,),)-True] PASSED [ 11%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[((int,),)-False] PASSED [ 11%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[((float,),)-True] PASSED [ 11%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[((float,),)-False] PASSED [ 11%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[((str,),)-True] PASSED [ 11%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[((str,),)-False] PASSED [ 11%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[((bool,),)-True] PASSED [ 11%] 202s tests/test_attributes.py::test_read_write_wvalue_attribute[((bool,),)-False] PASSED [ 11%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Numpy-float] PASSED [ 11%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Numpy-int] PASSED [ 11%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Numpy-str] PASSED [ 11%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Numpy-bool] PASSED [ 11%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Tuple-float] PASSED [ 12%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Tuple-int] PASSED [ 12%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Tuple-str] PASSED [ 12%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Tuple-bool] PASSED [ 12%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.List-float] PASSED [ 12%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.List-int] PASSED [ 12%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.List-str] PASSED [ 12%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.List-bool] PASSED [ 12%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Bytes-float] PASSED [ 12%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Bytes-int] PASSED [ 12%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Bytes-str] XFAIL [ 12%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.Bytes-bool] PASSED [ 12%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.ByteArray-float] PASSED [ 13%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.ByteArray-int] PASSED [ 13%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.ByteArray-str] XFAIL [ 13%] 202s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.ByteArray-bool] PASSED [ 13%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.String-float] PASSED [ 13%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.String-int] PASSED [ 13%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.String-str] XFAIL [ 13%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute[extract_as.String-bool] PASSED [ 13%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-float-Device_4Impl] PASSED [ 13%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-float-Device_5Impl] PASSED [ 13%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-float-Device_6Impl] PASSED [ 13%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-float-LatestDeviceImpl] PASSED [ 14%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-int-Device_4Impl] PASSED [ 14%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-int-Device_5Impl] PASSED [ 14%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-int-Device_6Impl] PASSED [ 14%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-int-LatestDeviceImpl] PASSED [ 14%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-str-Device_4Impl] PASSED [ 14%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-str-Device_5Impl] PASSED [ 14%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-str-Device_6Impl] PASSED [ 14%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-str-LatestDeviceImpl] PASSED [ 14%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-bool-Device_4Impl] PASSED [ 14%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-bool-Device_5Impl] PASSED [ 14%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-bool-Device_6Impl] PASSED [ 14%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Numpy-bool-LatestDeviceImpl] PASSED [ 15%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-float-Device_4Impl] PASSED [ 15%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-float-Device_5Impl] PASSED [ 15%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-float-Device_6Impl] PASSED [ 15%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-float-LatestDeviceImpl] PASSED [ 15%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-int-Device_4Impl] PASSED [ 15%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-int-Device_5Impl] PASSED [ 15%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-int-Device_6Impl] PASSED [ 15%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-int-LatestDeviceImpl] PASSED [ 15%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-str-Device_4Impl] PASSED [ 15%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-str-Device_5Impl] PASSED [ 15%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-str-Device_6Impl] PASSED [ 15%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-str-LatestDeviceImpl] PASSED [ 16%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-bool-Device_4Impl] PASSED [ 16%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-bool-Device_5Impl] PASSED [ 16%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-bool-Device_6Impl] PASSED [ 16%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Tuple-bool-LatestDeviceImpl] PASSED [ 16%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-float-Device_4Impl] PASSED [ 16%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-float-Device_5Impl] PASSED [ 16%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-float-Device_6Impl] PASSED [ 16%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-float-LatestDeviceImpl] PASSED [ 16%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-int-Device_4Impl] PASSED [ 16%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-int-Device_5Impl] PASSED [ 16%] 203s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-int-Device_6Impl] PASSED [ 17%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-int-LatestDeviceImpl] PASSED [ 17%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-str-Device_4Impl] PASSED [ 17%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-str-Device_5Impl] PASSED [ 17%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-str-Device_6Impl] PASSED [ 17%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-str-LatestDeviceImpl] PASSED [ 17%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-bool-Device_4Impl] PASSED [ 17%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-bool-Device_5Impl] PASSED [ 17%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-bool-Device_6Impl] PASSED [ 17%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.List-bool-LatestDeviceImpl] PASSED [ 17%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-float-Device_4Impl] PASSED [ 17%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-float-Device_5Impl] PASSED [ 17%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-float-Device_6Impl] PASSED [ 18%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-float-LatestDeviceImpl] PASSED [ 18%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-int-Device_4Impl] PASSED [ 18%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-int-Device_5Impl] PASSED [ 18%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-int-Device_6Impl] PASSED [ 18%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-int-LatestDeviceImpl] PASSED [ 18%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-str-Device_4Impl] XFAIL [ 18%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-str-Device_5Impl] XFAIL [ 18%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-str-Device_6Impl] XFAIL [ 18%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-str-LatestDeviceImpl] XFAIL [ 18%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-bool-Device_4Impl] PASSED [ 18%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-bool-Device_5Impl] PASSED [ 18%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-bool-Device_6Impl] PASSED [ 19%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.Bytes-bool-LatestDeviceImpl] PASSED [ 19%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-float-Device_4Impl] PASSED [ 19%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-float-Device_5Impl] PASSED [ 19%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-float-Device_6Impl] PASSED [ 19%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-float-LatestDeviceImpl] PASSED [ 19%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-int-Device_4Impl] PASSED [ 19%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-int-Device_5Impl] PASSED [ 19%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-int-Device_6Impl] PASSED [ 19%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-int-LatestDeviceImpl] PASSED [ 19%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-str-Device_4Impl] XFAIL [ 19%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-str-Device_5Impl] XFAIL [ 20%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-str-Device_6Impl] XFAIL [ 20%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-str-LatestDeviceImpl] XFAIL [ 20%] 204s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-bool-Device_4Impl] PASSED [ 20%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-bool-Device_5Impl] PASSED [ 20%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-bool-Device_6Impl] PASSED [ 20%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.ByteArray-bool-LatestDeviceImpl] PASSED [ 20%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-float-Device_4Impl] PASSED [ 20%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-float-Device_5Impl] PASSED [ 20%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-float-Device_6Impl] PASSED [ 20%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-float-LatestDeviceImpl] PASSED [ 20%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-int-Device_4Impl] PASSED [ 20%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-int-Device_5Impl] PASSED [ 21%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-int-Device_6Impl] PASSED [ 21%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-int-LatestDeviceImpl] PASSED [ 21%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-str-Device_4Impl] XFAIL [ 21%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-str-Device_5Impl] XFAIL [ 21%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-str-Device_6Impl] XFAIL [ 21%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-str-LatestDeviceImpl] XFAIL [ 21%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-bool-Device_4Impl] PASSED [ 21%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-bool-Device_5Impl] PASSED [ 21%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-bool-Device_6Impl] PASSED [ 21%] 205s tests/test_attributes.py::test_write_read_empty_spectrum_attribute_classic_api[extract_as.String-bool-LatestDeviceImpl] PASSED [ 21%] 205s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SCALAR-state] PASSED [ 21%] 205s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SCALAR-DevState0] PASSED [ 22%] 205s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SCALAR-DevState1] PASSED [ 22%] 205s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SPECTRUM-state] PASSED [ 22%] 205s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SPECTRUM-DevState0] PASSED [ 22%] 205s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[SPECTRUM-DevState1] PASSED [ 22%] 205s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[IMAGE-state] PASSED [ 22%] 205s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[IMAGE-DevState0] PASSED [ 22%] 205s tests/test_attributes.py::test_ensure_devstate_is_pytango_enum[IMAGE-DevState1] PASSED [ 22%] 205s tests/test_attributes.py::test_read_write_attribute_enum[SCALAR] PASSED [ 22%] 205s tests/test_attributes.py::test_read_write_attribute_enum[SPECTRUM] PASSED [ 22%] 205s tests/test_attributes.py::test_read_write_attribute_enum[IMAGE] PASSED [ 22%] 205s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[SCALAR-DevState] PASSED [ 22%] 205s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[SCALAR-GoodEnum] PASSED [ 23%] 205s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[SPECTRUM-DevState] PASSED [ 23%] 205s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[SPECTRUM-GoodEnum] PASSED [ 23%] 205s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[IMAGE-DevState] PASSED [ 23%] 205s tests/test_attributes.py::test_enum_devstate_attribute_declared_with_typing[IMAGE-GoodEnum] PASSED [ 23%] 205s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[int] PASSED [ 23%] 205s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[float] PASSED [ 23%] 206s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[str] PASSED [ 23%] 206s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[bool] PASSED [ 23%] 206s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[(int,)] PASSED [ 23%] 206s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[(float,)] PASSED [ 23%] 206s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[(str,)] PASSED [ 24%] 206s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[(bool,)] PASSED [ 24%] 206s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[((int,),)] PASSED [ 24%] 206s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[((float,),)] PASSED [ 24%] 206s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[((str,),)] PASSED [ 24%] 206s tests/test_attributes.py::test_read_attribute_with_invalid_quality_is_none[((bool,),)] PASSED [ 24%] 206s tests/test_attributes.py::test_read_enum_attribute_with_invalid_quality_is_none PASSED [ 24%] 206s tests/test_attributes.py::test_wrong_attribute_read PASSED [ 24%] 206s tests/test_attributes.py::test_attribute_access_with_default_method_names PASSED [ 24%] 206s tests/test_attributes.py::test_read_write_dynamic_attribute[low_level_read-Synchronous] PASSED [ 24%] 206s tests/test_attributes.py::test_read_write_dynamic_attribute[low_level_read-Asyncio] FAILED [ 24%] 206s tests/test_attributes.py::test_read_write_dynamic_attribute[low_level_read-Gevent] PASSED [ 24%] 208s tests/test_attributes.py::test_read_write_dynamic_attribute[high_level_read-Synchronous] PASSED [ 25%] 208s tests/test_attributes.py::test_read_write_dynamic_attribute[high_level_read-Asyncio] FAILED [ 25%] 208s tests/test_attributes.py::test_read_write_dynamic_attribute[high_level_read-Gevent] PASSED [ 25%] 208s tests/test_attributes.py::test_async_add_remove_dynamic_attribute FAILED [ 25%] 208s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[int] PASSED [ 25%] 208s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[float] PASSED [ 25%] 208s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[str] PASSED [ 25%] 208s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[bool] PASSED [ 25%] 208s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[(int,)] PASSED [ 25%] 208s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[(float,)] PASSED [ 25%] 208s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[(str,)] PASSED [ 25%] 208s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[(bool,)] PASSED [ 25%] 208s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[((int,),)] PASSED [ 26%] 208s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[((float,),)] PASSED [ 26%] 208s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[((str,),)] PASSED [ 26%] 208s tests/test_attributes.py::test_dynamic_attribute_declared_with_typing[((bool,),)] PASSED [ 26%] 208s tests/test_attributes.py::test_dynamic_attribute_self_typed_with_not_defined_name PASSED [ 26%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[bool, SCALAR] PASSED [ 26%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[bool], SPECTRUM] PASSED [ 26%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[uint8, SCALAR] PASSED [ 26%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[uint8], SPECTRUM] PASSED [ 26%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[int16, SCALAR] PASSED [ 26%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[int16], SPECTRUM] PASSED [ 26%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[uint16, SCALAR] PASSED [ 27%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[uint16], SPECTRUM] PASSED [ 27%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[int32, SCALAR] PASSED [ 27%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[int32], SPECTRUM] PASSED [ 27%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[uint32, SCALAR] PASSED [ 27%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[uint32], SPECTRUM] PASSED [ 27%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[int64, SCALAR] PASSED [ 27%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[int64], SPECTRUM] PASSED [ 27%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[uint64, SCALAR] PASSED [ 27%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[uint64], SPECTRUM] PASSED [ 27%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[float64, SCALAR] PASSED [ 27%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[float64], SPECTRUM] PASSED [ 27%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[float32, SCALAR] PASSED [ 28%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.NDarray[float32], SPECTRUM] PASSED [ 28%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[bool], IMAGE] PASSED [ 28%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[uint8], IMAGE] PASSED [ 28%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[int16], IMAGE] PASSED [ 28%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[uint16], IMAGE] PASSED [ 28%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[int32], IMAGE] PASSED [ 28%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[uint32], IMAGE] PASSED [ 28%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[int64], IMAGE] PASSED [ 28%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[uint64], IMAGE] PASSED [ 28%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[float64], IMAGE] PASSED [ 28%] 208s tests/test_attributes.py::test_attribute_declared_with_numpy_typing[np.n2array[float32], IMAGE] PASSED [ 28%] 208s tests/test_attributes.py::test_attribute_wrong_declared_with_numpy_typing[RuntimeError: AttrDataFormat has to be specified] PASSED [ 29%] 208s tests/test_attributes.py::test_attribute_wrong_declared_with_numpy_typing[DevFailed: Maximum y dim. wrongly defined] PASSED [ 29%] 208s tests/test_attributes.py::test_attribute_wrong_declared_with_numpy_typing[TypeError: No registered converter] PASSED [ 29%] 208s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_default_names[Synchronous] PASSED [ 29%] 208s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_default_names[Asyncio] FAILED [ 29%] 208s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_default_names[Gevent] PASSED [ 29%] 208s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_user_names[Synchronous] PASSED [ 29%] 208s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_user_names[Asyncio] FAILED [ 29%] 208s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_user_names[Gevent] PASSED [ 29%] 208s tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_shared_user_functions PASSED [ 29%] 208s tests/test_attributes.py::test_read_write_dynamic_attribute_enum[SCALAR] PASSED [ 29%] 208s tests/test_attributes.py::test_read_write_dynamic_attribute_enum[SPECTRUM] PASSED [ 30%] 208s tests/test_attributes.py::test_read_write_dynamic_attribute_enum[IMAGE] PASSED [ 30%] 208s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[SCALAR-DevState] PASSED [ 30%] 208s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[SCALAR-GoodEnum] PASSED [ 30%] 208s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[SPECTRUM-DevState] PASSED [ 30%] 208s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[SPECTRUM-GoodEnum] PASSED [ 30%] 208s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[IMAGE-DevState] PASSED [ 30%] 208s tests/test_attributes.py::test_enum_devstate_dynamic_attribute_declared_with_typing[IMAGE-GoodEnum] PASSED [ 30%] 208s tests/test_attributes.py::test_read_write_dynamic_attribute_is_allowed_with_async[Synchronous] PASSED [ 30%] 208s tests/test_attributes.py::test_read_write_dynamic_attribute_is_allowed_with_async[Asyncio] FAILED [ 30%] 208s tests/test_attributes.py::test_read_write_dynamic_attribute_is_allowed_with_async[Gevent] PASSED [ 30%] 208s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Synchronous-True] PASSED [ 30%] 208s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Synchronous-False] PASSED [ 31%] 208s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Asyncio-True] FAILED [ 31%] 208s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Asyncio-False] FAILED [ 31%] 209s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Gevent-True] PASSED [ 31%] 209s tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Gevent-False] PASSED [ 31%] 209s tests/test_attributes.py::test_dynamic_attribute_using_classic_api_like_sardana[Device_4Impl] PASSED [ 31%] 209s tests/test_attributes.py::test_dynamic_attribute_using_classic_api_like_sardana[Device_5Impl] PASSED [ 31%] 209s tests/test_attributes.py::test_dynamic_attribute_using_classic_api_like_sardana[Device_6Impl] PASSED [ 31%] 209s tests/test_attributes.py::test_dynamic_attribute_using_classic_api_like_sardana[LatestDeviceImpl] PASSED [ 31%] 209s tests/test_attributes.py::test_dynamic_attribute_with_unbound_functions[True-low_level] PASSED [ 31%] 209s tests/test_attributes.py::test_dynamic_attribute_with_unbound_functions[True-high_level] PASSED [ 31%] 209s tests/test_attributes.py::test_dynamic_attribute_with_unbound_functions[False-low_level] PASSED [ 31%] 209s tests/test_attributes.py::test_dynamic_attribute_with_unbound_functions[False-high_level] PASSED [ 32%] 209s tests/test_attributes.py::test_attribute_decorators[Synchronous] PASSED [ 32%] 209s tests/test_attributes.py::test_attribute_decorators[Asyncio] FAILED [ 32%] 209s tests/test_attributes.py::test_attribute_decorators[Gevent] PASSED [ 32%] 209s tests/test_attributes.py::test_attribute_info_description PASSED [ 32%] 209s tests/test_attributes.py::test_read_only_dynamic_attribute_with_dummy_write_method[low_level_read] PASSED [ 32%] 209s tests/test_attributes.py::test_read_only_dynamic_attribute_with_dummy_write_method[high_level_read] PASSED [ 32%] 209s tests/test_attributes.py::test_dynamic_attribute_with_method_in_other_class PASSED [ 32%] 209s tests/test_attributes.py::test_polled_attribute[Synchronous] PASSED [ 32%] 209s tests/test_attributes.py::test_polled_attribute[Asyncio] FAILED [ 32%] 209s tests/test_attributes.py::test_polled_attribute[Gevent] PASSED [ 32%] 209s tests/test_attributes.py::test_read_write_dev_encoded[str] PASSED [ 32%] 209s tests/test_attributes.py::test_read_write_dev_encoded[bytes] PASSED [ 33%] 209s tests/test_attributes.py::test_read_write_dev_encoded[bytearray] PASSED [ 33%] 209s tests/test_attributes.py::test_dev_encoded_wrong_encoding PASSED [ 33%] 209s tests/test_attributes.py::test_set_value_None PASSED [ 33%] 209s tests/test_attributes.py::test_encoded_attribute[gray8] PASSED [ 33%] 209s tests/test_attributes.py::test_encoded_attribute[gray16] PASSED [ 33%] 209s tests/test_attributes.py::test_encoded_attribute[rgb24] PASSED [ 33%] 209s tests/test_attributes.py::test_encoded_attribute[jpeg_gray8] PASSED [ 33%] 209s tests/test_attributes.py::test_encoded_attribute[jpeg_rgb24] PASSED [ 33%] 209s tests/test_attributes.py::test_encoded_attribute[jpeg_rgb32] XFAIL (...) [ 33%] 211s tests/test_attributes.py::test_dev_encoded_memory_usage PASSED [ 33%] 211s tests/test_attributes.py::test_attribute_list PASSED [ 34%] 211s tests/test_auto_tango_allow_threads.py::test_dont_crash_with_nested_tango_allow_threads PASSED [ 34%] 211s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_DEVICE-True] PASSED [ 34%] 214s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_DEVICE-False] PASSED [ 34%] 214s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_CLASS-True] XFAIL [ 34%] 218s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_CLASS-False] PASSED [ 34%] 218s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_PROCESS-True] XFAIL [ 34%] 221s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-BY_PROCESS-False] PASSED [ 34%] 221s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-NO_SYNC-True] PASSED [ 34%] 221s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Synchronous-NO_SYNC-False] PASSED [ 34%] 221s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_DEVICE-True] PASSED [ 34%] 224s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_DEVICE-False] PASSED [ 34%] 224s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_CLASS-True] XFAIL [ 35%] 227s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_CLASS-False] PASSED [ 35%] 227s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_PROCESS-True] XFAIL [ 35%] 231s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-BY_PROCESS-False] PASSED [ 35%] 231s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-NO_SYNC-True] PASSED [ 35%] 231s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Asyncio-NO_SYNC-False] PASSED [ 35%] 231s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_DEVICE-True] PASSED [ 35%] 234s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_DEVICE-False] PASSED [ 35%] 234s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_CLASS-True] XFAIL [ 35%] 237s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_CLASS-False] PASSED [ 35%] 237s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_PROCESS-True] XFAIL [ 35%] 242s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-BY_PROCESS-False] PASSED [ 35%] 242s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-NO_SYNC-True] PASSED [ 36%] 242s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_same_thread[Gevent-NO_SYNC-False] PASSED [ 36%] 244s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_DEVICE-True] PASSED [ 36%] 247s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_DEVICE-False] PASSED [ 36%] 250s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_CLASS-True] PASSED [ 36%] 253s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_CLASS-False] PASSED [ 36%] 257s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_PROCESS-True] PASSED [ 36%] 260s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-BY_PROCESS-False] PASSED [ 36%] 260s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-NO_SYNC-True] PASSED [ 36%] 260s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Synchronous-NO_SYNC-False] PASSED [ 36%] 263s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_DEVICE-True] PASSED [ 36%] 266s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_DEVICE-False] PASSED [ 37%] 270s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_CLASS-True] PASSED [ 37%] 273s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_CLASS-False] PASSED [ 37%] 276s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_PROCESS-True] PASSED [ 37%] 279s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-BY_PROCESS-False] PASSED [ 37%] 279s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-NO_SYNC-True] PASSED [ 37%] 279s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Asyncio-NO_SYNC-False] PASSED [ 37%] 283s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_DEVICE-True] PASSED [ 37%] 286s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_DEVICE-False] PASSED [ 37%] 289s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_CLASS-True] PASSED [ 37%] 294s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_CLASS-False] PASSED [ 37%] 296s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_PROCESS-True] PASSED [ 37%] 299s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-BY_PROCESS-False] PASSED [ 38%] 299s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-NO_SYNC-True] PASSED [ 38%] 299s tests/test_auto_tango_allow_threads.py::test_monitor_force_unlock_from_different_thread[Gevent-NO_SYNC-False] PASSED [ 38%] 299s tests/test_commands.py::test_identity_command[int-Synchronous] PASSED [ 38%] 299s tests/test_commands.py::test_identity_command[int-Asyncio] FAILED [ 38%] 299s tests/test_commands.py::test_identity_command[int-Gevent] PASSED [ 38%] 299s tests/test_commands.py::test_identity_command[float-Synchronous] PASSED [ 38%] 299s tests/test_commands.py::test_identity_command[float-Asyncio] FAILED [ 38%] 299s tests/test_commands.py::test_identity_command[float-Gevent] PASSED [ 38%] 299s tests/test_commands.py::test_identity_command[str-Synchronous] PASSED [ 38%] 299s tests/test_commands.py::test_identity_command[str-Asyncio] FAILED [ 38%] 299s tests/test_commands.py::test_identity_command[str-Gevent] PASSED [ 38%] 299s tests/test_commands.py::test_identity_command[bool-Synchronous] PASSED [ 39%] 300s tests/test_commands.py::test_identity_command[bool-Asyncio] FAILED [ 39%] 300s tests/test_commands.py::test_identity_command[bool-Gevent] PASSED [ 39%] 300s tests/test_commands.py::test_identity_command[(int,)-Synchronous] PASSED [ 39%] 300s tests/test_commands.py::test_identity_command[(int,)-Asyncio] FAILED [ 39%] 300s tests/test_commands.py::test_identity_command[(int,)-Gevent] PASSED [ 39%] 300s tests/test_commands.py::test_identity_command[(float,)-Synchronous] PASSED [ 39%] 300s tests/test_commands.py::test_identity_command[(float,)-Asyncio] FAILED [ 39%] 300s tests/test_commands.py::test_identity_command[(float,)-Gevent] PASSED [ 39%] 300s tests/test_commands.py::test_identity_command[(str,)-Synchronous] PASSED [ 39%] 300s tests/test_commands.py::test_identity_command[(str,)-Asyncio] FAILED [ 39%] 300s tests/test_commands.py::test_identity_command[(str,)-Gevent] PASSED [ 40%] 300s tests/test_commands.py::test_identity_command[(bool,)-Synchronous] XFAIL [ 40%] 300s tests/test_commands.py::test_identity_command[(bool,)-Asyncio] XFAIL [ 40%] 300s tests/test_commands.py::test_identity_command[(bool,)-Gevent] XFAIL [ 40%] 300s tests/test_commands.py::test_identity_command[DevVarLongStringArray-Synchronous] PASSED [ 40%] 300s tests/test_commands.py::test_identity_command[DevVarLongStringArray-Asyncio] FAILED [ 40%] 300s tests/test_commands.py::test_identity_command[DevVarLongStringArray-Gevent] PASSED [ 40%] 300s tests/test_commands.py::test_identity_command[DevVarDoubleStringArray-Synchronous] PASSED [ 40%] 300s tests/test_commands.py::test_identity_command[DevVarDoubleStringArray-Asyncio] FAILED [ 40%] 300s tests/test_commands.py::test_identity_command[DevVarDoubleStringArray-Gevent] PASSED [ 40%] 300s tests/test_commands.py::test_identity_command_with_typing[int] PASSED [ 40%] 300s tests/test_commands.py::test_identity_command_with_typing[float] PASSED [ 40%] 300s tests/test_commands.py::test_identity_command_with_typing[str] PASSED [ 41%] 300s tests/test_commands.py::test_identity_command_with_typing[bool] PASSED [ 41%] 300s tests/test_commands.py::test_identity_command_with_typing[(int,)] PASSED [ 41%] 301s tests/test_commands.py::test_identity_command_with_typing[(float,)] PASSED [ 41%] 301s tests/test_commands.py::test_identity_command_with_typing[(str,)] PASSED [ 41%] 301s tests/test_commands.py::test_identity_command_with_typing[(bool,)] XFAIL [ 41%] 301s tests/test_commands.py::test_identity_command_with_typing[DevVarLongStringArray] PASSED [ 41%] 301s tests/test_commands.py::test_identity_command_with_typing[DevVarDoubleStringArray] PASSED [ 41%] 301s tests/test_commands.py::test_devstate_command_with_typing PASSED [ 41%] 301s tests/test_commands.py::test_command_self_typed_with_not_defined_name PASSED [ 41%] 301s tests/test_commands.py::test_decorated_command[Synchronous] PASSED [ 41%] 301s tests/test_commands.py::test_decorated_command[Asyncio] FAILED [ 41%] 301s tests/test_commands.py::test_decorated_command[Gevent] PASSED [ 42%] 301s tests/test_commands.py::test_command_isallowed[Synchronous] PASSED [ 42%] 301s tests/test_commands.py::test_command_isallowed[Asyncio] FAILED [ 42%] 301s tests/test_commands.py::test_command_isallowed[Gevent] PASSED [ 42%] 301s tests/test_commands.py::test_dynamic_command[Synchronous-True] PASSED [ 42%] 301s tests/test_commands.py::test_dynamic_command[Synchronous-False] PASSED [ 42%] 301s tests/test_commands.py::test_dynamic_command[Asyncio-True] FAILED [ 42%] 301s tests/test_commands.py::test_dynamic_command[Asyncio-False] FAILED [ 42%] 301s tests/test_commands.py::test_dynamic_command[Gevent-True] PASSED [ 42%] 301s tests/test_commands.py::test_dynamic_command[Gevent-False] PASSED [ 42%] 301s tests/test_commands.py::test_identity_dynamic_command_with_typing[int] PASSED [ 42%] 301s tests/test_commands.py::test_identity_dynamic_command_with_typing[float] PASSED [ 42%] 301s tests/test_commands.py::test_identity_dynamic_command_with_typing[str] PASSED [ 43%] 301s tests/test_commands.py::test_identity_dynamic_command_with_typing[bool] PASSED [ 43%] 301s tests/test_commands.py::test_identity_dynamic_command_with_typing[(int,)] PASSED [ 43%] 301s tests/test_commands.py::test_identity_dynamic_command_with_typing[(float,)] PASSED [ 43%] 301s tests/test_commands.py::test_identity_dynamic_command_with_typing[(str,)] PASSED [ 43%] 301s tests/test_commands.py::test_identity_dynamic_command_with_typing[(bool,)] XFAIL [ 43%] 301s tests/test_commands.py::test_identity_dynamic_command_with_typing[DevVarLongStringArray] PASSED [ 43%] 302s tests/test_commands.py::test_identity_dynamic_command_with_typing[DevVarDoubleStringArray] PASSED [ 43%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[bool, SCALAR] PASSED [ 43%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[bool], SPECTRUM] PASSED [ 43%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[uint8, SCALAR] XFAIL [ 43%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[uint8], SPECTRUM] PASSED [ 44%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[int16, SCALAR] PASSED [ 44%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[int16], SPECTRUM] PASSED [ 44%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[uint16, SCALAR] PASSED [ 44%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[uint16], SPECTRUM] PASSED [ 44%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[int32, SCALAR] PASSED [ 44%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[int32], SPECTRUM] PASSED [ 44%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[uint32, SCALAR] PASSED [ 44%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[uint32], SPECTRUM] PASSED [ 44%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[int64, SCALAR] PASSED [ 44%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[int64], SPECTRUM] PASSED [ 44%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[uint64, SCALAR] PASSED [ 44%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[uint64], SPECTRUM] PASSED [ 45%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[float64, SCALAR] PASSED [ 45%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[float64], SPECTRUM] PASSED [ 45%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[float32, SCALAR] PASSED [ 45%] 302s tests/test_commands.py::test_identity_commands_with_numpy_typing[np.NDarray[float32], SPECTRUM] PASSED [ 45%] 302s tests/test_commands.py::test_polled_command PASSED [ 45%] 302s tests/test_commands.py::test_wrong_command_result PASSED [ 45%] 302s tests/test_commands.py::test_command_info PASSED [ 45%] 302s tests/test_database.py::test_put_remove_attribute_properties PASSED [ 45%] 302s tests/test_databaseds.py::test_ping SKIPPED (This test is failing wh...) [ 45%] 302s tests/test_databaseds.py::test_status SKIPPED (This test is failing ...) [ 45%] 302s tests/test_databaseds.py::test_state SKIPPED (This test is failing w...) [ 45%] 302s tests/test_databaseds.py::test_device_property SKIPPED (This test is...) [ 46%] 302s tests/test_databaseds.py::test_info SKIPPED (This test is failing wh...) [ 46%] 302s tests/test_device_proxy.py::test_ping PASSED [ 46%] 302s tests/test_device_proxy.py::test_info PASSED [ 46%] 302s tests/test_device_proxy.py::test_read_attribute[State] PASSED [ 46%] 302s tests/test_device_proxy.py::test_read_attribute[Status] PASSED [ 46%] 302s tests/test_device_proxy.py::test_read_attribute[ampli] PASSED [ 46%] 302s tests/test_device_proxy.py::test_read_attribute[boolean_image] PASSED [ 46%] 302s tests/test_device_proxy.py::test_read_attribute[boolean_image_ro] PASSED [ 46%] 302s tests/test_device_proxy.py::test_read_attribute[boolean_scalar] PASSED [ 46%] 303s tests/test_device_proxy.py::test_read_attribute[boolean_spectrum] PASSED [ 46%] 303s tests/test_device_proxy.py::test_read_attribute[boolean_spectrum_ro] PASSED [ 47%] 303s tests/test_device_proxy.py::test_read_attribute[double_image] PASSED [ 47%] 303s tests/test_device_proxy.py::test_read_attribute[double_image_ro] PASSED [ 47%] 303s tests/test_device_proxy.py::test_read_attribute[double_scalar] PASSED [ 47%] 303s tests/test_device_proxy.py::test_read_attribute[double_scalar_rww] PASSED [ 47%] 303s tests/test_device_proxy.py::test_read_attribute[double_scalar_w] PASSED [ 47%] 303s tests/test_device_proxy.py::test_read_attribute[double_spectrum] PASSED [ 47%] 303s tests/test_device_proxy.py::test_read_attribute[double_spectrum_ro] PASSED [ 47%] 303s tests/test_device_proxy.py::test_read_attribute[echo_mode] SKIPPED (...) [ 47%] 303s tests/test_device_proxy.py::test_read_attribute[enum_image] PASSED [ 47%] 303s tests/test_device_proxy.py::test_read_attribute[enum_image_ro] PASSED [ 47%] 303s tests/test_device_proxy.py::test_read_attribute[enum_scalar] PASSED [ 47%] 303s tests/test_device_proxy.py::test_read_attribute[enum_scalar_ro] PASSED [ 48%] 303s tests/test_device_proxy.py::test_read_attribute[enum_spectrum] PASSED [ 48%] 303s tests/test_device_proxy.py::test_read_attribute[enum_spectrum_ro] PASSED [ 48%] 303s tests/test_device_proxy.py::test_read_attribute[float_image] PASSED [ 48%] 303s tests/test_device_proxy.py::test_read_attribute[float_image_ro] PASSED [ 48%] 303s tests/test_device_proxy.py::test_read_attribute[float_scalar] PASSED [ 48%] 303s tests/test_device_proxy.py::test_read_attribute[float_spectrum] PASSED [ 48%] 303s tests/test_device_proxy.py::test_read_attribute[float_spectrum_ro] PASSED [ 48%] 303s tests/test_device_proxy.py::test_read_attribute[freq] PASSED [ 48%] 304s tests/test_device_proxy.py::test_read_attribute[long64_image_ro] PASSED [ 48%] 304s tests/test_device_proxy.py::test_read_attribute[long64_scalar] PASSED [ 48%] 304s tests/test_device_proxy.py::test_read_attribute[long64_spectrum_ro] PASSED [ 48%] 304s tests/test_device_proxy.py::test_read_attribute[long_image] PASSED [ 49%] 304s tests/test_device_proxy.py::test_read_attribute[long_image_ro] PASSED [ 49%] 304s tests/test_device_proxy.py::test_read_attribute[long_scalar] PASSED [ 49%] 304s tests/test_device_proxy.py::test_read_attribute[long_scalar_rww] PASSED [ 49%] 304s tests/test_device_proxy.py::test_read_attribute[long_scalar_w] PASSED [ 49%] 304s tests/test_device_proxy.py::test_read_attribute[long_spectrum] PASSED [ 49%] 304s tests/test_device_proxy.py::test_read_attribute[long_spectrum_ro] PASSED [ 49%] 304s tests/test_device_proxy.py::test_read_attribute[short_image] PASSED [ 49%] 304s tests/test_device_proxy.py::test_read_attribute[short_image_ro] PASSED [ 49%] 304s tests/test_device_proxy.py::test_read_attribute[short_scalar] PASSED [ 49%] 304s tests/test_device_proxy.py::test_read_attribute[short_scalar_ro] PASSED [ 49%] 304s tests/test_device_proxy.py::test_read_attribute[short_scalar_rww] PASSED [ 50%] 304s tests/test_device_proxy.py::test_read_attribute[short_scalar_w] PASSED [ 50%] 304s tests/test_device_proxy.py::test_read_attribute[short_spectrum] PASSED [ 50%] 304s tests/test_device_proxy.py::test_read_attribute[short_spectrum_ro] PASSED [ 50%] 304s tests/test_device_proxy.py::test_read_attribute[string_image] PASSED [ 50%] 304s tests/test_device_proxy.py::test_read_attribute[string_image_ro] XFAIL [ 50%] 305s tests/test_device_proxy.py::test_read_attribute[string_scalar] PASSED [ 50%] 305s tests/test_device_proxy.py::test_read_attribute[string_spectrum] PASSED [ 50%] 305s tests/test_device_proxy.py::test_read_attribute[string_spectrum_ro] XFAIL [ 50%] 305s tests/test_device_proxy.py::test_read_attribute[uchar_image] PASSED [ 50%] 305s tests/test_device_proxy.py::test_read_attribute[uchar_image_ro] PASSED [ 50%] 305s tests/test_device_proxy.py::test_read_attribute[uchar_scalar] PASSED [ 50%] 305s tests/test_device_proxy.py::test_read_attribute[uchar_spectrum] PASSED [ 51%] 305s tests/test_device_proxy.py::test_read_attribute[uchar_spectrum_ro] PASSED [ 51%] 305s tests/test_device_proxy.py::test_read_attribute[ulong64_image_ro] PASSED [ 51%] 305s tests/test_device_proxy.py::test_read_attribute[ulong64_scalar] PASSED [ 51%] 305s tests/test_device_proxy.py::test_read_attribute[ulong64_spectrum_ro] PASSED [ 51%] 305s tests/test_device_proxy.py::test_read_attribute[ulong_image_ro] PASSED [ 51%] 305s tests/test_device_proxy.py::test_read_attribute[ulong_scalar] PASSED [ 51%] 305s tests/test_device_proxy.py::test_read_attribute[ulong_spectrum_ro] PASSED [ 51%] 305s tests/test_device_proxy.py::test_read_attribute[ushort_image] PASSED [ 51%] 305s tests/test_device_proxy.py::test_read_attribute[ushort_image_ro] PASSED [ 51%] 305s tests/test_device_proxy.py::test_read_attribute[ushort_scalar] PASSED [ 51%] 305s tests/test_device_proxy.py::test_read_attribute[ushort_spectrum] PASSED [ 51%] 305s tests/test_device_proxy.py::test_read_attribute[ushort_spectrum_ro] PASSED [ 52%] 305s tests/test_device_proxy.py::test_read_attribute[wave] PASSED [ 52%] 305s tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Synchronous] PASSED [ 52%] 306s tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Futures] PASSED [ 52%] 306s tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Gevent] PASSED [ 52%] 306s tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Asyncio] ERROR [ 52%] 306s tests/test_device_proxy.py::test_high_level_api_for_asyncio FAILED [ 52%] 306s tests/test_device_proxy.py::test_write_scalar_attribute[boolean_scalar] PASSED [ 52%] 306s tests/test_device_proxy.py::test_write_scalar_attribute[double_scalar] PASSED [ 52%] 306s tests/test_device_proxy.py::test_write_scalar_attribute[double_scalar_w] PASSED [ 52%] 306s tests/test_device_proxy.py::test_write_scalar_attribute[enum_scalar] XFAIL [ 52%] 306s tests/test_device_proxy.py::test_write_scalar_attribute[float_scalar] PASSED [ 52%] 306s tests/test_device_proxy.py::test_write_scalar_attribute[long64_scalar] PASSED [ 53%] 306s tests/test_device_proxy.py::test_write_scalar_attribute[long_scalar] PASSED [ 53%] 306s tests/test_device_proxy.py::test_write_scalar_attribute[long_scalar_w] PASSED [ 53%] 306s tests/test_device_proxy.py::test_write_scalar_attribute[short_scalar] PASSED [ 53%] 306s tests/test_device_proxy.py::test_write_scalar_attribute[short_scalar_w] PASSED [ 53%] 306s tests/test_device_proxy.py::test_write_scalar_attribute[string_scalar] PASSED [ 53%] 307s tests/test_device_proxy.py::test_write_scalar_attribute[uchar_scalar] XFAIL [ 53%] 307s tests/test_device_proxy.py::test_write_scalar_attribute[ulong64_scalar] PASSED [ 53%] 307s tests/test_device_proxy.py::test_write_scalar_attribute[ulong_scalar] PASSED [ 53%] 307s tests/test_device_proxy.py::test_write_scalar_attribute[ushort_scalar] PASSED [ 53%] 307s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.Numpy] PASSED [ 53%] 307s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.Tuple] PASSED [ 54%] 307s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.List] PASSED [ 54%] 307s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.Bytes] PASSED [ 54%] 307s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.ByteArray] PASSED [ 54%] 307s tests/test_device_proxy.py::test_write_read_spectrum_attribute[boolean_spectrum-extract_as.String] PASSED [ 54%] 307s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.Numpy] PASSED [ 54%] 307s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.Tuple] PASSED [ 54%] 307s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.List] PASSED [ 54%] 307s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.Bytes] PASSED [ 54%] 307s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.ByteArray] PASSED [ 54%] 307s tests/test_device_proxy.py::test_write_read_spectrum_attribute[double_spectrum-extract_as.String] PASSED [ 54%] 307s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.Numpy] XFAIL [ 54%] 307s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.Tuple] XFAIL [ 55%] 307s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.List] XFAIL [ 55%] 307s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.Bytes] XFAIL [ 55%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.ByteArray] XFAIL [ 55%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[enum_spectrum-extract_as.String] XFAIL [ 55%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.Numpy] PASSED [ 55%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.Tuple] PASSED [ 55%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.List] PASSED [ 55%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.Bytes] PASSED [ 55%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.ByteArray] PASSED [ 55%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[float_spectrum-extract_as.String] PASSED [ 55%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.Numpy] PASSED [ 55%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.Tuple] PASSED [ 56%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.List] PASSED [ 56%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.Bytes] PASSED [ 56%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.ByteArray] PASSED [ 56%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[long_spectrum-extract_as.String] PASSED [ 56%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.Numpy] PASSED [ 56%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.Tuple] PASSED [ 56%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.List] PASSED [ 56%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.Bytes] PASSED [ 56%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.ByteArray] PASSED [ 56%] 308s tests/test_device_proxy.py::test_write_read_spectrum_attribute[short_spectrum-extract_as.String] PASSED [ 56%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.Numpy] PASSED [ 57%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.Tuple] PASSED [ 57%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.List] PASSED [ 57%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.Bytes] XFAIL [ 57%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.ByteArray] XFAIL [ 57%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[string_spectrum-extract_as.String] XFAIL [ 57%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.Numpy] XFAIL [ 57%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.Tuple] XFAIL [ 57%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.List] XFAIL [ 57%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.Bytes] XFAIL [ 57%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.ByteArray] XFAIL [ 57%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[uchar_spectrum-extract_as.String] XFAIL [ 57%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.Numpy] PASSED [ 58%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.Tuple] PASSED [ 58%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.List] PASSED [ 58%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.Bytes] PASSED [ 58%] 309s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.ByteArray] PASSED [ 58%] 310s tests/test_device_proxy.py::test_write_read_spectrum_attribute[ushort_spectrum-extract_as.String] PASSED [ 58%] 310s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[boolean_spectrum] PASSED [ 58%] 310s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[double_spectrum] PASSED [ 58%] 310s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[enum_spectrum] PASSED [ 58%] 310s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[float_spectrum] PASSED [ 58%] 310s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[long_spectrum] PASSED [ 58%] 310s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[short_spectrum] PASSED [ 58%] 310s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[string_spectrum] XFAIL [ 59%] 310s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[uchar_spectrum] PASSED [ 59%] 310s tests/test_device_proxy.py::test_write_read_empty_spectrum_attribute[ushort_spectrum] PASSED [ 59%] 310s tests/test_device_proxy.py::test_write_read_string_attribute PASSED [ 59%] 310s tests/test_device_proxy.py::test_set_non_existent_attribute_raises_by_default PASSED [ 59%] 310s tests/test_device_proxy.py::test_set_non_existent_attribute_allowed_if_dynamic_interface_unfrozen PASSED [ 59%] 310s tests/test_device_proxy.py::test_dynamic_interface_can_be_toggled PASSED [ 59%] 310s tests/test_device_proxy.py::test_dynamic_interface_flag_can_be_read PASSED [ 59%] 310s tests/test_device_proxy.py::test_dynamic_interface_only_applies_to_device_proxy_instance PASSED [ 59%] 310s tests/test_device_proxy.py::test_dynamic_interface_unfreeze_generates_a_user_warning PASSED [ 59%] 310s tests/test_device_proxy.py::test_read_attribute_config SKIPPED (This...) [ 59%] 310s tests/test_device_proxy.py::test_read_attribute_config_ex PASSED [ 60%] 310s tests/test_device_proxy.py::test_attribute_list_query SKIPPED (This ...) [ 60%] 310s tests/test_device_proxy.py::test_attribute_list_query_ex SKIPPED (Th...) [ 60%] 310s tests/test_device_proxy.py::test_device_proxy_dir_method PASSED [ 60%] 311s tests/test_device_proxy.py::test_device_polling_command PASSED [ 60%] 311s tests/test_device_proxy.py::test_device_polling_attribute PASSED [ 60%] 311s tests/test_device_proxy.py::test_command_string PASSED [ 60%] 311s tests/test_device_proxy.py::test_command_raises_type_error_for_bad_input PASSED [ 60%] 311s tests/test_device_proxy.py::test_repr_uses_info[Synchronous] PASSED [ 60%] 311s tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Synchronous] PASSED [ 60%] 311s tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Synchronous] PASSED [ 60%] 311s tests/test_device_proxy.py::test_no_memory_leak_for_repr[Synchronous] PASSED [ 60%] 311s tests/test_device_proxy.py::test_no_memory_leak_for_str[Synchronous] PASSED [ 61%] 311s tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Synchronous] PASSED [ 61%] 311s tests/test_device_proxy.py::test_repr_uses_info[Futures] PASSED [ 61%] 311s tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Futures] PASSED [ 61%] 311s tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Futures] PASSED [ 61%] 311s tests/test_device_proxy.py::test_no_memory_leak_for_repr[Futures] PASSED [ 61%] 311s tests/test_device_proxy.py::test_no_memory_leak_for_str[Futures] PASSED [ 61%] 311s tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Futures] PASSED [ 61%] 311s tests/test_device_proxy.py::test_repr_uses_info[Gevent] PASSED [ 61%] 311s tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Gevent] PASSED [ 61%] 311s tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Gevent] PASSED [ 61%] 311s tests/test_device_proxy.py::test_no_memory_leak_for_repr[Gevent] PASSED [ 61%] 311s tests/test_device_proxy.py::test_no_memory_leak_for_str[Gevent] PASSED [ 62%] 311s tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Gevent] PASSED [ 62%] 311s tests/test_device_proxy.py::test_repr_uses_info[Asyncio] FAILED [ 62%] 312s tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Asyncio] FAILED [ 62%] 312s tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Asyncio] FAILED [ 62%] 312s tests/test_device_proxy.py::test_no_memory_leak_for_repr[Asyncio] FAILED [ 62%] 312s tests/test_device_proxy.py::test_no_memory_leak_for_str[Asyncio] FAILED [ 62%] 312s tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Asyncio] FAILED [ 62%] 312s tests/test_device_proxy.py::test_client_destructor_does_not_deadlock[group_client_lifecycle] SKIPPED [ 62%] 312s tests/test_device_proxy.py::test_client_destructor_does_not_deadlock[device_proxy_lifecycle] SKIPPED [ 62%] 312s tests/test_group.py::test_nested_multi_group PASSED [ 62%] 312s tests/test_group.py::test_read_write_attribute PASSED [ 62%] 312s tests/test_group.py::test_command PASSED [ 63%] 312s tests/test_log.py::test_logging_decorators PASSED [ 63%] 312s tests/test_log.py::test_async_logging_decorators FAILED [ 63%] 312s tests/test_log.py::test_tango_stream PASSED [ 63%] 312s tests/test_log.py::test_logging[Synchronous] PASSED [ 63%] 312s tests/test_log.py::test_logging[Asyncio] FAILED [ 63%] 312s tests/test_log.py::test_logging[Gevent] PASSED [ 63%] 312s tests/test_log.py::test_decorator_logging_source_location[Synchronous] SKIPPED [ 63%] 312s tests/test_log.py::test_decorator_logging_source_location[Asyncio] SKIPPED [ 63%] 312s tests/test_log.py::test_decorator_logging_source_location[Gevent] SKIPPED [ 63%] 312s tests/test_log.py::test_stream_logging_source_location[Synchronous] SKIPPED [ 63%] 312s tests/test_log.py::test_stream_logging_source_location[Asyncio] SKIPPED [ 64%] 312s tests/test_log.py::test_stream_logging_source_location[Gevent] SKIPPED [ 64%] 312s tests/test_multi_attr_prop.py::test_stuff PASSED [ 64%] 312s tests/test_properties.py::test_device_property_no_default[int] PASSED [ 64%] 312s tests/test_properties.py::test_device_property_no_default[float] PASSED [ 64%] 312s tests/test_properties.py::test_device_property_no_default[str] PASSED [ 64%] 313s tests/test_properties.py::test_device_property_no_default[bool] PASSED [ 64%] 313s tests/test_properties.py::test_device_property_no_default[(int,)] PASSED [ 64%] 313s tests/test_properties.py::test_device_property_no_default[(float,)] PASSED [ 64%] 313s tests/test_properties.py::test_device_property_no_default[(str,)] PASSED [ 64%] 313s tests/test_properties.py::test_device_property_no_default[(bool,)] PASSED [ 64%] 313s tests/test_properties.py::test_device_property_with_typing[int] PASSED [ 64%] 313s tests/test_properties.py::test_device_property_with_typing[float] PASSED [ 65%] 313s tests/test_properties.py::test_device_property_with_typing[str] PASSED [ 65%] 313s tests/test_properties.py::test_device_property_with_typing[bool] PASSED [ 65%] 313s tests/test_properties.py::test_device_property_with_typing[(int,)] PASSED [ 65%] 313s tests/test_properties.py::test_device_property_with_typing[(float,)] PASSED [ 65%] 313s tests/test_properties.py::test_device_property_with_typing[(str,)] PASSED [ 65%] 313s tests/test_properties.py::test_device_property_with_typing[(bool,)] PASSED [ 65%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[bool, SCALAR] PASSED [ 65%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[bool], SPECTRUM] PASSED [ 65%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[uint8, SCALAR] XFAIL [ 65%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[uint8], SPECTRUM] XFAIL [ 65%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[int16, SCALAR] PASSED [ 65%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[int16], SPECTRUM] PASSED [ 66%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[uint16, SCALAR] PASSED [ 66%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[uint16], SPECTRUM] PASSED [ 66%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[int32, SCALAR] PASSED [ 66%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[int32], SPECTRUM] PASSED [ 66%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[uint32, SCALAR] PASSED [ 66%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[uint32], SPECTRUM] PASSED [ 66%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[int64, SCALAR] PASSED [ 66%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[int64], SPECTRUM] PASSED [ 66%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[uint64, SCALAR] PASSED [ 66%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[uint64], SPECTRUM] PASSED [ 66%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[float64, SCALAR] PASSED [ 67%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[float64], SPECTRUM] PASSED [ 67%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[float32, SCALAR] PASSED [ 67%] 313s tests/test_properties.py::test_device_property_with_numpy_typing[np.NDarray[float32], SPECTRUM] PASSED [ 67%] 313s tests/test_properties.py::test_device_property_with_default_value[int] PASSED [ 67%] 313s tests/test_properties.py::test_device_property_with_default_value[float] PASSED [ 67%] 313s tests/test_properties.py::test_device_property_with_default_value[str] PASSED [ 67%] 313s tests/test_properties.py::test_device_property_with_default_value[bool] PASSED [ 67%] 313s tests/test_properties.py::test_device_property_with_default_value[(int,)] PASSED [ 67%] 313s tests/test_properties.py::test_device_property_with_default_value[(float,)] PASSED [ 67%] 313s tests/test_properties.py::test_device_property_with_default_value[(str,)] PASSED [ 67%] 313s tests/test_properties.py::test_device_property_with_default_value[(bool,)] PASSED [ 67%] 314s tests/test_properties.py::test_device_get_device_properties_when_init_device PASSED [ 68%] 314s tests/test_properties.py::test_mandatory_device_property_with_db_value_succeeds[True] PASSED [ 68%] 314s tests/test_properties.py::test_mandatory_device_property_with_db_value_succeeds[False] PASSED [ 68%] 314s tests/test_server.py::test_uncorrect_typing_hints[property-tuple-Property does not support IMAGE type0] PASSED [ 68%] 314s tests/test_server.py::test_uncorrect_typing_hints[property-tuple-Property does not support IMAGE type1] PASSED [ 68%] 314s tests/test_server.py::test_uncorrect_typing_hints[property-tuple-PyTango does not support mixed types] PASSED [ 68%] 314s tests/test_server.py::test_uncorrect_typing_hints[attribute-tuple-PyTango does not support mixed types0] PASSED [ 68%] 314s tests/test_server.py::test_uncorrect_typing_hints[attribute-tuple-PyTango does not support mixed types1] PASSED [ 68%] 314s tests/test_server.py::test_uncorrect_typing_hints[attribute-tuple-PyTango does not support mixed types2] PASSED [ 68%] 314s tests/test_server.py::test_uncorrect_typing_hints[attribute-Callable-Cannot translate] PASSED [ 68%] 314s tests/test_server.py::test_get_enum_labels_success[GoodEnum] PASSED [ 68%] 314s tests/test_server.py::test_get_enum_labels_fail[BadEnumNonZero] PASSED [ 68%] 314s tests/test_server.py::test_get_enum_labels_fail[BadEnumSkipValues] PASSED [ 69%] 314s tests/test_server.py::test_get_enum_labels_fail[BadEnumDuplicates] PASSED [ 69%] 314s tests/test_server.py::test_device_classes_use_latest_implementation PASSED [ 69%] 314s tests/test_server.py::test_empty_device[Synchronous] PASSED [ 69%] 314s tests/test_server.py::test_empty_device[Asyncio] FAILED [ 69%] 314s tests/test_server.py::test_empty_device[Gevent] PASSED [ 69%] 314s tests/test_server.py::test_set_desc_status_state_at_init[doc] PASSED [ 69%] 314s tests/test_server.py::test_set_desc_status_state_at_init[description] PASSED [ 69%] 314s tests/test_server.py::test_set_state_status[ON-Synchronous-False] PASSED [ 69%] 314s tests/test_server.py::test_set_state_status[ON-Synchronous-True] PASSED [ 69%] 314s tests/test_server.py::test_set_state_status[ON-Asyncio-False] FAILED [ 69%] 314s tests/test_server.py::test_set_state_status[ON-Asyncio-True] FAILED [ 70%] 314s tests/test_server.py::test_set_state_status[ON-Gevent-False] PASSED [ 70%] 314s tests/test_server.py::test_set_state_status[ON-Gevent-True] PASSED [ 70%] 314s tests/test_server.py::test_set_state_status[OFF-Synchronous-False] PASSED [ 70%] 314s tests/test_server.py::test_set_state_status[OFF-Synchronous-True] PASSED [ 70%] 314s tests/test_server.py::test_set_state_status[OFF-Asyncio-False] FAILED [ 70%] 314s tests/test_server.py::test_set_state_status[OFF-Asyncio-True] FAILED [ 70%] 314s tests/test_server.py::test_set_state_status[OFF-Gevent-False] PASSED [ 70%] 314s tests/test_server.py::test_set_state_status[OFF-Gevent-True] PASSED [ 70%] 315s tests/test_server.py::test_set_state_status[CLOSE-Synchronous-False] PASSED [ 70%] 315s tests/test_server.py::test_set_state_status[CLOSE-Synchronous-True] PASSED [ 70%] 315s tests/test_server.py::test_set_state_status[CLOSE-Asyncio-False] FAILED [ 70%] 315s tests/test_server.py::test_set_state_status[CLOSE-Asyncio-True] FAILED [ 71%] 315s tests/test_server.py::test_set_state_status[CLOSE-Gevent-False] PASSED [ 71%] 315s tests/test_server.py::test_set_state_status[CLOSE-Gevent-True] PASSED [ 71%] 315s tests/test_server.py::test_set_state_status[OPEN-Synchronous-False] PASSED [ 71%] 315s tests/test_server.py::test_set_state_status[OPEN-Synchronous-True] PASSED [ 71%] 315s tests/test_server.py::test_set_state_status[OPEN-Asyncio-False] FAILED [ 71%] 315s tests/test_server.py::test_set_state_status[OPEN-Asyncio-True] FAILED [ 71%] 315s tests/test_server.py::test_set_state_status[OPEN-Gevent-False] PASSED [ 71%] 315s tests/test_server.py::test_set_state_status[OPEN-Gevent-True] PASSED [ 71%] 315s tests/test_server.py::test_set_state_status[INSERT-Synchronous-False] PASSED [ 71%] 315s tests/test_server.py::test_set_state_status[INSERT-Synchronous-True] PASSED [ 71%] 315s tests/test_server.py::test_set_state_status[INSERT-Asyncio-False] FAILED [ 71%] 315s tests/test_server.py::test_set_state_status[INSERT-Asyncio-True] FAILED [ 72%] 315s tests/test_server.py::test_set_state_status[INSERT-Gevent-False] PASSED [ 72%] 315s tests/test_server.py::test_set_state_status[INSERT-Gevent-True] PASSED [ 72%] 315s tests/test_server.py::test_set_state_status[EXTRACT-Synchronous-False] PASSED [ 72%] 316s tests/test_server.py::test_set_state_status[EXTRACT-Synchronous-True] PASSED [ 72%] 316s tests/test_server.py::test_set_state_status[EXTRACT-Asyncio-False] FAILED [ 72%] 316s tests/test_server.py::test_set_state_status[EXTRACT-Asyncio-True] FAILED [ 72%] 316s tests/test_server.py::test_set_state_status[EXTRACT-Gevent-False] PASSED [ 72%] 316s tests/test_server.py::test_set_state_status[EXTRACT-Gevent-True] PASSED [ 72%] 316s tests/test_server.py::test_set_state_status[MOVING-Synchronous-False] PASSED [ 72%] 316s tests/test_server.py::test_set_state_status[MOVING-Synchronous-True] PASSED [ 72%] 317s tests/test_server.py::test_set_state_status[MOVING-Asyncio-False] FAILED [ 72%] 317s tests/test_server.py::test_set_state_status[MOVING-Asyncio-True] FAILED [ 73%] 317s tests/test_server.py::test_set_state_status[MOVING-Gevent-False] PASSED [ 73%] 317s tests/test_server.py::test_set_state_status[MOVING-Gevent-True] PASSED [ 73%] 317s tests/test_server.py::test_set_state_status[STANDBY-Synchronous-False] PASSED [ 73%] 317s tests/test_server.py::test_set_state_status[STANDBY-Synchronous-True] PASSED [ 73%] 317s tests/test_server.py::test_set_state_status[STANDBY-Asyncio-False] FAILED [ 73%] 317s tests/test_server.py::test_set_state_status[STANDBY-Asyncio-True] FAILED [ 73%] 317s tests/test_server.py::test_set_state_status[STANDBY-Gevent-False] PASSED [ 73%] 317s tests/test_server.py::test_set_state_status[STANDBY-Gevent-True] PASSED [ 73%] 317s tests/test_server.py::test_set_state_status[FAULT-Synchronous-False] PASSED [ 73%] 317s tests/test_server.py::test_set_state_status[FAULT-Synchronous-True] PASSED [ 73%] 317s tests/test_server.py::test_set_state_status[FAULT-Asyncio-False] FAILED [ 74%] 317s tests/test_server.py::test_set_state_status[FAULT-Asyncio-True] FAILED [ 74%] 317s tests/test_server.py::test_set_state_status[FAULT-Gevent-False] PASSED [ 74%] 317s tests/test_server.py::test_set_state_status[FAULT-Gevent-True] PASSED [ 74%] 317s tests/test_server.py::test_set_state_status[INIT-Synchronous-False] PASSED [ 74%] 317s tests/test_server.py::test_set_state_status[INIT-Synchronous-True] PASSED [ 74%] 317s tests/test_server.py::test_set_state_status[INIT-Asyncio-False] FAILED [ 74%] 317s tests/test_server.py::test_set_state_status[INIT-Asyncio-True] FAILED [ 74%] 317s tests/test_server.py::test_set_state_status[INIT-Gevent-False] PASSED [ 74%] 317s tests/test_server.py::test_set_state_status[INIT-Gevent-True] PASSED [ 74%] 317s tests/test_server.py::test_set_state_status[RUNNING-Synchronous-False] PASSED [ 74%] 317s tests/test_server.py::test_set_state_status[RUNNING-Synchronous-True] PASSED [ 74%] 317s tests/test_server.py::test_set_state_status[RUNNING-Asyncio-False] FAILED [ 75%] 317s tests/test_server.py::test_set_state_status[RUNNING-Asyncio-True] FAILED [ 75%] 317s tests/test_server.py::test_set_state_status[RUNNING-Gevent-False] PASSED [ 75%] 317s tests/test_server.py::test_set_state_status[RUNNING-Gevent-True] PASSED [ 75%] 317s tests/test_server.py::test_set_state_status[ALARM-Synchronous-False] PASSED [ 75%] 317s tests/test_server.py::test_set_state_status[ALARM-Synchronous-True] PASSED [ 75%] 318s tests/test_server.py::test_set_state_status[ALARM-Asyncio-False] FAILED [ 75%] 318s tests/test_server.py::test_set_state_status[ALARM-Asyncio-True] FAILED [ 75%] 318s tests/test_server.py::test_set_state_status[ALARM-Gevent-False] PASSED [ 75%] 318s tests/test_server.py::test_set_state_status[ALARM-Gevent-True] PASSED [ 75%] 318s tests/test_server.py::test_set_state_status[DISABLE-Synchronous-False] PASSED [ 75%] 318s tests/test_server.py::test_set_state_status[DISABLE-Synchronous-True] PASSED [ 75%] 318s tests/test_server.py::test_set_state_status[DISABLE-Asyncio-False] FAILED [ 76%] 318s tests/test_server.py::test_set_state_status[DISABLE-Asyncio-True] FAILED [ 76%] 318s tests/test_server.py::test_set_state_status[DISABLE-Gevent-False] PASSED [ 76%] 318s tests/test_server.py::test_set_state_status[DISABLE-Gevent-True] PASSED [ 76%] 318s tests/test_server.py::test_set_state_status[UNKNOWN-Synchronous-False] PASSED [ 76%] 318s tests/test_server.py::test_set_state_status[UNKNOWN-Synchronous-True] PASSED [ 76%] 318s tests/test_server.py::test_set_state_status[UNKNOWN-Asyncio-False] FAILED [ 76%] 318s tests/test_server.py::test_set_state_status[UNKNOWN-Asyncio-True] FAILED [ 76%] 318s tests/test_server.py::test_set_state_status[UNKNOWN-Gevent-False] PASSED [ 76%] 318s tests/test_server.py::test_set_state_status[UNKNOWN-Gevent-True] PASSED [ 76%] 318s tests/test_server.py::test_user_dev_state_status[Synchronous] PASSED [ 76%] 319s tests/test_server.py::test_user_dev_state_status[Asyncio] FAILED [ 77%] 319s tests/test_server.py::test_user_dev_state_status[Gevent] PASSED [ 77%] 319s tests/test_server.py::test_attr_quality_checked_with_state[Synchronous] PASSED [ 77%] 319s tests/test_server.py::test_attr_quality_checked_with_state[Asyncio] FAILED [ 77%] 319s tests/test_server.py::test_attr_quality_checked_with_state[Gevent] PASSED [ 77%] 319s tests/test_server.py::test_device_get_attr_config[Synchronous] PASSED [ 77%] 319s tests/test_server.py::test_device_get_attr_config[Asyncio] FAILED [ 77%] 319s tests/test_server.py::test_device_get_attr_config[Gevent] PASSED [ 77%] 319s tests/test_server.py::test_device_set_attr_config[Synchronous] PASSED [ 77%] 319s tests/test_server.py::test_device_set_attr_config[Asyncio] FAILED [ 77%] 319s tests/test_server.py::test_device_set_attr_config[Gevent] PASSED [ 77%] 319s tests/test_server.py::test_default_units PASSED [ 77%] 319s tests/test_server.py::test_custom_units PASSED [ 78%] 319s tests/test_server.py::test_inheritance_overrides_a_property PASSED [ 78%] 319s tests/test_server.py::test_inheritance_override_dev_status PASSED [ 78%] 319s tests/test_server.py::test_inheritance_init_device PASSED [ 78%] 319s tests/test_server.py::test_inheritance_with_decorated_attributes PASSED [ 78%] 319s tests/test_server.py::test_inheritance_with_undecorated_attributes PASSED [ 78%] 319s tests/test_server.py::test_inheritance_with_undecorated_attribute_and_bound_methods PASSED [ 78%] 319s tests/test_server.py::test_inheritance_with_undecorated_attributes_and_unbound_functions PASSED [ 78%] 319s tests/test_server.py::test_inheritance_command_is_allowed_by_naming_convention PASSED [ 78%] 319s tests/test_server.py::test_inheritance_command_is_allowed_by_kwarg_method PASSED [ 78%] 319s tests/test_server.py::test_inheritance_command_is_allowed_by_kwarg_unbound_function PASSED [ 78%] 319s tests/test_server.py::test_exception_propagation[Synchronous] PASSED [ 78%] 320s tests/test_server.py::test_exception_propagation[Asyncio] FAILED [ 79%] 320s tests/test_server.py::test_exception_propagation[Gevent] PASSED [ 79%] 320s tests/test_server.py::test_arguments[linux-applicable_os0-MyDs instance --nodb --port 1234-expected_output0] PASSED [ 79%] 320s tests/test_server.py::test_arguments[linux-applicable_os1-MyDs -port 1234 -host myhost instance-expected_output1] PASSED [ 79%] 320s tests/test_server.py::test_arguments[linux-applicable_os2-MyDs instance --ORBendPoint giop:tcp:_:1234-expected_output2] PASSED [ 79%] 320s 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%] 320s tests/test_server.py::test_arguments[linux-applicable_os4-MyDs instance -file a/b/c-expected_output4] PASSED [ 79%] 320s tests/test_server.py::test_arguments[linux-applicable_os5-MyDs instance -nodb-expected_output5] PASSED [ 79%] 320s tests/test_server.py::test_arguments[linux-applicable_os6-MyDs instance -dlist a/b/c;d/e/f-expected_output6] PASSED [ 79%] 320s tests/test_server.py::test_arguments[linux-applicable_os7-MyDs instance -vvvv-expected_output7] PASSED [ 79%] 320s tests/test_server.py::test_arguments[linux-applicable_os8-MyDs instance --verbose --verbose --verbose --verbose-expected_output8] PASSED [ 79%] 320s tests/test_server.py::test_arguments[linux-applicable_os9-MyDs instance -v4-expected_output9] PASSED [ 80%] 320s tests/test_server.py::test_arguments[linux-applicable_os10-MyDs instance -v 4-expected_output10] PASSED [ 80%] 320s tests/test_server.py::test_arguments[linux-applicable_os11-MyDs instance -dbg -i -s -u-expected_output11] PASSED [ 80%] 320s tests/test_server.py::test_arguments[linux-applicable_os12-MyDs instance -ORBtest1 test1 --ORBtest2 test2-expected_output12] PASSED [ 80%] 320s tests/test_server.py::test_arguments[linux-applicable_os13-MyDs ORBinstance -ORBtest myORBparam-expected_output13] PASSED [ 80%] 320s 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%] 320s tests/test_server.py::test_arguments[linux-applicable_os15-MyDs instance -ORBtest1 test1 --orbinvalid value-expected_output15] PASSED [ 80%] 320s tests/test_server.py::test_arguments[win-applicable_os0-MyDs instance --nodb --port 1234-expected_output0] PASSED [ 80%] 320s tests/test_server.py::test_arguments[win-applicable_os1-MyDs -port 1234 -host myhost instance-expected_output1] PASSED [ 80%] 320s tests/test_server.py::test_arguments[win-applicable_os2-MyDs instance --ORBendPoint giop:tcp:_:1234-expected_output2] PASSED [ 80%] 320s 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%] 320s tests/test_server.py::test_arguments[win-applicable_os4-MyDs instance -file a/b/c-expected_output4] PASSED [ 80%] 320s tests/test_server.py::test_arguments[win-applicable_os5-MyDs instance -nodb-expected_output5] PASSED [ 81%] 320s tests/test_server.py::test_arguments[win-applicable_os6-MyDs instance -dlist a/b/c;d/e/f-expected_output6] PASSED [ 81%] 320s tests/test_server.py::test_arguments[win-applicable_os7-MyDs instance -vvvv-expected_output7] PASSED [ 81%] 320s tests/test_server.py::test_arguments[win-applicable_os8-MyDs instance --verbose --verbose --verbose --verbose-expected_output8] PASSED [ 81%] 320s tests/test_server.py::test_arguments[win-applicable_os9-MyDs instance -v4-expected_output9] PASSED [ 81%] 320s tests/test_server.py::test_arguments[win-applicable_os10-MyDs instance -v 4-expected_output10] PASSED [ 81%] 320s tests/test_server.py::test_arguments[win-applicable_os11-MyDs instance -dbg -i -s -u-expected_output11] PASSED [ 81%] 320s tests/test_server.py::test_arguments[win-applicable_os12-MyDs instance -ORBtest1 test1 --ORBtest2 test2-expected_output12] PASSED [ 81%] 320s tests/test_server.py::test_arguments[win-applicable_os13-MyDs ORBinstance -ORBtest myORBparam-expected_output13] PASSED [ 81%] 320s 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%] 320s tests/test_server.py::test_arguments[win-applicable_os15-MyDs instance -ORBtest1 test1 --orbinvalid value-expected_output15] PASSED [ 81%] 320s tests/test_server.py::test_server_init_hook_called[Synchronous] PASSED [ 81%] 320s tests/test_server.py::test_server_init_hook_called[Asyncio] SKIPPED [ 82%] 320s tests/test_server.py::test_server_init_hook_called[Gevent] PASSED [ 82%] 320s tests/test_server.py::test_server_init_hook_change_state PASSED [ 82%] 320s tests/test_server.py::test_asyncio_server_init_hook_change_state FAILED [ 82%] 320s tests/test_server.py::test_server_init_hook_called_after_init PASSED [ 82%] 320s tests/test_server.py::test_async_server_init_hook_called_after_init FAILED [ 82%] 320s tests/test_server.py::test_server_init_hook_exception PASSED [ 82%] 320s tests/test_server.py::test_asyncio_server_init_hook_exception FAILED [ 82%] 320s tests/test_server.py::test_server_init_hook_with_low_level_api_called PASSED [ 82%] 320s tests/test_server.py::test_server_init_hook_with_low_level_api_change_state PASSED [ 82%] 320s tests/test_server.py::test_server_init_hook_with_low_level_api_called_after_init PASSED [ 82%] 320s tests/test_server.py::test_server_init_hook_with_low_level_api_exception PASSED [ 82%] 320s tests/test_server.py::test_server_init_multiple_devices PASSED [ 83%] 320s tests/test_server.py::test_server_init_hook_subscribe_event_multiple_devices XFAIL [ 83%] 321s tests/test_server.py::test_deprecation_warning_for_sync_attr_com_methods_in_asyncio_device FAILED [ 83%] 321s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[init_device] FAILED [ 83%] 321s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[delete_device] FAILED [ 83%] 321s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_state] FAILED [ 83%] 321s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_status] FAILED [ 83%] 321s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[read_attr_hardware] FAILED [ 83%] 321s tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[always_executed_hook] FAILED [ 83%] 321s tests/test_server.py::test_no_sync_attribute_locks[Synchronous] SKIPPED [ 83%] 321s tests/test_server.py::test_no_sync_attribute_locks[Asyncio] SKIPPED [ 83%] 321s tests/test_server.py::test_no_sync_attribute_locks[Gevent] SKIPPED (...) [ 84%] 321s tests/test_server.py::test_read_slow_and_fast_attributes_with_asyncio SKIPPED [ 84%] 321s tests/test_server.py::test_get_version_info_classic_api PASSED [ 84%] 321s tests/test_server.py::test_get_version_info_high_level_api PASSED [ 84%] 321s tests/test_server.py::test_add_version_info_classic_api PASSED [ 84%] 321s tests/test_server.py::test_add_version_info_high_level_api PASSED [ 84%] 321s tests/test_server.py::test_restart_server_command_cpp_and_py SKIPPED [ 84%] 321s tests/test_server.py::test_attr_data_default_fwd_properties PASSED [ 84%] 321s tests/test_server.py::test_attr_data_default_properties PASSED [ 84%] 321s tests/test_server.py::test_attr_data_default_properties_throws_on_unknown PASSED [ 84%] 321s tests/test_server.py::test_attr_data_enum_labels PASSED [ 84%] 321s tests/test_server.py::test_attr_data_to_attr PASSED [ 84%] 321s tests/test_server.py::test_from_attr_info_exceptions[some string-Wrong data type for value for describing attribute] PASSED [ 85%] 321s tests/test_server.py::test_from_attr_info_exceptions[attr_info1-Wrong number of argument for describing attribute] PASSED [ 85%] 321s tests/test_server.py::test_from_attr_info_exceptions[attr_info2-Wrong number of argument for describing attribute] PASSED [ 85%] 321s tests/test_server.py::test_from_attr_info_exceptions[attr_info3-Wrong data type for describing mandatory information] PASSED [ 85%] 321s tests/test_server.py::test_from_attr_info_exceptions[attr_info4-Wrong data type for describing mandatory information] PASSED [ 85%] 321s tests/test_server.py::test_from_attr_info_exceptions[attr_info5-Wrong data type in attribute argument for attribute] PASSED [ 85%] 321s tests/test_server.py::test_from_attr_info_exceptions[attr_info6-Wrong data format in attribute argument for attribute] PASSED [ 85%] 321s 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%] 321s 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%] 321s 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%] 321s 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%] 322s 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%] 322s 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%] 322s tests/test_server.py::test_from_attr_info_exceptions[attr_info13-Wrong data write type in attribute argument] PASSED [ 86%] 322s tests/test_server.py::test_from_attr_info_exceptions[attr_info14-Wrong display level] PASSED [ 86%] 322s tests/test_server.py::test_from_attr_info_exceptions[attr_info15-Wrong polling period] PASSED [ 86%] 322s tests/test_server.py::test_from_attr_info_exceptions[attr_info16-Wrong memorized value] PASSED [ 86%] 322s tests/test_server.py::test_from_attr_info_exceptions[attr_info17-Missing 'enum_labels' key in attr_list definition] PASSED [ 86%] 322s tests/test_server.py::test_from_attr_info_hw_memorized PASSED [ 86%] 322s tests/test_server.py::test_from_attr_info_memorized PASSED [ 86%] 322s tests/test_server.py::test_device_repr_does_not_segfault_with_pytest PASSED [ 86%] 322s tests/test_telemetry.py::test_telemetry_available_constant_exists PASSED [ 86%] 322s tests/test_telemetry.py::test_telemetry_packages_available_if_telemetry_active SKIPPED [ 86%] 322s tests/test_telemetry.py::test_init_device_and_basic_span_details[Synchronous] SKIPPED [ 87%] 322s tests/test_telemetry.py::test_init_device_and_basic_span_details[Asyncio] SKIPPED [ 87%] 322s tests/test_telemetry.py::test_init_device_and_basic_span_details[Gevent] SKIPPED [ 87%] 322s tests/test_telemetry.py::test_delete_device[Synchronous] SKIPPED (Te...) [ 87%] 322s tests/test_telemetry.py::test_delete_device[Asyncio] SKIPPED (Teleme...) [ 87%] 322s tests/test_telemetry.py::test_delete_device[Gevent] SKIPPED (Telemet...) [ 87%] 322s tests/test_telemetry.py::test_state[Synchronous] SKIPPED (Telemetry ...) [ 87%] 322s tests/test_telemetry.py::test_state[Asyncio] SKIPPED (Telemetry not ...) [ 87%] 322s tests/test_telemetry.py::test_state[Gevent] SKIPPED (Telemetry not a...) [ 87%] 322s tests/test_telemetry.py::test_static_command[Synchronous] SKIPPED (T...) [ 87%] 322s tests/test_telemetry.py::test_static_command[Asyncio] SKIPPED (Telem...) [ 87%] 322s tests/test_telemetry.py::test_static_command[Gevent] SKIPPED (Teleme...) [ 87%] 322s tests/test_telemetry.py::test_static_attribute[Synchronous] SKIPPED [ 88%] 322s tests/test_telemetry.py::test_static_attribute[Asyncio] SKIPPED (Tel...) [ 88%] 322s tests/test_telemetry.py::test_static_attribute[Gevent] SKIPPED (Tele...) [ 88%] 322s tests/test_telemetry.py::test_user_span_traceid_propagates_to_tango[Synchronous] SKIPPED [ 88%] 322s tests/test_telemetry.py::test_user_span_traceid_propagates_to_tango[Asyncio] SKIPPED [ 88%] 322s tests/test_telemetry.py::test_user_span_traceid_propagates_to_tango[Gevent] SKIPPED [ 88%] 322s tests/test_telemetry.py::test_base_device_kernel_tracing_disabled_by_default SKIPPED [ 88%] 322s tests/test_telemetry.py::test_base_device_traces_if_kernel_tracing_enabled[Synchronous] SKIPPED [ 88%] 322s tests/test_telemetry.py::test_base_device_traces_if_kernel_tracing_enabled[Asyncio] SKIPPED [ 88%] 322s tests/test_telemetry.py::test_base_device_traces_if_kernel_tracing_enabled[Gevent] SKIPPED [ 88%] 322s tests/test_telemetry.py::test_no_device_traces_if_device_tracing_disabled[Synchronous] SKIPPED [ 88%] 322s tests/test_telemetry.py::test_no_device_traces_if_device_tracing_disabled[Asyncio] SKIPPED [ 88%] 322s tests/test_telemetry.py::test_no_device_traces_if_device_tracing_disabled[Gevent] SKIPPED [ 89%] 322s tests/test_test_context.py::test_no_warnings_in_test_context PASSED [ 89%] 322s tests/test_test_context.py::test_single_device[Synchronous] PASSED [ 89%] 322s tests/test_test_context.py::test_single_device[Asyncio] FAILED [ 89%] 322s tests/test_test_context.py::test_single_device[Gevent] PASSED [ 89%] 322s tests/test_test_context.py::test_single_device_old_api PASSED [ 89%] 322s tests/test_test_context.py::test_nested_single_device_in_same_process_failure SKIPPED [ 89%] 323s tests/test_test_context.py::test_nested_single_device_in_different_processes_success_without_short_names PASSED [ 89%] 323s tests/test_test_context.py::test_nested_single_device_in_different_processes_failure_with_short_names PASSED [ 89%] 323s tests/test_test_context.py::test_multi_devices_info[SimpleDevice-SimpleDevice] PASSED [ 89%] 323s tests/test_test_context.py::test_multi_devices_info[tango.test_utils.SimpleDevice-SimpleDevice] PASSED [ 89%] 323s tests/test_test_context.py::test_multi_devices_info[class_field2-ClassicAPISimpleDeviceImpl] PASSED [ 90%] 323s tests/test_test_context.py::test_multi_devices_info[class_field3-ClassicAPISimpleDeviceImpl] PASSED [ 90%] 323s tests/test_test_context.py::test_multi_devices_info[class_field4-ClassicAPISimpleDeviceImpl] PASSED [ 90%] 323s tests/test_test_context.py::test_multi_devices_info[class_field5-ClassicAPISimpleDeviceImpl] PASSED [ 90%] 323s tests/test_test_context.py::test_multi_with_single_device[Synchronous] PASSED [ 90%] 324s tests/test_test_context.py::test_multi_with_single_device[Asyncio] FAILED [ 90%] 324s tests/test_test_context.py::test_multi_with_single_device[Gevent] PASSED [ 90%] 324s tests/test_test_context.py::test_multi_with_single_device_old_api PASSED [ 90%] 324s tests/test_test_context.py::test_multi_with_two_devices[Synchronous] PASSED [ 90%] 324s tests/test_test_context.py::test_multi_with_two_devices[Asyncio] FAILED [ 90%] 324s tests/test_test_context.py::test_multi_with_two_devices[Gevent] PASSED [ 90%] 324s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1GreenModeUnspecified-Device2GreenModeUnspecified-None] PASSED [ 90%] 324s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1GreenModeUnspecified-Device2Synchronous-None] PASSED [ 91%] 324s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1GreenModeUnspecified-Device2Gevent-ValueError] PASSED [ 91%] 324s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1GreenModeUnspecified-Device2Asyncio-ValueError] PASSED [ 91%] 324s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Synchronous-Device2GreenModeUnspecified-None] PASSED [ 91%] 324s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Synchronous-Device2Synchronous-None] PASSED [ 91%] 324s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Synchronous-Device2Gevent-ValueError] PASSED [ 91%] 324s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Synchronous-Device2Asyncio-ValueError] PASSED [ 91%] 324s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2GreenModeUnspecified-ValueError] PASSED [ 91%] 324s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Synchronous-ValueError] PASSED [ 91%] 324s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Gevent-ValueError] PASSED [ 91%] 324s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Asyncio-None] FAILED [ 91%] 324s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Gevent-Device2GreenModeUnspecified-ValueError] PASSED [ 91%] 324s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Gevent-Device2Synchronous-ValueError] PASSED [ 92%] 324s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Gevent-Device2Gevent-None] PASSED [ 92%] 324s tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Gevent-Device2Asyncio-ValueError] PASSED [ 92%] 324s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Synchronous-Asyncio-Asyncio-None-SynchronousExecutor] FAILED [ 92%] 324s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Synchronous-Gevent-Gevent-None-SynchronousExecutor] PASSED [ 92%] 324s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Synchronous-Synchronous-None-AsyncioExecutor] FAILED [ 92%] 324s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Gevent-Gevent-None-AsyncioExecutor] FAILED [ 92%] 324s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Gevent-Synchronous-Synchronous-None-GeventExecutor] PASSED [ 92%] 325s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Gevent-Asyncio-Asyncio-None-GeventExecutor] FAILED [ 92%] 325s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Synchronous-Asyncio-None-SynchronousExecutor] FAILED [ 92%] 325s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Synchronous-Gevent-None-SynchronousExecutor] PASSED [ 92%] 325s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Gevent-Synchronous-None-GeventExecutor] PASSED [ 92%] 325s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Gevent-Asyncio-None-GeventExecutor] FAILED [ 93%] 325s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-None-Synchronous-None-SynchronousExecutor] PASSED [ 93%] 325s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Synchronous-DeprecationWarning-AsyncioExecutor] FAILED [ 93%] 325s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Gevent-DeprecationWarning-AsyncioExecutor] FAILED [ 93%] 326s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-None-Asyncio-RuntimeError-AsyncioExecutor] PASSED [ 93%] 326s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-None-Gevent-RuntimeError-GeventExecutor] PASSED [ 93%] 327s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-None-Asyncio-RuntimeError-AsyncioExecutor] PASSED [ 93%] 327s tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Gevent-None-Gevent-RuntimeError-GeventExecutor] PASSED [ 93%] 327s tests/test_test_context.py::test_multi_with_async_devices_initialised FAILED [ 93%] 327s tests/test_test_context.py::test_multi_device_access_via_test_context_methods PASSED [ 93%] 328s tests/test_test_context.py::test_multi_short_name_device_proxy_access_without_tango_db PASSED [ 93%] 328s tests/test_test_context.py::test_multi_short_name_device_proxy_with_dependencies_access_without_tango_db PASSED [ 94%] 328s tests/test_test_context.py::test_multi_short_name_attribute_proxy_access_without_tango_db PASSED [ 94%] 328s tests/test_test_context.py::test_single_short_name_device_proxy_access_without_tango_db PASSED [ 94%] 328s tests/test_test_context.py::test_single_short_name_attribute_proxy_access_without_tango_db PASSED [ 94%] 328s tests/test_test_context.py::test_multi_short_name_access_fails_if_override_disabled PASSED [ 94%] 328s tests/test_test_context.py::test_multi_device_proxy_cached PASSED [ 94%] 328s tests/test_test_context.py::test_multi_with_two_devices_with_properties[Synchronous] PASSED [ 94%] 329s tests/test_test_context.py::test_multi_with_two_devices_with_properties[Asyncio] FAILED [ 94%] 329s tests/test_test_context.py::test_multi_with_two_devices_with_properties[Gevent] PASSED [ 94%] 329s tests/test_test_context.py::test_multi_raises_on_invalid_file_database_properties PASSED [ 94%] 329s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config0] PASSED [ 94%] 329s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config1] PASSED [ 94%] 329s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config2] PASSED [ 95%] 329s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config3] PASSED [ 95%] 329s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config4] PASSED [ 95%] 329s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config5] PASSED [ 95%] 329s tests/test_test_context.py::test_multi_bad_config_fails[bad_multi_device_config6] PASSED [ 95%] 329s tests/test_test_context.py::test_multi_with_memorized_attribute_values[False-None-0] PASSED [ 95%] 329s tests/test_test_context.py::test_multi_with_memorized_attribute_values[False-1-0] PASSED [ 95%] 329s tests/test_test_context.py::test_multi_with_memorized_attribute_values[True-None-0] PASSED [ 95%] 329s tests/test_test_context.py::test_multi_with_memorized_attribute_values[True-1-1] PASSED [ 95%] 329s tests/test_test_context.py::test_single_with_memorized_attribute_values[False-None-0] PASSED [ 95%] 329s tests/test_test_context.py::test_single_with_memorized_attribute_values[False-1-0] PASSED [ 95%] 329s tests/test_test_context.py::test_single_with_memorized_attribute_values[True-None-0] PASSED [ 95%] 329s tests/test_test_context.py::test_single_with_memorized_attribute_values[True-1-1] PASSED [ 96%] 329s tests/test_test_context.py::test_empty_string_property_bug[str-property_value0- ] PASSED [ 96%] 329s tests/test_test_context.py::test_empty_string_property_bug[property_type1-property_value1-expected_outcome1] PASSED [ 96%] 329s tests/test_test_context.py::test_empty_string_property_bug[property_type2-property_value2-expected_outcome2] PASSED [ 96%] 329s tests/test_test_context.py::test_test_context_async_device_proxy[True] FAILED [ 96%] 329s tests/test_test_context.py::test_test_context_async_device_proxy[False] FAILED [ 96%] 330s tests/test_test_context.py::test_test_context_multi_async_device_proxy[True] FAILED [ 96%] 330s tests/test_test_context.py::test_test_context_multi_async_device_proxy[False] FAILED [ 96%] 330s tests/test_test_context.py::test_test_context_future_and_gevent_device_proxy[True-Futures] PASSED [ 96%] 330s tests/test_test_context.py::test_test_context_future_and_gevent_device_proxy[True-Gevent] PASSED [ 96%] 330s tests/test_test_context.py::test_test_context_future_and_gevent_device_proxy[False-Futures] PASSED [ 96%] 330s tests/test_test_context.py::test_test_context_future_and_gevent_device_proxy[False-Gevent] PASSED [ 97%] 330s tests/test_test_context.py::test_forwarded_attributes[True] XFAIL (D...) [ 97%] 330s tests/test_test_context.py::test_forwarded_attributes[False] XFAIL (...) [ 97%] 330s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[None-a/b/c-a/b/c] PASSED [ 97%] 330s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[None-a/b/c/d-a/b/c/d] PASSED [ 97%] 330s 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%] 330s 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%] 331s tests/test_utils.py::test_get_trl_with_test_fqtrl_success[None-no://trl/validation-no://trl/validation] PASSED [ 97%] 331s 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%] 331s 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%] 331s 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%] 331s 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%] 331s 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%] 331s 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%] 331s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[host:123-a/b/c] PASSED [ 98%] 331s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://-a/b/c] PASSED [ 98%] 331s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://:123-a/b/c] PASSED [ 98%] 331s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host-a/b/c] PASSED [ 98%] 331s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host:0-a/b/c] PASSED [ 98%] 331s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host:12/path-a/b/c] PASSED [ 98%] 331s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host:123?query=1-a/b/c] PASSED [ 98%] 331s tests/test_utils.py::test_get_trl_with_test_fdqn_failure[tango://host:123#dbase=invalid-a/b/c] PASSED [ 98%] 331s tests/test_utils.py::test_global_state_default_set_and_clear PASSED [ 98%] 331s tests/test_utils.py::test_clear_global_var_without_set_does_not_raise PASSED [ 98%] 331s tests/test_utils.py::test_get_tango_type_valid PASSED [ 99%] 331s tests/test_utils.py::test_get_tango_type_invalid_raises_type_error PASSED [ 99%] 331s tests/test_utils.py::test_sequence_to_string_vector_and_back PASSED [ 99%] 331s tests/test_utils.py::test_sequence_to_double_vector_and_back PASSED [ 99%] 331s tests/test_utils.py::test_sequence_to_dbdevinfo_vector_and_back PASSED [ 99%] 331s tests/test_utils.py::test_sequence_to_dbdevexportinfo_vector_and_back PASSED [ 99%] 331s tests/test_utils.py::test_sequence_to_dbdata_vector_and_back PASSED [ 99%] 331s tests/test_utils.py::test_sequence_to_dbdevimport_vector_and_back PASSED [ 99%] 331s tests/test_utils.py::test_sequence_to_dbhistorylist_vector_and_back PASSED [ 99%] 331s tests/test_utils.py::test_sequence_to_devicedatalist_vector_and_back PASSED [ 99%] 331s tests/test_utils.py::test_sequence_to_devicedatahistorylist_vector_and_back PASSED [ 99%] 331s tests/test_zzz_deprecated_pytango_module.py::test_import_aliased_module PASSED [100%] 331s 331s ==================================== ERRORS ==================================== 331s ____ ERROR at setup of test_read_write_attribute_with_green_modes[Asyncio] _____ 331s fixturedef = 331s request = > 331s 331s @pytest.hookimpl(wrapper=True) 331s def pytest_fixture_setup(fixturedef: FixtureDef, request) -> object | None: 331s asyncio_mode = _get_asyncio_mode(request.config) 331s if not _is_asyncio_fixture_function(fixturedef.func): 331s if asyncio_mode == Mode.STRICT: 331s # Ignore async fixtures without explicit asyncio mark in strict mode 331s # This applies to pytest_trio fixtures, for example 331s > return (yield) 331s ^^^^^ 331s 331s /usr/lib/python3/dist-packages/pytest_asyncio/plugin.py:728: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s tests/conftest.py:201: in tango_test_with_green_modes 331s proxy = wait_for_proxy(host, proc, device, green_mode) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s tests/conftest.py:176: in wait_for_proxy 331s proxy = get_proxy(host, port, device, green_mode) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s tests/conftest.py:167: in get_proxy 331s return device_proxy_map[green_mode](access) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 331s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ---------------------------- Captured stdout setup ----------------------------- 331s Ready to accept request 331s =================================== FAILURES =================================== 331s ___________________ test_green_mode_kwarg_for_proxy_methods ____________________ 331s @pytest.mark.asyncio 331s async def test_green_mode_kwarg_for_proxy_methods(): 331s with DeviceTestContext(ServerTest, device_name="test/test_device/1"): 331s > dev = await get_device_proxy("test/test_device/1", green_mode=GreenMode.Asyncio) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_async.py:41: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 331s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stdout call ----------------------------- 331s Ready to accept request 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ____________________ test_read_write_attribute[int-Asyncio] ____________________ 331s attribute_typed_values = (, (1, 2, -65535, 23), . at 0x71b2d448bd70>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_attribute(attribute_typed_values, server_green_mode): 331s dtype, values, expected = attribute_typed_values 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s async def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s async def attr(self, value): 331s self.attr_value = value 331s 331s async def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s def attr(self, value): 331s self.attr_value = value 331s 331s def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:131: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ___________________ test_read_write_attribute[float-Asyncio] ___________________ 331s attribute_typed_values = (, (2.71, 3.14, -3.4678e-09, 1.2678e+16), . at 0x71b2d449c460>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_attribute(attribute_typed_values, server_green_mode): 331s dtype, values, expected = attribute_typed_values 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s async def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s async def attr(self, value): 331s self.attr_value = value 331s 331s async def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s def attr(self, value): 331s self.attr_value = value 331s 331s def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:131: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ____________________ test_read_write_attribute[str-Asyncio] ____________________ 331s 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 0x71b2d449ca90>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_attribute(attribute_typed_values, server_green_mode): 331s dtype, values, expected = attribute_typed_values 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s async def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s async def attr(self, value): 331s self.attr_value = value 331s 331s async def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s def attr(self, value): 331s self.attr_value = value 331s 331s def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:131: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ___________________ test_read_write_attribute[bool-Asyncio] ____________________ 331s attribute_typed_values = (, (False, True, True, False), . at 0x71b2d449d0c0>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_attribute(attribute_typed_values, server_green_mode): 331s dtype, values, expected = attribute_typed_values 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s async def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s async def attr(self, value): 331s self.attr_value = value 331s 331s async def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s def attr(self, value): 331s self.attr_value = value 331s 331s def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:131: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________ test_read_write_attribute[(int,)-Asyncio] ___________________ 331s attribute_typed_values = ((,), (array([1, 2]), (1, 2, 3), [9, 8, 7], [-65535, 2224], [0, 0]), . at 0x71b2d449d6f0>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_attribute(attribute_typed_values, server_green_mode): 331s dtype, values, expected = attribute_typed_values 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s async def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s async def attr(self, value): 331s self.attr_value = value 331s 331s async def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s def attr(self, value): 331s self.attr_value = value 331s 331s def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:131: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________ test_read_write_attribute[(float,)-Asyncio] __________________ 331s 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 0x71b2d449dd20>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_attribute(attribute_typed_values, server_green_mode): 331s dtype, values, expected = attribute_typed_values 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s async def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s async def attr(self, value): 331s self.attr_value = value 331s 331s async def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s def attr(self, value): 331s self.attr_value = value 331s 331s def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:131: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________ test_read_write_attribute[(str,)-Asyncio] ___________________ 331s attribute_typed_values = ((,), (array(['foo', 'bar'], dtype='. at 0x71b2d449e350>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_attribute(attribute_typed_values, server_green_mode): 331s dtype, values, expected = attribute_typed_values 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s async def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s async def attr(self, value): 331s self.attr_value = value 331s 331s async def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s def attr(self, value): 331s self.attr_value = value 331s 331s def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:131: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________ test_read_write_attribute[(bool,)-Asyncio] __________________ 331s attribute_typed_values = ((,), (array([ True, False]), [False, False, True], [True, False, False], [False], [True]), . at 0x71b2d449e980>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_attribute(attribute_typed_values, server_green_mode): 331s dtype, values, expected = attribute_typed_values 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s async def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s async def attr(self, value): 331s self.attr_value = value 331s 331s async def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s def attr(self, value): 331s self.attr_value = value 331s 331s def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:131: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________ test_read_write_attribute[((int,),)-Asyncio] _________________ 331s attribute_typed_values = (((,),), (array([[1, 2], 331s [3, 4]]), ((1, 2, 3), (4, 5, 6)), [[-65535, 2224], [-65535, 2224]]), . at 0x71b2d449efb0>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_attribute(attribute_typed_values, server_green_mode): 331s dtype, values, expected = attribute_typed_values 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s async def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s async def attr(self, value): 331s self.attr_value = value 331s 331s async def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s def attr(self, value): 331s self.attr_value = value 331s 331s def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:131: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ________________ test_read_write_attribute[((float,),)-Asyncio] ________________ 331s attribute_typed_values = (((,),), (array([[0.1, 0.2], 331s [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 0x71b2d449f5e0>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_attribute(attribute_typed_values, server_green_mode): 331s dtype, values, expected = attribute_typed_values 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s async def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s async def attr(self, value): 331s self.attr_value = value 331s 331s async def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s def attr(self, value): 331s self.attr_value = value 331s 331s def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:131: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________ test_read_write_attribute[((str,),)-Asyncio] _________________ 331s attribute_typed_values = (((,),), (array([['hi-hi', 'ha-ha'], 331s ['hu-hu', 'yuhuu']], dtype='. at 0x71b2d449fc10>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_attribute(attribute_typed_values, server_green_mode): 331s dtype, values, expected = attribute_typed_values 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s async def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s async def attr(self, value): 331s self.attr_value = value 331s 331s async def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s def attr(self, value): 331s self.attr_value = value 331s 331s def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:131: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ________________ test_read_write_attribute[((bool,),)-Asyncio] _________________ 331s attribute_typed_values = (((,),), (array([[ True, False], 331s [False, True]]), [[False, False, True], [True, False, False]], [[False]], [[True]]), . at 0x71b2d43bc300>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_attribute(attribute_typed_values, server_green_mode): 331s dtype, values, expected = attribute_typed_values 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s async def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s async def attr(self, value): 331s self.attr_value = value 331s 331s async def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s _is_allowed = None 331s 331s @attribute( 331s dtype=dtype, max_dim_x=3, max_dim_y=3, access=AttrWriteType.READ_WRITE 331s ) 331s def attr(self): 331s return self.attr_value 331s 331s @attr.write 331s def attr(self, value): 331s self.attr_value = value 331s 331s def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self._is_allowed 331s 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:131: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _____________ test_read_write_attribute_decorated_methods[Asyncio] _____________ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_attribute_decorated_methods(server_green_mode): 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class BaseTestDevice(Device): 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self.is_allowed = yesno 331s 331s else: 331s 331s class BaseTestDevice(Device): 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self.is_allowed = yesno 331s 331s class TestDevice(BaseTestDevice): 331s green_mode = server_green_mode 331s 331s attr_value = None 331s is_allowed = None 331s 331s attr = attribute(dtype=int, access=AttrWriteType.READ_WRITE) 331s 331s sync_code = textwrap.dedent( 331s """ 331s @general_decorator 331s def read_attr(self): 331s return self.attr_value 331s 331s @general_decorator 331s def write_attr(self, value): 331s self.attr_value = value 331s 331s @general_decorator 331s def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self.is_allowed 331s """ 331s ) 331s 331s if server_green_mode == GreenMode.Asyncio: 331s exec( 331s sync_code.replace("def", "async def").replace( 331s "general_decorator", "general_asyncio_decorator" 331s ) 331s ) 331s else: 331s exec(sync_code) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:421: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________ test_read_write_dynamic_attribute[low_level_read-Asyncio] ___________ 331s dynamic_attribute_read_function = 'def read_dyn_attr(self, attr):\n attr.set_value(self.attr_value)\n' 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_dynamic_attribute( 331s dynamic_attribute_read_function, server_green_mode 331s ): 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s attr_value = None 331s 331s @command 331s async def add_dyn_attr(self): 331s attr = attribute( 331s name="dyn_attr", 331s dtype=int, 331s access=AttrWriteType.READ_WRITE, 331s fget=self.read_dyn_attr, 331s fset=self.write_dyn_attr, 331s ) 331s await self.async_add_attribute(attr) 331s 331s @command 331s async def delete_dyn_attr(self): 331s await self.async_remove_attribute("dyn_attr") 331s 331s async def write_dyn_attr(self, attr): 331s self.attr_value = attr.get_write_value() 331s 331s exec(dynamic_attribute_read_function.replace("def ", "async def ")) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s attr_value = None 331s 331s @command 331s def add_dyn_attr(self): 331s attr = attribute( 331s name="dyn_attr", 331s dtype=int, 331s access=AttrWriteType.READ_WRITE, 331s fget=self.read_dyn_attr, 331s fset=self.write_dyn_attr, 331s ) 331s self.add_attribute(attr) 331s 331s @command 331s def delete_dyn_attr(self): 331s self.remove_attribute("dyn_attr") 331s 331s def write_dyn_attr(self, attr): 331s self.attr_value = attr.get_write_value() 331s 331s exec(dynamic_attribute_read_function) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:918: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________ test_read_write_dynamic_attribute[high_level_read-Asyncio] __________ 331s dynamic_attribute_read_function = 'def read_dyn_attr(self, attr):\n return self.attr_value\n' 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_dynamic_attribute( 331s dynamic_attribute_read_function, server_green_mode 331s ): 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s attr_value = None 331s 331s @command 331s async def add_dyn_attr(self): 331s attr = attribute( 331s name="dyn_attr", 331s dtype=int, 331s access=AttrWriteType.READ_WRITE, 331s fget=self.read_dyn_attr, 331s fset=self.write_dyn_attr, 331s ) 331s await self.async_add_attribute(attr) 331s 331s @command 331s async def delete_dyn_attr(self): 331s await self.async_remove_attribute("dyn_attr") 331s 331s async def write_dyn_attr(self, attr): 331s self.attr_value = attr.get_write_value() 331s 331s exec(dynamic_attribute_read_function.replace("def ", "async def ")) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s attr_value = None 331s 331s @command 331s def add_dyn_attr(self): 331s attr = attribute( 331s name="dyn_attr", 331s dtype=int, 331s access=AttrWriteType.READ_WRITE, 331s fget=self.read_dyn_attr, 331s fset=self.write_dyn_attr, 331s ) 331s self.add_attribute(attr) 331s 331s @command 331s def delete_dyn_attr(self): 331s self.remove_attribute("dyn_attr") 331s 331s def write_dyn_attr(self, attr): 331s self.attr_value = attr.get_write_value() 331s 331s exec(dynamic_attribute_read_function) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:918: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ___________________ test_async_add_remove_dynamic_attribute ____________________ 331s def test_async_add_remove_dynamic_attribute(): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s 331s def __init__(self, *args, **kwargs): 331s super().__init__(*args, **kwargs) 331s self.attr_value = None 331s 331s @command 331s async def add_dyn_attr(self): 331s attr = attribute( 331s name="dyn_attr", 331s dtype=int, 331s access=AttrWriteType.READ_WRITE, 331s fget=self.read_dyn_attr, 331s fset=self.write_dyn_attr, 331s ) 331s self.add_attribute(attr) 331s 331s @command 331s async def delete_dyn_attr(self): 331s self.remove_attribute("dyn_attr") 331s 331s @command 331s async def async_add_dyn_attr(self): 331s attr = attribute( 331s name="dyn_attr", 331s dtype=int, 331s access=AttrWriteType.READ_WRITE, 331s fget=self.read_dyn_attr, 331s fset=self.write_dyn_attr, 331s ) 331s await self.async_add_attribute(attr) 331s 331s @command 331s async def async_delete_dyn_attr(self): 331s await self.async_remove_attribute("dyn_attr") 331s 331s async def write_dyn_attr(self, attr): 331s self.attr_value = attr.get_write_value() 331s 331s async def read_dyn_attr(self, attr): 331s return self.attr_value 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:970: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __ test_read_write_dynamic_attribute_decorated_methods_default_names[Asyncio] __ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_dynamic_attribute_decorated_methods_default_names( 331s server_green_mode, 331s ): 331s 331s is_allowed = True 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s attr_value = None 331s is_allowed = None 331s 331s def initialize_dynamic_attributes(self): 331s attr = attribute(name="attr", dtype=int, access=AttrWriteType.READ_WRITE) 331s self.add_attribute(attr) 331s 331s def allowed(self): 331s return is_allowed 331s 331s sync_code = textwrap.dedent( 331s """\ 331s @general_decorator 331s def read_attr(self, attr): 331s return self.attr_value 331s 331s @general_decorator 331s def write_attr(self, attr): 331s self.attr_value = attr.get_write_value() 331s 331s @general_decorator 331s def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self.allowed() 331s """ 331s ) 331s 331s if server_green_mode != GreenMode.Asyncio: 331s exec(sync_code) 331s else: 331s exec( 331s sync_code.replace("def ", "async def ").replace( 331s "general_decorator", "general_asyncio_decorator" 331s ) 331s ) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:1291: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ___ test_read_write_dynamic_attribute_decorated_methods_user_names[Asyncio] ____ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_dynamic_attribute_decorated_methods_user_names(server_green_mode): 331s 331s is_allowed = True 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s attr_value = None 331s is_allowed = None 331s 331s def initialize_dynamic_attributes(self): 331s attr = attribute( 331s name="attr", 331s dtype=int, 331s access=AttrWriteType.READ_WRITE, 331s fget=self.user_read, 331s fset=self.user_write, 331s fisallowed=self.user_is_allowed, 331s ) 331s self.add_attribute(attr) 331s 331s def allowed(self): 331s return is_allowed 331s 331s sync_code = textwrap.dedent( 331s """\ 331s @general_decorator 331s def user_read(self, attr): 331s return self.attr_value 331s 331s @general_decorator 331s def user_write(self, attr): 331s self.attr_value = attr.get_write_value() 331s 331s @general_decorator 331s def user_is_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self.allowed() 331s """ 331s ) 331s 331s if server_green_mode != GreenMode.Asyncio: 331s exec(sync_code) 331s else: 331s exec( 331s sync_code.replace("def ", "async def ").replace( 331s "general_decorator", "general_asyncio_decorator" 331s ) 331s ) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:1352: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _______ test_read_write_dynamic_attribute_is_allowed_with_async[Asyncio] _______ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_read_write_dynamic_attribute_is_allowed_with_async(server_green_mode): 331s DYN_ATTRS_END_RANGE = 9 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class BaseTestDevice(Device): 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s for att_num in range(1, DYN_ATTRS_END_RANGE): 331s setattr(self, f"attr{att_num}_allowed", yesno) 331s 331s else: 331s 331s class BaseTestDevice(Device): 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s for att_num in range(1, DYN_ATTRS_END_RANGE): 331s setattr(self, f"attr{att_num}_allowed", yesno) 331s 331s class TestDevice(BaseTestDevice): 331s green_mode = server_green_mode 331s 331s def __init__(self, *args, **kwargs): 331s super().__init__(*args, **kwargs) 331s for att_num in range(1, DYN_ATTRS_END_RANGE): 331s setattr(self, f"attr{att_num}_allowed", True) 331s for att_num in range(1, DYN_ATTRS_END_RANGE): 331s setattr(self, f"attr{att_num}_value", None) 331s 331s def initialize_dynamic_attributes(self): 331s # recommended approach: using attribute() and bound methods: 331s attr = attribute( 331s name="dyn_attr1", 331s dtype=int, 331s access=AttrWriteType.READ_WRITE, 331s fget=self.read_dyn_attr1, 331s fset=self.write_dyn_attr1, 331s fisallowed=self.is_attr1_allowed, 331s ) 331s self.add_attribute(attr) 331s 331s # not recommended: using attribute() with unbound methods: 331s attr = attribute( 331s name="dyn_attr2", 331s dtype=int, 331s access=AttrWriteType.READ_WRITE, 331s fget=TestDevice.read_dyn_attr2, 331s fset=TestDevice.write_dyn_attr2, 331s fisallowed=TestDevice.is_attr2_allowed, 331s ) 331s self.add_attribute(attr) 331s 331s # possible approach: using attribute() with method name strings: 331s attr = attribute( 331s name="dyn_attr3", 331s dtype=int, 331s access=AttrWriteType.READ_WRITE, 331s fget="read_dyn_attr3", 331s fset="write_dyn_attr3", 331s fisallowed="is_attr3_allowed", 331s ) 331s self.add_attribute(attr) 331s 331s # old approach: using tango.AttrData with bound methods: 331s attr_name = "dyn_attr4" 331s data_info = self._get_attr_data_info() 331s dev_class = self.get_device_class() 331s attr_data = AttrData(attr_name, dev_class.get_name(), data_info) 331s self.add_attribute( 331s attr_data, 331s self.read_dyn_attr4, 331s self.write_dyn_attr4, 331s self.is_attr4_allowed, 331s ) 331s 331s # old approach: using tango.AttrData with unbound methods: 331s attr_name = "dyn_attr5" 331s attr_data = AttrData(attr_name, dev_class.get_name(), data_info) 331s self.add_attribute( 331s attr_data, 331s TestDevice.read_dyn_attr5, 331s TestDevice.write_dyn_attr5, 331s TestDevice.is_attr5_allowed, 331s ) 331s 331s # old approach: using tango.AttrData with default method names 331s attr_name = "dyn_attr6" 331s attr_data = AttrData(attr_name, dev_class.get_name(), data_info) 331s self.add_attribute(attr_data) 331s 331s # old approach: using tango.AttrData filled from dictionary 331s attr_name = "dyn_attr7" 331s d = { 331s "name": attr_name, 331s "class_name": dev_class.get_name(), 331s # not setting access explicitly 331s "fread": "read_dyn_attr7", 331s "fwrite": "write_dyn_attr7", 331s "fisallowed": self.is_attr7_allowed, 331s } 331s attr_data = AttrData.from_dict(d) 331s self.add_attribute(attr_data) 331s 331s # not recommened: implicit access level 331s attr = attribute( 331s name="dyn_attr8", 331s fset=self.write_dyn_attr8, 331s fisallowed=self.is_attr8_allowed, 331s ) 331s self.add_attribute(attr) 331s 331s def _get_attr_data_info(self): 331s simple_type, fmt = get_tango_type_format(int) 331s data_info = [[simple_type, fmt, READ_WRITE]] 331s return data_info 331s 331s # the following methods are written in plain text which looks 331s # weird. This is done so that it is easy to change for async 331s # tests without duplicating all the code. 331s read_code = textwrap.dedent( 331s """ 331s def read_dyn_attr(self, attr): 331s return self.attr_value 331s """ 331s ) 331s 331s write_code = textwrap.dedent( 331s """ 331s def write_dyn_attr(self, attr): 331s self.attr_value = attr.get_write_value() 331s """ 331s ) 331s 331s is_allowed_code = textwrap.dedent( 331s """ 331s def is_attr_allowed(self, req_type): 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return self.attr_allowed 331s """ 331s ) 331s 331s for attr_num in range(1, DYN_ATTRS_END_RANGE): 331s read_method = read_code.replace("read_dyn_attr", f"read_dyn_attr{attr_num}") 331s read_method = read_method.replace("attr_value", f"attr{attr_num}_value") 331s write_method = write_code.replace( 331s "write_dyn_attr", f"write_dyn_attr{attr_num}" 331s ) 331s write_method = write_method.replace("attr_value", f"attr{attr_num}_value") 331s if attr_num != 6: 331s is_allowed_method = is_allowed_code.replace( 331s "is_attr_allowed", f"is_attr{attr_num}_allowed" 331s ) 331s else: 331s # default name differs 331s is_allowed_method = is_allowed_code.replace( 331s "is_attr_allowed", f"is_dyn_attr{attr_num}_allowed" 331s ) 331s is_allowed_method = is_allowed_method.replace( 331s "self.attr_allowed", f"self.attr{attr_num}_allowed" 331s ) 331s 331s if server_green_mode != GreenMode.Asyncio: 331s exec(read_method) 331s exec(write_method) 331s exec(is_allowed_method) 331s else: 331s exec(read_method.replace("def ", "async def ")) 331s exec(write_method.replace("def ", "async def ")) 331s exec(is_allowed_method.replace("def ", "async def ")) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:1702: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _____________ test_dynamic_attribute_with_green_mode[Asyncio-True] _____________ 331s use_green_mode = True, server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s @pytest.mark.parametrize("use_green_mode", [True, False]) 331s def test_dynamic_attribute_with_green_mode(use_green_mode, server_green_mode): 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s attr_value = 123 331s 331s def initialize_dynamic_attributes(self): 331s global executor 331s executor = get_executor(server_green_mode) 331s attr = attribute( 331s name="attr_r", 331s dtype=int, 331s access=AttrWriteType.READ, 331s fget=self.user_read, 331s read_green_mode=use_green_mode, 331s ) 331s self.add_attribute(attr) 331s attr = attribute( 331s name="attr_rw", 331s dtype=int, 331s access=AttrWriteType.READ_WRITE, 331s fget=self.user_read, 331s fset=self.user_write, 331s read_green_mode=use_green_mode, 331s write_green_mode=use_green_mode, 331s ) 331s self.add_attribute(attr) 331s attr = attribute( 331s name="attr_ia", 331s dtype=int, 331s access=AttrWriteType.READ, 331s fget=self.user_read, 331s fisallowed=self.user_is_allowed, 331s read_green_mode=use_green_mode, 331s isallowed_green_mode=use_green_mode, 331s ) 331s self.add_attribute(attr) 331s attr = attribute( 331s name="attr_rw_always_ok", 331s dtype=int, 331s access=AttrWriteType.READ_WRITE, 331s fget=self.user_read, 331s fset=self.user_write, 331s green_mode=True, 331s ) 331s self.add_attribute(attr) 331s 331s sync_code = textwrap.dedent( 331s """ 331s def user_read(self, attr): 331s self.assert_executor_context_correct(attr.get_name()) 331s return self.attr_value 331s 331s def user_write(self, attr): 331s self.assert_executor_context_correct(attr.get_name()) 331s self.attr_value = attr.get_write_value() 331s 331s def user_is_allowed(self, req_type): 331s self.assert_executor_context_correct() 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return True 331s 331s """ 331s ) 331s 331s def assert_executor_context_correct(self, attr_name=""): 331s check_required = attr_name != "attr_rw_always_ok" 331s if check_required and executor.asynchronous: 331s assert executor.in_executor_context() == use_green_mode 331s 331s if server_green_mode == GreenMode.Asyncio and use_green_mode: 331s exec(sync_code.replace("def", "async def")) 331s else: 331s exec(sync_code) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:1799: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ____________ test_dynamic_attribute_with_green_mode[Asyncio-False] _____________ 331s use_green_mode = False, server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s @pytest.mark.parametrize("use_green_mode", [True, False]) 331s def test_dynamic_attribute_with_green_mode(use_green_mode, server_green_mode): 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s attr_value = 123 331s 331s def initialize_dynamic_attributes(self): 331s global executor 331s executor = get_executor(server_green_mode) 331s attr = attribute( 331s name="attr_r", 331s dtype=int, 331s access=AttrWriteType.READ, 331s fget=self.user_read, 331s read_green_mode=use_green_mode, 331s ) 331s self.add_attribute(attr) 331s attr = attribute( 331s name="attr_rw", 331s dtype=int, 331s access=AttrWriteType.READ_WRITE, 331s fget=self.user_read, 331s fset=self.user_write, 331s read_green_mode=use_green_mode, 331s write_green_mode=use_green_mode, 331s ) 331s self.add_attribute(attr) 331s attr = attribute( 331s name="attr_ia", 331s dtype=int, 331s access=AttrWriteType.READ, 331s fget=self.user_read, 331s fisallowed=self.user_is_allowed, 331s read_green_mode=use_green_mode, 331s isallowed_green_mode=use_green_mode, 331s ) 331s self.add_attribute(attr) 331s attr = attribute( 331s name="attr_rw_always_ok", 331s dtype=int, 331s access=AttrWriteType.READ_WRITE, 331s fget=self.user_read, 331s fset=self.user_write, 331s green_mode=True, 331s ) 331s self.add_attribute(attr) 331s 331s sync_code = textwrap.dedent( 331s """ 331s def user_read(self, attr): 331s self.assert_executor_context_correct(attr.get_name()) 331s return self.attr_value 331s 331s def user_write(self, attr): 331s self.assert_executor_context_correct(attr.get_name()) 331s self.attr_value = attr.get_write_value() 331s 331s def user_is_allowed(self, req_type): 331s self.assert_executor_context_correct() 331s assert req_type in (AttReqType.READ_REQ, AttReqType.WRITE_REQ) 331s return True 331s 331s """ 331s ) 331s 331s def assert_executor_context_correct(self, attr_name=""): 331s check_required = attr_name != "attr_rw_always_ok" 331s if check_required and executor.asynchronous: 331s assert executor.in_executor_context() == use_green_mode 331s 331s if server_green_mode == GreenMode.Asyncio and use_green_mode: 331s exec(sync_code.replace("def", "async def")) 331s else: 331s exec(sync_code) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:1799: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ______________________ test_attribute_decorators[Asyncio] ______________________ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_attribute_decorators(server_green_mode): 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class BaseTestDevice(Device): 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self.is_allowed = yesno 331s 331s else: 331s 331s class BaseTestDevice(Device): 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self.is_allowed = yesno 331s 331s class TestDevice(BaseTestDevice): 331s green_mode = server_green_mode 331s current_value = None 331s voltage_value = None 331s is_allowed = None 331s 331s current = attribute(label="Current", unit="mA", dtype=float) 331s voltage = attribute(label="Voltage", unit="V", dtype=float) 331s 331s sync_code = textwrap.dedent( 331s """ 331s @current.getter 331s def cur_read(self): 331s return self.current_value 331s 331s @current.setter 331s def cur_write(self, current): 331s self.current_value = current 331s 331s @current.is_allowed 331s def cur_allo(self, req_type): 331s return self.is_allowed 331s 331s @voltage.read 331s def vol_read(self): 331s return self.voltage_value 331s 331s @voltage.write 331s def vol_write(self, voltage): 331s self.voltage_value = voltage 331s 331s @voltage.is_allowed 331s def vol_allo(self, req_type): 331s return self.is_allowed 331s """ 331s ) 331s 331s if server_green_mode == GreenMode.Asyncio: 331s exec(sync_code.replace("def ", "async def ")) 331s else: 331s exec(sync_code) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:2013: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ________________________ test_polled_attribute[Asyncio] ________________________ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_polled_attribute(server_green_mode): 331s dct = {"PolledAttribute1": 100, "PolledAttribute2": 100000, "PolledAttribute3": 500} 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @attribute(polling_period=dct["PolledAttribute1"]) 331s def PolledAttribute1(self): 331s return 42.0 331s 331s @attribute(polling_period=dct["PolledAttribute2"]) 331s def PolledAttribute2(self): 331s return 43.0 331s 331s @attribute(polling_period=dct["PolledAttribute3"]) 331s def PolledAttribute3(self): 331s return 44.0 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_attributes.py:2164: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ______________________ test_identity_command[int-Asyncio] ______________________ 331s command_typed_values = (, (1, 2, -65535, 23), . at 0x71b2d4548720>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_identity_command(command_typed_values, server_green_mode): 331s dtype, values, expected = command_typed_values 331s 331s if dtype == (bool,): 331s pytest.xfail("Not supported for some reasons") 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s async def identity(self, arg): 331s return arg 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s def identity(self, arg): 331s return arg 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_commands.py:57: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _____________________ test_identity_command[float-Asyncio] _____________________ 331s command_typed_values = (, (2.71, 3.14, -3.4678e-09, 1.2678e+16), . at 0x71b2d4548d50>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_identity_command(command_typed_values, server_green_mode): 331s dtype, values, expected = command_typed_values 331s 331s if dtype == (bool,): 331s pytest.xfail("Not supported for some reasons") 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s async def identity(self, arg): 331s return arg 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s def identity(self, arg): 331s return arg 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_commands.py:57: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ______________________ test_identity_command[str-Asyncio] ______________________ 331s 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 0x71b2d4549380>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_identity_command(command_typed_values, server_green_mode): 331s dtype, values, expected = command_typed_values 331s 331s if dtype == (bool,): 331s pytest.xfail("Not supported for some reasons") 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s async def identity(self, arg): 331s return arg 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s def identity(self, arg): 331s return arg 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_commands.py:57: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _____________________ test_identity_command[bool-Asyncio] ______________________ 331s command_typed_values = (, (False, True, True, False), . at 0x71b2d45499b0>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_identity_command(command_typed_values, server_green_mode): 331s dtype, values, expected = command_typed_values 331s 331s if dtype == (bool,): 331s pytest.xfail("Not supported for some reasons") 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s async def identity(self, arg): 331s return arg 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s def identity(self, arg): 331s return arg 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_commands.py:57: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ____________________ test_identity_command[(int,)-Asyncio] _____________________ 331s command_typed_values = ((,), (array([1, 2]), (1, 2, 3), [9, 8, 7], [-65535, 2224], [0, 0]), . at 0x71b2d4549fe0>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_identity_command(command_typed_values, server_green_mode): 331s dtype, values, expected = command_typed_values 331s 331s if dtype == (bool,): 331s pytest.xfail("Not supported for some reasons") 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s async def identity(self, arg): 331s return arg 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s def identity(self, arg): 331s return arg 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_commands.py:57: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ___________________ test_identity_command[(float,)-Asyncio] ____________________ 331s 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 0x71b2d454a610>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_identity_command(command_typed_values, server_green_mode): 331s dtype, values, expected = command_typed_values 331s 331s if dtype == (bool,): 331s pytest.xfail("Not supported for some reasons") 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s async def identity(self, arg): 331s return arg 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s def identity(self, arg): 331s return arg 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_commands.py:57: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ____________________ test_identity_command[(str,)-Asyncio] _____________________ 331s command_typed_values = ((,), (array(['foo', 'bar'], dtype='. at 0x71b2d454ac40>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_identity_command(command_typed_values, server_green_mode): 331s dtype, values, expected = command_typed_values 331s 331s if dtype == (bool,): 331s pytest.xfail("Not supported for some reasons") 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s async def identity(self, arg): 331s return arg 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s def identity(self, arg): 331s return arg 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_commands.py:57: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _____________ test_identity_command[DevVarLongStringArray-Asyncio] _____________ 331s command_typed_values = (tango._tango.CmdArgType.DevVarLongStringArray, ([[1, 2, 3], ['foo', 'bar', 'hmm']],), . at 0x71b2d454b8a0>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_identity_command(command_typed_values, server_green_mode): 331s dtype, values, expected = command_typed_values 331s 331s if dtype == (bool,): 331s pytest.xfail("Not supported for some reasons") 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s async def identity(self, arg): 331s return arg 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s def identity(self, arg): 331s return arg 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_commands.py:57: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ____________ test_identity_command[DevVarDoubleStringArray-Asyncio] ____________ 331s command_typed_values = (tango._tango.CmdArgType.DevVarDoubleStringArray, ([[1.1, 2.2, 3.3], ['foo', 'bar', 'hmm']],), . at 0x71b2d454bed0>) 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_identity_command(command_typed_values, server_green_mode): 331s dtype, values, expected = command_typed_values 331s 331s if dtype == (bool,): 331s pytest.xfail("Not supported for some reasons") 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s async def identity(self, arg): 331s return arg 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @command(dtype_in=dtype, dtype_out=dtype) 331s def identity(self, arg): 331s return arg 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_commands.py:57: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _______________________ test_decorated_command[Asyncio] ________________________ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_decorated_command(server_green_mode): 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s is_allowed = None 331s 331s @command(dtype_in=int, dtype_out=int) 331s @general_asyncio_decorator() 331s async def identity(self, arg): 331s return arg 331s 331s @general_asyncio_decorator 331s async def is_identity_allowed(self): 331s return self.is_allowed 331s 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self.is_allowed = yesno 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s is_allowed = None 331s 331s @command(dtype_in=int, dtype_out=int) 331s @general_decorator() 331s def identity(self, arg): 331s return arg 331s 331s @general_decorator 331s def is_identity_allowed(self): 331s return self.is_allowed 331s 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self.is_allowed = yesno 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_commands.py:158: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _______________________ test_command_isallowed[Asyncio] ________________________ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_command_isallowed(server_green_mode): 331s is_allowed = None 331s 331s def sync_allowed(device): 331s assert isinstance(device, TestDevice) 331s return is_allowed 331s 331s async def async_allowed(device): 331s assert isinstance(device, TestDevice) 331s return is_allowed 331s 331s class IsAllowedCallableClass: 331s def __init__(self): 331s self._is_allowed = None 331s 331s def __call__(self, device): 331s assert isinstance(device, TestDevice) 331s return self._is_allowed 331s 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s is_allowed_callable_class = IsAllowedCallableClass() 331s 331s class AsyncIsAllowedCallableClass(IsAllowedCallableClass): 331s async def __call__(self, device): 331s assert isinstance(device, TestDevice) 331s return self._is_allowed 331s 331s async_is_allowed_callable_class = AsyncIsAllowedCallableClass() 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def __init__(self, *args, **kwargs): 331s super().__init__(*args, **kwargs) 331s self._is_allowed = True 331s 331s @command(dtype_in=int, dtype_out=int) 331s async def identity(self, arg): 331s return arg 331s 331s @command(dtype_in=int, dtype_out=int, fisallowed="is_identity_allowed") 331s async def identity_kwarg_string(self, arg): 331s return arg 331s 331s @command( 331s dtype_in=int, 331s dtype_out=int, 331s fisallowed=async_allowed, 331s ) 331s async def identity_kwarg_callable(self, arg): 331s return arg 331s 331s @command( 331s dtype_in=int, dtype_out=int, fisallowed=async_is_allowed_callable_class 331s ) 331s async def identity_kwarg_callable_class(self, arg): 331s return arg 331s 331s @command(dtype_in=int, dtype_out=int) 331s async def identity_always_allowed(self, arg): 331s return arg 331s 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s async def is_identity_allowed(self): 331s return self._is_allowed 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def __init__(self, *args, **kwargs): 331s super().__init__(*args, **kwargs) 331s self._is_allowed = True 331s 331s @command(dtype_in=int, dtype_out=int) 331s def identity(self, arg): 331s return arg 331s 331s @command(dtype_in=int, dtype_out=int, fisallowed="is_identity_allowed") 331s def identity_kwarg_string(self, arg): 331s return arg 331s 331s @command(dtype_in=int, dtype_out=int, fisallowed=sync_allowed) 331s def identity_kwarg_callable(self, arg): 331s return arg 331s 331s @command(dtype_in=int, dtype_out=int, fisallowed=is_allowed_callable_class) 331s def identity_kwarg_callable_class(self, arg): 331s return arg 331s 331s @command(dtype_in=int, dtype_out=int) 331s def identity_always_allowed(self, arg): 331s return arg 331s 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s def is_identity_allowed(self): 331s return self._is_allowed 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_commands.py:276: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ______________________ test_dynamic_command[Asyncio-True] ______________________ 331s device_command_level = True, server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s @pytest.mark.parametrize("device_command_level", [True, False]) 331s def test_dynamic_command(device_command_level, server_green_mode): 331s is_allowed = None 331s 331s def sync_allowed(device): 331s assert isinstance(device, TestDevice) 331s return is_allowed 331s 331s async def async_allowed(device): 331s assert isinstance(device, TestDevice) 331s return is_allowed 331s 331s class IsAllowedCallable: 331s def __init__(self): 331s self._is_allowed = None 331s 331s def __call__(self, device): 331s assert isinstance(device, TestDevice) 331s return self._is_allowed 331s 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s class AsyncIsAllowedCallable(IsAllowedCallable): 331s async def __call__(self, device): 331s assert isinstance(device, TestDevice) 331s return self._is_allowed 331s 331s is_allowed_callable_class = IsAllowedCallable() 331s async_is_allowed_callable_class = AsyncIsAllowedCallable() 331s 331s class BaseTestDevice(Device): 331s green_mode = server_green_mode 331s 331s def __init__(self, *args, **kwargs): 331s super().__init__(*args, **kwargs) 331s self._is_allowed = True 331s 331s def _add_dyn_cmd(self): 331s cmd = command(f=self.identity, dtype_in=int, dtype_out=int) 331s self.add_command(cmd, device_command_level) 331s 331s cmd = command( 331s f=self.identity_kwarg_string, 331s dtype_in=int, 331s dtype_out=int, 331s fisallowed="is_identity_allowed", 331s ) 331s self.add_command(cmd, device_command_level) 331s 331s cmd = command( 331s f=self.identity_kwarg_callable, 331s dtype_in=int, 331s dtype_out=int, 331s fisallowed=self.is_identity_allowed, 331s ) 331s self.add_command(cmd, device_command_level) 331s 331s cmd = command( 331s f=self.identity_kwarg_callable_outside_class, 331s dtype_in=int, 331s dtype_out=int, 331s fisallowed=( 331s sync_allowed 331s if server_green_mode != GreenMode.Asyncio 331s else async_allowed 331s ), 331s ) 331s self.add_command(cmd, device_command_level) 331s 331s cmd = command( 331s f=self.identity_kwarg_callable_class, 331s dtype_in=int, 331s dtype_out=int, 331s fisallowed=( 331s is_allowed_callable_class 331s if server_green_mode != GreenMode.Asyncio 331s else async_is_allowed_callable_class 331s ), 331s ) 331s self.add_command(cmd, device_command_level) 331s 331s cmd = command(f=self.identity_always_allowed, dtype_in=int, dtype_out=int) 331s self.add_command(cmd, device_command_level) 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(BaseTestDevice): 331s async def identity(self, arg): 331s return arg 331s 331s async def identity_kwarg_string(self, arg): 331s return arg 331s 331s async def identity_kwarg_callable(self, arg): 331s return arg 331s 331s async def identity_kwarg_callable_outside_class(self, arg): 331s return arg 331s 331s async def identity_kwarg_callable_class(self, arg): 331s return arg 331s 331s async def identity_always_allowed(self, arg): 331s return arg 331s 331s @command() 331s async def add_dyn_cmd(self): 331s self._add_dyn_cmd() 331s 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s async def is_identity_allowed(self): 331s return self._is_allowed 331s 331s else: 331s 331s class TestDevice(BaseTestDevice): 331s def identity(self, arg): 331s return arg 331s 331s def identity_kwarg_string(self, arg): 331s return arg 331s 331s def identity_kwarg_callable(self, arg): 331s return arg 331s 331s def identity_kwarg_callable_outside_class(self, arg): 331s return arg 331s 331s def identity_kwarg_callable_class(self, arg): 331s return arg 331s 331s def identity_always_allowed(self, arg): 331s return arg 331s 331s @command() 331s def add_dyn_cmd(self): 331s self._add_dyn_cmd() 331s 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s def is_identity_allowed(self): 331s return self._is_allowed 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_commands.py:457: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _____________________ test_dynamic_command[Asyncio-False] ______________________ 331s device_command_level = False, server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s @pytest.mark.parametrize("device_command_level", [True, False]) 331s def test_dynamic_command(device_command_level, server_green_mode): 331s is_allowed = None 331s 331s def sync_allowed(device): 331s assert isinstance(device, TestDevice) 331s return is_allowed 331s 331s async def async_allowed(device): 331s assert isinstance(device, TestDevice) 331s return is_allowed 331s 331s class IsAllowedCallable: 331s def __init__(self): 331s self._is_allowed = None 331s 331s def __call__(self, device): 331s assert isinstance(device, TestDevice) 331s return self._is_allowed 331s 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s class AsyncIsAllowedCallable(IsAllowedCallable): 331s async def __call__(self, device): 331s assert isinstance(device, TestDevice) 331s return self._is_allowed 331s 331s is_allowed_callable_class = IsAllowedCallable() 331s async_is_allowed_callable_class = AsyncIsAllowedCallable() 331s 331s class BaseTestDevice(Device): 331s green_mode = server_green_mode 331s 331s def __init__(self, *args, **kwargs): 331s super().__init__(*args, **kwargs) 331s self._is_allowed = True 331s 331s def _add_dyn_cmd(self): 331s cmd = command(f=self.identity, dtype_in=int, dtype_out=int) 331s self.add_command(cmd, device_command_level) 331s 331s cmd = command( 331s f=self.identity_kwarg_string, 331s dtype_in=int, 331s dtype_out=int, 331s fisallowed="is_identity_allowed", 331s ) 331s self.add_command(cmd, device_command_level) 331s 331s cmd = command( 331s f=self.identity_kwarg_callable, 331s dtype_in=int, 331s dtype_out=int, 331s fisallowed=self.is_identity_allowed, 331s ) 331s self.add_command(cmd, device_command_level) 331s 331s cmd = command( 331s f=self.identity_kwarg_callable_outside_class, 331s dtype_in=int, 331s dtype_out=int, 331s fisallowed=( 331s sync_allowed 331s if server_green_mode != GreenMode.Asyncio 331s else async_allowed 331s ), 331s ) 331s self.add_command(cmd, device_command_level) 331s 331s cmd = command( 331s f=self.identity_kwarg_callable_class, 331s dtype_in=int, 331s dtype_out=int, 331s fisallowed=( 331s is_allowed_callable_class 331s if server_green_mode != GreenMode.Asyncio 331s else async_is_allowed_callable_class 331s ), 331s ) 331s self.add_command(cmd, device_command_level) 331s 331s cmd = command(f=self.identity_always_allowed, dtype_in=int, dtype_out=int) 331s self.add_command(cmd, device_command_level) 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(BaseTestDevice): 331s async def identity(self, arg): 331s return arg 331s 331s async def identity_kwarg_string(self, arg): 331s return arg 331s 331s async def identity_kwarg_callable(self, arg): 331s return arg 331s 331s async def identity_kwarg_callable_outside_class(self, arg): 331s return arg 331s 331s async def identity_kwarg_callable_class(self, arg): 331s return arg 331s 331s async def identity_always_allowed(self, arg): 331s return arg 331s 331s @command() 331s async def add_dyn_cmd(self): 331s self._add_dyn_cmd() 331s 331s @command(dtype_in=bool) 331s async def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s async def is_identity_allowed(self): 331s return self._is_allowed 331s 331s else: 331s 331s class TestDevice(BaseTestDevice): 331s def identity(self, arg): 331s return arg 331s 331s def identity_kwarg_string(self, arg): 331s return arg 331s 331s def identity_kwarg_callable(self, arg): 331s return arg 331s 331s def identity_kwarg_callable_outside_class(self, arg): 331s return arg 331s 331s def identity_kwarg_callable_class(self, arg): 331s return arg 331s 331s def identity_always_allowed(self, arg): 331s return arg 331s 331s @command() 331s def add_dyn_cmd(self): 331s self._add_dyn_cmd() 331s 331s @command(dtype_in=bool) 331s def make_allowed(self, yesno): 331s self._is_allowed = yesno 331s 331s def is_identity_allowed(self): 331s return self._is_allowed 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_commands.py:457: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _______________________ test_high_level_api_for_asyncio ________________________ 331s tango_test = TangoTest(sys/tg_test/17) 331s 331s @pytest.mark.asyncio 331s async def test_high_level_api_for_asyncio(tango_test): 331s tango_test.set_green_mode(GreenMode.Asyncio) 331s > _ = await tango_test.long_scalar 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_device_proxy.py:234: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/device_proxy.py:387: in __async_get_attribute_value 331s attr_value = await self.read_attribute(name) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 331s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ---------------------------- Captured stdout setup ----------------------------- 331s Ready to accept request 331s _________________________ test_repr_uses_info[Asyncio] _________________________ 331s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 331s simple_device_fqdn = 'tango://127.0.0.1:60301/test/nodb/testdevice#dbase=no' 331s 331s def test_repr_uses_info(green_mode_device_proxy, simple_device_fqdn): 331s > proxy = green_mode_device_proxy(simple_device_fqdn) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_device_proxy.py:578: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 331s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ---------------------------- Captured stdout setup ----------------------------- 331s Ready to accept request 331s ---------------------------- Captured stderr setup ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ________________ test_repr_default_if_info_unavailable[Asyncio] ________________ 331s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 331s simple_device_fqdn = 'tango://127.0.0.1:37757/test/nodb/testdevice#dbase=no' 331s 331s def test_repr_default_if_info_unavailable(green_mode_device_proxy, simple_device_fqdn): 331s > proxy = green_mode_device_proxy(simple_device_fqdn) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_device_proxy.py:583: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 331s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ---------------------------- Captured stdout setup ----------------------------- 331s Ready to accept request 331s ---------------------------- Captured stderr setup ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ____________ test_multiple_repr_calls_only_call_info_once[Asyncio] _____________ 331s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 331s simple_device_fqdn = 'tango://127.0.0.1:42491/test/nodb/testdevice#dbase=no' 331s 331s def test_multiple_repr_calls_only_call_info_once( 331s green_mode_device_proxy, simple_device_fqdn 331s ): 331s > proxy = green_mode_device_proxy(simple_device_fqdn) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_device_proxy.py:596: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 331s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ---------------------------- Captured stdout setup ----------------------------- 331s Ready to accept request 331s ---------------------------- Captured stderr setup ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ____________________ test_no_memory_leak_for_repr[Asyncio] _____________________ 331s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 331s simple_device_fqdn = 'tango://127.0.0.1:32791/test/nodb/testdevice#dbase=no' 331s 331s def test_no_memory_leak_for_repr(green_mode_device_proxy, simple_device_fqdn): 331s > proxy = green_mode_device_proxy(simple_device_fqdn) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_device_proxy.py:613: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 331s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ---------------------------- Captured stdout setup ----------------------------- 331s Ready to accept request 331s ---------------------------- Captured stderr setup ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _____________________ test_no_memory_leak_for_str[Asyncio] _____________________ 331s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 331s simple_device_fqdn = 'tango://127.0.0.1:34871/test/nodb/testdevice#dbase=no' 331s 331s def test_no_memory_leak_for_str(green_mode_device_proxy, simple_device_fqdn): 331s > proxy = green_mode_device_proxy(simple_device_fqdn) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_device_proxy.py:625: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 331s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ---------------------------- Captured stdout setup ----------------------------- 331s Ready to accept request 331s ---------------------------- Captured stderr setup ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ____________________ test_no_cyclic_ref_for_proxy[Asyncio] _____________________ 331s green_mode_device_proxy = functools.partial(functools.partial(, green_mode=tango._tango.GreenMode.Asyncio), wait=True) 331s simple_device_fqdn = 'tango://127.0.0.1:52127/test/nodb/testdevice#dbase=no' 331s 331s def test_no_cyclic_ref_for_proxy(green_mode_device_proxy, simple_device_fqdn): 331s > proxy = green_mode_device_proxy(simple_device_fqdn) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_device_proxy.py:637: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 331s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ---------------------------- Captured stdout setup ----------------------------- 331s Ready to accept request 331s ---------------------------- Captured stderr setup ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ________________________ test_async_logging_decorators _________________________ 331s def test_async_logging_decorators(): 331s > with MultiDeviceTestContext(async_devices_info) as context: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_log.py:279: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ____________________________ test_logging[Asyncio] _____________________________ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_logging(server_green_mode): 331s log_received = threading.Event() 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class LogSourceDevice(Device): 331s green_mode = server_green_mode 331s _last_log_time = 0.0 331s 331s @command(dtype_in=("str",)) 331s async def log_fatal_message(self, msg): 331s self._last_log_time = time.time() 331s if len(msg) > 1: 331s self.fatal_stream(msg[0], msg[1]) 331s else: 331s self.fatal_stream(msg[0]) 331s 331s @command(dtype_in=("str",)) 331s async def log_error_message(self, msg): 331s self._last_log_time = time.time() 331s if len(msg) > 1: 331s self.error_stream(msg[0], msg[1]) 331s else: 331s self.error_stream(msg[0]) 331s 331s @command(dtype_in=("str",)) 331s async def log_warn_message(self, msg): 331s self._last_log_time = time.time() 331s if len(msg) > 1: 331s self.warn_stream(msg[0], msg[1]) 331s else: 331s self.warn_stream(msg[0]) 331s 331s @command(dtype_in=("str",)) 331s async def log_info_message(self, msg): 331s self._last_log_time = time.time() 331s if len(msg) > 1: 331s self.info_stream(msg[0], msg[1]) 331s else: 331s self.info_stream(msg[0]) 331s 331s @command(dtype_in=("str",)) 331s async def log_debug_message(self, msg): 331s self._last_log_time = time.time() 331s if len(msg) > 1: 331s self.debug_stream(msg[0], msg[1]) 331s else: 331s self.debug_stream(msg[0]) 331s 331s @attribute(dtype=float) 331s async def last_log_time(self): 331s return self._last_log_time 331s 331s class LogConsumerDevice(Device): 331s green_mode = server_green_mode 331s _last_log_data = [] 331s 331s @command(dtype_in=("str",)) 331s async def Log(self, argin): 331s self._last_log_data = argin 331s log_received.set() 331s 331s @attribute(dtype=int) 331s async def last_log_timestamp_ms(self): 331s return int(self._last_log_data[0]) 331s 331s @attribute(dtype=str) 331s async def last_log_level(self): 331s return self._last_log_data[1] 331s 331s @attribute(dtype=str) 331s async def last_log_source(self): 331s return self._last_log_data[2] 331s 331s @attribute(dtype=str) 331s async def last_log_message(self): 331s return self._last_log_data[3] 331s 331s @attribute(dtype=str) 331s async def last_log_context_unused(self): 331s return self._last_log_data[4] 331s 331s @attribute(dtype=str) 331s async def last_log_thread_id(self): 331s return self._last_log_data[5] 331s 331s else: 331s 331s class LogSourceDevice(Device): 331s green_mode = server_green_mode 331s _last_log_time = 0.0 331s 331s @command(dtype_in=("str",)) 331s def log_fatal_message(self, msg): 331s self._last_log_time = time.time() 331s if len(msg) > 1: 331s self.fatal_stream(msg[0], msg[1]) 331s else: 331s self.fatal_stream(msg[0]) 331s 331s @command(dtype_in=("str",)) 331s def log_error_message(self, msg): 331s self._last_log_time = time.time() 331s if len(msg) > 1: 331s self.error_stream(msg[0], msg[1]) 331s else: 331s self.error_stream(msg[0]) 331s 331s @command(dtype_in=("str",)) 331s def log_warn_message(self, msg): 331s self._last_log_time = time.time() 331s if len(msg) > 1: 331s self.warn_stream(msg[0], msg[1]) 331s else: 331s self.warn_stream(msg[0]) 331s 331s @command(dtype_in=("str",)) 331s def log_info_message(self, msg): 331s self._last_log_time = time.time() 331s if len(msg) > 1: 331s self.info_stream(msg[0], msg[1]) 331s else: 331s self.info_stream(msg[0]) 331s 331s @command(dtype_in=("str",)) 331s def log_debug_message(self, msg): 331s self._last_log_time = time.time() 331s if len(msg) > 1: 331s self.debug_stream(msg[0], msg[1]) 331s else: 331s self.debug_stream(msg[0]) 331s 331s @attribute(dtype=float) 331s def last_log_time(self): 331s return self._last_log_time 331s 331s class LogConsumerDevice(Device): 331s green_mode = server_green_mode 331s _last_log_data = [] 331s 331s @command(dtype_in=("str",)) 331s def Log(self, argin): 331s self._last_log_data = argin 331s log_received.set() 331s 331s @attribute(dtype=int) 331s def last_log_timestamp_ms(self): 331s return int(self._last_log_data[0]) 331s 331s @attribute(dtype=str) 331s def last_log_level(self): 331s return self._last_log_data[1] 331s 331s @attribute(dtype=str) 331s def last_log_source(self): 331s return self._last_log_data[2] 331s 331s @attribute(dtype=str) 331s def last_log_message(self): 331s return self._last_log_data[3] 331s 331s @attribute(dtype=str) 331s def last_log_context_unused(self): 331s return self._last_log_data[4] 331s 331s @attribute(dtype=str) 331s def last_log_thread_id(self): 331s return self._last_log_data[5] 331s 331s def assert_log_details_correct(level, msg): 331s assert log_received.wait(0.5) 331s _assert_log_time_close_enough() 331s _assert_log_fields_correct_for_level(level, msg) 331s log_received.clear() 331s 331s def _assert_log_time_close_enough(): 331s log_emit_time = proxy_source.last_log_time 331s log_receive_time = proxy_consumer.last_log_timestamp_ms / 1000.0 331s now = time.time() 331s # cppTango logger time function may use a different 331s # implementation to CPython's time.time(). This is 331s # especially noticeable on Windows platforms. 331s timer_implementation_tolerance = 0.020 if WINDOWS else 0.001 331s min_time = log_emit_time - timer_implementation_tolerance 331s max_time = now + timer_implementation_tolerance 331s assert min_time <= log_receive_time <= max_time 331s 331s def _assert_log_fields_correct_for_level(level, msg): 331s assert proxy_consumer.last_log_level == level.upper() 331s assert proxy_consumer.last_log_source == "test/log/source" 331s assert proxy_consumer.last_log_message == msg 331s assert proxy_consumer.last_log_context_unused == "" 331s assert len(proxy_consumer.last_log_thread_id) > 0 331s 331s devices_info = ( 331s {"class": LogSourceDevice, "devices": [{"name": "test/log/source"}]}, 331s {"class": LogConsumerDevice, "devices": [{"name": "test/log/consumer"}]}, 331s ) 331s 331s > with MultiDeviceTestContext(devices_info) as context: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_log.py:528: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________________ test_empty_device[Asyncio] __________________________ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_empty_device(server_green_mode): 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:133: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ___________________ test_set_state_status[ON-Asyncio-False] ____________________ 331s state = tango._tango.DevState.ON 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ____________________ test_set_state_status[ON-Asyncio-True] ____________________ 331s state = tango._tango.DevState.ON 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ___________________ test_set_state_status[OFF-Asyncio-False] ___________________ 331s state = tango._tango.DevState.OFF 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ___________________ test_set_state_status[OFF-Asyncio-True] ____________________ 331s state = tango._tango.DevState.OFF 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________ test_set_state_status[CLOSE-Asyncio-False] __________________ 331s state = tango._tango.DevState.CLOSE 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________ test_set_state_status[CLOSE-Asyncio-True] ___________________ 331s state = tango._tango.DevState.CLOSE 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________ test_set_state_status[OPEN-Asyncio-False] ___________________ 331s state = tango._tango.DevState.OPEN 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ___________________ test_set_state_status[OPEN-Asyncio-True] ___________________ 331s state = tango._tango.DevState.OPEN 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________ test_set_state_status[INSERT-Asyncio-False] __________________ 331s state = tango._tango.DevState.INSERT 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________ test_set_state_status[INSERT-Asyncio-True] __________________ 331s state = tango._tango.DevState.INSERT 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________ test_set_state_status[EXTRACT-Asyncio-False] _________________ 331s state = tango._tango.DevState.EXTRACT 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________ test_set_state_status[EXTRACT-Asyncio-True] __________________ 331s state = tango._tango.DevState.EXTRACT 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________ test_set_state_status[MOVING-Asyncio-False] __________________ 331s state = tango._tango.DevState.MOVING 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________ test_set_state_status[MOVING-Asyncio-True] __________________ 331s state = tango._tango.DevState.MOVING 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________ test_set_state_status[STANDBY-Asyncio-False] _________________ 331s state = tango._tango.DevState.STANDBY 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________ test_set_state_status[STANDBY-Asyncio-True] __________________ 331s state = tango._tango.DevState.STANDBY 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________ test_set_state_status[FAULT-Asyncio-False] __________________ 331s state = tango._tango.DevState.FAULT 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________ test_set_state_status[FAULT-Asyncio-True] ___________________ 331s state = tango._tango.DevState.FAULT 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________ test_set_state_status[INIT-Asyncio-False] ___________________ 331s state = tango._tango.DevState.INIT 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ___________________ test_set_state_status[INIT-Asyncio-True] ___________________ 331s state = tango._tango.DevState.INIT 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________ test_set_state_status[RUNNING-Asyncio-False] _________________ 331s state = tango._tango.DevState.RUNNING 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________ test_set_state_status[RUNNING-Asyncio-True] __________________ 331s state = tango._tango.DevState.RUNNING 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________ test_set_state_status[ALARM-Asyncio-False] __________________ 331s state = tango._tango.DevState.ALARM 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________ test_set_state_status[ALARM-Asyncio-True] ___________________ 331s state = tango._tango.DevState.ALARM 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________ test_set_state_status[DISABLE-Asyncio-False] _________________ 331s state = tango._tango.DevState.DISABLE 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________ test_set_state_status[DISABLE-Asyncio-True] __________________ 331s state = tango._tango.DevState.DISABLE 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________ test_set_state_status[UNKNOWN-Asyncio-False] _________________ 331s state = tango._tango.DevState.UNKNOWN 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = False 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________ test_set_state_status[UNKNOWN-Asyncio-True] __________________ 331s state = tango._tango.DevState.UNKNOWN 331s server_green_mode = tango._tango.GreenMode.Asyncio, force_user_status = True 331s 331s @pytest.mark.parametrize("force_user_status", [False, True]) 331s def test_set_state_status(state, server_green_mode, force_user_status): 331s if force_user_status: 331s status = "\n".join( 331s ( 331s "This is a multiline status", 331s "with special characters such as", 331s "Café à la crème", 331s ) 331s ) 331s else: 331s status = f"The device is in {state!s} state." 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def init_device(self): 331s self.set_state(state) 331s if force_user_status: 331s self.set_status(status) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:215: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _____________________ test_user_dev_state_status[Asyncio] ______________________ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_user_dev_state_status(server_green_mode): 331s state = DevState.MOVING 331s status = "Device is MOVING" 331s 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s async def dev_state(self): 331s return state 331s 331s async def dev_status(self): 331s return status 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s def dev_state(self): 331s return state 331s 331s def dev_status(self): 331s return status 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:246: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ________________ test_attr_quality_checked_with_state[Asyncio] _________________ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_attr_quality_checked_with_state(server_green_mode): 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class BaseTestDevice(Device): 331s @command(dtype_out=bool) 331s async def check_sub_function_was_called(self): 331s return ( 331s self.read_attr_hardware_was_called 331s and self.always_executed_hook_was_called 331s ) 331s 331s else: 331s 331s class BaseTestDevice(Device): 331s @command(dtype_out=bool) 331s def check_sub_function_was_called(self): 331s return ( 331s self.read_attr_hardware_was_called 331s and self.always_executed_hook_was_called 331s ) 331s 331s class TestDevice(BaseTestDevice): 331s green_mode = server_green_mode 331s 331s read_attr_hardware_was_called = False 331s always_executed_hook_was_called = False 331s 331s sync_code = textwrap.dedent( 331s """ 331s def init_device(self): 331s Device.init_device(self) 331s self.set_state(DevState.ON) 331s 331s def read_attr_hardware(self, attr_list): 331s self.read_attr_hardware_was_called = True 331s return Device.read_attr_hardware(self, attr_list) 331s 331s def always_executed_hook(self): 331s self.always_executed_hook_was_called = True 331s 331s @attribute(max_alarm=0) 331s def test_attribute(self): 331s return 42 331s """ 331s ) 331s 331s if server_green_mode == GreenMode.Asyncio: 331s exec( 331s sync_code.replace("def", "async def").replace("Device", "await Device") 331s ) 331s else: 331s exec(sync_code) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:304: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _____________________ test_device_get_attr_config[Asyncio] _____________________ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_device_get_attr_config(server_green_mode): 331s class TestDevice(Device): 331s # green mode matters to check deadlocks in async modes 331s green_mode = server_green_mode 331s 331s sync_code = textwrap.dedent( 331s """ 331s @attribute(dtype=bool) 331s def attr_config_ok(self): 331s # testing that call to get_attribute_config for all types of 331s # input arguments gives same result and doesn't raise an exception 331s ac1 = self.get_attribute_config(b"attr_config_ok") 331s ac2 = self.get_attribute_config("attr_config_ok") 331s ac3 = self.get_attribute_config(["attr_config_ok"]) 331s return repr(ac1) == repr(ac2) == repr(ac3) 331s """ 331s ) 331s 331s if server_green_mode == GreenMode.Asyncio: 331s exec(sync_code.replace("def", "async def")) 331s else: 331s exec(sync_code) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:332: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _____________________ test_device_set_attr_config[Asyncio] _____________________ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_device_set_attr_config(server_green_mode): 331s class TestDevice(Device): 331s # green mode matters to check deadlocks in async modes 331s green_mode = server_green_mode 331s 331s sync_code = textwrap.dedent( 331s """ 331s @attribute(dtype=int) 331s def attr(self): 331s attr_config = self.get_attribute_config("attr") 331s attr_config[0].min_value = "-7" 331s attr_config[0].min_alarm = "-6" 331s 331s attr_config[0].max_alarm = "6" 331s attr_config[0].max_value = "7" 331s 331s self.set_attribute_config(attr_config) 331s assert repr(attr_config) == repr(self.get_attribute_config("attr")) 331s 331s with pytest.warns(PyTangoUserWarning, match="is not supported by Tango IDL"): 331s attr_config[0].lala = "7" 331s 331s attr_config = self.get_attribute_config_3("attr") 331s attr_config[0].min_value = "-5" 331s attr_config[0].att_alarm.min_alarm = "-4" 331s attr_config[0].att_alarm.min_warning = "-3" 331s 331s attr_config[0].att_alarm.max_warning = "3" 331s attr_config[0].att_alarm.max_alarm = "4" 331s attr_config[0].max_value = "5" 331s 331s self.set_attribute_config_3(attr_config) 331s assert repr(attr_config) == repr(self.get_attribute_config_3("attr")) 331s 331s with pytest.warns(PyTangoUserWarning, match="is not supported by Tango IDL"): 331s attr_config[0].lala = "7" 331s 331s attr = self.get_device_attr().get_attr_by_name("attr") 331s 331s val = -2 331s for f in ["min_alarm", "min_warning", "max_warning", "max_alarm"]: 331s getattr(attr, f"set_{f}")(val) 331s assert val == getattr(attr, f"get_{f}")() 331s val += 1 331s 331s return 1 331s """ 331s ) 331s 331s if server_green_mode == GreenMode.Asyncio: 331s exec(sync_code.replace("def", "async def")) 331s else: 331s exec(sync_code) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:390: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _____________________ test_exception_propagation[Asyncio] ______________________ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_exception_propagation(server_green_mode): 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @attribute 331s async def attr(self): 331s 1 / 0 # pylint: disable=pointless-statement 331s 331s @command 331s async def cmd(self): 331s 1 / 0 # pylint: disable=pointless-statement 331s 331s else: 331s 331s class TestDevice(Device): 331s green_mode = server_green_mode 331s 331s @attribute 331s def attr(self): 331s 1 / 0 # pylint: disable=pointless-statement 331s 331s @command 331s def cmd(self): 331s 1 / 0 # pylint: disable=pointless-statement 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:873: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________ test_asyncio_server_init_hook_change_state __________________ 331s def test_asyncio_server_init_hook_change_state(): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s 331s async def server_init_hook(self): 331s await asyncio.sleep(0.01) 331s self.set_state(DevState.ON) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:959: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ________________ test_async_server_init_hook_called_after_init _________________ 331s def test_async_server_init_hook_called_after_init(): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s 331s async def init_device(self): 331s await asyncio.sleep(0.01) 331s self.set_state(DevState.INIT) 331s 331s async def server_init_hook(self): 331s await asyncio.sleep(0.01) 331s self.set_state(DevState.ON) 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:987: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ___________________ test_asyncio_server_init_hook_exception ____________________ 331s def test_asyncio_server_init_hook_exception(): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s 331s async def server_init_hook(self): 331s await asyncio.sleep(0.01) 331s raise RuntimeError("Force exception for test") 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:1010: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _____ test_deprecation_warning_for_sync_attr_com_methods_in_asyncio_device _____ 331s def test_deprecation_warning_for_sync_attr_com_methods_in_asyncio_device(): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s attr_value = 1 331s 331s # static attributes and commands 331s 331s @attribute(access=AttrWriteType.READ_WRITE) 331s async def attr_all_methods_async(self) -> int: 331s return self.attr_value 331s 331s @attr_all_methods_async.write 331s async def attr_all_methods_async(self, value): 331s self.attr_value = value 331s 331s @attr_all_methods_async.is_allowed 331s async def attr_all_methods_async(self, req_type): 331s return True 331s 331s @attribute(access=AttrWriteType.READ_WRITE) 331s def attr_sync_read_write(self) -> int: 331s return self.attr_value 331s 331s @attr_sync_read_write.write 331s def set_attr_sync_read_write(self, value): 331s self.attr_value = value 331s 331s @attribute 331s async def attr_sync_is_allowed(self) -> int: 331s return self.attr_value 331s 331s @attr_sync_is_allowed.is_allowed 331s def is_attr_sync_is_allowed(self, req_type): 331s return True 331s 331s @command(dtype_out=int) 331s async def cmd_all_methods_async(self, val_in: int) -> int: 331s return val_in 331s 331s async def is_cmd_all_methods_async_allowed(self): 331s return True 331s 331s @command(dtype_out=int) 331s def cmd_sync_func(self, val_in: int) -> int: 331s return val_in 331s 331s @command(dtype_out=int) 331s async def cmd_sync_is_allowed(self, val_in: int) -> int: 331s return val_in 331s 331s def is_cmd_sync_is_allowed_allowed(self): 331s return True 331s 331s # dynamic attributes and commands 331s 331s @command 331s async def add_dynamic_cmd_attr(self): 331s attr = attribute( 331s name="dyn_attr_all_methods_async", 331s access=AttrWriteType.READ_WRITE, 331s fget=self.dyn_attr_all_methods_async, 331s fset=self.dyn_set_attr_all_methods_async, 331s fisallowed=self.is_dyn_attr_all_methods_async_allowed, 331s ) 331s self.add_attribute(attr) 331s 331s attr = attribute( 331s name="dyn_attr_sync_read_write", 331s access=AttrWriteType.READ_WRITE, 331s fget=self.dyn_attr_sync_read_write, 331s fset=self.dyn_set_attr_sync_read_write, 331s ) 331s self.add_attribute(attr) 331s 331s attr = attribute( 331s name="dyn_attr_sync_is_allowed", 331s access=AttrWriteType.READ, 331s fget=self.dyn_attr_sync_is_allowed, 331s fisallowed=self.is_dyn_attr_sync_is_allowed, 331s ) 331s self.add_attribute(attr) 331s 331s cmd = command( 331s f=self.dyn_cmd_all_methods_async, 331s fisallowed=self.is_dyn_cmd_all_methods_async_allowed, 331s ) 331s self.add_command(cmd) 331s 331s cmd = command(f=self.dyn_cmd_sync_func) 331s self.add_command(cmd) 331s 331s cmd = command( 331s f=self.dyn_cmd_sync_is_allowed, 331s fisallowed=self.is_dyn_cmd_sync_is_allowed_allowed, 331s ) 331s self.add_command(cmd) 331s 331s async def dyn_attr_all_methods_async(self, attr) -> int: 331s return self.attr_value 331s 331s async def dyn_set_attr_all_methods_async(self, attr): 331s self.attr_value = attr.get_write_value() 331s 331s async def is_dyn_attr_all_methods_async_allowed(self, req_type): 331s return True 331s 331s def dyn_attr_sync_read_write(self, attr) -> int: 331s return self.attr_value 331s 331s def dyn_set_attr_sync_read_write(self, attr): 331s self.attr_value = attr.get_write_value() 331s 331s async def dyn_attr_sync_is_allowed(self, attr) -> int: 331s return self.attr_value 331s 331s def is_dyn_attr_sync_is_allowed(self, req_type): 331s return True 331s 331s async def dyn_cmd_all_methods_async(self, val_in: int) -> int: 331s return val_in 331s 331s async def is_dyn_cmd_all_methods_async_allowed(self): 331s return True 331s 331s def dyn_cmd_sync_func(self, val_in: int) -> int: 331s return val_in 331s 331s async def dyn_cmd_sync_is_allowed(self, val_in: int) -> int: 331s return val_in 331s 331s def is_dyn_cmd_sync_is_allowed_allowed(self): 331s return True 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:1286: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _ test_deprecation_warning_for_standard_methods_in_asyncio_device[init_device] _ 331s method = 'init_device' 331s 331s @pytest.mark.parametrize( 331s "method", 331s [ 331s "init_device", 331s "delete_device", 331s "dev_state", 331s "dev_status", 331s "read_attr_hardware", 331s "always_executed_hook", 331s ], 331s ) 331s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s 331s @attribute 331s async def attr(self) -> int: 331s return 1 331s 331s async_code = textwrap.dedent( 331s """ 331s async def init_device(self): 331s pass 331s 331s async def delete_device(self): 331s pass 331s 331s async def dev_state(self): 331s return DevState.ON 331s 331s async def dev_status(self): 331s return "All good" 331s 331s async def read_attr_hardware(self, attr_list): 331s pass 331s 331s async def always_executed_hook(self): 331s pass 331s """ 331s ) 331s 331s exec(async_code.replace(f"async def {method}", f"def {method}")) 331s 331s with pytest.warns(DeprecationWarning, match=method): 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:1374: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s 331s During handling of the above exception, another exception occurred: 331s 331s method = 'init_device' 331s 331s @pytest.mark.parametrize( 331s "method", 331s [ 331s "init_device", 331s "delete_device", 331s "dev_state", 331s "dev_status", 331s "read_attr_hardware", 331s "always_executed_hook", 331s ], 331s ) 331s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s 331s @attribute 331s async def attr(self) -> int: 331s return 1 331s 331s async_code = textwrap.dedent( 331s """ 331s async def init_device(self): 331s pass 331s 331s async def delete_device(self): 331s pass 331s 331s async def dev_state(self): 331s return DevState.ON 331s 331s async def dev_status(self): 331s return "All good" 331s 331s async def read_attr_hardware(self, attr_list): 331s pass 331s 331s async def always_executed_hook(self): 331s pass 331s """ 331s ) 331s 331s exec(async_code.replace(f"async def {method}", f"def {method}")) 331s 331s > with pytest.warns(DeprecationWarning, match=method): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 331s E Emitted warnings: []. 331s 331s tests/test_server.py:1373: Failed 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _ test_deprecation_warning_for_standard_methods_in_asyncio_device[delete_device] _ 331s method = 'delete_device' 331s 331s @pytest.mark.parametrize( 331s "method", 331s [ 331s "init_device", 331s "delete_device", 331s "dev_state", 331s "dev_status", 331s "read_attr_hardware", 331s "always_executed_hook", 331s ], 331s ) 331s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s 331s @attribute 331s async def attr(self) -> int: 331s return 1 331s 331s async_code = textwrap.dedent( 331s """ 331s async def init_device(self): 331s pass 331s 331s async def delete_device(self): 331s pass 331s 331s async def dev_state(self): 331s return DevState.ON 331s 331s async def dev_status(self): 331s return "All good" 331s 331s async def read_attr_hardware(self, attr_list): 331s pass 331s 331s async def always_executed_hook(self): 331s pass 331s """ 331s ) 331s 331s exec(async_code.replace(f"async def {method}", f"def {method}")) 331s 331s with pytest.warns(DeprecationWarning, match=method): 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:1374: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s 331s During handling of the above exception, another exception occurred: 331s 331s method = 'delete_device' 331s 331s @pytest.mark.parametrize( 331s "method", 331s [ 331s "init_device", 331s "delete_device", 331s "dev_state", 331s "dev_status", 331s "read_attr_hardware", 331s "always_executed_hook", 331s ], 331s ) 331s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s 331s @attribute 331s async def attr(self) -> int: 331s return 1 331s 331s async_code = textwrap.dedent( 331s """ 331s async def init_device(self): 331s pass 331s 331s async def delete_device(self): 331s pass 331s 331s async def dev_state(self): 331s return DevState.ON 331s 331s async def dev_status(self): 331s return "All good" 331s 331s async def read_attr_hardware(self, attr_list): 331s pass 331s 331s async def always_executed_hook(self): 331s pass 331s """ 331s ) 331s 331s exec(async_code.replace(f"async def {method}", f"def {method}")) 331s 331s > with pytest.warns(DeprecationWarning, match=method): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 331s E Emitted warnings: []. 331s 331s tests/test_server.py:1373: Failed 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __ test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_state] __ 331s method = 'dev_state' 331s 331s @pytest.mark.parametrize( 331s "method", 331s [ 331s "init_device", 331s "delete_device", 331s "dev_state", 331s "dev_status", 331s "read_attr_hardware", 331s "always_executed_hook", 331s ], 331s ) 331s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s 331s @attribute 331s async def attr(self) -> int: 331s return 1 331s 331s async_code = textwrap.dedent( 331s """ 331s async def init_device(self): 331s pass 331s 331s async def delete_device(self): 331s pass 331s 331s async def dev_state(self): 331s return DevState.ON 331s 331s async def dev_status(self): 331s return "All good" 331s 331s async def read_attr_hardware(self, attr_list): 331s pass 331s 331s async def always_executed_hook(self): 331s pass 331s """ 331s ) 331s 331s exec(async_code.replace(f"async def {method}", f"def {method}")) 331s 331s with pytest.warns(DeprecationWarning, match=method): 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:1374: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s 331s During handling of the above exception, another exception occurred: 331s 331s method = 'dev_state' 331s 331s @pytest.mark.parametrize( 331s "method", 331s [ 331s "init_device", 331s "delete_device", 331s "dev_state", 331s "dev_status", 331s "read_attr_hardware", 331s "always_executed_hook", 331s ], 331s ) 331s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s 331s @attribute 331s async def attr(self) -> int: 331s return 1 331s 331s async_code = textwrap.dedent( 331s """ 331s async def init_device(self): 331s pass 331s 331s async def delete_device(self): 331s pass 331s 331s async def dev_state(self): 331s return DevState.ON 331s 331s async def dev_status(self): 331s return "All good" 331s 331s async def read_attr_hardware(self, attr_list): 331s pass 331s 331s async def always_executed_hook(self): 331s pass 331s """ 331s ) 331s 331s exec(async_code.replace(f"async def {method}", f"def {method}")) 331s 331s > with pytest.warns(DeprecationWarning, match=method): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 331s E Emitted warnings: []. 331s 331s tests/test_server.py:1373: Failed 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _ test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_status] __ 331s method = 'dev_status' 331s 331s @pytest.mark.parametrize( 331s "method", 331s [ 331s "init_device", 331s "delete_device", 331s "dev_state", 331s "dev_status", 331s "read_attr_hardware", 331s "always_executed_hook", 331s ], 331s ) 331s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s 331s @attribute 331s async def attr(self) -> int: 331s return 1 331s 331s async_code = textwrap.dedent( 331s """ 331s async def init_device(self): 331s pass 331s 331s async def delete_device(self): 331s pass 331s 331s async def dev_state(self): 331s return DevState.ON 331s 331s async def dev_status(self): 331s return "All good" 331s 331s async def read_attr_hardware(self, attr_list): 331s pass 331s 331s async def always_executed_hook(self): 331s pass 331s """ 331s ) 331s 331s exec(async_code.replace(f"async def {method}", f"def {method}")) 331s 331s with pytest.warns(DeprecationWarning, match=method): 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:1374: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s 331s During handling of the above exception, another exception occurred: 331s 331s method = 'dev_status' 331s 331s @pytest.mark.parametrize( 331s "method", 331s [ 331s "init_device", 331s "delete_device", 331s "dev_state", 331s "dev_status", 331s "read_attr_hardware", 331s "always_executed_hook", 331s ], 331s ) 331s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s 331s @attribute 331s async def attr(self) -> int: 331s return 1 331s 331s async_code = textwrap.dedent( 331s """ 331s async def init_device(self): 331s pass 331s 331s async def delete_device(self): 331s pass 331s 331s async def dev_state(self): 331s return DevState.ON 331s 331s async def dev_status(self): 331s return "All good" 331s 331s async def read_attr_hardware(self, attr_list): 331s pass 331s 331s async def always_executed_hook(self): 331s pass 331s """ 331s ) 331s 331s exec(async_code.replace(f"async def {method}", f"def {method}")) 331s 331s > with pytest.warns(DeprecationWarning, match=method): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 331s E Emitted warnings: []. 331s 331s tests/test_server.py:1373: Failed 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _ test_deprecation_warning_for_standard_methods_in_asyncio_device[read_attr_hardware] _ 331s method = 'read_attr_hardware' 331s 331s @pytest.mark.parametrize( 331s "method", 331s [ 331s "init_device", 331s "delete_device", 331s "dev_state", 331s "dev_status", 331s "read_attr_hardware", 331s "always_executed_hook", 331s ], 331s ) 331s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s 331s @attribute 331s async def attr(self) -> int: 331s return 1 331s 331s async_code = textwrap.dedent( 331s """ 331s async def init_device(self): 331s pass 331s 331s async def delete_device(self): 331s pass 331s 331s async def dev_state(self): 331s return DevState.ON 331s 331s async def dev_status(self): 331s return "All good" 331s 331s async def read_attr_hardware(self, attr_list): 331s pass 331s 331s async def always_executed_hook(self): 331s pass 331s """ 331s ) 331s 331s exec(async_code.replace(f"async def {method}", f"def {method}")) 331s 331s with pytest.warns(DeprecationWarning, match=method): 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:1374: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s 331s During handling of the above exception, another exception occurred: 331s 331s method = 'read_attr_hardware' 331s 331s @pytest.mark.parametrize( 331s "method", 331s [ 331s "init_device", 331s "delete_device", 331s "dev_state", 331s "dev_status", 331s "read_attr_hardware", 331s "always_executed_hook", 331s ], 331s ) 331s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s 331s @attribute 331s async def attr(self) -> int: 331s return 1 331s 331s async_code = textwrap.dedent( 331s """ 331s async def init_device(self): 331s pass 331s 331s async def delete_device(self): 331s pass 331s 331s async def dev_state(self): 331s return DevState.ON 331s 331s async def dev_status(self): 331s return "All good" 331s 331s async def read_attr_hardware(self, attr_list): 331s pass 331s 331s async def always_executed_hook(self): 331s pass 331s """ 331s ) 331s 331s exec(async_code.replace(f"async def {method}", f"def {method}")) 331s 331s > with pytest.warns(DeprecationWarning, match=method): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 331s E Emitted warnings: []. 331s 331s tests/test_server.py:1373: Failed 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _ test_deprecation_warning_for_standard_methods_in_asyncio_device[always_executed_hook] _ 331s method = 'always_executed_hook' 331s 331s @pytest.mark.parametrize( 331s "method", 331s [ 331s "init_device", 331s "delete_device", 331s "dev_state", 331s "dev_status", 331s "read_attr_hardware", 331s "always_executed_hook", 331s ], 331s ) 331s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s 331s @attribute 331s async def attr(self) -> int: 331s return 1 331s 331s async_code = textwrap.dedent( 331s """ 331s async def init_device(self): 331s pass 331s 331s async def delete_device(self): 331s pass 331s 331s async def dev_state(self): 331s return DevState.ON 331s 331s async def dev_status(self): 331s return "All good" 331s 331s async def read_attr_hardware(self, attr_list): 331s pass 331s 331s async def always_executed_hook(self): 331s pass 331s """ 331s ) 331s 331s exec(async_code.replace(f"async def {method}", f"def {method}")) 331s 331s with pytest.warns(DeprecationWarning, match=method): 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_server.py:1374: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s 331s During handling of the above exception, another exception occurred: 331s 331s method = 'always_executed_hook' 331s 331s @pytest.mark.parametrize( 331s "method", 331s [ 331s "init_device", 331s "delete_device", 331s "dev_state", 331s "dev_status", 331s "read_attr_hardware", 331s "always_executed_hook", 331s ], 331s ) 331s def test_deprecation_warning_for_standard_methods_in_asyncio_device(method): 331s class TestDevice(Device): 331s green_mode = GreenMode.Asyncio 331s 331s @attribute 331s async def attr(self) -> int: 331s return 1 331s 331s async_code = textwrap.dedent( 331s """ 331s async def init_device(self): 331s pass 331s 331s async def delete_device(self): 331s pass 331s 331s async def dev_state(self): 331s return DevState.ON 331s 331s async def dev_status(self): 331s return "All good" 331s 331s async def read_attr_hardware(self, attr_list): 331s pass 331s 331s async def always_executed_hook(self): 331s pass 331s """ 331s ) 331s 331s exec(async_code.replace(f"async def {method}", f"def {method}")) 331s 331s > with pytest.warns(DeprecationWarning, match=method): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s E Failed: DID NOT WARN. No warnings of type (,) were emitted. 331s E Emitted warnings: []. 331s 331s tests/test_server.py:1373: Failed 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________________ test_single_device[Asyncio] __________________________ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_single_device(server_green_mode): 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device1Asyncio): 331s pass 331s 331s else: 331s 331s class TestDevice(Device1): 331s green_mode = server_green_mode 331s 331s > with DeviceTestContext(TestDevice) as proxy: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:144: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ____________________ test_multi_with_single_device[Asyncio] ____________________ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_multi_with_single_device(server_green_mode): 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice(Device1Asyncio): 331s pass 331s 331s else: 331s 331s class TestDevice(Device1): 331s green_mode = server_green_mode 331s 331s devices_info = ({"class": TestDevice, "devices": [{"name": "test/device1/1"}]},) 331s 331s > with MultiDeviceTestContext(devices_info) as context: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:235: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _____________________ test_multi_with_two_devices[Asyncio] _____________________ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_multi_with_two_devices(server_green_mode): 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice1(Device1Asyncio): 331s pass 331s 331s class TestDevice2(Device2Asyncio): 331s pass 331s 331s else: 331s 331s class TestDevice1(Device1): 331s green_mode = server_green_mode 331s 331s class TestDevice2(Device2): 331s green_mode = server_green_mode 331s 331s devices_info = ( 331s {"class": TestDevice1, "devices": [{"name": "test/device1/1"}]}, 331s {"class": TestDevice2, "devices": [{"name": "test/device2/1"}]}, 331s ) 331s 331s > with MultiDeviceTestContext(devices_info) as context: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:275: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _ test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Asyncio-None] _ 331s first_type = 331s second_type = , exception_type = None 331s 331s @pytest.mark.parametrize( 331s "first_type, second_type, exception_type", 331s [ 331s (Device1GreenModeUnspecified, Device2GreenModeUnspecified, None), 331s (Device1GreenModeUnspecified, Device2Synchronous, None), 331s (Device1GreenModeUnspecified, Device2Gevent, ValueError), 331s (Device1GreenModeUnspecified, Device2Asyncio, ValueError), 331s (Device1Synchronous, Device2GreenModeUnspecified, None), 331s (Device1Synchronous, Device2Synchronous, None), 331s (Device1Synchronous, Device2Gevent, ValueError), 331s (Device1Synchronous, Device2Asyncio, ValueError), 331s (Device1Asyncio, Device2GreenModeUnspecified, ValueError), 331s (Device1Asyncio, Device2Synchronous, ValueError), 331s (Device1Asyncio, Device2Gevent, ValueError), 331s (Device1Asyncio, Device2Asyncio, None), 331s (Device1Gevent, Device2GreenModeUnspecified, ValueError), 331s (Device1Gevent, Device2Synchronous, ValueError), 331s (Device1Gevent, Device2Gevent, None), 331s (Device1Gevent, Device2Asyncio, ValueError), 331s ], 331s ) 331s def test_multi_with_mixed_device_green_modes(first_type, second_type, exception_type): 331s devices_info = ( 331s {"class": first_type, "devices": [{"name": "test/device1/1"}]}, 331s {"class": second_type, "devices": [{"name": "test/device2/1"}]}, 331s ) 331s 331s if exception_type is None: 331s > with MultiDeviceTestContext(devices_info): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:312: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _ test_green_modes_in_device_kwarg_and_global[Device1Synchronous-Asyncio-Asyncio-None-SynchronousExecutor] _ 331s device_type = 331s green_mode = tango._tango.GreenMode.Asyncio 331s global_mode = tango._tango.GreenMode.Asyncio, exception_type = None 331s executor_type = 331s 331s @pytest.mark.parametrize( 331s "device_type, green_mode, global_mode, exception_type, executor_type", 331s [ 331s # If a device specifies its green mode explicitly, then both 331s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 331s ( 331s Device1Synchronous, 331s GreenMode.Asyncio, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Synchronous, 331s GreenMode.Gevent, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Asyncio, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s AsyncioExecutor, 331s ), 331s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 331s ( 331s Device1Gevent, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 331s # If device doesn't specify its green mode, but green_mode kwarg is provided, 331s # then we use green_mode kwarg 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Asyncio, 331s None, 331s GeventExecutor, 331s ), 331s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 331s # (currently only works for synchronous mode - see unsupported modes below) 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Synchronous, 331s None, 331s SynchronousExecutor, 331s ), 331s # Deprecated modes - starting from PyTango 10 it is deprecated 331s # to modify sync servers to async "on the fly". 331s # All base methods should be defined with "async def" instead. 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Synchronous, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Gevent, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s # Unsupported modes - device servers with the following combinations 331s # fail to start up. The cause is unknown. This could be fixed in the future. 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Asyncio, 331s RuntimeError, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Gevent, 331s RuntimeError, 331s GeventExecutor, 331s ), 331s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 331s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 331s ], 331s ) 331s def test_green_modes_in_device_kwarg_and_global( 331s device_type, green_mode, global_mode, exception_type, executor_type 331s ): 331s if WINDOWS and exception_type is not None: 331s pytest.skip("Skip test that hangs on Windows") 331s 331s old_green_mode = tango.get_green_mode() 331s try: 331s tango.set_green_mode(global_mode) 331s 331s if exception_type is None: 331s > with DeviceTestContext(device_type, green_mode=green_mode): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:442: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:669: in connect 331s self.server.ping() 331s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 331s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stdout call ----------------------------- 331s Ready to accept request 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _ test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Synchronous-Synchronous-None-AsyncioExecutor] _ 331s device_type = 331s green_mode = tango._tango.GreenMode.Synchronous 331s global_mode = tango._tango.GreenMode.Synchronous, exception_type = None 331s executor_type = 331s 331s @pytest.mark.parametrize( 331s "device_type, green_mode, global_mode, exception_type, executor_type", 331s [ 331s # If a device specifies its green mode explicitly, then both 331s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 331s ( 331s Device1Synchronous, 331s GreenMode.Asyncio, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Synchronous, 331s GreenMode.Gevent, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Asyncio, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s AsyncioExecutor, 331s ), 331s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 331s ( 331s Device1Gevent, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 331s # If device doesn't specify its green mode, but green_mode kwarg is provided, 331s # then we use green_mode kwarg 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Asyncio, 331s None, 331s GeventExecutor, 331s ), 331s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 331s # (currently only works for synchronous mode - see unsupported modes below) 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Synchronous, 331s None, 331s SynchronousExecutor, 331s ), 331s # Deprecated modes - starting from PyTango 10 it is deprecated 331s # to modify sync servers to async "on the fly". 331s # All base methods should be defined with "async def" instead. 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Synchronous, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Gevent, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s # Unsupported modes - device servers with the following combinations 331s # fail to start up. The cause is unknown. This could be fixed in the future. 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Asyncio, 331s RuntimeError, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Gevent, 331s RuntimeError, 331s GeventExecutor, 331s ), 331s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 331s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 331s ], 331s ) 331s def test_green_modes_in_device_kwarg_and_global( 331s device_type, green_mode, global_mode, exception_type, executor_type 331s ): 331s if WINDOWS and exception_type is not None: 331s pytest.skip("Skip test that hangs on Windows") 331s 331s old_green_mode = tango.get_green_mode() 331s try: 331s tango.set_green_mode(global_mode) 331s 331s if exception_type is None: 331s > with DeviceTestContext(device_type, green_mode=green_mode): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:442: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _ test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Gevent-Gevent-None-AsyncioExecutor] _ 331s device_type = 331s green_mode = tango._tango.GreenMode.Gevent 331s global_mode = tango._tango.GreenMode.Gevent, exception_type = None 331s executor_type = 331s 331s @pytest.mark.parametrize( 331s "device_type, green_mode, global_mode, exception_type, executor_type", 331s [ 331s # If a device specifies its green mode explicitly, then both 331s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 331s ( 331s Device1Synchronous, 331s GreenMode.Asyncio, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Synchronous, 331s GreenMode.Gevent, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Asyncio, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s AsyncioExecutor, 331s ), 331s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 331s ( 331s Device1Gevent, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 331s # If device doesn't specify its green mode, but green_mode kwarg is provided, 331s # then we use green_mode kwarg 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Asyncio, 331s None, 331s GeventExecutor, 331s ), 331s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 331s # (currently only works for synchronous mode - see unsupported modes below) 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Synchronous, 331s None, 331s SynchronousExecutor, 331s ), 331s # Deprecated modes - starting from PyTango 10 it is deprecated 331s # to modify sync servers to async "on the fly". 331s # All base methods should be defined with "async def" instead. 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Synchronous, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Gevent, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s # Unsupported modes - device servers with the following combinations 331s # fail to start up. The cause is unknown. This could be fixed in the future. 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Asyncio, 331s RuntimeError, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Gevent, 331s RuntimeError, 331s GeventExecutor, 331s ), 331s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 331s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 331s ], 331s ) 331s def test_green_modes_in_device_kwarg_and_global( 331s device_type, green_mode, global_mode, exception_type, executor_type 331s ): 331s if WINDOWS and exception_type is not None: 331s pytest.skip("Skip test that hangs on Windows") 331s 331s old_green_mode = tango.get_green_mode() 331s try: 331s tango.set_green_mode(global_mode) 331s 331s if exception_type is None: 331s > with DeviceTestContext(device_type, green_mode=green_mode): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:442: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _ test_green_modes_in_device_kwarg_and_global[Device1Gevent-Asyncio-Asyncio-None-GeventExecutor] _ 331s device_type = 331s green_mode = tango._tango.GreenMode.Asyncio 331s global_mode = tango._tango.GreenMode.Asyncio, exception_type = None 331s executor_type = 331s 331s @pytest.mark.parametrize( 331s "device_type, green_mode, global_mode, exception_type, executor_type", 331s [ 331s # If a device specifies its green mode explicitly, then both 331s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 331s ( 331s Device1Synchronous, 331s GreenMode.Asyncio, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Synchronous, 331s GreenMode.Gevent, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Asyncio, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s AsyncioExecutor, 331s ), 331s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 331s ( 331s Device1Gevent, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 331s # If device doesn't specify its green mode, but green_mode kwarg is provided, 331s # then we use green_mode kwarg 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Asyncio, 331s None, 331s GeventExecutor, 331s ), 331s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 331s # (currently only works for synchronous mode - see unsupported modes below) 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Synchronous, 331s None, 331s SynchronousExecutor, 331s ), 331s # Deprecated modes - starting from PyTango 10 it is deprecated 331s # to modify sync servers to async "on the fly". 331s # All base methods should be defined with "async def" instead. 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Synchronous, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Gevent, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s # Unsupported modes - device servers with the following combinations 331s # fail to start up. The cause is unknown. This could be fixed in the future. 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Asyncio, 331s RuntimeError, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Gevent, 331s RuntimeError, 331s GeventExecutor, 331s ), 331s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 331s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 331s ], 331s ) 331s def test_green_modes_in_device_kwarg_and_global( 331s device_type, green_mode, global_mode, exception_type, executor_type 331s ): 331s if WINDOWS and exception_type is not None: 331s pytest.skip("Skip test that hangs on Windows") 331s 331s old_green_mode = tango.get_green_mode() 331s try: 331s tango.set_green_mode(global_mode) 331s 331s if exception_type is None: 331s > with DeviceTestContext(device_type, green_mode=green_mode): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:442: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:669: in connect 331s self.server.ping() 331s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 331s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s --------------------------- Captured stdout teardown --------------------------- 331s Ready to accept request 331s _ test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Synchronous-Asyncio-None-SynchronousExecutor] _ 331s device_type = 331s green_mode = tango._tango.GreenMode.Synchronous 331s global_mode = tango._tango.GreenMode.Asyncio, exception_type = None 331s executor_type = 331s 331s @pytest.mark.parametrize( 331s "device_type, green_mode, global_mode, exception_type, executor_type", 331s [ 331s # If a device specifies its green mode explicitly, then both 331s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 331s ( 331s Device1Synchronous, 331s GreenMode.Asyncio, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Synchronous, 331s GreenMode.Gevent, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Asyncio, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s AsyncioExecutor, 331s ), 331s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 331s ( 331s Device1Gevent, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 331s # If device doesn't specify its green mode, but green_mode kwarg is provided, 331s # then we use green_mode kwarg 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Asyncio, 331s None, 331s GeventExecutor, 331s ), 331s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 331s # (currently only works for synchronous mode - see unsupported modes below) 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Synchronous, 331s None, 331s SynchronousExecutor, 331s ), 331s # Deprecated modes - starting from PyTango 10 it is deprecated 331s # to modify sync servers to async "on the fly". 331s # All base methods should be defined with "async def" instead. 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Synchronous, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Gevent, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s # Unsupported modes - device servers with the following combinations 331s # fail to start up. The cause is unknown. This could be fixed in the future. 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Asyncio, 331s RuntimeError, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Gevent, 331s RuntimeError, 331s GeventExecutor, 331s ), 331s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 331s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 331s ], 331s ) 331s def test_green_modes_in_device_kwarg_and_global( 331s device_type, green_mode, global_mode, exception_type, executor_type 331s ): 331s if WINDOWS and exception_type is not None: 331s pytest.skip("Skip test that hangs on Windows") 331s 331s old_green_mode = tango.get_green_mode() 331s try: 331s tango.set_green_mode(global_mode) 331s 331s if exception_type is None: 331s > with DeviceTestContext(device_type, green_mode=green_mode): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:442: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:669: in connect 331s self.server.ping() 331s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 331s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stdout call ----------------------------- 331s Ready to accept request 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _ test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Gevent-Asyncio-None-GeventExecutor] _ 331s device_type = 331s green_mode = tango._tango.GreenMode.Gevent 331s global_mode = tango._tango.GreenMode.Asyncio, exception_type = None 331s executor_type = 331s 331s @pytest.mark.parametrize( 331s "device_type, green_mode, global_mode, exception_type, executor_type", 331s [ 331s # If a device specifies its green mode explicitly, then both 331s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 331s ( 331s Device1Synchronous, 331s GreenMode.Asyncio, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Synchronous, 331s GreenMode.Gevent, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Asyncio, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s AsyncioExecutor, 331s ), 331s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 331s ( 331s Device1Gevent, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 331s # If device doesn't specify its green mode, but green_mode kwarg is provided, 331s # then we use green_mode kwarg 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Asyncio, 331s None, 331s GeventExecutor, 331s ), 331s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 331s # (currently only works for synchronous mode - see unsupported modes below) 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Synchronous, 331s None, 331s SynchronousExecutor, 331s ), 331s # Deprecated modes - starting from PyTango 10 it is deprecated 331s # to modify sync servers to async "on the fly". 331s # All base methods should be defined with "async def" instead. 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Synchronous, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Gevent, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s # Unsupported modes - device servers with the following combinations 331s # fail to start up. The cause is unknown. This could be fixed in the future. 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Asyncio, 331s RuntimeError, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Gevent, 331s RuntimeError, 331s GeventExecutor, 331s ), 331s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 331s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 331s ], 331s ) 331s def test_green_modes_in_device_kwarg_and_global( 331s device_type, green_mode, global_mode, exception_type, executor_type 331s ): 331s if WINDOWS and exception_type is not None: 331s pytest.skip("Skip test that hangs on Windows") 331s 331s old_green_mode = tango.get_green_mode() 331s try: 331s tango.set_green_mode(global_mode) 331s 331s if exception_type is None: 331s > with DeviceTestContext(device_type, green_mode=green_mode): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:442: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:669: in connect 331s self.server.ping() 331s /usr/lib/python3/dist-packages/tango/green.py:226: in greener 331s return executor.run(fn, args, kwargs, wait=wait, timeout=timeout) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stdout call ----------------------------- 331s Ready to accept request 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _ test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Synchronous-DeprecationWarning-AsyncioExecutor] _ 331s device_type = 331s green_mode = tango._tango.GreenMode.Asyncio 331s global_mode = tango._tango.GreenMode.Synchronous 331s exception_type = 331s executor_type = 331s 331s @pytest.mark.parametrize( 331s "device_type, green_mode, global_mode, exception_type, executor_type", 331s [ 331s # If a device specifies its green mode explicitly, then both 331s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 331s ( 331s Device1Synchronous, 331s GreenMode.Asyncio, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Synchronous, 331s GreenMode.Gevent, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Asyncio, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s AsyncioExecutor, 331s ), 331s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 331s ( 331s Device1Gevent, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 331s # If device doesn't specify its green mode, but green_mode kwarg is provided, 331s # then we use green_mode kwarg 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Asyncio, 331s None, 331s GeventExecutor, 331s ), 331s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 331s # (currently only works for synchronous mode - see unsupported modes below) 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Synchronous, 331s None, 331s SynchronousExecutor, 331s ), 331s # Deprecated modes - starting from PyTango 10 it is deprecated 331s # to modify sync servers to async "on the fly". 331s # All base methods should be defined with "async def" instead. 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Synchronous, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Gevent, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s # Unsupported modes - device servers with the following combinations 331s # fail to start up. The cause is unknown. This could be fixed in the future. 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Asyncio, 331s RuntimeError, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Gevent, 331s RuntimeError, 331s GeventExecutor, 331s ), 331s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 331s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 331s ], 331s ) 331s def test_green_modes_in_device_kwarg_and_global( 331s device_type, green_mode, global_mode, exception_type, executor_type 331s ): 331s if WINDOWS and exception_type is not None: 331s pytest.skip("Skip test that hangs on Windows") 331s 331s old_green_mode = tango.get_green_mode() 331s try: 331s tango.set_green_mode(global_mode) 331s 331s if exception_type is None: 331s with DeviceTestContext(device_type, green_mode=green_mode): 331s pass 331s elif exception_type is DeprecationWarning: 331s with pytest.warns((DeprecationWarning, RuntimeWarning)): 331s > with DeviceTestContext(device_type, green_mode=green_mode): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:446: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s 331s During handling of the above exception, another exception occurred: 331s 331s device_type = 331s green_mode = tango._tango.GreenMode.Asyncio 331s global_mode = tango._tango.GreenMode.Synchronous 331s exception_type = 331s executor_type = 331s 331s @pytest.mark.parametrize( 331s "device_type, green_mode, global_mode, exception_type, executor_type", 331s [ 331s # If a device specifies its green mode explicitly, then both 331s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 331s ( 331s Device1Synchronous, 331s GreenMode.Asyncio, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Synchronous, 331s GreenMode.Gevent, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Asyncio, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s AsyncioExecutor, 331s ), 331s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 331s ( 331s Device1Gevent, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 331s # If device doesn't specify its green mode, but green_mode kwarg is provided, 331s # then we use green_mode kwarg 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Asyncio, 331s None, 331s GeventExecutor, 331s ), 331s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 331s # (currently only works for synchronous mode - see unsupported modes below) 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Synchronous, 331s None, 331s SynchronousExecutor, 331s ), 331s # Deprecated modes - starting from PyTango 10 it is deprecated 331s # to modify sync servers to async "on the fly". 331s # All base methods should be defined with "async def" instead. 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Synchronous, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Gevent, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s # Unsupported modes - device servers with the following combinations 331s # fail to start up. The cause is unknown. This could be fixed in the future. 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Asyncio, 331s RuntimeError, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Gevent, 331s RuntimeError, 331s GeventExecutor, 331s ), 331s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 331s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 331s ], 331s ) 331s def test_green_modes_in_device_kwarg_and_global( 331s device_type, green_mode, global_mode, exception_type, executor_type 331s ): 331s if WINDOWS and exception_type is not None: 331s pytest.skip("Skip test that hangs on Windows") 331s 331s old_green_mode = tango.get_green_mode() 331s try: 331s tango.set_green_mode(global_mode) 331s 331s if exception_type is None: 331s with DeviceTestContext(device_type, green_mode=green_mode): 331s pass 331s elif exception_type is DeprecationWarning: 331s > with pytest.warns((DeprecationWarning, RuntimeWarning)): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s E Failed: DID NOT WARN. No warnings of type (, ) were emitted. 331s E Emitted warnings: []. 331s 331s tests/test_test_context.py:445: Failed 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _ test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Gevent-DeprecationWarning-AsyncioExecutor] _ 331s device_type = 331s green_mode = tango._tango.GreenMode.Asyncio 331s global_mode = tango._tango.GreenMode.Gevent 331s exception_type = 331s executor_type = 331s 331s @pytest.mark.parametrize( 331s "device_type, green_mode, global_mode, exception_type, executor_type", 331s [ 331s # If a device specifies its green mode explicitly, then both 331s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 331s ( 331s Device1Synchronous, 331s GreenMode.Asyncio, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Synchronous, 331s GreenMode.Gevent, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Asyncio, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s AsyncioExecutor, 331s ), 331s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 331s ( 331s Device1Gevent, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 331s # If device doesn't specify its green mode, but green_mode kwarg is provided, 331s # then we use green_mode kwarg 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Asyncio, 331s None, 331s GeventExecutor, 331s ), 331s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 331s # (currently only works for synchronous mode - see unsupported modes below) 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Synchronous, 331s None, 331s SynchronousExecutor, 331s ), 331s # Deprecated modes - starting from PyTango 10 it is deprecated 331s # to modify sync servers to async "on the fly". 331s # All base methods should be defined with "async def" instead. 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Synchronous, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Gevent, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s # Unsupported modes - device servers with the following combinations 331s # fail to start up. The cause is unknown. This could be fixed in the future. 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Asyncio, 331s RuntimeError, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Gevent, 331s RuntimeError, 331s GeventExecutor, 331s ), 331s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 331s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 331s ], 331s ) 331s def test_green_modes_in_device_kwarg_and_global( 331s device_type, green_mode, global_mode, exception_type, executor_type 331s ): 331s if WINDOWS and exception_type is not None: 331s pytest.skip("Skip test that hangs on Windows") 331s 331s old_green_mode = tango.get_green_mode() 331s try: 331s tango.set_green_mode(global_mode) 331s 331s if exception_type is None: 331s with DeviceTestContext(device_type, green_mode=green_mode): 331s pass 331s elif exception_type is DeprecationWarning: 331s with pytest.warns((DeprecationWarning, RuntimeWarning)): 331s > with DeviceTestContext(device_type, green_mode=green_mode): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:446: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:876: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:862: in connect 331s super().connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s 331s During handling of the above exception, another exception occurred: 331s 331s device_type = 331s green_mode = tango._tango.GreenMode.Asyncio 331s global_mode = tango._tango.GreenMode.Gevent 331s exception_type = 331s executor_type = 331s 331s @pytest.mark.parametrize( 331s "device_type, green_mode, global_mode, exception_type, executor_type", 331s [ 331s # If a device specifies its green mode explicitly, then both 331s # green_mode kwarg and global green mode are ignored. The device must use its specified mode. 331s ( 331s Device1Synchronous, 331s GreenMode.Asyncio, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Synchronous, 331s GreenMode.Gevent, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1Asyncio, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s AsyncioExecutor, 331s ), 331s (Device1Asyncio, GreenMode.Gevent, GreenMode.Gevent, None, AsyncioExecutor), 331s ( 331s Device1Gevent, 331s GreenMode.Synchronous, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s (Device1Gevent, GreenMode.Asyncio, GreenMode.Asyncio, None, GeventExecutor), 331s # If device doesn't specify its green mode, but green_mode kwarg is provided, 331s # then we use green_mode kwarg 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Asyncio, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Synchronous, 331s GreenMode.Gevent, 331s None, 331s SynchronousExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Synchronous, 331s None, 331s GeventExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Gevent, 331s GreenMode.Asyncio, 331s None, 331s GeventExecutor, 331s ), 331s # Finally, if neither device green mode nor green_mode kwarg are specified, then use global mode instead. 331s # (currently only works for synchronous mode - see unsupported modes below) 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Synchronous, 331s None, 331s SynchronousExecutor, 331s ), 331s # Deprecated modes - starting from PyTango 10 it is deprecated 331s # to modify sync servers to async "on the fly". 331s # All base methods should be defined with "async def" instead. 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Synchronous, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s GreenMode.Asyncio, 331s GreenMode.Gevent, 331s DeprecationWarning, 331s AsyncioExecutor, 331s ), 331s # Unsupported modes - device servers with the following combinations 331s # fail to start up. The cause is unknown. This could be fixed in the future. 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Asyncio, 331s RuntimeError, 331s AsyncioExecutor, 331s ), 331s ( 331s Device1GreenModeUnspecified, 331s None, 331s GreenMode.Gevent, 331s RuntimeError, 331s GeventExecutor, 331s ), 331s (Device1Asyncio, None, GreenMode.Asyncio, RuntimeError, AsyncioExecutor), 331s (Device1Gevent, None, GreenMode.Gevent, RuntimeError, GeventExecutor), 331s ], 331s ) 331s def test_green_modes_in_device_kwarg_and_global( 331s device_type, green_mode, global_mode, exception_type, executor_type 331s ): 331s if WINDOWS and exception_type is not None: 331s pytest.skip("Skip test that hangs on Windows") 331s 331s old_green_mode = tango.get_green_mode() 331s try: 331s tango.set_green_mode(global_mode) 331s 331s if exception_type is None: 331s with DeviceTestContext(device_type, green_mode=green_mode): 331s pass 331s elif exception_type is DeprecationWarning: 331s > with pytest.warns((DeprecationWarning, RuntimeWarning)): 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s E Failed: DID NOT WARN. No warnings of type (, ) were emitted. 331s E Emitted warnings: []. 331s 331s tests/test_test_context.py:445: Failed 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________ test_multi_with_async_devices_initialised ___________________ 331s def test_multi_with_async_devices_initialised(): 331s devices_info = ( 331s {"class": Device1Asyncio, "devices": [{"name": "test/device1/1"}]}, 331s {"class": Device2Asyncio, "devices": [{"name": "test/device2/1"}]}, 331s ) 331s 331s > with MultiDeviceTestContext(devices_info) as context: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:464: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _____________ test_multi_with_two_devices_with_properties[Asyncio] _____________ 331s server_green_mode = tango._tango.GreenMode.Asyncio 331s 331s def test_multi_with_two_devices_with_properties(server_green_mode): 331s if server_green_mode == GreenMode.Asyncio: 331s 331s class TestDevice1(Device): 331s green_mode = server_green_mode 331s 331s prop1 = device_property(dtype=str) 331s 331s @command(dtype_out=str) 331s async def get_prop1(self): 331s return self.prop1 331s 331s class TestDevice2(Device): 331s green_mode = server_green_mode 331s 331s prop2 = device_property(dtype=int) 331s 331s @command(dtype_out=int) 331s async def get_prop2(self): 331s return self.prop2 331s 331s else: 331s 331s class TestDevice1(Device): 331s green_mode = server_green_mode 331s 331s prop1 = device_property(dtype=str) 331s 331s @command(dtype_out=str) 331s def get_prop1(self): 331s return self.prop1 331s 331s class TestDevice2(Device): 331s green_mode = server_green_mode 331s 331s prop2 = device_property(dtype=int) 331s 331s @command(dtype_out=int) 331s def get_prop2(self): 331s return self.prop2 331s 331s devices_info = ( 331s { 331s "class": TestDevice1, 331s "devices": [{"name": "test/device1/1", "properties": {"prop1": "abcd"}}], 331s }, 331s { 331s "class": TestDevice2, 331s "devices": [{"name": "test/device2/2", "properties": {"prop2": 5555}}], 331s }, 331s ) 331s 331s > with MultiDeviceTestContext(devices_info) as context: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:617: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s __________________ test_test_context_async_device_proxy[True] __________________ 331s process = True 331s 331s @pytest.mark.asyncio 331s @pytest.mark.parametrize("process", [True, False]) 331s async def test_test_context_async_device_proxy(process): 331s config = ({"class": AsyncDevice, "devices": [{"name": "test/device/1"}]},) 331s 331s > with MultiDeviceTestContext(config, process=process) as context: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:825: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def connect(self): 331s try: 331s self._wait_until_port_is_known() 331s self._wait_until_startup_status_is_known() 331s except RuntimeError: 331s if self.thread.is_alive(): 331s raise RuntimeError( 331s "The server appears to be stuck at initialization. " 331s "Check stdout/stderr for more information." 331s ) 331s elif hasattr(self.thread, "exitcode"): 331s raise RuntimeError( 331s f"The server process stopped with exitcode {self.thread.exitcode}. " 331s f"Check stdout/stderr for more information." 331s ) 331s else: 331s raise RuntimeError( 331s "The server stopped without reporting. " 331s "Check stdout/stderr for more information." 331s ) 331s 331s if self._startup_exception: 331s > raise self._startup_exception 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s _________________ test_test_context_async_device_proxy[False] __________________ 331s process = False 331s 331s @pytest.mark.asyncio 331s @pytest.mark.parametrize("process", [True, False]) 331s async def test_test_context_async_device_proxy(process): 331s config = ({"class": AsyncDevice, "devices": [{"name": "test/device/1"}]},) 331s 331s > with MultiDeviceTestContext(config, process=process) as context: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:825: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s --------------------------- Captured stderr teardown --------------------------- 331s /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-8za82jgu', '/mp-ijqs42aj', '/mp-ga5lusg1', '/mp-8d3idvs3', '/mp-2wdhp8rj', '/mp-txy4rdat', '/mp-t4hni_vv', '/mp-btmeo4yz', '/mp-x4abkdxb', '/mp-41c_0tn4', '/mp-yrpsjxtf'} 331s warnings.warn( 331s _______________ test_test_context_multi_async_device_proxy[True] _______________ 331s process = True 331s 331s @pytest.mark.asyncio 331s @pytest.mark.parametrize("process", [True, False]) 331s async def test_test_context_multi_async_device_proxy(process): 331s config = ( 331s { 331s "class": AsyncDevice, 331s "devices": [{"name": "test/device/main"}, {"name": "test/device/child"}], 331s }, 331s ) 331s 331s > with MultiDeviceTestContext(config, process=process) as context: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:855: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def connect(self): 331s try: 331s self._wait_until_port_is_known() 331s self._wait_until_startup_status_is_known() 331s except RuntimeError: 331s if self.thread.is_alive(): 331s raise RuntimeError( 331s "The server appears to be stuck at initialization. " 331s "Check stdout/stderr for more information." 331s ) 331s elif hasattr(self.thread, "exitcode"): 331s raise RuntimeError( 331s f"The server process stopped with exitcode {self.thread.exitcode}. " 331s f"Check stdout/stderr for more information." 331s ) 331s else: 331s raise RuntimeError( 331s "The server stopped without reporting. " 331s "Check stdout/stderr for more information." 331s ) 331s 331s if self._startup_exception: 331s > raise self._startup_exception 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s ______________ test_test_context_multi_async_device_proxy[False] _______________ 331s process = False 331s 331s @pytest.mark.asyncio 331s @pytest.mark.parametrize("process", [True, False]) 331s async def test_test_context_multi_async_device_proxy(process): 331s config = ( 331s { 331s "class": AsyncDevice, 331s "devices": [{"name": "test/device/main"}, {"name": "test/device/child"}], 331s }, 331s ) 331s 331s > with MultiDeviceTestContext(config, process=process) as context: 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s 331s tests/test_test_context.py:855: 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s /usr/lib/python3/dist-packages/tango/test_context.py:726: in __enter__ 331s self.start() 331s /usr/lib/python3/dist-packages/tango/test_context.py:640: in start 331s self.connect() 331s /usr/lib/python3/dist-packages/tango/test_context.py:665: in connect 331s raise self._startup_exception 331s /usr/lib/python3/dist-packages/tango/test_context.py:504: in target 331s runserver( 331s /usr/lib/python3/dist-packages/tango/server.py:1121: in run_server 331s return run((cls,), args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2217: in run 331s return server_run() 331s ^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/server.py:2061: in __server_run 331s worker.run(tango_loop, wait=True) 331s /usr/lib/python3/dist-packages/tango/green.py:118: in run 331s accessor = self.delegate(fn, *args, **kwargs) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3/dist-packages/tango/asyncio_executor.py:187: in delegate 331s coro = self.loop.run_in_executor(self.subexecutor, callback) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/asyncio/base_events.py:898: in run_in_executor 331s executor.submit(func, *args), loop=self) 331s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 331s /usr/lib/python3.14/concurrent/futures/thread.py:215: in submit 331s self._adjust_thread_count() 331s _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 331s 331s self = 331s 331s def _adjust_thread_count(self): 331s # if idle threads are available, don't spin new threads 331s if self._idle_semaphore.acquire(timeout=0): 331s return 331s 331s # When the executor gets lost, the weakref callback will wake up 331s # the worker threads. 331s def weakref_cb(_, q=self._work_queue): 331s q.put(None) 331s 331s num_threads = len(self._threads) 331s if num_threads < self._max_workers: 331s thread_name = "%s_%d" % (self._thread_name_prefix or self, num_threads) 331s t = threading.Thread( 331s name=thread_name, 331s target=_thread_pool_executor_worker, 331s args=( 331s weakref.ref(self, weakref_cb), 331s self._work_queue, 331s > self._initializer, 331s ^^^^^^^^^^^^^^^^^ 331s self._initargs, 331s ), 331s ) 331s E AttributeError: 'PyTangoThreadPoolExecutor' object has no attribute '_initializer' 331s 331s /usr/lib/python3/dist-packages/tango/utils.py:2711: AttributeError 331s ----------------------------- Captured stderr call ----------------------------- 331s Can't create notifd event supplier. Notifd event not available 331s --------------------------- Captured stderr teardown --------------------------- 331s /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-lzz840m6', '/mp-gw_hmlgy', '/mp-rg24f5zm', '/mp-1jq547z2', '/mp-tjt2xzqa', '/mp-9g20tp07', '/mp-lxvhb7gz', '/mp-mq11y2tt', '/mp-woec8snj', '/mp-jn9eck1d', '/mp-p151406e'} 331s warnings.warn( 331s =========================== short test summary info ============================ 331s FAILED tests/test_async.py::test_green_mode_kwarg_for_proxy_methods - @pytest... 331s FAILED tests/test_attributes.py::test_read_write_attribute[int-Asyncio] - att... 331s FAILED tests/test_attributes.py::test_read_write_attribute[float-Asyncio] - a... 331s FAILED tests/test_attributes.py::test_read_write_attribute[str-Asyncio] - att... 331s FAILED tests/test_attributes.py::test_read_write_attribute[bool-Asyncio] - at... 331s FAILED tests/test_attributes.py::test_read_write_attribute[(int,)-Asyncio] - ... 331s FAILED tests/test_attributes.py::test_read_write_attribute[(float,)-Asyncio] 331s FAILED tests/test_attributes.py::test_read_write_attribute[(str,)-Asyncio] - ... 331s FAILED tests/test_attributes.py::test_read_write_attribute[(bool,)-Asyncio] 331s FAILED tests/test_attributes.py::test_read_write_attribute[((int,),)-Asyncio] 331s FAILED tests/test_attributes.py::test_read_write_attribute[((float,),)-Asyncio] 331s FAILED tests/test_attributes.py::test_read_write_attribute[((str,),)-Asyncio] 331s FAILED tests/test_attributes.py::test_read_write_attribute[((bool,),)-Asyncio] 331s FAILED tests/test_attributes.py::test_read_write_attribute_decorated_methods[Asyncio] 331s FAILED tests/test_attributes.py::test_read_write_dynamic_attribute[low_level_read-Asyncio] 331s FAILED tests/test_attributes.py::test_read_write_dynamic_attribute[high_level_read-Asyncio] 331s FAILED tests/test_attributes.py::test_async_add_remove_dynamic_attribute - de... 331s FAILED tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_default_names[Asyncio] 331s FAILED tests/test_attributes.py::test_read_write_dynamic_attribute_decorated_methods_user_names[Asyncio] 331s FAILED tests/test_attributes.py::test_read_write_dynamic_attribute_is_allowed_with_async[Asyncio] 331s FAILED tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Asyncio-True] 331s FAILED tests/test_attributes.py::test_dynamic_attribute_with_green_mode[Asyncio-False] 331s FAILED tests/test_attributes.py::test_attribute_decorators[Asyncio] - server_... 331s FAILED tests/test_attributes.py::test_polled_attribute[Asyncio] - server_gree... 331s FAILED tests/test_commands.py::test_identity_command[int-Asyncio] - command_t... 331s FAILED tests/test_commands.py::test_identity_command[float-Asyncio] - command... 331s FAILED tests/test_commands.py::test_identity_command[str-Asyncio] - command_t... 331s FAILED tests/test_commands.py::test_identity_command[bool-Asyncio] - command_... 331s FAILED tests/test_commands.py::test_identity_command[(int,)-Asyncio] - comman... 331s FAILED tests/test_commands.py::test_identity_command[(float,)-Asyncio] - comm... 331s FAILED tests/test_commands.py::test_identity_command[(str,)-Asyncio] - comman... 331s FAILED tests/test_commands.py::test_identity_command[DevVarLongStringArray-Asyncio] 331s FAILED tests/test_commands.py::test_identity_command[DevVarDoubleStringArray-Asyncio] 331s FAILED tests/test_commands.py::test_decorated_command[Asyncio] - server_green... 331s FAILED tests/test_commands.py::test_command_isallowed[Asyncio] - server_green... 331s FAILED tests/test_commands.py::test_dynamic_command[Asyncio-True] - device_co... 331s FAILED tests/test_commands.py::test_dynamic_command[Asyncio-False] - device_c... 331s FAILED tests/test_device_proxy.py::test_high_level_api_for_asyncio - tango_te... 331s FAILED tests/test_device_proxy.py::test_repr_uses_info[Asyncio] - green_mode_... 331s FAILED tests/test_device_proxy.py::test_repr_default_if_info_unavailable[Asyncio] 331s FAILED tests/test_device_proxy.py::test_multiple_repr_calls_only_call_info_once[Asyncio] 331s FAILED tests/test_device_proxy.py::test_no_memory_leak_for_repr[Asyncio] - gr... 331s FAILED tests/test_device_proxy.py::test_no_memory_leak_for_str[Asyncio] - gre... 331s FAILED tests/test_device_proxy.py::test_no_cyclic_ref_for_proxy[Asyncio] - gr... 331s FAILED tests/test_log.py::test_async_logging_decorators - def test_async_logg... 331s FAILED tests/test_log.py::test_logging[Asyncio] - server_green_mode = tango._... 331s FAILED tests/test_server.py::test_empty_device[Asyncio] - server_green_mode =... 331s FAILED tests/test_server.py::test_set_state_status[ON-Asyncio-False] - state ... 331s FAILED tests/test_server.py::test_set_state_status[ON-Asyncio-True] - state =... 331s FAILED tests/test_server.py::test_set_state_status[OFF-Asyncio-False] - state... 331s FAILED tests/test_server.py::test_set_state_status[OFF-Asyncio-True] - state ... 331s FAILED tests/test_server.py::test_set_state_status[CLOSE-Asyncio-False] - sta... 331s FAILED tests/test_server.py::test_set_state_status[CLOSE-Asyncio-True] - stat... 331s FAILED tests/test_server.py::test_set_state_status[OPEN-Asyncio-False] - stat... 331s FAILED tests/test_server.py::test_set_state_status[OPEN-Asyncio-True] - state... 331s FAILED tests/test_server.py::test_set_state_status[INSERT-Asyncio-False] - st... 331s FAILED tests/test_server.py::test_set_state_status[INSERT-Asyncio-True] - sta... 331s FAILED tests/test_server.py::test_set_state_status[EXTRACT-Asyncio-False] - s... 331s FAILED tests/test_server.py::test_set_state_status[EXTRACT-Asyncio-True] - st... 331s FAILED tests/test_server.py::test_set_state_status[MOVING-Asyncio-False] - st... 331s FAILED tests/test_server.py::test_set_state_status[MOVING-Asyncio-True] - sta... 331s FAILED tests/test_server.py::test_set_state_status[STANDBY-Asyncio-False] - s... 331s FAILED tests/test_server.py::test_set_state_status[STANDBY-Asyncio-True] - st... 331s FAILED tests/test_server.py::test_set_state_status[FAULT-Asyncio-False] - sta... 331s FAILED tests/test_server.py::test_set_state_status[FAULT-Asyncio-True] - stat... 331s FAILED tests/test_server.py::test_set_state_status[INIT-Asyncio-False] - stat... 331s FAILED tests/test_server.py::test_set_state_status[INIT-Asyncio-True] - state... 331s FAILED tests/test_server.py::test_set_state_status[RUNNING-Asyncio-False] - s... 331s FAILED tests/test_server.py::test_set_state_status[RUNNING-Asyncio-True] - st... 331s FAILED tests/test_server.py::test_set_state_status[ALARM-Asyncio-False] - sta... 331s FAILED tests/test_server.py::test_set_state_status[ALARM-Asyncio-True] - stat... 331s FAILED tests/test_server.py::test_set_state_status[DISABLE-Asyncio-False] - s... 331s FAILED tests/test_server.py::test_set_state_status[DISABLE-Asyncio-True] - st... 331s FAILED tests/test_server.py::test_set_state_status[UNKNOWN-Asyncio-False] - s... 331s FAILED tests/test_server.py::test_set_state_status[UNKNOWN-Asyncio-True] - st... 331s FAILED tests/test_server.py::test_user_dev_state_status[Asyncio] - server_gre... 331s FAILED tests/test_server.py::test_attr_quality_checked_with_state[Asyncio] - ... 331s FAILED tests/test_server.py::test_device_get_attr_config[Asyncio] - server_gr... 331s FAILED tests/test_server.py::test_device_set_attr_config[Asyncio] - server_gr... 331s FAILED tests/test_server.py::test_exception_propagation[Asyncio] - server_gre... 331s FAILED tests/test_server.py::test_asyncio_server_init_hook_change_state - def... 331s FAILED tests/test_server.py::test_async_server_init_hook_called_after_init - ... 331s FAILED tests/test_server.py::test_asyncio_server_init_hook_exception - def te... 331s FAILED tests/test_server.py::test_deprecation_warning_for_sync_attr_com_methods_in_asyncio_device 331s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[init_device] 331s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[delete_device] 331s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_state] 331s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[dev_status] 331s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[read_attr_hardware] 331s FAILED tests/test_server.py::test_deprecation_warning_for_standard_methods_in_asyncio_device[always_executed_hook] 331s FAILED tests/test_test_context.py::test_single_device[Asyncio] - server_green... 331s FAILED tests/test_test_context.py::test_multi_with_single_device[Asyncio] - s... 331s FAILED tests/test_test_context.py::test_multi_with_two_devices[Asyncio] - ser... 331s FAILED tests/test_test_context.py::test_multi_with_mixed_device_green_modes[Device1Asyncio-Device2Asyncio-None] 331s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Synchronous-Asyncio-Asyncio-None-SynchronousExecutor] 331s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Synchronous-Synchronous-None-AsyncioExecutor] 331s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Asyncio-Gevent-Gevent-None-AsyncioExecutor] 331s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1Gevent-Asyncio-Asyncio-None-GeventExecutor] 331s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Synchronous-Asyncio-None-SynchronousExecutor] 331s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Gevent-Asyncio-None-GeventExecutor] 331s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Synchronous-DeprecationWarning-AsyncioExecutor] 331s FAILED tests/test_test_context.py::test_green_modes_in_device_kwarg_and_global[Device1GreenModeUnspecified-Asyncio-Gevent-DeprecationWarning-AsyncioExecutor] 331s FAILED tests/test_test_context.py::test_multi_with_async_devices_initialised 331s FAILED tests/test_test_context.py::test_multi_with_two_devices_with_properties[Asyncio] 331s FAILED tests/test_test_context.py::test_test_context_async_device_proxy[True] 331s FAILED tests/test_test_context.py::test_test_context_async_device_proxy[False] 331s FAILED tests/test_test_context.py::test_test_context_multi_async_device_proxy[True] 331s FAILED tests/test_test_context.py::test_test_context_multi_async_device_proxy[False] 331s ERROR tests/test_device_proxy.py::test_read_write_attribute_with_green_modes[Asyncio] 331s = 108 failed, 952 passed, 56 skipped, 53 xfailed, 1 error in 145.14s (0:02:25) = 332s bash: line 1: 2495 Segmentation fault (core dumped) PATH=/usr/lib/tango/:$PATH $py -m pytest tests -v --forked --ignore tests/test_event.py --reruns 5 333s autopkgtest [09:13:30]: test command1: -----------------------] 334s autopkgtest [09:13:31]: test command1: - - - - - - - - - - results - - - - - - - - - - 334s command1 FAIL non-zero exit status 139 336s autopkgtest [09:13:33]: test command2: preparing testbed 442s Creating nova instance adt-resolute-amd64-pytango-20260205-090753-juju-7f2275-prod-proposed-migration-environment-15-892c9733-4447-4f0d-b8a7-909148c538f6 from image adt/ubuntu-resolute-amd64-server-20260204.img (UUID fedf54b4-458b-493e-8072-6425c19717b4)... 577s autopkgtest [09:17:34]: testbed dpkg architecture: amd64 577s autopkgtest [09:17:34]: testbed apt version: 3.1.14 580s autopkgtest [09:17:37]: @@@@@@@@@@@@@@@@@@@@ test bed setup 581s autopkgtest [09:17:38]: testbed release detected to be: resolute 586s autopkgtest [09:17:43]: updating testbed package index (apt update) 589s Get:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease [124 kB] 589s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 589s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 590s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 590s Get:5 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse Sources [35.4 kB] 590s Get:6 http://ftpmaster.internal/ubuntu resolute-proposed/universe Sources [1719 kB] 590s Get:7 http://ftpmaster.internal/ubuntu resolute-proposed/restricted Sources [5260 B] 590s Get:8 http://ftpmaster.internal/ubuntu resolute-proposed/main Sources [228 kB] 590s Get:9 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 Packages [276 kB] 590s Get:10 http://ftpmaster.internal/ubuntu resolute-proposed/main i386 Packages [206 kB] 590s Get:11 http://ftpmaster.internal/ubuntu resolute-proposed/main amd64 c-n-f Metadata [7252 B] 590s Get:12 http://ftpmaster.internal/ubuntu resolute-proposed/restricted i386 Packages [3692 B] 590s Get:13 http://ftpmaster.internal/ubuntu resolute-proposed/restricted amd64 Packages [32.9 kB] 590s Get:14 http://ftpmaster.internal/ubuntu resolute-proposed/restricted amd64 c-n-f Metadata [336 B] 590s Get:15 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 Packages [1566 kB] 590s Get:16 http://ftpmaster.internal/ubuntu resolute-proposed/universe i386 Packages [604 kB] 590s Get:17 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 c-n-f Metadata [42.6 kB] 590s Get:18 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse amd64 Packages [30.1 kB] 590s Get:19 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse i386 Packages [4824 B] 590s Get:20 http://ftpmaster.internal/ubuntu resolute-proposed/multiverse amd64 c-n-f Metadata [1116 B] 591s Fetched 4888 kB in 1s (4804 kB/s) 592s Reading package lists... 593s Hit:1 http://ftpmaster.internal/ubuntu resolute-proposed InRelease 593s Hit:2 http://ftpmaster.internal/ubuntu resolute InRelease 593s Hit:3 http://ftpmaster.internal/ubuntu resolute-updates InRelease 593s Hit:4 http://ftpmaster.internal/ubuntu resolute-security InRelease 593s Reading package lists... 593s Reading package lists... 594s Building dependency tree... 594s Reading state information... 594s Calculating upgrade... 594s The following packages will be upgraded: 594s pollinate python3-linkify-it python3-referencing sed 594s 4 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 594s Need to get 251 kB of archives. 594s After this operation, 4096 B disk space will be freed. 594s Get:1 http://ftpmaster.internal/ubuntu resolute/main amd64 sed amd64 4.9-2build3 [195 kB] 594s Get:2 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-linkify-it all 2.0.3-1ubuntu3 [19.4 kB] 594s Get:3 http://ftpmaster.internal/ubuntu resolute/main amd64 pollinate all 4.33-4ubuntu5 [14.0 kB] 594s Get:4 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-referencing all 0.36.2-1ubuntu2 [22.2 kB] 594s dpkg-preconfigure: unable to re-open stdin: No such file or directory 594s Fetched 251 kB in 0s (987 kB/s) 594s (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 ... 83957 files and directories currently installed.) 594s Preparing to unpack .../sed_4.9-2build3_amd64.deb ... 594s Unpacking sed (4.9-2build3) over (4.9-2build2) ... 595s Setting up sed (4.9-2build3) ... 595s (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 ... 83957 files and directories currently installed.) 595s Preparing to unpack .../python3-linkify-it_2.0.3-1ubuntu3_all.deb ... 595s Unpacking python3-linkify-it (2.0.3-1ubuntu3) over (2.0.3-1ubuntu2) ... 595s Preparing to unpack .../pollinate_4.33-4ubuntu5_all.deb ... 595s Unpacking pollinate (4.33-4ubuntu5) over (4.33-4ubuntu4) ... 595s Preparing to unpack .../python3-referencing_0.36.2-1ubuntu2_all.deb ... 595s Unpacking python3-referencing (0.36.2-1ubuntu2) over (0.36.2-1ubuntu1) ... 595s Setting up pollinate (4.33-4ubuntu5) ... 605s Setting up python3-linkify-it (2.0.3-1ubuntu3) ... 605s Setting up python3-referencing (0.36.2-1ubuntu2) ... 605s Processing triggers for install-info (7.2-5) ... 605s Processing triggers for man-db (2.13.1-1) ... 606s autopkgtest [09:18:03]: upgrading testbed (apt dist-upgrade and autopurge) 609s Reading package lists... 609s Building dependency tree... 609s Reading state information... 609s Calculating upgrade... 609s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 609s Reading package lists... 610s Building dependency tree... 610s Reading state information... 610s Solving dependencies... 610s 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 611s autopkgtest [09:18:08]: rebooting testbed after setup commands that affected boot 676s Reading package lists... 676s Building dependency tree... 676s Reading state information... 676s Solving dependencies... 676s The following NEW packages will be installed: 676s dbconfig-common dbconfig-mysql default-mysql-server libabsl20240722 676s libabsl20260107 libblas3 libboost-python1.88.0 libc-dev-bin libc6-dev 676s libcares2 libcos4-3 libcrypt-dev libev4t64 libexpat1-dev libgfortran5 676s libgoogle-perftools4t64 libgrpc++1.51t64 libgrpc29t64 libjpeg-turbo8 676s libjpeg8 liblapack3 libmecab2 libmysqlclient24 libnorm1t64 libomniorb4-3t64 676s libomnithread4 libpgm-5.3-0t64 libprotobuf-lite32t64 libprotobuf32t64 676s libprotoc32t64 libpython3-all-dev libpython3-dev libpython3.13-dev 676s libpython3.14 libpython3.14-dev libpython3.14-minimal libpython3.14-stdlib 676s libre2-11 libsodium23 libtango-tools libtango10 libtcmalloc-minimal4t64 676s libzmq5 linux-libc-dev mysql-client mysql-client-core mysql-common 676s mysql-server mysql-server-core opentelemetry-cpp python3-all python3-all-dev 676s python3-dev python3-gevent python3-greenlet python3-numpy python3-numpy-dev 676s python3-psutil python3-tango python3-zope.event python3-zope.interface 676s python3.13-dev python3.14 python3.14-dev python3.14-minimal rpcsvc-proto 676s tango-common tango-db zlib1g-dev 676s 0 upgraded, 69 newly installed, 0 to remove and 0 not upgraded. 676s Need to get 84.5 MB of archives. 676s After this operation, 461 MB of additional disk space will be used. 676s Get:1 http://ftpmaster.internal/ubuntu resolute/main amd64 mysql-common all 5.8+1.1.1ubuntu2 [7002 B] 676s Get:2 http://ftpmaster.internal/ubuntu resolute/main amd64 libtcmalloc-minimal4t64 amd64 2.16-1build1 [94.6 kB] 676s Get:3 http://ftpmaster.internal/ubuntu resolute/main amd64 libgoogle-perftools4t64 amd64 2.16-1build1 [208 kB] 676s Get:4 http://ftpmaster.internal/ubuntu resolute/main amd64 mysql-client-core amd64 8.4.8-0ubuntu1 [2203 kB] 676s Get:5 http://ftpmaster.internal/ubuntu resolute/main amd64 mysql-client amd64 8.4.8-0ubuntu1 [9124 B] 676s Get:6 http://ftpmaster.internal/ubuntu resolute/main amd64 libmecab2 amd64 0.996-15.1build3 [207 kB] 676s Get:7 http://ftpmaster.internal/ubuntu resolute/main amd64 libprotobuf-lite32t64 amd64 3.21.12-15 [251 kB] 676s Get:8 http://ftpmaster.internal/ubuntu resolute/main amd64 mysql-server-core amd64 8.4.8-0ubuntu1 [19.5 MB] 677s Get:9 http://ftpmaster.internal/ubuntu resolute/main amd64 mysql-server amd64 8.4.8-0ubuntu1 [1597 kB] 677s Get:10 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-numpy-dev amd64 1:2.3.5+ds-3 [147 kB] 677s Get:11 http://ftpmaster.internal/ubuntu resolute/main amd64 libblas3 amd64 3.12.1-7ubuntu1 [260 kB] 677s Get:12 http://ftpmaster.internal/ubuntu resolute/main amd64 libgfortran5 amd64 15.2.0-12ubuntu1 [939 kB] 677s Get:13 http://ftpmaster.internal/ubuntu resolute/main amd64 liblapack3 amd64 3.12.1-7ubuntu1 [2739 kB] 678s Get:14 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-numpy amd64 1:2.3.5+ds-3 [8129 kB] 678s Get:15 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.14-minimal amd64 3.14.2-1 [920 kB] 678s Get:16 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.14-minimal amd64 3.14.2-1 [2563 kB] 678s Get:17 http://ftpmaster.internal/ubuntu resolute/universe amd64 dbconfig-common all 2.0.25ubuntu1 [609 kB] 678s Get:18 http://ftpmaster.internal/ubuntu resolute/universe amd64 dbconfig-mysql all 2.0.25ubuntu1 [942 B] 678s Get:19 http://ftpmaster.internal/ubuntu resolute/universe amd64 libomnithread4 amd64 4.3.3+ds1-1 [13.2 kB] 679s Get:20 http://ftpmaster.internal/ubuntu resolute/universe amd64 libomniorb4-3t64 amd64 4.3.3+ds1-1 [1276 kB] 679s Get:21 http://ftpmaster.internal/ubuntu resolute/main amd64 libabsl20260107 amd64 20260107.0-0ubuntu2 [587 kB] 679s Get:22 http://ftpmaster.internal/ubuntu resolute/main amd64 libabsl20240722 amd64 20240722.0-4ubuntu1 [528 kB] 679s Get:23 http://ftpmaster.internal/ubuntu resolute/main amd64 libcares2 amd64 1.34.6-1 [102 kB] 679s Get:24 http://ftpmaster.internal/ubuntu resolute/main amd64 libprotobuf32t64 amd64 3.21.12-15 [955 kB] 679s Get:25 http://ftpmaster.internal/ubuntu resolute/main amd64 libprotoc32t64 amd64 3.21.12-15 [702 kB] 679s Get:26 http://ftpmaster.internal/ubuntu resolute/main amd64 libre2-11 amd64 20250805-1build1 [175 kB] 679s Get:27 http://ftpmaster.internal/ubuntu resolute/universe amd64 libgrpc29t64 amd64 1.51.1-7 [2926 kB] 679s Get:28 http://ftpmaster.internal/ubuntu resolute/universe amd64 libgrpc++1.51t64 amd64 1.51.1-7 [498 kB] 679s Get:29 http://ftpmaster.internal/ubuntu resolute/universe amd64 opentelemetry-cpp amd64 1.23.0-3build1 [634 kB] 679s Get:30 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 tango-common all 10.0.2+dfsg1-4build1 [8608 B] 679s Get:31 http://ftpmaster.internal/ubuntu resolute/universe amd64 libcos4-3 amd64 4.3.3+ds1-1 [1297 kB] 679s Get:32 http://ftpmaster.internal/ubuntu resolute/main amd64 libjpeg-turbo8 amd64 2.1.5-4ubuntu2 [152 kB] 679s Get:33 http://ftpmaster.internal/ubuntu resolute/main amd64 libjpeg8 amd64 8c-2ubuntu11 [2148 B] 679s Get:34 http://ftpmaster.internal/ubuntu resolute/universe amd64 libnorm1t64 amd64 1.5.9+dfsg-4 [158 kB] 679s Get:35 http://ftpmaster.internal/ubuntu resolute/universe amd64 libpgm-5.3-0t64 amd64 5.3.128~dfsg-2.1build2 [168 kB] 679s Get:36 http://ftpmaster.internal/ubuntu resolute/main amd64 libsodium23 amd64 1.0.18-2 [165 kB] 679s Get:37 http://ftpmaster.internal/ubuntu resolute/universe amd64 libzmq5 amd64 4.3.5-1build3 [262 kB] 679s Get:38 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 libtango10 amd64 10.0.2+dfsg1-4build1 [2077 kB] 680s Get:39 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 libtango-tools amd64 10.0.2+dfsg1-4build1 [26.0 kB] 680s Get:40 http://ftpmaster.internal/ubuntu resolute/main amd64 libmysqlclient24 amd64 8.4.8-0ubuntu1 [1258 kB] 680s Get:41 http://ftpmaster.internal/ubuntu resolute-proposed/universe amd64 tango-db amd64 10.0.2+dfsg1-4build1 [209 kB] 680s Get:42 http://ftpmaster.internal/ubuntu resolute/universe amd64 default-mysql-server all 1.1.1ubuntu2 [3168 B] 680s Get:43 http://ftpmaster.internal/ubuntu resolute/main amd64 libboost-python1.88.0 amd64 1.88.0-1.4ubuntu3 [360 kB] 680s Get:44 http://ftpmaster.internal/ubuntu resolute/main amd64 libc-dev-bin amd64 2.42-2ubuntu4 [23.3 kB] 680s Get:45 http://ftpmaster.internal/ubuntu resolute/main amd64 linux-libc-dev amd64 6.18.0-9.9 [1860 kB] 680s Get:46 http://ftpmaster.internal/ubuntu resolute/main amd64 libcrypt-dev amd64 1:4.5.1-1 [122 kB] 680s Get:47 http://ftpmaster.internal/ubuntu resolute/main amd64 rpcsvc-proto amd64 1.4.3-1build1 [68.3 kB] 680s Get:48 http://ftpmaster.internal/ubuntu resolute/main amd64 libc6-dev amd64 2.42-2ubuntu4 [2207 kB] 680s Get:49 http://ftpmaster.internal/ubuntu resolute/universe amd64 libev4t64 amd64 1:4.33-2.1build2 [31.5 kB] 680s Get:50 http://ftpmaster.internal/ubuntu resolute/main amd64 libexpat1-dev amd64 2.7.4-1 [145 kB] 680s Get:51 http://ftpmaster.internal/ubuntu resolute/main amd64 zlib1g-dev amd64 1:1.3.dfsg+really1.3.1-1ubuntu2 [898 kB] 680s Get:52 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.13-dev amd64 3.13.11-1 [5798 kB] 680s Get:53 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3-dev amd64 3.13.9-3 [11.2 kB] 680s Get:54 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.14-stdlib amd64 3.14.2-1 [2398 kB] 681s Get:55 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.14 amd64 3.14.2-1 [2568 kB] 681s Get:56 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3.14-dev amd64 3.14.2-1 [5963 kB] 681s Get:57 http://ftpmaster.internal/ubuntu resolute/main amd64 libpython3-all-dev amd64 3.13.9-3 [916 B] 681s Get:58 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.14 amd64 3.14.2-1 [816 kB] 681s Get:59 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-all amd64 3.13.9-3 [890 B] 681s Get:60 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.13-dev amd64 3.13.11-1 [508 kB] 681s Get:61 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-dev amd64 3.13.9-3 [26.6 kB] 681s Get:62 http://ftpmaster.internal/ubuntu resolute/main amd64 python3.14-dev amd64 3.14.2-1 [510 kB] 681s Get:63 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-all-dev amd64 3.13.9-3 [914 B] 681s Get:64 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-psutil amd64 7.1.0-1ubuntu1 [191 kB] 681s Get:65 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-zope.event all 6.0-2 [7710 B] 681s Get:66 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-zope.interface amd64 8.2-1 [146 kB] 681s Get:67 http://ftpmaster.internal/ubuntu resolute/main amd64 python3-greenlet amd64 3.2.4-3 [185 kB] 681s Get:68 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-gevent amd64 24.11.1-1build2 [1203 kB] 681s Get:69 http://ftpmaster.internal/ubuntu resolute/universe amd64 python3-tango amd64 10.0.2-3 [3945 kB] 682s Preconfiguring packages ... 682s Fetched 84.5 MB in 6s (14.1 MB/s) 682s Selecting previously unselected package mysql-common. 682s (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 ... 83957 files and directories currently installed.) 682s Preparing to unpack .../0-mysql-common_5.8+1.1.1ubuntu2_all.deb ... 682s Unpacking mysql-common (5.8+1.1.1ubuntu2) ... 682s Selecting previously unselected package libtcmalloc-minimal4t64:amd64. 682s Preparing to unpack .../1-libtcmalloc-minimal4t64_2.16-1build1_amd64.deb ... 682s Unpacking libtcmalloc-minimal4t64:amd64 (2.16-1build1) ... 682s Selecting previously unselected package libgoogle-perftools4t64:amd64. 682s Preparing to unpack .../2-libgoogle-perftools4t64_2.16-1build1_amd64.deb ... 682s Unpacking libgoogle-perftools4t64:amd64 (2.16-1build1) ... 682s Selecting previously unselected package mysql-client-core. 682s Preparing to unpack .../3-mysql-client-core_8.4.8-0ubuntu1_amd64.deb ... 682s Unpacking mysql-client-core (8.4.8-0ubuntu1) ... 682s Selecting previously unselected package mysql-client. 682s Preparing to unpack .../4-mysql-client_8.4.8-0ubuntu1_amd64.deb ... 682s Unpacking mysql-client (8.4.8-0ubuntu1) ... 682s Selecting previously unselected package libmecab2:amd64. 682s Preparing to unpack .../5-libmecab2_0.996-15.1build3_amd64.deb ... 682s Unpacking libmecab2:amd64 (0.996-15.1build3) ... 682s Selecting previously unselected package libprotobuf-lite32t64:amd64. 682s Preparing to unpack .../6-libprotobuf-lite32t64_3.21.12-15_amd64.deb ... 682s Unpacking libprotobuf-lite32t64:amd64 (3.21.12-15) ... 682s Selecting previously unselected package mysql-server-core. 682s Preparing to unpack .../7-mysql-server-core_8.4.8-0ubuntu1_amd64.deb ... 682s Unpacking mysql-server-core (8.4.8-0ubuntu1) ... 682s Setting up mysql-common (5.8+1.1.1ubuntu2) ... 682s update-alternatives: using /etc/mysql/my.cnf.fallback to provide /etc/mysql/my.cnf (my.cnf) in auto mode 682s Selecting previously unselected package mysql-server. 682s (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 ... 84176 files and directories currently installed.) 683s Preparing to unpack .../00-mysql-server_8.4.8-0ubuntu1_amd64.deb ... 683s Unpacking mysql-server (8.4.8-0ubuntu1) ... 683s Selecting previously unselected package python3-numpy-dev:amd64. 683s Preparing to unpack .../01-python3-numpy-dev_1%3a2.3.5+ds-3_amd64.deb ... 683s Unpacking python3-numpy-dev:amd64 (1:2.3.5+ds-3) ... 683s Selecting previously unselected package libblas3:amd64. 683s Preparing to unpack .../02-libblas3_3.12.1-7ubuntu1_amd64.deb ... 683s Unpacking libblas3:amd64 (3.12.1-7ubuntu1) ... 683s Selecting previously unselected package libgfortran5:amd64. 683s Preparing to unpack .../03-libgfortran5_15.2.0-12ubuntu1_amd64.deb ... 683s Unpacking libgfortran5:amd64 (15.2.0-12ubuntu1) ... 683s Selecting previously unselected package liblapack3:amd64. 683s Preparing to unpack .../04-liblapack3_3.12.1-7ubuntu1_amd64.deb ... 683s Unpacking liblapack3:amd64 (3.12.1-7ubuntu1) ... 683s Selecting previously unselected package python3-numpy. 683s Preparing to unpack .../05-python3-numpy_1%3a2.3.5+ds-3_amd64.deb ... 683s Unpacking python3-numpy (1:2.3.5+ds-3) ... 683s Selecting previously unselected package libpython3.14-minimal:amd64. 683s Preparing to unpack .../06-libpython3.14-minimal_3.14.2-1_amd64.deb ... 683s Unpacking libpython3.14-minimal:amd64 (3.14.2-1) ... 683s Selecting previously unselected package python3.14-minimal. 683s Preparing to unpack .../07-python3.14-minimal_3.14.2-1_amd64.deb ... 683s Unpacking python3.14-minimal (3.14.2-1) ... 683s Selecting previously unselected package dbconfig-common. 683s Preparing to unpack .../08-dbconfig-common_2.0.25ubuntu1_all.deb ... 683s Unpacking dbconfig-common (2.0.25ubuntu1) ... 683s Selecting previously unselected package dbconfig-mysql. 683s Preparing to unpack .../09-dbconfig-mysql_2.0.25ubuntu1_all.deb ... 683s Unpacking dbconfig-mysql (2.0.25ubuntu1) ... 683s Selecting previously unselected package libomnithread4:amd64. 683s Preparing to unpack .../10-libomnithread4_4.3.3+ds1-1_amd64.deb ... 683s Unpacking libomnithread4:amd64 (4.3.3+ds1-1) ... 683s Selecting previously unselected package libomniorb4-3t64:amd64. 683s Preparing to unpack .../11-libomniorb4-3t64_4.3.3+ds1-1_amd64.deb ... 683s Unpacking libomniorb4-3t64:amd64 (4.3.3+ds1-1) ... 683s Selecting previously unselected package libabsl20260107:amd64. 683s Preparing to unpack .../12-libabsl20260107_20260107.0-0ubuntu2_amd64.deb ... 683s Unpacking libabsl20260107:amd64 (20260107.0-0ubuntu2) ... 683s Selecting previously unselected package libabsl20240722:amd64. 683s Preparing to unpack .../13-libabsl20240722_20240722.0-4ubuntu1_amd64.deb ... 683s Unpacking libabsl20240722:amd64 (20240722.0-4ubuntu1) ... 683s Selecting previously unselected package libcares2:amd64. 683s Preparing to unpack .../14-libcares2_1.34.6-1_amd64.deb ... 683s Unpacking libcares2:amd64 (1.34.6-1) ... 683s Selecting previously unselected package libprotobuf32t64:amd64. 683s Preparing to unpack .../15-libprotobuf32t64_3.21.12-15_amd64.deb ... 683s Unpacking libprotobuf32t64:amd64 (3.21.12-15) ... 683s Selecting previously unselected package libprotoc32t64:amd64. 683s Preparing to unpack .../16-libprotoc32t64_3.21.12-15_amd64.deb ... 683s Unpacking libprotoc32t64:amd64 (3.21.12-15) ... 683s Selecting previously unselected package libre2-11:amd64. 683s Preparing to unpack .../17-libre2-11_20250805-1build1_amd64.deb ... 683s Unpacking libre2-11:amd64 (20250805-1build1) ... 683s Selecting previously unselected package libgrpc29t64:amd64. 683s Preparing to unpack .../18-libgrpc29t64_1.51.1-7_amd64.deb ... 683s Unpacking libgrpc29t64:amd64 (1.51.1-7) ... 683s Selecting previously unselected package libgrpc++1.51t64:amd64. 683s Preparing to unpack .../19-libgrpc++1.51t64_1.51.1-7_amd64.deb ... 683s Unpacking libgrpc++1.51t64:amd64 (1.51.1-7) ... 683s Selecting previously unselected package opentelemetry-cpp:amd64. 683s Preparing to unpack .../20-opentelemetry-cpp_1.23.0-3build1_amd64.deb ... 683s Unpacking opentelemetry-cpp:amd64 (1.23.0-3build1) ... 683s Selecting previously unselected package tango-common. 683s Preparing to unpack .../21-tango-common_10.0.2+dfsg1-4build1_all.deb ... 683s Unpacking tango-common (10.0.2+dfsg1-4build1) ... 683s Selecting previously unselected package libcos4-3:amd64. 683s Preparing to unpack .../22-libcos4-3_4.3.3+ds1-1_amd64.deb ... 683s Unpacking libcos4-3:amd64 (4.3.3+ds1-1) ... 683s Selecting previously unselected package libjpeg-turbo8:amd64. 683s Preparing to unpack .../23-libjpeg-turbo8_2.1.5-4ubuntu2_amd64.deb ... 683s Unpacking libjpeg-turbo8:amd64 (2.1.5-4ubuntu2) ... 683s Selecting previously unselected package libjpeg8:amd64. 683s Preparing to unpack .../24-libjpeg8_8c-2ubuntu11_amd64.deb ... 683s Unpacking libjpeg8:amd64 (8c-2ubuntu11) ... 683s Selecting previously unselected package libnorm1t64:amd64. 683s Preparing to unpack .../25-libnorm1t64_1.5.9+dfsg-4_amd64.deb ... 683s Unpacking libnorm1t64:amd64 (1.5.9+dfsg-4) ... 683s Selecting previously unselected package libpgm-5.3-0t64:amd64. 683s Preparing to unpack .../26-libpgm-5.3-0t64_5.3.128~dfsg-2.1build2_amd64.deb ... 683s Unpacking libpgm-5.3-0t64:amd64 (5.3.128~dfsg-2.1build2) ... 683s Selecting previously unselected package libsodium23:amd64. 683s Preparing to unpack .../27-libsodium23_1.0.18-2_amd64.deb ... 683s Unpacking libsodium23:amd64 (1.0.18-2) ... 683s Selecting previously unselected package libzmq5:amd64. 683s Preparing to unpack .../28-libzmq5_4.3.5-1build3_amd64.deb ... 683s Unpacking libzmq5:amd64 (4.3.5-1build3) ... 683s Selecting previously unselected package libtango10:amd64. 683s Preparing to unpack .../29-libtango10_10.0.2+dfsg1-4build1_amd64.deb ... 683s Unpacking libtango10:amd64 (10.0.2+dfsg1-4build1) ... 683s Selecting previously unselected package libtango-tools. 683s Preparing to unpack .../30-libtango-tools_10.0.2+dfsg1-4build1_amd64.deb ... 683s Unpacking libtango-tools (10.0.2+dfsg1-4build1) ... 683s Selecting previously unselected package libmysqlclient24:amd64. 683s Preparing to unpack .../31-libmysqlclient24_8.4.8-0ubuntu1_amd64.deb ... 683s Unpacking libmysqlclient24:amd64 (8.4.8-0ubuntu1) ... 683s Selecting previously unselected package tango-db. 683s Preparing to unpack .../32-tango-db_10.0.2+dfsg1-4build1_amd64.deb ... 683s Unpacking tango-db (10.0.2+dfsg1-4build1) ... 683s Selecting previously unselected package default-mysql-server. 683s Preparing to unpack .../33-default-mysql-server_1.1.1ubuntu2_all.deb ... 683s Unpacking default-mysql-server (1.1.1ubuntu2) ... 683s Selecting previously unselected package libboost-python1.88.0. 683s Preparing to unpack .../34-libboost-python1.88.0_1.88.0-1.4ubuntu3_amd64.deb ... 683s Unpacking libboost-python1.88.0 (1.88.0-1.4ubuntu3) ... 683s Selecting previously unselected package libc-dev-bin. 683s Preparing to unpack .../35-libc-dev-bin_2.42-2ubuntu4_amd64.deb ... 683s Unpacking libc-dev-bin (2.42-2ubuntu4) ... 683s Selecting previously unselected package linux-libc-dev:amd64. 683s Preparing to unpack .../36-linux-libc-dev_6.18.0-9.9_amd64.deb ... 683s Unpacking linux-libc-dev:amd64 (6.18.0-9.9) ... 683s Selecting previously unselected package libcrypt-dev:amd64. 683s Preparing to unpack .../37-libcrypt-dev_1%3a4.5.1-1_amd64.deb ... 683s Unpacking libcrypt-dev:amd64 (1:4.5.1-1) ... 683s Selecting previously unselected package rpcsvc-proto. 683s Preparing to unpack .../38-rpcsvc-proto_1.4.3-1build1_amd64.deb ... 683s Unpacking rpcsvc-proto (1.4.3-1build1) ... 683s Selecting previously unselected package libc6-dev:amd64. 684s Preparing to unpack .../39-libc6-dev_2.42-2ubuntu4_amd64.deb ... 684s Unpacking libc6-dev:amd64 (2.42-2ubuntu4) ... 684s Selecting previously unselected package libev4t64:amd64. 684s Preparing to unpack .../40-libev4t64_1%3a4.33-2.1build2_amd64.deb ... 684s Unpacking libev4t64:amd64 (1:4.33-2.1build2) ... 684s Selecting previously unselected package libexpat1-dev:amd64. 684s Preparing to unpack .../41-libexpat1-dev_2.7.4-1_amd64.deb ... 684s Unpacking libexpat1-dev:amd64 (2.7.4-1) ... 684s Selecting previously unselected package zlib1g-dev:amd64. 684s Preparing to unpack .../42-zlib1g-dev_1%3a1.3.dfsg+really1.3.1-1ubuntu2_amd64.deb ... 684s Unpacking zlib1g-dev:amd64 (1:1.3.dfsg+really1.3.1-1ubuntu2) ... 684s Selecting previously unselected package libpython3.13-dev:amd64. 684s Preparing to unpack .../43-libpython3.13-dev_3.13.11-1_amd64.deb ... 684s Unpacking libpython3.13-dev:amd64 (3.13.11-1) ... 684s Selecting previously unselected package libpython3-dev:amd64. 684s Preparing to unpack .../44-libpython3-dev_3.13.9-3_amd64.deb ... 684s Unpacking libpython3-dev:amd64 (3.13.9-3) ... 684s Selecting previously unselected package libpython3.14-stdlib:amd64. 684s Preparing to unpack .../45-libpython3.14-stdlib_3.14.2-1_amd64.deb ... 684s Unpacking libpython3.14-stdlib:amd64 (3.14.2-1) ... 684s Selecting previously unselected package libpython3.14:amd64. 684s Preparing to unpack .../46-libpython3.14_3.14.2-1_amd64.deb ... 684s Unpacking libpython3.14:amd64 (3.14.2-1) ... 684s Selecting previously unselected package libpython3.14-dev:amd64. 684s Preparing to unpack .../47-libpython3.14-dev_3.14.2-1_amd64.deb ... 684s Unpacking libpython3.14-dev:amd64 (3.14.2-1) ... 684s Selecting previously unselected package libpython3-all-dev:amd64. 684s Preparing to unpack .../48-libpython3-all-dev_3.13.9-3_amd64.deb ... 684s Unpacking libpython3-all-dev:amd64 (3.13.9-3) ... 684s Selecting previously unselected package python3.14. 684s Preparing to unpack .../49-python3.14_3.14.2-1_amd64.deb ... 684s Unpacking python3.14 (3.14.2-1) ... 684s Selecting previously unselected package python3-all. 684s Preparing to unpack .../50-python3-all_3.13.9-3_amd64.deb ... 684s Unpacking python3-all (3.13.9-3) ... 684s Selecting previously unselected package python3.13-dev. 684s Preparing to unpack .../51-python3.13-dev_3.13.11-1_amd64.deb ... 684s Unpacking python3.13-dev (3.13.11-1) ... 684s Selecting previously unselected package python3-dev. 684s Preparing to unpack .../52-python3-dev_3.13.9-3_amd64.deb ... 684s Unpacking python3-dev (3.13.9-3) ... 684s Selecting previously unselected package python3.14-dev. 684s Preparing to unpack .../53-python3.14-dev_3.14.2-1_amd64.deb ... 684s Unpacking python3.14-dev (3.14.2-1) ... 684s Selecting previously unselected package python3-all-dev. 684s Preparing to unpack .../54-python3-all-dev_3.13.9-3_amd64.deb ... 684s Unpacking python3-all-dev (3.13.9-3) ... 684s Selecting previously unselected package python3-psutil. 684s Preparing to unpack .../55-python3-psutil_7.1.0-1ubuntu1_amd64.deb ... 684s Unpacking python3-psutil (7.1.0-1ubuntu1) ... 684s Selecting previously unselected package python3-zope.event. 684s Preparing to unpack .../56-python3-zope.event_6.0-2_all.deb ... 684s Unpacking python3-zope.event (6.0-2) ... 684s Selecting previously unselected package python3-zope.interface. 684s Preparing to unpack .../57-python3-zope.interface_8.2-1_amd64.deb ... 684s Unpacking python3-zope.interface (8.2-1) ... 684s Selecting previously unselected package python3-greenlet. 684s Preparing to unpack .../58-python3-greenlet_3.2.4-3_amd64.deb ... 684s Unpacking python3-greenlet (3.2.4-3) ... 684s Selecting previously unselected package python3-gevent. 684s Preparing to unpack .../59-python3-gevent_24.11.1-1build2_amd64.deb ... 684s Unpacking python3-gevent (24.11.1-1build2) ... 684s Selecting previously unselected package python3-tango. 684s Preparing to unpack .../60-python3-tango_10.0.2-3_amd64.deb ... 684s Unpacking python3-tango (10.0.2-3) ... 684s Setting up libprotobuf-lite32t64:amd64 (3.21.12-15) ... 684s Setting up libev4t64:amd64 (1:4.33-2.1build2) ... 684s Setting up libnorm1t64:amd64 (1.5.9+dfsg-4) ... 684s Setting up libmecab2:amd64 (0.996-15.1build3) ... 684s Setting up libprotobuf32t64:amd64 (3.21.12-15) ... 684s Setting up libboost-python1.88.0 (1.88.0-1.4ubuntu3) ... 684s Setting up libsodium23:amd64 (1.0.18-2) ... 684s Setting up python3-zope.event (6.0-2) ... 684s Setting up python3-zope.interface (8.2-1) ... 685s Setting up libpython3.14-minimal:amd64 (3.14.2-1) ... 685s Setting up linux-libc-dev:amd64 (6.18.0-9.9) ... 685s Setting up dbconfig-common (2.0.25ubuntu1) ... 685s Creating config file /etc/dbconfig-common/config with new version 685s Setting up libabsl20240722:amd64 (20240722.0-4ubuntu1) ... 685s Setting up libmysqlclient24:amd64 (8.4.8-0ubuntu1) ... 685s Setting up python3-psutil (7.1.0-1ubuntu1) ... 685s Setting up libpgm-5.3-0t64:amd64 (5.3.128~dfsg-2.1build2) ... 685s Setting up libblas3:amd64 (3.12.1-7ubuntu1) ... 685s update-alternatives: using /usr/lib/x86_64-linux-gnu/blas/libblas.so.3 to provide /usr/lib/x86_64-linux-gnu/libblas.so.3 (libblas.so.3-x86_64-linux-gnu) in auto mode 685s Setting up rpcsvc-proto (1.4.3-1build1) ... 685s Setting up python3-greenlet (3.2.4-3) ... 685s Setting up libcares2:amd64 (1.34.6-1) ... 685s Setting up python3-numpy-dev:amd64 (1:2.3.5+ds-3) ... 685s Setting up libtcmalloc-minimal4t64:amd64 (2.16-1build1) ... 685s Setting up libjpeg-turbo8:amd64 (2.1.5-4ubuntu2) ... 685s Setting up libomnithread4:amd64 (4.3.3+ds1-1) ... 685s Setting up libgfortran5:amd64 (15.2.0-12ubuntu1) ... 685s Setting up libcrypt-dev:amd64 (1:4.5.1-1) ... 685s Setting up libabsl20260107:amd64 (20260107.0-0ubuntu2) ... 685s Setting up libprotoc32t64:amd64 (3.21.12-15) ... 685s Setting up libc-dev-bin (2.42-2ubuntu4) ... 685s Setting up python3.14-minimal (3.14.2-1) ... 686s Setting up libjpeg8:amd64 (8c-2ubuntu11) ... 686s Setting up libre2-11:amd64 (20250805-1build1) ... 686s Setting up liblapack3:amd64 (3.12.1-7ubuntu1) ... 686s update-alternatives: using /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3 to provide /usr/lib/x86_64-linux-gnu/liblapack.so.3 (liblapack.so.3-x86_64-linux-gnu) in auto mode 686s Setting up libzmq5:amd64 (4.3.5-1build3) ... 686s Setting up libgoogle-perftools4t64:amd64 (2.16-1build1) ... 686s Setting up libomniorb4-3t64:amd64 (4.3.3+ds1-1) ... 686s Setting up libpython3.14-stdlib:amd64 (3.14.2-1) ... 686s Setting up python3-gevent (24.11.1-1build2) ... 686s /usr/lib/python3/dist-packages/gevent/_ffi/loop.py:226: SyntaxWarning: 'return' in a 'finally' block 686s return # pylint:disable=lost-exception,return-in-finally 686s Setting up mysql-server-core (8.4.8-0ubuntu1) ... 686s Setting up libgrpc29t64:amd64 (1.51.1-7) ... 686s Setting up python3-numpy (1:2.3.5+ds-3) ... 688s Setting up mysql-client-core (8.4.8-0ubuntu1) ... 688s Setting up libpython3.14:amd64 (3.14.2-1) ... 688s Setting up libc6-dev:amd64 (2.42-2ubuntu4) ... 688s Setting up libcos4-3:amd64 (4.3.3+ds1-1) ... 688s Setting up python3.14 (3.14.2-1) ... 689s Setting up mysql-client (8.4.8-0ubuntu1) ... 689s Setting up dbconfig-mysql (2.0.25ubuntu1) ... 689s Setting up libgrpc++1.51t64:amd64 (1.51.1-7) ... 689s Setting up python3-all (3.13.9-3) ... 689s Setting up libexpat1-dev:amd64 (2.7.4-1) ... 689s Setting up opentelemetry-cpp:amd64 (1.23.0-3build1) ... 689s Setting up zlib1g-dev:amd64 (1:1.3.dfsg+really1.3.1-1ubuntu2) ... 689s Setting up libpython3.14-dev:amd64 (3.14.2-1) ... 689s Setting up tango-common (10.0.2+dfsg1-4build1) ... 689s Adding group tango....done 689s Adding system user tango....done 689s Setting up mysql-server (8.4.8-0ubuntu1) ... 689s update-alternatives: using /etc/mysql/mysql.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode 689s Renaming removed key_buffer and myisam-recover options (if present) 693s Created symlink '/etc/systemd/system/multi-user.target.wants/mysql.service' → '/usr/lib/systemd/system/mysql.service'. 694s Setting up libtango10:amd64 (10.0.2+dfsg1-4build1) ... 694s Setting up python3.14-dev (3.14.2-1) ... 694s Setting up libtango-tools (10.0.2+dfsg1-4build1) ... 694s Setting up default-mysql-server (1.1.1ubuntu2) ... 694s Setting up python3-tango (10.0.2-3) ... 694s Setting up libpython3.13-dev:amd64 (3.13.11-1) ... 694s Setting up tango-db (10.0.2+dfsg1-4build1) ... 694s Determining localhost credentials from /etc/mysql/debian.cnf: succeeded. 694s dbconfig-common: writing config to /etc/dbconfig-common/tango-db.conf 694s Creating config file /etc/dbconfig-common/tango-db.conf with new version 694s Creating config file /var/lib/tango/.my.cnf with new version 694s checking privileges on database tango for tango@localhost: user creation needed. 694s granting access to database tango for tango@localhost: success. 694s verifying access for tango@localhost: success. 695s creating database tango: success. 695s verifying database tango exists: success. 695s populating database via sql... done. 695s dbconfig-common: flushing administrative password 695s Created symlink '/etc/systemd/system/multi-user.target.wants/tango-db.service' → '/usr/lib/systemd/system/tango-db.service'. 695s Setting up libpython3-dev:amd64 (3.13.9-3) ... 695s Setting up python3.13-dev (3.13.11-1) ... 695s Setting up libpython3-all-dev:amd64 (3.13.9-3) ... 695s Setting up python3-dev (3.13.9-3) ... 695s Setting up python3-all-dev (3.13.9-3) ... 695s Processing triggers for systemd (259-1ubuntu3) ... 695s Processing triggers for man-db (2.13.1-1) ... 696s Processing triggers for libc-bin (2.42-2ubuntu4) ... 735s autopkgtest [09:20:12]: 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 735s autopkgtest [09:20:12]: test command2: [----------------------- 736s Testing with python3.14: 736s TANGO Database sys/database/2 736s 736s Running since 2026-02-05 09:19:32 736s 736s Devices defined = 8 736s Devices exported = 2 736s Device servers defined = 4 736s Device servers exported = 1 736s 736s Device properties defined = 0 [History lgth = 0] 736s Class properties defined = 67 [History lgth = 0] 736s Device attribute properties defined = 0 [History lgth = 0] 736s Class attribute properties defined = 0 [History lgth = 0] 736s Object properties defined = 0 [History lgth = 0] 736s 737s bash: line 1: 3201 Segmentation fault (core dumped) $py -c "import tango; print(tango.Database().get_info())" 737s autopkgtest [09:20:14]: test command2: -----------------------] 739s autopkgtest [09:20:16]: test command2: - - - - - - - - - - results - - - - - - - - - - 739s command2 FLAKY non-zero exit status 139 740s autopkgtest [09:20:17]: @@@@@@@@@@@@@@@@@@@@ summary 740s command1 FAIL non-zero exit status 139 740s command2 FLAKY non-zero exit status 139