Warning: Permanently added '2620:52:3:1:dead:beef:cafe:c15a' (ED25519) to the list of known hosts. You can reproduce this build on your computer by running: sudo dnf install copr-rpmbuild /usr/bin/copr-rpmbuild --verbose --drop-resultdir --task-url https://copr.fedorainfracloud.org/backend/get-build-task/9030623-fedora-rawhide-x86_64 --chroot fedora-rawhide-x86_64 Version: 1.3 PID: 12050 Logging PID: 12051 Task: {'allow_user_ssh': False, 'appstream': False, 'background': True, 'bootstrap': 'off', 'build_id': 9030623, 'buildroot_pkgs': [], 'chroot': 'fedora-rawhide-x86_64', 'enable_net': False, 'fedora_review': False, 'git_hash': 'b0abb4237bb91247b569c36a205aeec56e28abd1', 'git_repo': 'https://copr-dist-git.fedorainfracloud.org/git/@python/python3.14/python-flask-sqlalchemy', 'isolation': 'default', 'memory_reqs': 2048, 'package_name': 'python-flask-sqlalchemy', 'package_version': '3.0.5-7', 'project_dirname': 'python3.14', 'project_name': 'python3.14', 'project_owner': '@python', 'repo_priority': 9, 'repos': [{'baseurl': 'https://download.copr.fedorainfracloud.org/results/@python/python3.14/fedora-rawhide-x86_64/', 'id': 'copr_base', 'name': 'Copr repository', 'priority': 9}, {'baseurl': 'http://kojipkgs.fedoraproject.org/repos/rawhide/latest/$basearch/', 'id': 'http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch', 'name': 'Additional repo http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch'}], 'sandbox': '@python/python3.14--churchyard', 'source_json': {}, 'source_type': None, 'ssh_public_keys': None, 'storage': 0, 'submitter': 'churchyard', 'tags': [], 'task_id': '9030623-fedora-rawhide-x86_64', 'timeout': 18000, 'uses_devel_repo': False, 'with_opts': [], 'without_opts': []} Running: git clone https://copr-dist-git.fedorainfracloud.org/git/@python/python3.14/python-flask-sqlalchemy /var/lib/copr-rpmbuild/workspace/workdir-atq_oxgr/python-flask-sqlalchemy --depth 500 --no-single-branch --recursive cmd: ['git', 'clone', 'https://copr-dist-git.fedorainfracloud.org/git/@python/python3.14/python-flask-sqlalchemy', '/var/lib/copr-rpmbuild/workspace/workdir-atq_oxgr/python-flask-sqlalchemy', '--depth', '500', '--no-single-branch', '--recursive'] cwd: . rc: 0 stdout: stderr: Cloning into '/var/lib/copr-rpmbuild/workspace/workdir-atq_oxgr/python-flask-sqlalchemy'... Running: git checkout b0abb4237bb91247b569c36a205aeec56e28abd1 -- cmd: ['git', 'checkout', 'b0abb4237bb91247b569c36a205aeec56e28abd1', '--'] cwd: /var/lib/copr-rpmbuild/workspace/workdir-atq_oxgr/python-flask-sqlalchemy rc: 0 stdout: stderr: Note: switching to 'b0abb4237bb91247b569c36a205aeec56e28abd1'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by switching back to a branch. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. Example: git switch -c Or undo this operation with: git switch - Turn off this advice by setting config variable advice.detachedHead to false HEAD is now at b0abb42 automatic import of python-flask-sqlalchemy Running: dist-git-client sources cmd: ['dist-git-client', 'sources'] cwd: /var/lib/copr-rpmbuild/workspace/workdir-atq_oxgr/python-flask-sqlalchemy rc: 0 stdout: stderr: INFO: Reading stdout from command: git rev-parse --abbrev-ref HEAD INFO: Reading stdout from command: git rev-parse HEAD INFO: Reading sources specification file: sources INFO: Downloading flask_sqlalchemy-3.0.5.tar.gz INFO: Reading stdout from command: curl --help all INFO: Calling: curl -H Pragma: -o flask_sqlalchemy-3.0.5.tar.gz --location --connect-timeout 60 --retry 3 --retry-delay 10 --remote-time --show-error --fail --retry-all-errors https://copr-dist-git.fedorainfracloud.org/repo/pkgs/@python/python3.14/python-flask-sqlalchemy/flask_sqlalchemy-3.0.5.tar.gz/md5/d7273df5991bcd9510afe52a1cb07bfc/flask_sqlalchemy-3.0.5.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 78504 100 78504 0 0 1208k 0 --:--:-- --:--:-- --:--:-- 1216k INFO: Reading stdout from command: md5sum flask_sqlalchemy-3.0.5.tar.gz /usr/bin/tail: /var/lib/copr-rpmbuild/main.log: file truncated Running (timeout=18000): unbuffer mock --spec /var/lib/copr-rpmbuild/workspace/workdir-atq_oxgr/python-flask-sqlalchemy/python-flask-sqlalchemy.spec --sources /var/lib/copr-rpmbuild/workspace/workdir-atq_oxgr/python-flask-sqlalchemy --resultdir /var/lib/copr-rpmbuild/results --uniqueext 1747164249.761615 -r /var/lib/copr-rpmbuild/results/configs/child.cfg INFO: mock.py version 6.1 starting (python version = 3.13.0, NVR = mock-6.1-1.fc41), args: /usr/libexec/mock/mock --spec /var/lib/copr-rpmbuild/workspace/workdir-atq_oxgr/python-flask-sqlalchemy/python-flask-sqlalchemy.spec --sources /var/lib/copr-rpmbuild/workspace/workdir-atq_oxgr/python-flask-sqlalchemy --resultdir /var/lib/copr-rpmbuild/results --uniqueext 1747164249.761615 -r /var/lib/copr-rpmbuild/results/configs/child.cfg Start: init plugins INFO: tmpfs initialized INFO: selinux enabled INFO: chroot_scan: initialized INFO: compress_logs: initialized Finish: init plugins INFO: Signal handler active Start: run INFO: Start(/var/lib/copr-rpmbuild/workspace/workdir-atq_oxgr/python-flask-sqlalchemy/python-flask-sqlalchemy.spec) Config(fedora-rawhide-x86_64) Start: clean chroot Finish: clean chroot Mock Version: 6.1 INFO: Mock Version: 6.1 Start: chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-rawhide-x86_64-1747164249.761615/root. INFO: calling preinit hooks INFO: enabled root cache INFO: enabled package manager cache Start: cleaning package manager metadata Finish: cleaning package manager metadata INFO: enabled HW Info plugin INFO: Package manager dnf5 detected and used (fallback) INFO: Buildroot is handled by package management from host and used with --installroot: rpm-4.20.1-1.fc41.x86_64 rpm-sequoia-1.7.0-2.fc41.x86_64 python3-dnf-4.23.0-1.fc41.noarch python3-dnf-plugins-core-4.10.1-1.fc41.noarch dnf5-5.2.13.1-1.fc41.x86_64 dnf5-plugins-5.2.13.1-1.fc41.x86_64 Start: installing minimal buildroot with dnf5 Updating and loading repositories: fedora 100% | 372.9 KiB/s | 11.6 KiB | 00m00s Copr repository 100% | 45.2 KiB/s | 1.5 KiB | 00m00s Additional repo http_kojipkgs_fedorapr 100% | 61.8 KiB/s | 3.8 KiB | 00m00s Copr repository 100% | 23.0 MiB/s | 5.2 MiB | 00m00s Additional repo http_kojipkgs_fedorapr 100% | 31.1 MiB/s | 14.4 MiB | 00m00s Repositories loaded. Package Arch Version Repository Size Installing group/module packages: bash x86_64 5.2.37-3.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 8.2 MiB bzip2 x86_64 1.0.8-20.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 99.3 KiB coreutils x86_64 9.7-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 5.4 MiB cpio x86_64 2.15-2.fc41 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.1 MiB diffutils x86_64 3.12-2.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.6 MiB fedora-release-common noarch 43-0.15 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 20.4 KiB findutils x86_64 1:4.10.0-5.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.9 MiB gawk x86_64 5.3.2-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.8 MiB glibc-minimal-langpack x86_64 2.41.9000-12.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 0.0 B grep x86_64 3.12-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.0 MiB gzip x86_64 1.13-3.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 392.9 KiB info x86_64 7.2-3.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 357.9 KiB patch x86_64 2.8-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 226.8 KiB redhat-rpm-config noarch 343-5.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 181.5 KiB rpm-build x86_64 5.99.90-5.fc43 copr_base 281.7 KiB sed x86_64 4.9-4.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 857.3 KiB shadow-utils x86_64 2:4.17.4-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 4.0 MiB tar x86_64 2:1.35-5.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 3.0 MiB unzip x86_64 6.0-66.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 390.3 KiB util-linux x86_64 2.41-2.fc43 copr_base 3.5 MiB which x86_64 2.23-1.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 83.4 KiB xz x86_64 1:5.8.1-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.3 MiB Installing dependencies: add-determinism x86_64 0.6.0-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 2.5 MiB alternatives x86_64 1.33-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 62.2 KiB ansible-srpm-macros noarch 1-17.1.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 35.7 KiB audit-libs x86_64 4.0.3-2.fc43 copr_base 347.1 KiB binutils x86_64 2.44-3.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 25.9 MiB build-reproducibility-srpm-macros noarch 0.6.0-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 735.0 B bzip2-libs x86_64 1.0.8-20.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 84.6 KiB ca-certificates noarch 2024.2.69_v8.0.401-5.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 2.6 MiB coreutils-common x86_64 9.7-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 11.3 MiB crypto-policies noarch 20250402-2.git86c0178.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 141.5 KiB curl x86_64 8.14.0~rc1-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 473.2 KiB cyrus-sasl-lib x86_64 2.1.28-30.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 2.3 MiB debugedit x86_64 5.1-6.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 192.7 KiB dwz x86_64 0.15-9.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 291.0 KiB ed x86_64 1.21-2.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 146.5 KiB efi-srpm-macros noarch 6-3.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 40.1 KiB elfutils x86_64 0.192-8.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 2.7 MiB elfutils-debuginfod-client x86_64 0.192-8.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 83.9 KiB elfutils-default-yama-scope noarch 0.192-8.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.8 KiB elfutils-libelf x86_64 0.192-8.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.2 MiB elfutils-libs x86_64 0.192-8.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 675.0 KiB fedora-gpg-keys noarch 43-0.2 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 129.0 KiB fedora-release noarch 43-0.15 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 0.0 B fedora-release-identity-basic noarch 43-0.15 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 664.0 B fedora-repos noarch 43-0.2 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 4.9 KiB fedora-repos-rawhide noarch 43-0.2 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 2.2 KiB file x86_64 5.46-1.fc43 copr_base 100.2 KiB file-libs x86_64 5.46-1.fc43 copr_base 11.9 MiB filesystem x86_64 3.18-44.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 112.0 B filesystem-srpm-macros noarch 3.18-44.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 38.2 KiB fonts-srpm-macros noarch 1:2.0.5-21.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 55.8 KiB forge-srpm-macros noarch 0.4.0-2.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 38.9 KiB fpc-srpm-macros noarch 1.3-14.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 144.0 B gdb-minimal x86_64 16.3-1.fc43 copr_base 13.2 MiB gdbm-libs x86_64 1:1.23-9.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 129.9 KiB ghc-srpm-macros noarch 1.9.2-2.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 779.0 B glibc x86_64 2.41.9000-12.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 6.7 MiB glibc-common x86_64 2.41.9000-12.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.0 MiB glibc-gconv-extra x86_64 2.41.9000-12.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 7.2 MiB gmp x86_64 1:6.3.0-3.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 819.2 KiB gnat-srpm-macros noarch 6-7.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.0 KiB gnupg2 x86_64 2.4.7-3.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 9.8 MiB gnutls x86_64 3.8.9-5.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 3.6 MiB go-srpm-macros noarch 3.6.0-7.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 60.8 KiB gpgverify noarch 2.1-3.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 8.7 KiB ima-evm-utils-libs x86_64 1.6.2-5.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 60.7 KiB jansson x86_64 2.14-2.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 93.1 KiB json-c x86_64 0.18-2.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 86.7 KiB kernel-srpm-macros noarch 1.0-25.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.9 KiB keyutils-libs x86_64 1.6.3-5.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 58.3 KiB krb5-libs x86_64 1.21.3-5.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 2.3 MiB libacl x86_64 2.3.2-3.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 38.3 KiB libarchive x86_64 3.7.7-4.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 930.6 KiB libassuan x86_64 2.5.7-3.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 167.8 KiB libattr x86_64 2.5.2-5.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 27.1 KiB libblkid x86_64 2.41-2.fc43 copr_base 262.4 KiB libbrotli x86_64 1.1.0-6.fc43 copr_base 829.3 KiB libcap x86_64 2.76-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 209.2 KiB libcap-ng x86_64 0.8.5-4.fc43 copr_base 68.9 KiB libcom_err x86_64 1.47.2-3.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 67.1 KiB libcurl x86_64 8.14.0~rc1-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 891.0 KiB libeconf x86_64 0.7.6-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 64.6 KiB libevent x86_64 2.1.12-15.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 903.1 KiB libfdisk x86_64 2.41-2.fc43 copr_base 376.4 KiB libffi x86_64 3.4.8-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 83.0 KiB libfsverity x86_64 1.6-2.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 32.5 KiB libgcc x86_64 15.1.1-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 266.6 KiB libgcrypt x86_64 1.11.1-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.6 MiB libgomp x86_64 15.1.1-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 538.5 KiB libgpg-error x86_64 1.55-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 915.3 KiB libidn2 x86_64 2.3.8-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 552.5 KiB libksba x86_64 1.6.7-3.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 402.5 KiB liblastlog2 x86_64 2.41-2.fc43 copr_base 33.9 KiB libmount x86_64 2.41-2.fc43 copr_base 372.7 KiB libnghttp2 x86_64 1.65.0-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 162.2 KiB libpkgconf x86_64 2.3.0-2.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 78.1 KiB libpsl x86_64 0.21.5-5.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 76.4 KiB libselinux x86_64 3.8-1.fc43 copr_base 193.1 KiB libsemanage x86_64 3.8-1.fc43 copr_base 304.4 KiB libsepol x86_64 3.8-1.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 826.0 KiB libsmartcols x86_64 2.41-2.fc43 copr_base 180.5 KiB libssh x86_64 0.11.1-4.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 565.5 KiB libssh-config noarch 0.11.1-4.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 277.0 B libstdc++ x86_64 15.1.1-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 2.8 MiB libtasn1 x86_64 4.20.0-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 176.3 KiB libtool-ltdl x86_64 2.5.4-4.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 70.1 KiB libunistring x86_64 1.1-9.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.7 MiB libusb1 x86_64 1.0.28-2.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 171.0 KiB libuuid x86_64 2.41-2.fc43 copr_base 37.3 KiB libverto x86_64 0.3.2-10.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 25.4 KiB libxcrypt x86_64 4.4.38-7.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 284.5 KiB libxml2 x86_64 2.12.10-1.fc43 copr_base 1.7 MiB libzstd x86_64 1.5.7-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 807.8 KiB lua-libs x86_64 5.4.7-3.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 276.9 KiB lua-srpm-macros noarch 1-15.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.3 KiB lz4-libs x86_64 1.10.0-2.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 157.4 KiB mpfr x86_64 4.2.2-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 828.8 KiB ncurses-base noarch 6.5-5.20250125.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 326.8 KiB ncurses-libs x86_64 6.5-5.20250125.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 946.3 KiB nettle x86_64 3.10.1-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 790.5 KiB npth x86_64 1.8-2.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 49.6 KiB ocaml-srpm-macros noarch 10-4.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.9 KiB openblas-srpm-macros noarch 2-19.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 112.0 B openldap x86_64 2.6.9-5.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 655.1 KiB openssl-libs x86_64 1:3.5.0-3.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 8.9 MiB p11-kit x86_64 0.25.5-5.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 2.2 MiB p11-kit-trust x86_64 0.25.5-5.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 395.5 KiB package-notes-srpm-macros noarch 0.5-13.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.6 KiB pam-libs x86_64 1.7.0-4.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 126.7 KiB pcre2 x86_64 10.45-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 697.7 KiB pcre2-syntax noarch 10.45-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 273.9 KiB perl-srpm-macros noarch 1-57.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 861.0 B pkgconf x86_64 2.3.0-2.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 88.5 KiB pkgconf-m4 noarch 2.3.0-2.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 14.4 KiB pkgconf-pkg-config x86_64 2.3.0-2.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 989.0 B popt x86_64 1.19-8.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 132.8 KiB publicsuffix-list-dafsa noarch 20250116-1.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 68.5 KiB pyproject-srpm-macros noarch 1.18.1-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.9 KiB python-srpm-macros noarch 3.14-5.fc43 copr_base 51.7 KiB qt5-srpm-macros noarch 5.15.16-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 500.0 B qt6-srpm-macros noarch 6.9.0-2.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 464.0 B readline x86_64 8.2-13.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 485.0 KiB rpm x86_64 5.99.90-5.fc43 copr_base 3.1 MiB rpm-build-libs x86_64 5.99.90-5.fc43 copr_base 264.4 KiB rpm-libs x86_64 5.99.90-5.fc43 copr_base 929.8 KiB rpm-sequoia x86_64 1.8.0-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 2.5 MiB rpm-sign-libs x86_64 5.99.90-5.fc43 copr_base 39.7 KiB rust-srpm-macros noarch 26.3-4.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 4.8 KiB setup noarch 2.15.0-24.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 724.7 KiB sqlite-libs x86_64 3.49.1-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.5 MiB systemd-libs x86_64 257.5-5.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 2.2 MiB systemd-standalone-sysusers x86_64 257.5-5.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 277.3 KiB tpm2-tss x86_64 4.1.3-7.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.6 MiB tree-sitter-srpm-macros noarch 0.2.4-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 7.5 KiB util-linux-core x86_64 2.41-2.fc43 copr_base 1.4 MiB xxhash-libs x86_64 0.8.3-2.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 90.2 KiB xz-libs x86_64 1:5.8.1-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 217.8 KiB zig-srpm-macros noarch 1-4.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.1 KiB zip x86_64 3.0-43.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 698.5 KiB zlib-ng-compat x86_64 2.2.4-2.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 137.6 KiB zstd x86_64 1.5.7-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.7 MiB Installing groups: Buildsystem building group Transaction Summary: Installing: 163 packages Total size of inbound packages is 58 MiB. Need to download 0 B. After this operation, 198 MiB extra will be used (install 198 MiB, remove 0 B). [ 1/163] tar-2:1.35-5.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 2/163] bzip2-0:1.0.8-20.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 3/163] redhat-rpm-config-0:343-5.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 4/163] rpm-build-0:5.99.90-5.fc43.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 5/163] unzip-0:6.0-66.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 6/163] cpio-0:2.15-2.fc41.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 7/163] which-0:2.23-1.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 8/163] bash-0:5.2.37-3.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 9/163] coreutils-0:9.7-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 10/163] grep-0:3.12-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 11/163] patch-0:2.8-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 12/163] sed-0:4.9-4.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 13/163] shadow-utils-2:4.17.4-1.fc43. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 14/163] util-linux-0:2.41-2.fc43.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 15/163] diffutils-0:3.12-2.fc43.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 16/163] fedora-release-common-0:43-0. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 17/163] findutils-1:4.10.0-5.fc42.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 18/163] gawk-0:5.3.2-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 19/163] glibc-minimal-langpack-0:2.41 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 20/163] gzip-0:1.13-3.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 21/163] info-0:7.2-3.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 22/163] xz-1:5.8.1-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 23/163] libblkid-0:2.41-2.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 24/163] libfdisk-0:2.41-2.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 25/163] liblastlog2-0:2.41-2.fc43.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 26/163] libmount-0:2.41-2.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 27/163] libsmartcols-0:2.41-2.fc43.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 28/163] libuuid-0:2.41-2.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 29/163] util-linux-core-0:2.41-2.fc43 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 30/163] glibc-0:2.41.9000-12.fc43.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 31/163] xz-libs-1:5.8.1-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 32/163] bzip2-libs-0:1.0.8-20.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 33/163] libacl-0:2.3.2-3.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 34/163] libselinux-0:3.8-1.fc43.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 35/163] audit-libs-0:4.0.3-2.fc43.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 36/163] filesystem-0:3.18-44.fc43.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 37/163] libeconf-0:0.7.6-1.fc43.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 38/163] libsemanage-0:3.8-1.fc43.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 39/163] libxcrypt-0:4.4.38-7.fc43.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 40/163] pam-libs-0:1.7.0-4.fc42.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 41/163] setup-0:2.15.0-24.fc43.noarch 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 42/163] glibc-gconv-extra-0:2.41.9000 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 43/163] ansible-srpm-macros-0:1-17.1. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 44/163] build-reproducibility-srpm-ma 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 45/163] dwz-0:0.15-9.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 46/163] efi-srpm-macros-0:6-3.fc43.no 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 47/163] file-0:5.46-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 48/163] filesystem-srpm-macros-0:3.18 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 49/163] fonts-srpm-macros-1:2.0.5-21. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 50/163] forge-srpm-macros-0:0.4.0-2.f 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 51/163] fpc-srpm-macros-0:1.3-14.fc42 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 52/163] ghc-srpm-macros-0:1.9.2-2.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 53/163] gnat-srpm-macros-0:6-7.fc42.n 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 54/163] go-srpm-macros-0:3.6.0-7.fc43 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 55/163] kernel-srpm-macros-0:1.0-25.f 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 56/163] lua-srpm-macros-0:1-15.fc42.n 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 57/163] ocaml-srpm-macros-0:10-4.fc42 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 58/163] openblas-srpm-macros-0:2-19.f 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 59/163] package-notes-srpm-macros-0:0 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 60/163] perl-srpm-macros-0:1-57.fc42. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 61/163] pyproject-srpm-macros-0:1.18. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 62/163] python-srpm-macros-0:3.14-5.f 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 63/163] qt5-srpm-macros-0:5.15.16-1.f 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 64/163] qt6-srpm-macros-0:6.9.0-2.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 65/163] rpm-0:5.99.90-5.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 66/163] rust-srpm-macros-0:26.3-4.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 67/163] tree-sitter-srpm-macros-0:0.2 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 68/163] zig-srpm-macros-0:1-4.fc42.no 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 69/163] zip-0:3.0-43.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 70/163] ed-0:1.21-2.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 71/163] libattr-0:2.5.2-5.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 72/163] ncurses-libs-0:6.5-5.20250125 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 73/163] pcre2-0:10.45-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 74/163] glibc-common-0:2.41.9000-12.f 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 75/163] libgcc-0:15.1.1-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 76/163] gmp-1:6.3.0-3.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 77/163] mpfr-0:4.2.2-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 78/163] readline-0:8.2-13.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 79/163] fedora-repos-0:43-0.2.noarch 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 80/163] elfutils-libelf-0:0.192-8.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 81/163] coreutils-common-0:9.7-1.fc43 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 82/163] libcap-0:2.76-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 83/163] openssl-libs-1:3.5.0-3.fc43.x 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 84/163] systemd-libs-0:257.5-5.fc43.x 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 85/163] add-determinism-0:0.6.0-1.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 86/163] zlib-ng-compat-0:2.2.4-2.fc43 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 87/163] libcap-ng-0:0.8.5-4.fc43.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 88/163] binutils-0:2.44-3.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 89/163] debugedit-0:5.1-6.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 90/163] elfutils-0:0.192-8.fc42.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 91/163] libarchive-0:3.7.7-4.fc43.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 92/163] libstdc++-0:15.1.1-1.fc43.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 93/163] pkgconf-pkg-config-0:2.3.0-2. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 94/163] popt-0:1.19-8.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 95/163] rpm-build-libs-0:5.99.90-5.fc 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 96/163] rpm-libs-0:5.99.90-5.fc43.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 97/163] zstd-0:1.5.7-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 98/163] curl-0:8.14.0~rc1-1.fc43.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 99/163] libsepol-0:3.8-1.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [100/163] sqlite-libs-0:3.49.1-1.fc43.x 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [101/163] file-libs-0:5.46-1.fc43.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [102/163] lz4-libs-0:1.10.0-2.fc42.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [103/163] pkgconf-0:2.3.0-2.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [104/163] pkgconf-m4-0:2.3.0-2.fc42.noa 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [105/163] libpkgconf-0:2.3.0-2.fc42.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [106/163] pcre2-syntax-0:10.45-1.fc43.n 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [107/163] ca-certificates-0:2024.2.69_v 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [108/163] crypto-policies-0:20250402-2. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [109/163] ncurses-base-0:6.5-5.20250125 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [110/163] libxml2-0:2.12.10-1.fc43.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [111/163] libzstd-0:1.5.7-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [112/163] fedora-gpg-keys-0:43-0.2.noar 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [113/163] fedora-repos-rawhide-0:43-0.2 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [114/163] elfutils-debuginfod-client-0: 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [115/163] elfutils-libs-0:0.192-8.fc42. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [116/163] libffi-0:3.4.8-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [117/163] p11-kit-0:0.25.5-5.fc42.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [118/163] p11-kit-trust-0:0.25.5-5.fc42 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [119/163] alternatives-0:1.33-1.fc43.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [120/163] jansson-0:2.14-2.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [121/163] lua-libs-0:5.4.7-3.fc43.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [122/163] rpm-sequoia-0:1.8.0-1.fc43.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [123/163] libgomp-0:15.1.1-1.fc43.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [124/163] rpm-sign-libs-0:5.99.90-5.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [125/163] libtasn1-0:4.20.0-1.fc43.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [126/163] elfutils-default-yama-scope-0 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [127/163] json-c-0:0.18-2.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [128/163] gnupg2-0:2.4.7-3.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [129/163] ima-evm-utils-libs-0:1.6.2-5. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [130/163] libfsverity-0:1.6-2.fc42.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [131/163] gpgverify-0:2.1-3.fc43.noarch 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [132/163] tpm2-tss-0:4.1.3-7.fc43.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [133/163] gnutls-0:3.8.9-5.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [134/163] libassuan-0:2.5.7-3.fc42.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [135/163] libgcrypt-0:1.11.1-1.fc43.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [136/163] libgpg-error-0:1.55-1.fc43.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [137/163] libksba-0:1.6.7-3.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [138/163] npth-0:1.8-2.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [139/163] openldap-0:2.6.9-5.fc43.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [140/163] libusb1-0:1.0.28-2.fc43.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [141/163] cyrus-sasl-lib-0:2.1.28-30.fc 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [142/163] libevent-0:2.1.12-15.fc42.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [143/163] libtool-ltdl-0:2.5.4-4.fc42.x 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [144/163] libidn2-0:2.3.8-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [145/163] libunistring-0:1.1-9.fc42.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [146/163] nettle-0:3.10.1-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [147/163] gdbm-libs-1:1.23-9.fc42.x86_6 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [148/163] fedora-release-0:43-0.15.noar 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [149/163] fedora-release-identity-basic 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [150/163] libcurl-0:8.14.0~rc1-1.fc43.x 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [151/163] gdb-minimal-0:16.3-1.fc43.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [152/163] systemd-standalone-sysusers-0 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [153/163] xxhash-libs-0:0.8.3-2.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [154/163] krb5-libs-0:1.21.3-5.fc42.x86 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [155/163] libbrotli-0:1.1.0-6.fc43.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [156/163] libnghttp2-0:1.65.0-1.fc43.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [157/163] libpsl-0:0.21.5-5.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [158/163] libssh-0:0.11.1-4.fc42.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [159/163] keyutils-libs-0:1.6.3-5.fc42. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [160/163] libcom_err-0:1.47.2-3.fc42.x8 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [161/163] libverto-0:0.3.2-10.fc42.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [162/163] libssh-config-0:0.11.1-4.fc42 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [163/163] publicsuffix-list-dafsa-0:202 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded -------------------------------------------------------------------------------- [163/163] Total 100% | 0.0 B/s | 0.0 B | 00m00s Running transaction [ 1/165] Verify package files 100% | 727.0 B/s | 163.0 B | 00m00s >>> Running pre-transaction scriptlet: filesystem-0:3.18-44.fc43.x86_64 >>> Finished pre-transaction scriptlet: filesystem-0:3.18-44.fc43.x86_64 >>> [RPM] /var/lib/mock/fedora-rawhide-x86_64-1747164249.761615/root/var/cache/d [ 2/165] Prepare transaction 100% | 1.9 KiB/s | 163.0 B | 00m00s [ 3/165] Installing libgcc-0:15.1.1-1. 100% | 131.0 MiB/s | 268.3 KiB | 00m00s [ 4/165] Installing publicsuffix-list- 100% | 67.6 MiB/s | 69.2 KiB | 00m00s [ 5/165] Installing libssh-config-0:0. 100% | 0.0 B/s | 816.0 B | 00m00s [ 6/165] Installing fedora-release-ide 100% | 898.4 KiB/s | 920.0 B | 00m00s [ 7/165] Installing fedora-gpg-keys-0: 100% | 19.1 MiB/s | 175.9 KiB | 00m00s [ 8/165] Installing fedora-repos-rawhi 100% | 0.0 B/s | 2.4 KiB | 00m00s [ 9/165] Installing fedora-repos-0:43- 100% | 5.6 MiB/s | 5.7 KiB | 00m00s [ 10/165] Installing fedora-release-com 100% | 12.1 MiB/s | 24.7 KiB | 00m00s [ 11/165] Installing fedora-release-0:4 100% | 0.0 B/s | 124.0 B | 00m00s [ 12/165] Installing setup-0:2.15.0-24. 100% | 47.6 MiB/s | 730.4 KiB | 00m00s >>> [RPM] /etc/hosts created as /etc/hosts.rpmnew [ 13/165] Installing filesystem-0:3.18- 100% | 1.4 MiB/s | 212.5 KiB | 00m00s [ 14/165] Installing ncurses-base-0:6.5 100% | 34.4 MiB/s | 352.2 KiB | 00m00s [ 15/165] Installing glibc-minimal-lang 100% | 0.0 B/s | 124.0 B | 00m00s [ 16/165] Installing ncurses-libs-0:6.5 100% | 132.9 MiB/s | 952.8 KiB | 00m00s [ 17/165] Installing glibc-0:2.41.9000- 100% | 151.6 MiB/s | 6.7 MiB | 00m00s [ 18/165] Installing bash-0:5.2.37-3.fc 100% | 199.5 MiB/s | 8.2 MiB | 00m00s [ 19/165] Installing glibc-common-0:2.4 100% | 44.4 MiB/s | 1.0 MiB | 00m00s [ 20/165] Installing glibc-gconv-extra- 100% | 126.1 MiB/s | 7.3 MiB | 00m00s [ 21/165] Installing zlib-ng-compat-0:2 100% | 135.2 MiB/s | 138.4 KiB | 00m00s [ 22/165] Installing bzip2-libs-0:1.0.8 100% | 83.7 MiB/s | 85.7 KiB | 00m00s [ 23/165] Installing libstdc++-0:15.1.1 100% | 236.3 MiB/s | 2.8 MiB | 00m00s [ 24/165] Installing xz-libs-1:5.8.1-1. 100% | 213.8 MiB/s | 218.9 KiB | 00m00s [ 25/165] Installing libuuid-0:2.41-2.f 100% | 37.6 MiB/s | 38.5 KiB | 00m00s [ 26/165] Installing gmp-1:6.3.0-3.fc43 100% | 200.6 MiB/s | 821.5 KiB | 00m00s [ 27/165] Installing readline-0:8.2-13. 100% | 158.6 MiB/s | 487.1 KiB | 00m00s [ 28/165] Installing popt-0:1.19-8.fc42 100% | 27.2 MiB/s | 139.4 KiB | 00m00s [ 29/165] Installing libblkid-0:2.41-2. 100% | 128.7 MiB/s | 263.5 KiB | 00m00s [ 30/165] Installing libxcrypt-0:4.4.38 100% | 93.5 MiB/s | 287.2 KiB | 00m00s [ 31/165] Installing libzstd-0:1.5.7-1. 100% | 197.5 MiB/s | 809.1 KiB | 00m00s [ 32/165] Installing elfutils-libelf-0: 100% | 195.0 MiB/s | 1.2 MiB | 00m00s [ 33/165] Installing libgpg-error-0:1.5 100% | 25.7 MiB/s | 921.1 KiB | 00m00s [ 34/165] Installing crypto-policies-0: 100% | 13.6 MiB/s | 166.6 KiB | 00m00s [ 35/165] Installing libattr-0:2.5.2-5. 100% | 27.4 MiB/s | 28.1 KiB | 00m00s [ 36/165] Installing libacl-0:2.3.2-3.f 100% | 38.2 MiB/s | 39.2 KiB | 00m00s [ 37/165] Installing sqlite-libs-0:3.49 100% | 215.5 MiB/s | 1.5 MiB | 00m00s [ 38/165] Installing libtasn1-0:4.20.0- 100% | 87.0 MiB/s | 178.1 KiB | 00m00s [ 39/165] Installing libunistring-0:1.1 100% | 246.7 MiB/s | 1.7 MiB | 00m00s [ 40/165] Installing libidn2-0:2.3.8-1. 100% | 90.9 MiB/s | 558.7 KiB | 00m00s [ 41/165] Installing dwz-0:0.15-9.fc42. 100% | 20.4 MiB/s | 292.4 KiB | 00m00s [ 42/165] Installing mpfr-0:4.2.2-1.fc4 100% | 162.2 MiB/s | 830.4 KiB | 00m00s [ 43/165] Installing gawk-0:5.3.2-1.fc4 100% | 79.0 MiB/s | 1.8 MiB | 00m00s [ 44/165] Installing unzip-0:6.0-66.fc4 100% | 25.6 MiB/s | 393.8 KiB | 00m00s [ 45/165] Installing file-libs-0:5.46-1 100% | 423.5 MiB/s | 11.9 MiB | 00m00s [ 46/165] Installing file-0:5.46-1.fc43 100% | 8.3 MiB/s | 101.7 KiB | 00m00s [ 47/165] Installing libsmartcols-0:2.4 100% | 88.7 MiB/s | 181.6 KiB | 00m00s [ 48/165] Installing libeconf-0:0.7.6-1 100% | 64.7 MiB/s | 66.2 KiB | 00m00s [ 49/165] Installing libcap-ng-0:0.8.5- 100% | 69.2 MiB/s | 70.8 KiB | 00m00s [ 50/165] Installing audit-libs-0:4.0.3 100% | 113.7 MiB/s | 349.3 KiB | 00m00s [ 51/165] Installing pam-libs-0:1.7.0-4 100% | 63.1 MiB/s | 129.1 KiB | 00m00s [ 52/165] Installing libcap-0:2.76-1.fc 100% | 14.9 MiB/s | 214.3 KiB | 00m00s [ 53/165] Installing systemd-libs-0:257 100% | 223.2 MiB/s | 2.2 MiB | 00m00s [ 54/165] Installing libsepol-0:3.8-1.f 100% | 201.9 MiB/s | 827.0 KiB | 00m00s [ 55/165] Installing lz4-libs-0:1.10.0- 100% | 154.7 MiB/s | 158.5 KiB | 00m00s [ 56/165] Installing libffi-0:3.4.8-1.f 100% | 82.4 MiB/s | 84.3 KiB | 00m00s [ 57/165] Installing p11-kit-0:0.25.5-5 100% | 84.0 MiB/s | 2.2 MiB | 00m00s [ 58/165] Installing alternatives-0:1.3 100% | 5.2 MiB/s | 63.8 KiB | 00m00s [ 59/165] Installing p11-kit-trust-0:0. 100% | 12.5 MiB/s | 397.2 KiB | 00m00s [ 60/165] Installing lua-libs-0:5.4.7-3 100% | 135.8 MiB/s | 278.1 KiB | 00m00s [ 61/165] Installing json-c-0:0.18-2.fc 100% | 85.9 MiB/s | 88.0 KiB | 00m00s [ 62/165] Installing zstd-0:1.5.7-1.fc4 100% | 95.0 MiB/s | 1.7 MiB | 00m00s [ 63/165] Installing libusb1-0:1.0.28-2 100% | 168.7 MiB/s | 172.7 KiB | 00m00s [ 64/165] Installing zip-0:3.0-43.fc42. 100% | 45.7 MiB/s | 702.4 KiB | 00m00s [ 65/165] Installing libpsl-0:0.21.5-5. 100% | 75.7 MiB/s | 77.5 KiB | 00m00s [ 66/165] Installing liblastlog2-0:2.41 100% | 34.9 MiB/s | 35.8 KiB | 00m00s [ 67/165] Installing libassuan-0:2.5.7- 100% | 82.8 MiB/s | 169.6 KiB | 00m00s [ 68/165] Installing libgcrypt-0:1.11.1 100% | 225.0 MiB/s | 1.6 MiB | 00m00s [ 69/165] Installing libksba-0:1.6.7-3. 100% | 197.8 MiB/s | 405.1 KiB | 00m00s [ 70/165] Installing libfdisk-0:2.41-2. 100% | 184.3 MiB/s | 377.5 KiB | 00m00s [ 71/165] Installing nettle-0:3.10.1-1. 100% | 155.0 MiB/s | 793.6 KiB | 00m00s [ 72/165] Installing gnutls-0:3.8.9-5.f 100% | 223.3 MiB/s | 3.6 MiB | 00m00s [ 73/165] Installing libxml2-0:2.12.10- 100% | 94.7 MiB/s | 1.7 MiB | 00m00s [ 74/165] Installing bzip2-0:1.0.8-20.f 100% | 7.8 MiB/s | 103.8 KiB | 00m00s [ 75/165] Installing add-determinism-0: 100% | 123.3 MiB/s | 2.5 MiB | 00m00s [ 76/165] Installing build-reproducibil 100% | 0.0 B/s | 1.0 KiB | 00m00s [ 77/165] Installing filesystem-srpm-ma 100% | 38.0 MiB/s | 38.9 KiB | 00m00s [ 78/165] Installing ed-0:1.21-2.fc42.x 100% | 12.1 MiB/s | 148.8 KiB | 00m00s [ 79/165] Installing patch-0:2.8-1.fc43 100% | 17.2 MiB/s | 228.3 KiB | 00m00s [ 80/165] Installing elfutils-default-y 100% | 136.2 KiB/s | 2.0 KiB | 00m00s [ 81/165] Installing elfutils-libs-0:0. 100% | 132.2 MiB/s | 676.7 KiB | 00m00s [ 82/165] Installing cpio-0:2.15-2.fc41 100% | 50.0 MiB/s | 1.1 MiB | 00m00s [ 83/165] Installing diffutils-0:3.12-2 100% | 74.3 MiB/s | 1.6 MiB | 00m00s [ 84/165] Installing libpkgconf-0:2.3.0 100% | 77.4 MiB/s | 79.2 KiB | 00m00s [ 85/165] Installing pkgconf-0:2.3.0-2. 100% | 6.8 MiB/s | 91.0 KiB | 00m00s [ 86/165] Installing jansson-0:2.14-2.f 100% | 92.2 MiB/s | 94.4 KiB | 00m00s [ 87/165] Installing libgomp-0:15.1.1-1 100% | 263.6 MiB/s | 539.9 KiB | 00m00s [ 88/165] Installing npth-0:1.8-2.fc42. 100% | 49.5 MiB/s | 50.7 KiB | 00m00s [ 89/165] Installing libtool-ltdl-0:2.5 100% | 69.6 MiB/s | 71.2 KiB | 00m00s [ 90/165] Installing gdbm-libs-1:1.23-9 100% | 128.5 MiB/s | 131.6 KiB | 00m00s [ 91/165] Installing cyrus-sasl-lib-0:2 100% | 109.7 MiB/s | 2.3 MiB | 00m00s [ 92/165] Installing xxhash-libs-0:0.8. 100% | 89.4 MiB/s | 91.6 KiB | 00m00s [ 93/165] Installing libbrotli-0:1.1.0- 100% | 203.0 MiB/s | 831.6 KiB | 00m00s [ 94/165] Installing libnghttp2-0:1.65. 100% | 159.5 MiB/s | 163.3 KiB | 00m00s [ 95/165] Installing keyutils-libs-0:1. 100% | 58.3 MiB/s | 59.7 KiB | 00m00s [ 96/165] Installing libcom_err-0:1.47. 100% | 66.6 MiB/s | 68.2 KiB | 00m00s [ 97/165] Installing libverto-0:0.3.2-1 100% | 26.6 MiB/s | 27.2 KiB | 00m00s [ 98/165] Installing pcre2-syntax-0:10. 100% | 135.0 MiB/s | 276.4 KiB | 00m00s [ 99/165] Installing pcre2-0:10.45-1.fc 100% | 227.6 MiB/s | 699.1 KiB | 00m00s [100/165] Installing libselinux-0:3.8-1 100% | 94.9 MiB/s | 194.3 KiB | 00m00s [101/165] Installing grep-0:3.12-1.fc43 100% | 50.1 MiB/s | 1.0 MiB | 00m00s [102/165] Installing sed-0:4.9-4.fc42.x 100% | 44.5 MiB/s | 865.5 KiB | 00m00s [103/165] Installing findutils-1:4.10.0 100% | 78.1 MiB/s | 1.9 MiB | 00m00s [104/165] Installing xz-1:5.8.1-1.fc43. 100% | 57.9 MiB/s | 1.3 MiB | 00m00s [105/165] Installing libmount-0:2.41-2. 100% | 182.5 MiB/s | 373.8 KiB | 00m00s [106/165] Installing util-linux-core-0: 100% | 64.0 MiB/s | 1.5 MiB | 00m00s [107/165] Installing tar-2:1.35-5.fc42. 100% | 109.7 MiB/s | 3.0 MiB | 00m00s [108/165] Installing libsemanage-0:3.8- 100% | 149.5 MiB/s | 306.1 KiB | 00m00s [109/165] Installing systemd-standalone 100% | 20.9 MiB/s | 277.8 KiB | 00m00s [110/165] Installing pkgconf-m4-0:2.3.0 100% | 0.0 B/s | 14.8 KiB | 00m00s [111/165] Installing pkgconf-pkg-config 100% | 147.8 KiB/s | 1.8 KiB | 00m00s [112/165] Installing coreutils-common-0 100% | 213.1 MiB/s | 11.3 MiB | 00m00s [113/165] Installing openssl-libs-1:3.5 100% | 261.4 MiB/s | 8.9 MiB | 00m00s [114/165] Installing coreutils-0:9.7-1. 100% | 95.5 MiB/s | 5.4 MiB | 00m00s [115/165] Installing ca-certificates-0: 100% | 1.1 MiB/s | 2.4 MiB | 00m02s [116/165] Installing libarchive-0:3.7.7 100% | 151.8 MiB/s | 932.6 KiB | 00m00s [117/165] Installing krb5-libs-0:1.21.3 100% | 176.9 MiB/s | 2.3 MiB | 00m00s [118/165] Installing tpm2-tss-0:4.1.3-7 100% | 156.8 MiB/s | 1.6 MiB | 00m00s [119/165] Installing ima-evm-utils-libs 100% | 60.5 MiB/s | 62.0 KiB | 00m00s [120/165] Installing libssh-0:0.11.1-4. 100% | 138.6 MiB/s | 567.5 KiB | 00m00s [121/165] Installing gzip-0:1.13-3.fc42 100% | 22.9 MiB/s | 398.4 KiB | 00m00s [122/165] Installing rpm-sequoia-0:1.8. 100% | 250.4 MiB/s | 2.5 MiB | 00m00s [123/165] Installing rpm-libs-0:5.99.90 100% | 181.9 MiB/s | 931.3 KiB | 00m00s [124/165] Installing libfsverity-0:1.6- 100% | 32.7 MiB/s | 33.5 KiB | 00m00s [125/165] Installing libevent-0:2.1.12- 100% | 147.6 MiB/s | 906.9 KiB | 00m00s [126/165] Installing openldap-0:2.6.9-5 100% | 107.2 MiB/s | 658.9 KiB | 00m00s [127/165] Installing gnupg2-0:2.4.7-3.f 100% | 166.0 MiB/s | 9.8 MiB | 00m00s [128/165] Installing libcurl-0:8.14.0~r 100% | 174.2 MiB/s | 892.1 KiB | 00m00s [129/165] Installing elfutils-debuginfo 100% | 6.5 MiB/s | 86.2 KiB | 00m00s [130/165] Installing binutils-0:2.44-3. 100% | 223.3 MiB/s | 25.9 MiB | 00m00s [131/165] Installing elfutils-0:0.192-8 100% | 112.0 MiB/s | 2.7 MiB | 00m00s [132/165] Installing gdb-minimal-0:16.3 100% | 245.3 MiB/s | 13.2 MiB | 00m00s [133/165] Installing debugedit-0:5.1-6. 100% | 13.6 MiB/s | 195.4 KiB | 00m00s [134/165] Installing curl-0:8.14.0~rc1- 100% | 13.3 MiB/s | 476.0 KiB | 00m00s [135/165] Installing rpm-0:5.99.90-5.fc 100% | 44.0 MiB/s | 2.5 MiB | 00m00s [136/165] Installing efi-srpm-macros-0: 100% | 40.2 MiB/s | 41.1 KiB | 00m00s [137/165] Installing lua-srpm-macros-0: 100% | 0.0 B/s | 1.9 KiB | 00m00s [138/165] Installing tree-sitter-srpm-m 100% | 8.4 MiB/s | 8.6 KiB | 00m00s [139/165] Installing zig-srpm-macros-0: 100% | 1.6 MiB/s | 1.7 KiB | 00m00s [140/165] Installing rpm-sign-libs-0:5. 100% | 39.6 MiB/s | 40.5 KiB | 00m00s [141/165] Installing rpm-build-libs-0:5 100% | 129.5 MiB/s | 265.2 KiB | 00m00s [142/165] Installing gpgverify-0:2.1-3. 100% | 0.0 B/s | 9.4 KiB | 00m00s [143/165] Installing rust-srpm-macros-0 100% | 0.0 B/s | 5.6 KiB | 00m00s [144/165] Installing qt6-srpm-macros-0: 100% | 0.0 B/s | 740.0 B | 00m00s [145/165] Installing qt5-srpm-macros-0: 100% | 0.0 B/s | 776.0 B | 00m00s [146/165] Installing perl-srpm-macros-0 100% | 0.0 B/s | 1.1 KiB | 00m00s [147/165] Installing package-notes-srpm 100% | 0.0 B/s | 2.0 KiB | 00m00s [148/165] Installing openblas-srpm-macr 100% | 0.0 B/s | 392.0 B | 00m00s [149/165] Installing ocaml-srpm-macros- 100% | 0.0 B/s | 2.2 KiB | 00m00s [150/165] Installing kernel-srpm-macros 100% | 0.0 B/s | 2.3 KiB | 00m00s [151/165] Installing gnat-srpm-macros-0 100% | 0.0 B/s | 1.3 KiB | 00m00s [152/165] Installing ghc-srpm-macros-0: 100% | 0.0 B/s | 1.0 KiB | 00m00s [153/165] Installing fpc-srpm-macros-0: 100% | 0.0 B/s | 420.0 B | 00m00s [154/165] Installing ansible-srpm-macro 100% | 35.4 MiB/s | 36.2 KiB | 00m00s [155/165] Installing fonts-srpm-macros- 100% | 55.7 MiB/s | 57.0 KiB | 00m00s [156/165] Installing forge-srpm-macros- 100% | 39.3 MiB/s | 40.3 KiB | 00m00s [157/165] Installing go-srpm-macros-0:3 100% | 60.5 MiB/s | 62.0 KiB | 00m00s [158/165] Installing python-srpm-macros 100% | 51.8 MiB/s | 53.0 KiB | 00m00s [159/165] Installing redhat-rpm-config- 100% | 45.9 MiB/s | 188.0 KiB | 00m00s [160/165] Installing rpm-build-0:5.99.9 100% | 15.8 MiB/s | 290.3 KiB | 00m00s [161/165] Installing pyproject-srpm-mac 100% | 2.4 MiB/s | 2.5 KiB | 00m00s [162/165] Installing which-0:2.23-1.fc4 100% | 6.0 MiB/s | 85.6 KiB | 00m00s [163/165] Installing util-linux-0:2.41- 100% | 56.5 MiB/s | 3.6 MiB | 00m00s [164/165] Installing shadow-utils-2:4.1 100% | 75.1 MiB/s | 4.1 MiB | 00m00s [165/165] Installing info-0:7.2-3.fc42. 100% | 133.9 KiB/s | 358.3 KiB | 00m03s Warning: skipped OpenPGP checks for 163 packages from repositories: copr_base, http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch Complete! Finish: installing minimal buildroot with dnf5 Start: creating root cache Finish: creating root cache Finish: chroot init INFO: Installed packages: INFO: add-determinism-0.6.0-1.fc43.x86_64 alternatives-1.33-1.fc43.x86_64 ansible-srpm-macros-1-17.1.fc42.noarch audit-libs-4.0.3-2.fc43.x86_64 bash-5.2.37-3.fc43.x86_64 binutils-2.44-3.fc43.x86_64 build-reproducibility-srpm-macros-0.6.0-1.fc43.noarch bzip2-1.0.8-20.fc42.x86_64 bzip2-libs-1.0.8-20.fc42.x86_64 ca-certificates-2024.2.69_v8.0.401-5.fc42.noarch coreutils-9.7-1.fc43.x86_64 coreutils-common-9.7-1.fc43.x86_64 cpio-2.15-2.fc41.x86_64 crypto-policies-20250402-2.git86c0178.fc43.noarch curl-8.14.0~rc1-1.fc43.x86_64 cyrus-sasl-lib-2.1.28-30.fc42.x86_64 debugedit-5.1-6.fc43.x86_64 diffutils-3.12-2.fc43.x86_64 dwz-0.15-9.fc42.x86_64 ed-1.21-2.fc42.x86_64 efi-srpm-macros-6-3.fc43.noarch elfutils-0.192-8.fc42.x86_64 elfutils-debuginfod-client-0.192-8.fc42.x86_64 elfutils-default-yama-scope-0.192-8.fc42.noarch elfutils-libelf-0.192-8.fc42.x86_64 elfutils-libs-0.192-8.fc42.x86_64 fedora-gpg-keys-43-0.2.noarch fedora-release-43-0.15.noarch fedora-release-common-43-0.15.noarch fedora-release-identity-basic-43-0.15.noarch fedora-repos-43-0.2.noarch fedora-repos-rawhide-43-0.2.noarch file-5.46-1.fc43.x86_64 file-libs-5.46-1.fc43.x86_64 filesystem-3.18-44.fc43.x86_64 filesystem-srpm-macros-3.18-44.fc43.noarch findutils-4.10.0-5.fc42.x86_64 fonts-srpm-macros-2.0.5-21.fc42.noarch forge-srpm-macros-0.4.0-2.fc42.noarch fpc-srpm-macros-1.3-14.fc42.noarch gawk-5.3.2-1.fc43.x86_64 gdb-minimal-16.3-1.fc43.x86_64 gdbm-libs-1.23-9.fc42.x86_64 ghc-srpm-macros-1.9.2-2.fc42.noarch glibc-2.41.9000-12.fc43.x86_64 glibc-common-2.41.9000-12.fc43.x86_64 glibc-gconv-extra-2.41.9000-12.fc43.x86_64 glibc-minimal-langpack-2.41.9000-12.fc43.x86_64 gmp-6.3.0-3.fc43.x86_64 gnat-srpm-macros-6-7.fc42.noarch gnupg2-2.4.7-3.fc43.x86_64 gnutls-3.8.9-5.fc43.x86_64 go-srpm-macros-3.6.0-7.fc43.noarch gpgverify-2.1-3.fc43.noarch grep-3.12-1.fc43.x86_64 gzip-1.13-3.fc42.x86_64 ima-evm-utils-libs-1.6.2-5.fc43.x86_64 info-7.2-3.fc42.x86_64 jansson-2.14-2.fc42.x86_64 json-c-0.18-2.fc42.x86_64 kernel-srpm-macros-1.0-25.fc42.noarch keyutils-libs-1.6.3-5.fc42.x86_64 krb5-libs-1.21.3-5.fc42.x86_64 libacl-2.3.2-3.fc42.x86_64 libarchive-3.7.7-4.fc43.x86_64 libassuan-2.5.7-3.fc42.x86_64 libattr-2.5.2-5.fc42.x86_64 libblkid-2.41-2.fc43.x86_64 libbrotli-1.1.0-6.fc43.x86_64 libcap-2.76-1.fc43.x86_64 libcap-ng-0.8.5-4.fc43.x86_64 libcom_err-1.47.2-3.fc42.x86_64 libcurl-8.14.0~rc1-1.fc43.x86_64 libeconf-0.7.6-1.fc43.x86_64 libevent-2.1.12-15.fc42.x86_64 libfdisk-2.41-2.fc43.x86_64 libffi-3.4.8-1.fc43.x86_64 libfsverity-1.6-2.fc42.x86_64 libgcc-15.1.1-1.fc43.x86_64 libgcrypt-1.11.1-1.fc43.x86_64 libgomp-15.1.1-1.fc43.x86_64 libgpg-error-1.55-1.fc43.x86_64 libidn2-2.3.8-1.fc43.x86_64 libksba-1.6.7-3.fc42.x86_64 liblastlog2-2.41-2.fc43.x86_64 libmount-2.41-2.fc43.x86_64 libnghttp2-1.65.0-1.fc43.x86_64 libpkgconf-2.3.0-2.fc42.x86_64 libpsl-0.21.5-5.fc42.x86_64 libselinux-3.8-1.fc43.x86_64 libsemanage-3.8-1.fc43.x86_64 libsepol-3.8-1.fc42.x86_64 libsmartcols-2.41-2.fc43.x86_64 libssh-0.11.1-4.fc42.x86_64 libssh-config-0.11.1-4.fc42.noarch libstdc++-15.1.1-1.fc43.x86_64 libtasn1-4.20.0-1.fc43.x86_64 libtool-ltdl-2.5.4-4.fc42.x86_64 libunistring-1.1-9.fc42.x86_64 libusb1-1.0.28-2.fc43.x86_64 libuuid-2.41-2.fc43.x86_64 libverto-0.3.2-10.fc42.x86_64 libxcrypt-4.4.38-7.fc43.x86_64 libxml2-2.12.10-1.fc43.x86_64 libzstd-1.5.7-1.fc43.x86_64 lua-libs-5.4.7-3.fc43.x86_64 lua-srpm-macros-1-15.fc42.noarch lz4-libs-1.10.0-2.fc42.x86_64 mpfr-4.2.2-1.fc43.x86_64 ncurses-base-6.5-5.20250125.fc42.noarch ncurses-libs-6.5-5.20250125.fc42.x86_64 nettle-3.10.1-1.fc43.x86_64 npth-1.8-2.fc42.x86_64 ocaml-srpm-macros-10-4.fc42.noarch openblas-srpm-macros-2-19.fc42.noarch openldap-2.6.9-5.fc43.x86_64 openssl-libs-3.5.0-3.fc43.x86_64 p11-kit-0.25.5-5.fc42.x86_64 p11-kit-trust-0.25.5-5.fc42.x86_64 package-notes-srpm-macros-0.5-13.fc42.noarch pam-libs-1.7.0-4.fc42.x86_64 patch-2.8-1.fc43.x86_64 pcre2-10.45-1.fc43.x86_64 pcre2-syntax-10.45-1.fc43.noarch perl-srpm-macros-1-57.fc42.noarch pkgconf-2.3.0-2.fc42.x86_64 pkgconf-m4-2.3.0-2.fc42.noarch pkgconf-pkg-config-2.3.0-2.fc42.x86_64 popt-1.19-8.fc42.x86_64 publicsuffix-list-dafsa-20250116-1.fc42.noarch pyproject-srpm-macros-1.18.1-1.fc43.noarch python-srpm-macros-3.14-5.fc43.noarch qt5-srpm-macros-5.15.16-1.fc43.noarch qt6-srpm-macros-6.9.0-2.fc43.noarch readline-8.2-13.fc43.x86_64 redhat-rpm-config-343-5.fc43.noarch rpm-5.99.90-5.fc43.x86_64 rpm-build-5.99.90-5.fc43.x86_64 rpm-build-libs-5.99.90-5.fc43.x86_64 rpm-libs-5.99.90-5.fc43.x86_64 rpm-sequoia-1.8.0-1.fc43.x86_64 rpm-sign-libs-5.99.90-5.fc43.x86_64 rust-srpm-macros-26.3-4.fc42.noarch sed-4.9-4.fc42.x86_64 setup-2.15.0-24.fc43.noarch shadow-utils-4.17.4-1.fc43.x86_64 sqlite-libs-3.49.1-1.fc43.x86_64 systemd-libs-257.5-5.fc43.x86_64 systemd-standalone-sysusers-257.5-5.fc43.x86_64 tar-1.35-5.fc42.x86_64 tpm2-tss-4.1.3-7.fc43.x86_64 tree-sitter-srpm-macros-0.2.4-1.fc43.noarch unzip-6.0-66.fc42.x86_64 util-linux-2.41-2.fc43.x86_64 util-linux-core-2.41-2.fc43.x86_64 which-2.23-1.fc42.x86_64 xxhash-libs-0.8.3-2.fc42.x86_64 xz-5.8.1-1.fc43.x86_64 xz-libs-5.8.1-1.fc43.x86_64 zig-srpm-macros-1-4.fc42.noarch zip-3.0-43.fc42.x86_64 zlib-ng-compat-2.2.4-2.fc43.x86_64 zstd-1.5.7-1.fc43.x86_64 Start: buildsrpm Start: rpmbuild -bs Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1737158400 Wrote: /builddir/build/SRPMS/python-flask-sqlalchemy-3.0.5-7.fc43.src.rpm Finish: rpmbuild -bs INFO: chroot_scan: 1 files copied to /var/lib/copr-rpmbuild/results/chroot_scan INFO: /var/lib/mock/fedora-rawhide-x86_64-1747164249.761615/root/var/log/dnf5.log INFO: chroot_scan: creating tarball /var/lib/copr-rpmbuild/results/chroot_scan.tar.gz /bin/tar: Removing leading `/' from member names Finish: buildsrpm INFO: Done(/var/lib/copr-rpmbuild/workspace/workdir-atq_oxgr/python-flask-sqlalchemy/python-flask-sqlalchemy.spec) Config(child) 0 minutes 18 seconds INFO: Results and/or logs in: /var/lib/copr-rpmbuild/results INFO: Cleaning up build root ('cleanup_on_success=True') Start: clean chroot INFO: unmounting tmpfs. Finish: clean chroot INFO: Start(/var/lib/copr-rpmbuild/results/python-flask-sqlalchemy-3.0.5-7.fc43.src.rpm) Config(fedora-rawhide-x86_64) Start: chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-rawhide-x86_64-1747164249.761615/root. INFO: calling preinit hooks INFO: enabled root cache Start: unpacking root cache Finish: unpacking root cache INFO: enabled package manager cache Start: cleaning package manager metadata Finish: cleaning package manager metadata INFO: enabled HW Info plugin INFO: Buildroot is handled by package management from host and used with --installroot: rpm-4.20.1-1.fc41.x86_64 rpm-sequoia-1.7.0-2.fc41.x86_64 python3-dnf-4.23.0-1.fc41.noarch python3-dnf-plugins-core-4.10.1-1.fc41.noarch dnf5-5.2.13.1-1.fc41.x86_64 dnf5-plugins-5.2.13.1-1.fc41.x86_64 Finish: chroot init Start: build phase for python-flask-sqlalchemy-3.0.5-7.fc43.src.rpm Start: build setup for python-flask-sqlalchemy-3.0.5-7.fc43.src.rpm Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1737158400 Wrote: /builddir/build/SRPMS/python-flask-sqlalchemy-3.0.5-7.fc43.src.rpm Updating and loading repositories: fedora 100% | 412.8 KiB/s | 11.6 KiB | 00m00s Copr repository 100% | 20.5 KiB/s | 1.5 KiB | 00m00s Additional repo http_kojipkgs_fedorapr 100% | 46.1 KiB/s | 3.8 KiB | 00m00s Copr repository 100% | 25.3 MiB/s | 5.2 MiB | 00m00s Repositories loaded. Package Arch Version Repository Size Installing: python3-devel x86_64 3.14.0~b1-1.fc43 copr_base 1.9 MiB python3-pytest noarch 8.3.4-3.fc43 copr_base 4.1 MiB Installing dependencies: expat x86_64 2.7.1-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 294.2 KiB mpdecimal x86_64 4.0.0-2.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 216.8 KiB pyproject-rpm-macros noarch 1.18.1-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 114.5 KiB python-pip-wheel noarch 24.3.1-2.fc42 copr_base 1.2 MiB python-rpm-macros noarch 3.14-5.fc43 copr_base 22.1 KiB python3 x86_64 3.14.0~b1-1.fc43 copr_base 28.9 KiB python3-iniconfig noarch 1.1.1-25.fc43 copr_base 21.0 KiB python3-libs x86_64 3.14.0~b1-1.fc43 copr_base 42.5 MiB python3-packaging noarch 25.0-1.fc43 copr_base 607.1 KiB python3-pluggy noarch 1.5.0-2.fc43 copr_base 212.9 KiB python3-rpm-generators noarch 14-12.fc42 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 81.7 KiB python3-rpm-macros noarch 3.14-5.fc43 copr_base 6.4 KiB tzdata noarch 2025b-1.fc43 http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch 1.6 MiB Transaction Summary: Installing: 15 packages Total size of inbound packages is 13 MiB. Need to download 789 KiB. After this operation, 53 MiB extra will be used (install 53 MiB, remove 0 B). [ 1/15] python3-devel-0:3.14.0~b1-1.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 2/15] python3-0:3.14.0~b1-1.fc43.x86_ 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 3/15] python3-libs-0:3.14.0~b1-1.fc43 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 4/15] python3-packaging-0:25.0-1.fc43 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 5/15] python3-pluggy-0:1.5.0-2.fc43.n 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 6/15] expat-0:2.7.1-1.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 7/15] mpdecimal-0:4.0.0-2.fc43.x86_64 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 8/15] python-pip-wheel-0:24.3.1-2.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [ 9/15] tzdata-0:2025b-1.fc43.noarch 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [10/15] python-rpm-macros-0:3.14-5.fc43 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [11/15] python3-rpm-macros-0:3.14-5.fc4 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [12/15] pyproject-rpm-macros-0:1.18.1-1 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [13/15] python3-rpm-generators-0:14-12. 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [14/15] python3-iniconfig-0:1.1.1-25.fc 100% | 508.1 KiB/s | 18.8 KiB | 00m00s [15/15] python3-pytest-0:8.3.4-3.fc43.n 100% | 9.1 MiB/s | 770.0 KiB | 00m00s -------------------------------------------------------------------------------- [15/15] Total 100% | 7.9 MiB/s | 788.8 KiB | 00m00s Running transaction [ 1/17] Verify package files 100% | 254.0 B/s | 15.0 B | 00m00s [ 2/17] Prepare transaction 100% | 340.0 B/s | 15.0 B | 00m00s [ 3/17] Installing python-rpm-macros-0: 100% | 22.3 MiB/s | 22.8 KiB | 00m00s [ 4/17] Installing python3-rpm-macros-0 100% | 6.5 MiB/s | 6.7 KiB | 00m00s [ 5/17] Installing pyproject-rpm-macros 100% | 28.4 MiB/s | 116.4 KiB | 00m00s [ 6/17] Installing tzdata-0:2025b-1.fc4 100% | 24.3 MiB/s | 1.9 MiB | 00m00s [ 7/17] Installing python-pip-wheel-0:2 100% | 414.7 MiB/s | 1.2 MiB | 00m00s [ 8/17] Installing mpdecimal-0:4.0.0-2. 100% | 106.6 MiB/s | 218.4 KiB | 00m00s [ 9/17] Installing expat-0:2.7.1-1.fc43 100% | 14.5 MiB/s | 296.3 KiB | 00m00s [10/17] Installing python3-libs-0:3.14. 100% | 199.4 MiB/s | 42.9 MiB | 00m00s [11/17] Installing python3-0:3.14.0~b1- 100% | 2.1 MiB/s | 30.7 KiB | 00m00s [12/17] Installing python3-packaging-0: 100% | 100.8 MiB/s | 619.6 KiB | 00m00s [13/17] Installing python3-rpm-generato 100% | 81.0 MiB/s | 82.9 KiB | 00m00s [14/17] Installing python3-iniconfig-0: 100% | 23.4 MiB/s | 24.0 KiB | 00m00s [15/17] Installing python3-pluggy-0:1.5 100% | 53.5 MiB/s | 219.2 KiB | 00m00s [16/17] Installing python3-pytest-0:8.3 100% | 108.2 MiB/s | 4.1 MiB | 00m00s [17/17] Installing python3-devel-0:3.14 100% | 27.5 MiB/s | 2.0 MiB | 00m00s Warning: skipped OpenPGP checks for 15 packages from repositories: copr_base, http_kojipkgs_fedoraproject_org_repos_rawhide_latest_basearch Complete! Finish: build setup for python-flask-sqlalchemy-3.0.5-7.fc43.src.rpm Start: rpmbuild python-flask-sqlalchemy-3.0.5-7.fc43.src.rpm Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1737158400 Executing(%mkbuilddir): /bin/sh -e /var/tmp/rpm-tmp.cOZGoY Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.APDapD + umask 022 + cd /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build + cd /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build + rm -rf flask_sqlalchemy-3.0.5 + /usr/lib/rpm/rpmuncompress -x /builddir/build/SOURCES/flask_sqlalchemy-3.0.5.tar.gz + STATUS=0 + '[' 0 -ne 0 ']' + cd flask_sqlalchemy-3.0.5 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + RPM_EC=0 ++ jobs -p + exit 0 Executing(%generate_buildrequires): /bin/sh -e /var/tmp/rpm-tmp.7mXk3c + umask 022 + cd /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build + cd flask_sqlalchemy-3.0.5 + echo pyproject-rpm-macros + echo python3-devel + echo 'python3dist(packaging)' + echo 'python3dist(pip) >= 19' + '[' -f pyproject.toml ']' + echo '(python3dist(tomli) if python3-devel < 3.11)' + rm -rfv '*.dist-info/' + '[' -f /usr/bin/python3 ']' + mkdir -p /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/.pyproject-builddir + echo -n + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + VALAFLAGS=-g + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes --cap-lints=warn' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 ' + LT_SYS_LIBRARY_PATH=/usr/lib64: + CC=gcc + CXX=g++ + TMPDIR=/builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/.pyproject-builddir + RPM_TOXENV=py314 + FEDORA=43 + HOSTNAME=rpmbuild + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_buildrequires.py --generate-extras --python3_pkgversion 3 --wheeldir /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/pyproject-wheeldir --output /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/python-flask-sqlalchemy-3.0.5-7.fc43.x86_64-pyproject-buildrequires Handling flit_core<4 from build-system.requires Requirement not satisfied: flit_core<4 Exiting dependency generation pass: build backend + cat /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/python-flask-sqlalchemy-3.0.5-7.fc43.x86_64-pyproject-buildrequires + rm -rfv '*.dist-info/' + RPM_EC=0 ++ jobs -p + exit 0 Wrote: /builddir/build/SRPMS/python-flask-sqlalchemy-3.0.5-7.fc43.buildreqs.nosrc.rpm INFO: Going to install missing dynamic buildrequires Updating and loading repositories: fedora 100% | 481.6 KiB/s | 11.6 KiB | 00m00s Copr repository 100% | 36.6 KiB/s | 1.5 KiB | 00m00s Additional repo http_kojipkgs_fedorapr 100% | 68.4 KiB/s | 3.8 KiB | 00m00s Repositories loaded. Package "pyproject-rpm-macros-1.18.1-1.fc43.noarch" is already installed. Package "python3-devel-3.14.0~b1-1.fc43.x86_64" is already installed. Package "python3-pytest-8.3.4-3.fc43.noarch" is already installed. Package "python3-packaging-25.0-1.fc43.noarch" is already installed. Package Arch Version Repository Size Installing: python3-flit-core noarch 3.12.0-1.fc43 copr_base 265.0 KiB python3-pip noarch 24.3.1-2.fc42 copr_base 12.0 MiB Transaction Summary: Installing: 2 packages Total size of inbound packages is 3 MiB. Need to download 0 B. After this operation, 12 MiB extra will be used (install 12 MiB, remove 0 B). [1/2] python3-flit-core-0:3.12.0-1.fc43 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [2/2] python3-pip-0:24.3.1-2.fc42.noarc 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded -------------------------------------------------------------------------------- [2/2] Total 100% | 0.0 B/s | 0.0 B | 00m00s Running transaction [1/4] Verify package files 100% | 166.0 B/s | 2.0 B | 00m00s [2/4] Prepare transaction 100% | 86.0 B/s | 2.0 B | 00m00s [3/4] Installing python3-pip-0:24.3.1-2 100% | 104.4 MiB/s | 12.2 MiB | 00m00s [4/4] Installing python3-flit-core-0:3. 100% | 10.2 MiB/s | 271.2 KiB | 00m00s Warning: skipped OpenPGP checks for 2 packages from repository: copr_base Complete! Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1737158400 Executing(%generate_buildrequires): /bin/sh -e /var/tmp/rpm-tmp.RKIACq + umask 022 + cd /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build + cd flask_sqlalchemy-3.0.5 + echo pyproject-rpm-macros + echo python3-devel + echo 'python3dist(packaging)' + echo 'python3dist(pip) >= 19' + '[' -f pyproject.toml ']' + echo '(python3dist(tomli) if python3-devel < 3.11)' + rm -rfv '*.dist-info/' + '[' -f /usr/bin/python3 ']' + mkdir -p /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/.pyproject-builddir + echo -n + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + VALAFLAGS=-g + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes --cap-lints=warn' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 ' + LT_SYS_LIBRARY_PATH=/usr/lib64: + CC=gcc + CXX=g++ + TMPDIR=/builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/.pyproject-builddir + RPM_TOXENV=py314 + FEDORA=43 + HOSTNAME=rpmbuild + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_buildrequires.py --generate-extras --python3_pkgversion 3 --wheeldir /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/pyproject-wheeldir --output /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/python-flask-sqlalchemy-3.0.5-7.fc43.x86_64-pyproject-buildrequires Handling flit_core<4 from build-system.requires Requirement satisfied: flit_core<4 (installed: flit_core 3.12.0) Handling flask>=2.2.5 from hook generated metadata: Requires-Dist (Flask-SQLAlchemy) Requirement not satisfied: flask>=2.2.5 Handling sqlalchemy>=1.4.18 from hook generated metadata: Requires-Dist (Flask-SQLAlchemy) Requirement not satisfied: sqlalchemy>=1.4.18 + cat /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/python-flask-sqlalchemy-3.0.5-7.fc43.x86_64-pyproject-buildrequires + rm -rfv flask_sqlalchemy-3.0.5.dist-info/ removed 'flask_sqlalchemy-3.0.5.dist-info/WHEEL' removed 'flask_sqlalchemy-3.0.5.dist-info/METADATA' removed directory 'flask_sqlalchemy-3.0.5.dist-info/' + RPM_EC=0 ++ jobs -p + exit 0 Wrote: /builddir/build/SRPMS/python-flask-sqlalchemy-3.0.5-7.fc43.buildreqs.nosrc.rpm INFO: Going to install missing dynamic buildrequires Updating and loading repositories: fedora 100% | 444.6 KiB/s | 11.6 KiB | 00m00s Copr repository 100% | 30.7 KiB/s | 1.5 KiB | 00m00s Additional repo http_kojipkgs_fedorapr 100% | 66.0 KiB/s | 3.8 KiB | 00m00s Repositories loaded. Package "pyproject-rpm-macros-1.18.1-1.fc43.noarch" is already installed. Package "python3-devel-3.14.0~b1-1.fc43.x86_64" is already installed. Package "python3-pytest-8.3.4-3.fc43.noarch" is already installed. Package "python3-flit-core-3.12.0-1.fc43.noarch" is already installed. Package "python3-packaging-25.0-1.fc43.noarch" is already installed. Package "python3-pip-24.3.1-2.fc42.noarch" is already installed. Package Arch Version Repository Size Installing: python3-flask noarch 1:3.1.0-4.fc43 copr_base 928.4 KiB python3-sqlalchemy x86_64 2.0.40-5.fc43 copr_base 23.8 MiB Installing dependencies: python3-blinker noarch 1.9.0-1.fc42 copr_base 81.1 KiB python3-click noarch 8.1.7-7.fc43 copr_base 1.2 MiB python3-itsdangerous noarch 2.2.0-2.fc43 copr_base 109.0 KiB python3-jinja2 noarch 3.1.6-1.fc43 copr_base 3.1 MiB python3-markupsafe x86_64 3.0.2-2.fc43 copr_base 61.5 KiB python3-typing-extensions noarch 4.12.2-3.fc42 copr_base 537.7 KiB python3-werkzeug noarch 3.1.3-2.fc43 copr_base 2.0 MiB Transaction Summary: Installing: 9 packages Total size of inbound packages is 5 MiB. Need to download 5 MiB. After this operation, 32 MiB extra will be used (install 32 MiB, remove 0 B). [1/9] python3-jinja2-0:3.1.6-1.fc43.noa 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [2/9] python3-markupsafe-0:3.0.2-2.fc43 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [3/9] python3-click-0:8.1.7-7.fc43.noar 100% | 0.0 B/s | 0.0 B | 00m00s >>> Already downloaded [4/9] python3-itsdangerous-0:2.2.0-2.fc 100% | 1.2 MiB/s | 43.3 KiB | 00m00s [5/9] python3-blinker-0:1.9.0-1.fc42.no 100% | 718.1 KiB/s | 28.7 KiB | 00m00s [6/9] python3-flask-1:3.1.0-4.fc43.noar 100% | 3.1 MiB/s | 211.9 KiB | 00m00s [7/9] python3-werkzeug-0:3.1.3-2.fc43.n 100% | 8.7 MiB/s | 480.8 KiB | 00m00s [8/9] python3-typing-extensions-0:4.12. 100% | 4.0 MiB/s | 107.5 KiB | 00m00s [9/9] python3-sqlalchemy-0:2.0.40-5.fc4 100% | 40.8 MiB/s | 3.8 MiB | 00m00s -------------------------------------------------------------------------------- [9/9] Total 100% | 34.3 MiB/s | 4.6 MiB | 00m00s Running transaction [ 1/11] Verify package files 100% | 391.0 B/s | 9.0 B | 00m00s [ 2/11] Prepare transaction 100% | 346.0 B/s | 9.0 B | 00m00s [ 3/11] Installing python3-markupsafe-0 100% | 21.3 MiB/s | 65.5 KiB | 00m00s [ 4/11] Installing python3-jinja2-0:3.1 100% | 193.1 MiB/s | 3.1 MiB | 00m00s [ 5/11] Installing python3-werkzeug-0:3 100% | 124.6 MiB/s | 2.0 MiB | 00m00s [ 6/11] Installing python3-click-0:8.1. 100% | 167.0 MiB/s | 1.2 MiB | 00m00s [ 7/11] Installing python3-typing-exten 100% | 263.7 MiB/s | 540.1 KiB | 00m00s [ 8/11] Installing python3-itsdangerous 100% | 37.7 MiB/s | 115.9 KiB | 00m00s [ 9/11] Installing python3-blinker-0:1. 100% | 41.4 MiB/s | 84.8 KiB | 00m00s [10/11] Installing python3-flask-1:3.1. 100% | 40.1 MiB/s | 945.2 KiB | 00m00s [11/11] Installing python3-sqlalchemy-0 100% | 177.3 MiB/s | 23.9 MiB | 00m00s Warning: skipped OpenPGP checks for 9 packages from repository: copr_base Complete! Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1737158400 Executing(%generate_buildrequires): /bin/sh -e /var/tmp/rpm-tmp.NKcKg6 + umask 022 + cd /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build + cd flask_sqlalchemy-3.0.5 + echo pyproject-rpm-macros + echo python3-devel + echo 'python3dist(packaging)' + echo 'python3dist(pip) >= 19' + '[' -f pyproject.toml ']' + echo '(python3dist(tomli) if python3-devel < 3.11)' + rm -rfv '*.dist-info/' + '[' -f /usr/bin/python3 ']' + mkdir -p /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/.pyproject-builddir + echo -n + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + VALAFLAGS=-g + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes --cap-lints=warn' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 ' + LT_SYS_LIBRARY_PATH=/usr/lib64: + CC=gcc + CXX=g++ + TMPDIR=/builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/.pyproject-builddir + RPM_TOXENV=py314 + FEDORA=43 + HOSTNAME=rpmbuild + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_buildrequires.py --generate-extras --python3_pkgversion 3 --wheeldir /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/pyproject-wheeldir --output /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/python-flask-sqlalchemy-3.0.5-7.fc43.x86_64-pyproject-buildrequires Handling flit_core<4 from build-system.requires Requirement satisfied: flit_core<4 (installed: flit_core 3.12.0) Handling flask>=2.2.5 from hook generated metadata: Requires-Dist (Flask-SQLAlchemy) Requirement satisfied: flask>=2.2.5 (installed: flask 3.1.0) Handling sqlalchemy>=1.4.18 from hook generated metadata: Requires-Dist (Flask-SQLAlchemy) Requirement satisfied: sqlalchemy>=1.4.18 (installed: sqlalchemy 2.0.40) + cat /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/python-flask-sqlalchemy-3.0.5-7.fc43.x86_64-pyproject-buildrequires + rm -rfv flask_sqlalchemy-3.0.5.dist-info/ removed 'flask_sqlalchemy-3.0.5.dist-info/WHEEL' removed 'flask_sqlalchemy-3.0.5.dist-info/METADATA' removed directory 'flask_sqlalchemy-3.0.5.dist-info/' + RPM_EC=0 ++ jobs -p + exit 0 Wrote: /builddir/build/SRPMS/python-flask-sqlalchemy-3.0.5-7.fc43.buildreqs.nosrc.rpm INFO: Going to install missing dynamic buildrequires Updating and loading repositories: fedora 100% | 462.3 KiB/s | 11.6 KiB | 00m00s Copr repository 100% | 33.4 KiB/s | 1.5 KiB | 00m00s Additional repo http_kojipkgs_fedorapr 100% | 64.9 KiB/s | 3.8 KiB | 00m00s Repositories loaded. Nothing to do. Package "pyproject-rpm-macros-1.18.1-1.fc43.noarch" is already installed. Package "python3-devel-3.14.0~b1-1.fc43.x86_64" is already installed. Package "python3-pytest-8.3.4-3.fc43.noarch" is already installed. Package "python3-flask-1:3.1.0-4.fc43.noarch" is already installed. Package "python3-flit-core-3.12.0-1.fc43.noarch" is already installed. Package "python3-packaging-25.0-1.fc43.noarch" is already installed. Package "python3-pip-24.3.1-2.fc42.noarch" is already installed. Package "python3-sqlalchemy-2.0.40-5.fc43.x86_64" is already installed. Building target platforms: x86_64 Building for target x86_64 setting SOURCE_DATE_EPOCH=1737158400 Executing(%generate_buildrequires): /bin/sh -e /var/tmp/rpm-tmp.STt9xP + umask 022 + cd /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build + cd flask_sqlalchemy-3.0.5 + echo pyproject-rpm-macros + echo python3-devel + echo 'python3dist(packaging)' + echo 'python3dist(pip) >= 19' + '[' -f pyproject.toml ']' + echo '(python3dist(tomli) if python3-devel < 3.11)' + rm -rfv '*.dist-info/' + '[' -f /usr/bin/python3 ']' + mkdir -p /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/.pyproject-builddir + echo -n + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + VALAFLAGS=-g + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes --cap-lints=warn' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 ' + LT_SYS_LIBRARY_PATH=/usr/lib64: + CC=gcc + CXX=g++ + TMPDIR=/builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/.pyproject-builddir + RPM_TOXENV=py314 + FEDORA=43 + HOSTNAME=rpmbuild + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_buildrequires.py --generate-extras --python3_pkgversion 3 --wheeldir /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/pyproject-wheeldir --output /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/python-flask-sqlalchemy-3.0.5-7.fc43.x86_64-pyproject-buildrequires Handling flit_core<4 from build-system.requires Requirement satisfied: flit_core<4 (installed: flit_core 3.12.0) Handling flask>=2.2.5 from hook generated metadata: Requires-Dist (Flask-SQLAlchemy) Requirement satisfied: flask>=2.2.5 (installed: flask 3.1.0) Handling sqlalchemy>=1.4.18 from hook generated metadata: Requires-Dist (Flask-SQLAlchemy) Requirement satisfied: sqlalchemy>=1.4.18 (installed: sqlalchemy 2.0.40) + cat /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/python-flask-sqlalchemy-3.0.5-7.fc43.x86_64-pyproject-buildrequires + rm -rfv flask_sqlalchemy-3.0.5.dist-info/ removed 'flask_sqlalchemy-3.0.5.dist-info/WHEEL' removed 'flask_sqlalchemy-3.0.5.dist-info/METADATA' removed directory 'flask_sqlalchemy-3.0.5.dist-info/' + RPM_EC=0 ++ jobs -p + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.duXK33 + umask 022 + cd /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd flask_sqlalchemy-3.0.5 + mkdir -p /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/.pyproject-builddir + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + VALAFLAGS=-g + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + LT_SYS_LIBRARY_PATH=/usr/lib64: + CC=gcc + CXX=g++ + TMPDIR=/builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/.pyproject-builddir + /usr/bin/python3 -Bs /usr/lib/rpm/redhat/pyproject_wheel.py /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/pyproject-wheeldir Processing /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5 Preparing metadata (pyproject.toml): started Running command Preparing metadata (pyproject.toml) Preparing metadata (pyproject.toml): finished with status 'done' Building wheels for collected packages: Flask-SQLAlchemy Building wheel for Flask-SQLAlchemy (pyproject.toml): started Running command Building wheel for Flask-SQLAlchemy (pyproject.toml) Building wheel for Flask-SQLAlchemy (pyproject.toml): finished with status 'done' Created wheel for Flask-SQLAlchemy: filename=flask_sqlalchemy-3.0.5-py3-none-any.whl size=24820 sha256=1359186e0d73cf3cefb226fcb54f23900cf582d4d111846a839fb63eab013c7e Stored in directory: /builddir/.cache/pip/wheels/3e/76/6f/c6c3842223d3378399037d409e07ac5f33a139b5bfe03917d7 Successfully built Flask-SQLAlchemy + RPM_EC=0 ++ jobs -p + exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.DS8hav + umask 022 + cd /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build + '[' /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT '!=' / ']' + rm -rf /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT ++ dirname /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT + mkdir -p /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build + mkdir /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd flask_sqlalchemy-3.0.5 ++ xargs basename --multiple ++ ls /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/pyproject-wheeldir/flask_sqlalchemy-3.0.5-py3-none-any.whl ++ sed -E 's/([^-]+)-([^-]+)-.+\.whl/\1==\2/' + specifier=flask_sqlalchemy==3.0.5 + '[' -z flask_sqlalchemy==3.0.5 ']' + TMPDIR=/builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/.pyproject-builddir + /usr/bin/python3 -m pip install --root /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT --prefix /usr --no-deps --disable-pip-version-check --progress-bar off --verbose --ignore-installed --no-warn-script-location --no-index --no-cache-dir --find-links /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/pyproject-wheeldir flask_sqlalchemy==3.0.5 Using pip 24.3.1 from /usr/lib/python3.14/site-packages/pip (python 3.14) Looking in links: /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/pyproject-wheeldir Processing ./pyproject-wheeldir/flask_sqlalchemy-3.0.5-py3-none-any.whl Installing collected packages: flask_sqlalchemy Successfully installed flask_sqlalchemy-3.0.5 + '[' -d /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/bin ']' + rm -f /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/python-flask-sqlalchemy-3.0.5-7.fc43.x86_64-pyproject-ghost-distinfo + site_dirs=() + '[' -d /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages ']' + site_dirs+=("/usr/lib/python3.14/site-packages") + '[' /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib64/python3.14/site-packages '!=' /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages ']' + '[' -d /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib64/python3.14/site-packages ']' + for site_dir in ${site_dirs[@]} + for distinfo in /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT$site_dir/*.dist-info + echo '%ghost /usr/lib/python3.14/site-packages/flask_sqlalchemy-3.0.5.dist-info' + sed -i s/pip/rpm/ /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy-3.0.5.dist-info/INSTALLER + PYTHONPATH=/usr/lib/rpm/redhat + /usr/bin/python3 -B /usr/lib/rpm/redhat/pyproject_preprocess_record.py --buildroot /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT --record /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy-3.0.5.dist-info/RECORD --output /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/python-flask-sqlalchemy-3.0.5-7.fc43.x86_64-pyproject-record + rm -fv /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy-3.0.5.dist-info/RECORD removed '/builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy-3.0.5.dist-info/RECORD' + rm -fv /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy-3.0.5.dist-info/REQUESTED removed '/builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy-3.0.5.dist-info/REQUESTED' ++ wc -l /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/python-flask-sqlalchemy-3.0.5-7.fc43.x86_64-pyproject-ghost-distinfo ++ cut -f1 '-d ' + lines=1 + '[' 1 -ne 1 ']' + RPM_FILES_ESCAPE=4.19 + /usr/bin/python3 /usr/lib/rpm/redhat/pyproject_save_files.py --output-files /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/python-flask-sqlalchemy-3.0.5-7.fc43.x86_64-pyproject-files --output-modules /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/python-flask-sqlalchemy-3.0.5-7.fc43.x86_64-pyproject-modules --buildroot /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT --sitelib /usr/lib/python3.14/site-packages --sitearch /usr/lib64/python3.14/site-packages --python-version 3.14 --pyproject-record /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/python-flask-sqlalchemy-3.0.5-7.fc43.x86_64-pyproject-record --prefix /usr flask_sqlalchemy + /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-ldconfig + /usr/lib/rpm/brp-compress + /usr/lib/rpm/brp-strip /usr/bin/strip + /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump + /usr/lib/rpm/redhat/brp-strip-lto /usr/bin/strip + /usr/lib/rpm/brp-strip-static-archive /usr/bin/strip + /usr/lib/rpm/check-rpaths + /usr/lib/rpm/redhat/brp-mangle-shebangs + /usr/lib/rpm/brp-remove-la-files + /usr/lib/rpm/redhat/brp-python-rpm-in-distinfo + env /usr/lib/rpm/redhat/brp-python-bytecompile '' 1 0 -j2 Bytecompiling .py files below /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14 using python3.14 + /usr/lib/rpm/redhat/brp-python-hardlink + /usr/bin/add-determinism --brp -j2 /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/__pycache__/cli.cpython-314.pyc: rewriting with normalized contents /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/__pycache__/__init__.cpython-314.pyc: rewriting with normalized contents /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/__pycache__/model.cpython-314.pyc: replacing with normalized version /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/__pycache__/pagination.cpython-314.pyc: rewriting with normalized contents /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/__pycache__/query.cpython-314.pyc: rewriting with normalized contents /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/__pycache__/record_queries.cpython-314.pyc: rewriting with normalized contents /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/__pycache__/session.cpython-314.pyc: rewriting with normalized contents /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/__pycache__/table.cpython-314.pyc: rewriting with normalized contents /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/__pycache__/track_modifications.cpython-314.pyc: rewriting with normalized contents /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/__pycache__/model.cpython-314.opt-1.pyc: replacing with normalized version /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/__pycache__/extension.cpython-314.pyc: rewriting with normalized contents Scanned 9 directories and 35 files, processed 11 inodes, 11 modified (2 replaced + 9 rewritten), 0 unsupported format, 0 errors Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.vLPbTq + umask 022 + cd /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd flask_sqlalchemy-3.0.5 + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -march=x86-64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -mtls-dialect=gnu2 -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + PATH=/builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin + PYTHONPATH=/builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib64/python3.14/site-packages:/builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/BUILDROOT/usr/lib/python3.14/site-packages + PYTHONDONTWRITEBYTECODE=1 + PYTEST_ADDOPTS=' --ignore=/builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5/.pyproject-builddir' + PYTEST_XDIST_AUTO_NUM_WORKERS=2 + /usr/bin/pytest -Wdefault /usr/lib/python3.14/site-packages/pluggy/_callers.py:141: SyntaxWarning: 'return' in a 'finally' block return result /usr/lib/python3.14/site-packages/pluggy/_callers.py:182: SyntaxWarning: 'return' in a 'finally' block return outcome.get_result() ============================= test session starts ============================== platform linux -- Python 3.14.0b1, pytest-8.3.4, pluggy-1.5.0 rootdir: /builddir/build/BUILD/python-flask-sqlalchemy-3.0.5-build/flask_sqlalchemy-3.0.5 configfile: pyproject.toml testpaths: tests collected 129 items tests/test_cli.py E [ 0%] tests/test_engine.py ............... [ 12%] tests/test_legacy_query.py EEEEFF [ 17%] tests/test_metadata.py ......FFF. [ 24%] tests/test_model.py ....F [ 28%] tests/test_model_bind.py FFFFFFF [ 34%] tests/test_model_name.py ...................FFFFFFFFFFFFF [ 58%] tests/test_pagination.py ...........................EEEEEEEEEE [ 87%] tests/test_record_queries.py F [ 88%] tests/test_session.py ...FF [ 92%] tests/test_table_bind.py .... [ 95%] tests/test_track_modifications.py F [ 96%] tests/test_view_query.py EEEEF [100%] ==================================== ERRORS ==================================== _____________________ ERROR at setup of test_shell_context _____________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError ______________________ ERROR at setup of test_get_or_404 _______________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError _____________________ ERROR at setup of test_first_or_404 ______________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError ______________________ ERROR at setup of test_one_or_404 _______________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError _______________________ ERROR at setup of test_paginate ________________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError _______________________ ERROR at setup of test_paginate ________________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError ______________________ ERROR at setup of test_paginate_qs ______________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError _____________________ ERROR at setup of test_paginate_max ______________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError ____________________ ERROR at setup of test_next_page_size _____________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError _______________________ ERROR at setup of test_no_count ________________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError __________________ ERROR at setup of test_error_out[abc-None] __________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError __________________ ERROR at setup of test_error_out[None-abc] __________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError ___________________ ERROR at setup of test_error_out[0-None] ___________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError __________________ ERROR at setup of test_error_out[None--1] ___________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError _____________________ ERROR at setup of test_no_items_404 ______________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError ____________________ ERROR at setup of test_view_get_or_404 ____________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError _____________________ ERROR at setup of test_first_or_404 ______________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError ____________________ ERROR at setup of test_view_one_or_404 ____________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError _______________________ ERROR at setup of test_paginate ________________________ app = , db = @pytest.fixture def Todo(app: Flask, db: SQLAlchemy) -> t.Generator[t.Any, None, None]: > class Todo(db.Model): tests/conftest.py:35: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Todo'>, originating_module = 'conftest' key = 'query_class', attr_cls = , required = False is_dataclass_field = False, expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Todo.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError =================================== FAILURES =================================== ___________________________ test_default_query_class ___________________________ db = @pytest.mark.usefixtures("app_ctx") def test_default_query_class(db: SQLAlchemy) -> None: > class Parent(db.Model): tests/test_legacy_query.py:79: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Parent'> originating_module = 'test_legacy_query', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Parent.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError ___________________________ test_custom_query_class ____________________________ app = @pytest.mark.usefixtures("app_ctx") def test_custom_query_class(app: Flask) -> None: class CustomQuery(Query): pass db = SQLAlchemy(app, query_class=CustomQuery) > class Parent(db.Model): tests/test_legacy_query.py:106: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Parent'> originating_module = 'test_legacy_query', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Parent.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError _____________________________ test_create_drop_all _____________________________ expression = 't.ClassVar', module_name = 'test_metadata' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: > annotation = eval(expression, base_globals, locals_) E NameError: name 't' is not defined /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:277: NameError The above exception was the direct cause of the following exception: annotation = 't.ClassVar[type[Query]]', originating_module = 'test_metadata' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: > obj = eval_name_only(mm.group(1), originating_module) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:293: in eval_name_only return eval_expression(name, module_name, locals_=locals_) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ expression = 't.ClassVar', module_name = 'test_metadata' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: annotation = eval(expression, base_globals, locals_) except Exception as err: > raise NameError( f"Could not de-stringify annotation {expression!r}" ) from err E NameError: Could not de-stringify annotation 't.ClassVar' /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:279: NameError The above exception was the direct cause of the following exception: raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_metadata', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. > annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2323: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:157: in de_stringify_annotation annotation = str_cleanup_fn(annotation, originating_module) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ annotation = 't.ClassVar[type[Query]]', originating_module = 'test_metadata' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: obj = eval_name_only(mm.group(1), originating_module) except NameError as ne: > raise _CleanupError( f'For annotation "{annotation}", could not resolve ' f'container type "{mm.group(1)}". ' "Please ensure this type is imported at the module level " "outside of TYPE_CHECKING blocks" ) from ne E sqlalchemy.orm.util._CleanupError: For annotation "t.ClassVar[type[Query]]", could not resolve container type "t.ClassVar". Please ensure this type is imported at the module level outside of TYPE_CHECKING blocks /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2223: _CleanupError The above exception was the direct cause of the following exception: app = @pytest.mark.usefixtures("app_ctx") def test_create_drop_all(app: Flask) -> None: app.config["SQLALCHEMY_BINDS"] = {"a": "sqlite://"} db = SQLAlchemy(app) > class User(db.Model): tests/test_metadata.py:65: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_metadata', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: > raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce E sqlalchemy.orm.exc.MappedAnnotationError: Could not interpret annotation t.ClassVar[type[Query]]. Check that it uses names that are correctly imported at the module level. See chained stack trace for more hints. /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2330: MappedAnnotationError ___________________________ test_create_key_spec[a] ____________________________ expression = 't.ClassVar', module_name = 'test_metadata' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: > annotation = eval(expression, base_globals, locals_) E NameError: name 't' is not defined /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:277: NameError The above exception was the direct cause of the following exception: annotation = 't.ClassVar[type[Query]]', originating_module = 'test_metadata' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: > obj = eval_name_only(mm.group(1), originating_module) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:293: in eval_name_only return eval_expression(name, module_name, locals_=locals_) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ expression = 't.ClassVar', module_name = 'test_metadata' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: annotation = eval(expression, base_globals, locals_) except Exception as err: > raise NameError( f"Could not de-stringify annotation {expression!r}" ) from err E NameError: Could not de-stringify annotation 't.ClassVar' /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:279: NameError The above exception was the direct cause of the following exception: raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_metadata', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. > annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2323: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:157: in de_stringify_annotation annotation = str_cleanup_fn(annotation, originating_module) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ annotation = 't.ClassVar[type[Query]]', originating_module = 'test_metadata' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: obj = eval_name_only(mm.group(1), originating_module) except NameError as ne: > raise _CleanupError( f'For annotation "{annotation}", could not resolve ' f'container type "{mm.group(1)}". ' "Please ensure this type is imported at the module level " "outside of TYPE_CHECKING blocks" ) from ne E sqlalchemy.orm.util._CleanupError: For annotation "t.ClassVar[type[Query]]", could not resolve container type "t.ClassVar". Please ensure this type is imported at the module level outside of TYPE_CHECKING blocks /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2223: _CleanupError The above exception was the direct cause of the following exception: app = , bind_key = 'a' @pytest.mark.usefixtures("app_ctx") @pytest.mark.parametrize("bind_key", ["a", ["a"]]) def test_create_key_spec(app: Flask, bind_key: str | list[str | None]) -> None: app.config["SQLALCHEMY_BINDS"] = {"a": "sqlite://"} db = SQLAlchemy(app) > class User(db.Model): tests/test_metadata.py:96: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_metadata', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: > raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce E sqlalchemy.orm.exc.MappedAnnotationError: Could not interpret annotation t.ClassVar[type[Query]]. Check that it uses names that are correctly imported at the module level. See chained stack trace for more hints. /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2330: MappedAnnotationError _______________________ test_create_key_spec[bind_key1] ________________________ expression = 't.ClassVar', module_name = 'test_metadata' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: > annotation = eval(expression, base_globals, locals_) E NameError: name 't' is not defined /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:277: NameError The above exception was the direct cause of the following exception: annotation = 't.ClassVar[type[Query]]', originating_module = 'test_metadata' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: > obj = eval_name_only(mm.group(1), originating_module) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:293: in eval_name_only return eval_expression(name, module_name, locals_=locals_) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ expression = 't.ClassVar', module_name = 'test_metadata' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: annotation = eval(expression, base_globals, locals_) except Exception as err: > raise NameError( f"Could not de-stringify annotation {expression!r}" ) from err E NameError: Could not de-stringify annotation 't.ClassVar' /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:279: NameError The above exception was the direct cause of the following exception: raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_metadata', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. > annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2323: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:157: in de_stringify_annotation annotation = str_cleanup_fn(annotation, originating_module) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ annotation = 't.ClassVar[type[Query]]', originating_module = 'test_metadata' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: obj = eval_name_only(mm.group(1), originating_module) except NameError as ne: > raise _CleanupError( f'For annotation "{annotation}", could not resolve ' f'container type "{mm.group(1)}". ' "Please ensure this type is imported at the module level " "outside of TYPE_CHECKING blocks" ) from ne E sqlalchemy.orm.util._CleanupError: For annotation "t.ClassVar[type[Query]]", could not resolve container type "t.ClassVar". Please ensure this type is imported at the module level outside of TYPE_CHECKING blocks /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2223: _CleanupError The above exception was the direct cause of the following exception: app = , bind_key = ['a'] @pytest.mark.usefixtures("app_ctx") @pytest.mark.parametrize("bind_key", ["a", ["a"]]) def test_create_key_spec(app: Flask, bind_key: str | list[str | None]) -> None: app.config["SQLALCHEMY_BINDS"] = {"a": "sqlite://"} db = SQLAlchemy(app) > class User(db.Model): tests/test_metadata.py:96: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_metadata', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: > raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce E sqlalchemy.orm.exc.MappedAnnotationError: Could not interpret annotation t.ClassVar[type[Query]]. Check that it uses names that are correctly imported at the module level. See chained stack trace for more hints. /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2330: MappedAnnotationError _______________________________ test_model_repr ________________________________ db = @pytest.mark.usefixtures("app_ctx") def test_model_repr(db: SQLAlchemy) -> None: > class User(db.Model): tests/test_model.py:46: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_model', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "User.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError ____________________________ test_bind_key_default _____________________________ expression = 't.ClassVar', module_name = 'test_model_bind' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: > annotation = eval(expression, base_globals, locals_) E NameError: name 't' is not defined /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:277: NameError The above exception was the direct cause of the following exception: annotation = 't.ClassVar[type[Query]]', originating_module = 'test_model_bind' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: > obj = eval_name_only(mm.group(1), originating_module) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:293: in eval_name_only return eval_expression(name, module_name, locals_=locals_) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ expression = 't.ClassVar', module_name = 'test_model_bind' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: annotation = eval(expression, base_globals, locals_) except Exception as err: > raise NameError( f"Could not de-stringify annotation {expression!r}" ) from err E NameError: Could not de-stringify annotation 't.ClassVar' /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:279: NameError The above exception was the direct cause of the following exception: raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_model_bind', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. > annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2323: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:157: in de_stringify_annotation annotation = str_cleanup_fn(annotation, originating_module) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ annotation = 't.ClassVar[type[Query]]', originating_module = 'test_model_bind' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: obj = eval_name_only(mm.group(1), originating_module) except NameError as ne: > raise _CleanupError( f'For annotation "{annotation}", could not resolve ' f'container type "{mm.group(1)}". ' "Please ensure this type is imported at the module level " "outside of TYPE_CHECKING blocks" ) from ne E sqlalchemy.orm.util._CleanupError: For annotation "t.ClassVar[type[Query]]", could not resolve container type "t.ClassVar". Please ensure this type is imported at the module level outside of TYPE_CHECKING blocks /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2223: _CleanupError The above exception was the direct cause of the following exception: db = def test_bind_key_default(db: SQLAlchemy) -> None: > class User(db.Model): tests/test_model_bind.py:9: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_model_bind', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: > raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce E sqlalchemy.orm.exc.MappedAnnotationError: Could not interpret annotation t.ClassVar[type[Query]]. Check that it uses names that are correctly imported at the module level. See chained stack trace for more hints. /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2330: MappedAnnotationError ____________________________ test_metadata_per_bind ____________________________ expression = 't.ClassVar', module_name = 'test_model_bind' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: > annotation = eval(expression, base_globals, locals_) E NameError: name 't' is not defined /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:277: NameError The above exception was the direct cause of the following exception: annotation = 't.ClassVar[type[Query]]', originating_module = 'test_model_bind' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: > obj = eval_name_only(mm.group(1), originating_module) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:293: in eval_name_only return eval_expression(name, module_name, locals_=locals_) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ expression = 't.ClassVar', module_name = 'test_model_bind' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: annotation = eval(expression, base_globals, locals_) except Exception as err: > raise NameError( f"Could not de-stringify annotation {expression!r}" ) from err E NameError: Could not de-stringify annotation 't.ClassVar' /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:279: NameError The above exception was the direct cause of the following exception: raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_model_bind', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. > annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2323: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:157: in de_stringify_annotation annotation = str_cleanup_fn(annotation, originating_module) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ annotation = 't.ClassVar[type[Query]]', originating_module = 'test_model_bind' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: obj = eval_name_only(mm.group(1), originating_module) except NameError as ne: > raise _CleanupError( f'For annotation "{annotation}", could not resolve ' f'container type "{mm.group(1)}". ' "Please ensure this type is imported at the module level " "outside of TYPE_CHECKING blocks" ) from ne E sqlalchemy.orm.util._CleanupError: For annotation "t.ClassVar[type[Query]]", could not resolve container type "t.ClassVar". Please ensure this type is imported at the module level outside of TYPE_CHECKING blocks /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2223: _CleanupError The above exception was the direct cause of the following exception: db = def test_metadata_per_bind(db: SQLAlchemy) -> None: > class User(db.Model): tests/test_model_bind.py:16: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_model_bind', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: > raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce E sqlalchemy.orm.exc.MappedAnnotationError: Could not interpret annotation t.ClassVar[type[Query]]. Check that it uses names that are correctly imported at the module level. See chained stack trace for more hints. /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2330: MappedAnnotationError _____________________ test_multiple_binds_same_table_name ______________________ expression = 't.ClassVar', module_name = 'test_model_bind' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: > annotation = eval(expression, base_globals, locals_) E NameError: name 't' is not defined /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:277: NameError The above exception was the direct cause of the following exception: annotation = 't.ClassVar[type[Query]]', originating_module = 'test_model_bind' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: > obj = eval_name_only(mm.group(1), originating_module) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:293: in eval_name_only return eval_expression(name, module_name, locals_=locals_) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ expression = 't.ClassVar', module_name = 'test_model_bind' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: annotation = eval(expression, base_globals, locals_) except Exception as err: > raise NameError( f"Could not de-stringify annotation {expression!r}" ) from err E NameError: Could not de-stringify annotation 't.ClassVar' /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:279: NameError The above exception was the direct cause of the following exception: raw_annotation = 't.ClassVar[type[Query]]' cls = .UserA'> originating_module = 'test_model_bind', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. > annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2323: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:157: in de_stringify_annotation annotation = str_cleanup_fn(annotation, originating_module) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ annotation = 't.ClassVar[type[Query]]', originating_module = 'test_model_bind' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: obj = eval_name_only(mm.group(1), originating_module) except NameError as ne: > raise _CleanupError( f'For annotation "{annotation}", could not resolve ' f'container type "{mm.group(1)}". ' "Please ensure this type is imported at the module level " "outside of TYPE_CHECKING blocks" ) from ne E sqlalchemy.orm.util._CleanupError: For annotation "t.ClassVar[type[Query]]", could not resolve container type "t.ClassVar". Please ensure this type is imported at the module level outside of TYPE_CHECKING blocks /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2223: _CleanupError The above exception was the direct cause of the following exception: db = def test_multiple_binds_same_table_name(db: SQLAlchemy) -> None: > class UserA(db.Model): tests/test_model_bind.py:24: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .UserA'> originating_module = 'test_model_bind', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: > raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce E sqlalchemy.orm.exc.MappedAnnotationError: Could not interpret annotation t.ClassVar[type[Query]]. Check that it uses names that are correctly imported at the module level. See chained stack trace for more hints. /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2330: MappedAnnotationError _____________________________ test_inherit_parent ______________________________ expression = 't.ClassVar', module_name = 'test_model_bind' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: > annotation = eval(expression, base_globals, locals_) E NameError: name 't' is not defined /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:277: NameError The above exception was the direct cause of the following exception: annotation = 't.ClassVar[type[Query]]', originating_module = 'test_model_bind' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: > obj = eval_name_only(mm.group(1), originating_module) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:293: in eval_name_only return eval_expression(name, module_name, locals_=locals_) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ expression = 't.ClassVar', module_name = 'test_model_bind' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: annotation = eval(expression, base_globals, locals_) except Exception as err: > raise NameError( f"Could not de-stringify annotation {expression!r}" ) from err E NameError: Could not de-stringify annotation 't.ClassVar' /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:279: NameError The above exception was the direct cause of the following exception: raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_model_bind', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. > annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2323: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:157: in de_stringify_annotation annotation = str_cleanup_fn(annotation, originating_module) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ annotation = 't.ClassVar[type[Query]]', originating_module = 'test_model_bind' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: obj = eval_name_only(mm.group(1), originating_module) except NameError as ne: > raise _CleanupError( f'For annotation "{annotation}", could not resolve ' f'container type "{mm.group(1)}". ' "Please ensure this type is imported at the module level " "outside of TYPE_CHECKING blocks" ) from ne E sqlalchemy.orm.util._CleanupError: For annotation "t.ClassVar[type[Query]]", could not resolve container type "t.ClassVar". Please ensure this type is imported at the module level outside of TYPE_CHECKING blocks /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2223: _CleanupError The above exception was the direct cause of the following exception: db = def test_inherit_parent(db: SQLAlchemy) -> None: > class User(db.Model): tests/test_model_bind.py:39: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_model_bind', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: > raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce E sqlalchemy.orm.exc.MappedAnnotationError: Could not interpret annotation t.ClassVar[type[Query]]. Check that it uses names that are correctly imported at the module level. See chained stack trace for more hints. /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2330: MappedAnnotationError _________________________ test_inherit_abstract_parent _________________________ expression = 't.ClassVar', module_name = 'test_model_bind' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: > annotation = eval(expression, base_globals, locals_) E NameError: name 't' is not defined /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:277: NameError The above exception was the direct cause of the following exception: annotation = 't.ClassVar[type[Query]]', originating_module = 'test_model_bind' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: > obj = eval_name_only(mm.group(1), originating_module) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:293: in eval_name_only return eval_expression(name, module_name, locals_=locals_) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ expression = 't.ClassVar', module_name = 'test_model_bind' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: annotation = eval(expression, base_globals, locals_) except Exception as err: > raise NameError( f"Could not de-stringify annotation {expression!r}" ) from err E NameError: Could not de-stringify annotation 't.ClassVar' /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:279: NameError The above exception was the direct cause of the following exception: raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_model_bind', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. > annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2323: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:157: in de_stringify_annotation annotation = str_cleanup_fn(annotation, originating_module) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ annotation = 't.ClassVar[type[Query]]', originating_module = 'test_model_bind' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: obj = eval_name_only(mm.group(1), originating_module) except NameError as ne: > raise _CleanupError( f'For annotation "{annotation}", could not resolve ' f'container type "{mm.group(1)}". ' "Please ensure this type is imported at the module level " "outside of TYPE_CHECKING blocks" ) from ne E sqlalchemy.orm.util._CleanupError: For annotation "t.ClassVar[type[Query]]", could not resolve container type "t.ClassVar". Please ensure this type is imported at the module level outside of TYPE_CHECKING blocks /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2223: _CleanupError The above exception was the direct cause of the following exception: db = def test_inherit_abstract_parent(db: SQLAlchemy) -> None: class AbstractUser(db.Model): __abstract__ = True __bind_key__ = "auth" > class User(AbstractUser): tests/test_model_bind.py:59: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_model_bind', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: > raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce E sqlalchemy.orm.exc.MappedAnnotationError: Could not interpret annotation t.ClassVar[type[Query]]. Check that it uses names that are correctly imported at the module level. See chained stack trace for more hints. /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2330: MappedAnnotationError ____________________________ test_explicit_metadata ____________________________ expression = 't.ClassVar', module_name = 'test_model_bind' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: > annotation = eval(expression, base_globals, locals_) E NameError: name 't' is not defined /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:277: NameError The above exception was the direct cause of the following exception: annotation = 't.ClassVar[type[Query]]', originating_module = 'test_model_bind' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: > obj = eval_name_only(mm.group(1), originating_module) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:293: in eval_name_only return eval_expression(name, module_name, locals_=locals_) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ expression = 't.ClassVar', module_name = 'test_model_bind' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: annotation = eval(expression, base_globals, locals_) except Exception as err: > raise NameError( f"Could not de-stringify annotation {expression!r}" ) from err E NameError: Could not de-stringify annotation 't.ClassVar' /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:279: NameError The above exception was the direct cause of the following exception: raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_model_bind', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. > annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2323: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:157: in de_stringify_annotation annotation = str_cleanup_fn(annotation, originating_module) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ annotation = 't.ClassVar[type[Query]]', originating_module = 'test_model_bind' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: obj = eval_name_only(mm.group(1), originating_module) except NameError as ne: > raise _CleanupError( f'For annotation "{annotation}", could not resolve ' f'container type "{mm.group(1)}". ' "Please ensure this type is imported at the module level " "outside of TYPE_CHECKING blocks" ) from ne E sqlalchemy.orm.util._CleanupError: For annotation "t.ClassVar[type[Query]]", could not resolve container type "t.ClassVar". Please ensure this type is imported at the module level outside of TYPE_CHECKING blocks /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2223: _CleanupError The above exception was the direct cause of the following exception: db = def test_explicit_metadata(db: SQLAlchemy) -> None: other_metadata = sa.MetaData() > class User(db.Model): tests/test_model_bind.py:69: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_model_bind', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: > raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce E sqlalchemy.orm.exc.MappedAnnotationError: Could not interpret annotation t.ClassVar[type[Query]]. Check that it uses names that are correctly imported at the module level. See chained stack trace for more hints. /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2330: MappedAnnotationError _____________________________ test_explicit_table ______________________________ expression = 't.ClassVar', module_name = 'test_model_bind' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: > annotation = eval(expression, base_globals, locals_) E NameError: name 't' is not defined /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:277: NameError The above exception was the direct cause of the following exception: annotation = 't.ClassVar[type[Query]]', originating_module = 'test_model_bind' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: > obj = eval_name_only(mm.group(1), originating_module) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:293: in eval_name_only return eval_expression(name, module_name, locals_=locals_) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ expression = 't.ClassVar', module_name = 'test_model_bind' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: annotation = eval(expression, base_globals, locals_) except Exception as err: > raise NameError( f"Could not de-stringify annotation {expression!r}" ) from err E NameError: Could not de-stringify annotation 't.ClassVar' /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:279: NameError The above exception was the direct cause of the following exception: raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_model_bind', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. > annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2323: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:157: in de_stringify_annotation annotation = str_cleanup_fn(annotation, originating_module) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ annotation = 't.ClassVar[type[Query]]', originating_module = 'test_model_bind' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: obj = eval_name_only(mm.group(1), originating_module) except NameError as ne: > raise _CleanupError( f'For annotation "{annotation}", could not resolve ' f'container type "{mm.group(1)}". ' "Please ensure this type is imported at the module level " "outside of TYPE_CHECKING blocks" ) from ne E sqlalchemy.orm.util._CleanupError: For annotation "t.ClassVar[type[Query]]", could not resolve container type "t.ClassVar". Please ensure this type is imported at the module level outside of TYPE_CHECKING blocks /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2223: _CleanupError The above exception was the direct cause of the following exception: db = def test_explicit_table(db: SQLAlchemy) -> None: user_table = db.Table( "user", sa.Column("id", sa.Integer, primary_key=True), bind_key="auth", ) > class User(db.Model): tests/test_model_bind.py:85: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_model_bind', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: > raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce E sqlalchemy.orm.exc.MappedAnnotationError: Could not interpret annotation t.ClassVar[type[Query]]. Check that it uses names that are correctly imported at the module level. See chained stack trace for more hints. /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2330: MappedAnnotationError __________________________________ test_name ___________________________________ db = def test_name(db: SQLAlchemy) -> None: > class FOOBar(db.Model): tests/test_model_name.py:52: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .FOOBar'> originating_module = 'test_model_name', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "FOOBar.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError _______________________________ test_single_name _______________________________ db = def test_single_name(db: SQLAlchemy) -> None: """Single table inheritance should not set a new name.""" > class Duck(db.Model): tests/test_model_name.py:70: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Duck'> originating_module = 'test_model_name', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Duck.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError _______________________________ test_joined_name _______________________________ db = def test_joined_name(db: SQLAlchemy) -> None: """Model has a separate primary key; it should set a new name.""" > class Duck(db.Model): tests/test_model_name.py:83: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Duck'> originating_module = 'test_model_name', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Duck.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError ________________________________ test_mixin_id _________________________________ db = def test_mixin_id(db: SQLAlchemy) -> None: """Primary key provided by mixin should still allow model to set tablename. """ class Base: id = sa.Column(sa.Integer, primary_key=True) > class Duck(Base, db.Model): tests/test_model_name.py:100: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Duck'> originating_module = 'test_model_name', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Duck.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError _______________________________ test_mixin_attr ________________________________ db = def test_mixin_attr(db: SQLAlchemy) -> None: """A declared attr tablename will be used down multiple levels of inheritance. """ class Mixin: @sa_orm.declared_attr # type: ignore[arg-type] def __tablename__(cls) -> str: # noqa: B902 return cls.__name__.upper() # type: ignore[attr-defined,no-any-return] > class Bird(Mixin, db.Model): tests/test_model_name.py:117: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Bird'> originating_module = 'test_model_name', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Bird.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError ______________________________ test_abstract_name ______________________________ db = def test_abstract_name(db: SQLAlchemy) -> None: """Abstract model should not set a name. Subclass should set a name.""" class Base(db.Model): __abstract__ = True id = sa.Column(sa.Integer, primary_key=True) > class Duck(Base): tests/test_model_name.py:140: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Duck'> originating_module = 'test_model_name', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Duck.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError ___________________________ test_complex_inheritance ___________________________ db = def test_complex_inheritance(db: SQLAlchemy) -> None: """Joined table inheritance, but the new primary key is provided by a mixin, not directly on the class. """ > class Duck(db.Model): tests/test_model_name.py:152: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Duck'> originating_module = 'test_model_name', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Duck.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError _______________________________ test_manual_name _______________________________ db = def test_manual_name(db: SQLAlchemy) -> None: """Setting a manual name prevents generation for the immediate model. A name is generated for joined but not single-table inheritance. """ > class Duck(db.Model): tests/test_model_name.py:171: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Duck'> originating_module = 'test_model_name', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Duck.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError ___________________________ test_primary_constraint ____________________________ db = def test_primary_constraint(db: SQLAlchemy) -> None: """Primary key will be picked up from table args.""" > class Duck(db.Model): tests/test_model_name.py:195: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Duck'> originating_module = 'test_model_name', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Duck.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError _______________________ test_no_access_to_class_property _______________________ db = def test_no_access_to_class_property(db: SQLAlchemy) -> None: """Ensure the implementation doesn't access class properties or declared attrs while inspecting the unmapped model. """ class class_property: def __init__(self, f: t.Callable[..., t.Any]) -> None: self.f = f def __get__(self, instance: t.Any, owner: type[t.Any]) -> t.Any: return self.f(owner) > class Duck(db.Model): tests/test_model_name.py:216: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Duck'> originating_module = 'test_model_name', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Duck.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError ___________________________ test_metadata_has_table ____________________________ db = def test_metadata_has_table(db: SQLAlchemy) -> None: user = db.Table("user", sa.Column("id", sa.Integer, primary_key=True)) > class User(db.Model): tests/test_model_name.py:243: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_model_name', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "User.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError ____________________ test_correct_error_for_no_primary_key _____________________ db = def test_correct_error_for_no_primary_key(db: SQLAlchemy) -> None: with pytest.raises(sa_exc.ArgumentError) as info: class User(db.Model): pass > assert "could not assemble any primary key" in str(info.value) E assert 'could not assemble any primary key' in 'Type annotation for "User.query_class" can\'t be correctly interpreted for Annotated Declarative Table form. ORM ann...mapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr)' E + where 'Type annotation for "User.query_class" can\'t be correctly interpreted for Annotated Declarative Table form. ORM ann...mapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr)' = str(MappedAnnotationError('Type annotation for "User.query_class" can\'t be correctly interpreted for Annotated Declarativ...notations which don\'t use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class.')) E + where MappedAnnotationError('Type annotation for "User.query_class" can\'t be correctly interpreted for Annotated Declarativ...notations which don\'t use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class.') = .value tests/test_model_name.py:255: AssertionError _________________________ test_single_has_parent_table _________________________ db = def test_single_has_parent_table(db: SQLAlchemy) -> None: > class Duck(db.Model): tests/test_model_name.py:259: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Duck'> originating_module = 'test_model_name', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Duck.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError _______________________________ test_query_info ________________________________ expression = 't.ClassVar', module_name = 'test_record_queries' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: > annotation = eval(expression, base_globals, locals_) E NameError: name 't' is not defined /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:277: NameError The above exception was the direct cause of the following exception: annotation = 't.ClassVar[type[Query]]' originating_module = 'test_record_queries' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: > obj = eval_name_only(mm.group(1), originating_module) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:293: in eval_name_only return eval_expression(name, module_name, locals_=locals_) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ expression = 't.ClassVar', module_name = 'test_record_queries' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: annotation = eval(expression, base_globals, locals_) except Exception as err: > raise NameError( f"Could not de-stringify annotation {expression!r}" ) from err E NameError: Could not de-stringify annotation 't.ClassVar' /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:279: NameError The above exception was the direct cause of the following exception: raw_annotation = 't.ClassVar[type[Query]]' cls = .Example'> originating_module = 'test_record_queries', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. > annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2323: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:157: in de_stringify_annotation annotation = str_cleanup_fn(annotation, originating_module) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ annotation = 't.ClassVar[type[Query]]' originating_module = 'test_record_queries' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: obj = eval_name_only(mm.group(1), originating_module) except NameError as ne: > raise _CleanupError( f'For annotation "{annotation}", could not resolve ' f'container type "{mm.group(1)}". ' "Please ensure this type is imported at the module level " "outside of TYPE_CHECKING blocks" ) from ne E sqlalchemy.orm.util._CleanupError: For annotation "t.ClassVar[type[Query]]", could not resolve container type "t.ClassVar". Please ensure this type is imported at the module level outside of TYPE_CHECKING blocks /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2223: _CleanupError The above exception was the direct cause of the following exception: app = @pytest.mark.usefixtures("app_ctx") def test_query_info(app: Flask) -> None: app.config["SQLALCHEMY_RECORD_QUERIES"] = True db = SQLAlchemy(app) > class Example(db.Model): tests/test_record_queries.py:18: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Example'> originating_module = 'test_record_queries', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: > raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce E sqlalchemy.orm.exc.MappedAnnotationError: Could not interpret annotation t.ClassVar[type[Query]]. Check that it uses names that are correctly imported at the module level. See chained stack trace for more hints. /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2330: MappedAnnotationError __________________________ test_session_uses_bind_key __________________________ expression = 't.ClassVar', module_name = 'test_session' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: > annotation = eval(expression, base_globals, locals_) E NameError: name 't' is not defined /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:277: NameError The above exception was the direct cause of the following exception: annotation = 't.ClassVar[type[Query]]', originating_module = 'test_session' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: > obj = eval_name_only(mm.group(1), originating_module) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:293: in eval_name_only return eval_expression(name, module_name, locals_=locals_) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ expression = 't.ClassVar', module_name = 'test_session' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: annotation = eval(expression, base_globals, locals_) except Exception as err: > raise NameError( f"Could not de-stringify annotation {expression!r}" ) from err E NameError: Could not de-stringify annotation 't.ClassVar' /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:279: NameError The above exception was the direct cause of the following exception: raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_session', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. > annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2323: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:157: in de_stringify_annotation annotation = str_cleanup_fn(annotation, originating_module) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ annotation = 't.ClassVar[type[Query]]', originating_module = 'test_session' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: obj = eval_name_only(mm.group(1), originating_module) except NameError as ne: > raise _CleanupError( f'For annotation "{annotation}", could not resolve ' f'container type "{mm.group(1)}". ' "Please ensure this type is imported at the module level " "outside of TYPE_CHECKING blocks" ) from ne E sqlalchemy.orm.util._CleanupError: For annotation "t.ClassVar[type[Query]]", could not resolve container type "t.ClassVar". Please ensure this type is imported at the module level outside of TYPE_CHECKING blocks /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2223: _CleanupError The above exception was the direct cause of the following exception: app = @pytest.mark.usefixtures("app_ctx") def test_session_uses_bind_key(app: Flask) -> None: app.config["SQLALCHEMY_BINDS"] = {"a": "sqlite://"} db = SQLAlchemy(app) > class User(db.Model): tests/test_session.py:58: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_session', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: > raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce E sqlalchemy.orm.exc.MappedAnnotationError: Could not interpret annotation t.ClassVar[type[Query]]. Check that it uses names that are correctly imported at the module level. See chained stack trace for more hints. /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2330: MappedAnnotationError __________________________ test_get_bind_inheritance ___________________________ expression = 't.ClassVar', module_name = 'test_session' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: > annotation = eval(expression, base_globals, locals_) E NameError: name 't' is not defined /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:277: NameError The above exception was the direct cause of the following exception: annotation = 't.ClassVar[type[Query]]', originating_module = 'test_session' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: > obj = eval_name_only(mm.group(1), originating_module) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2221: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:293: in eval_name_only return eval_expression(name, module_name, locals_=locals_) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ expression = 't.ClassVar', module_name = 'test_session' def eval_expression( expression: str, module_name: str, *, locals_: Optional[Mapping[str, Any]] = None, in_class: Optional[Type[Any]] = None, ) -> Any: try: base_globals: Dict[str, Any] = sys.modules[module_name].__dict__ except KeyError as ke: raise NameError( f"Module {module_name} isn't present in sys.modules; can't " f"evaluate expression {expression}" ) from ke try: if in_class is not None: cls_namespace = dict(in_class.__dict__) cls_namespace.setdefault(in_class.__name__, in_class) # see #10899. We want the locals/globals to take precedence # over the class namespace in this context, even though this # is not the usual way variables would resolve. cls_namespace.update(base_globals) annotation = eval(expression, cls_namespace, locals_) else: annotation = eval(expression, base_globals, locals_) except Exception as err: > raise NameError( f"Could not de-stringify annotation {expression!r}" ) from err E NameError: Could not de-stringify annotation 't.ClassVar' /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:279: NameError The above exception was the direct cause of the following exception: raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_session', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. > annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2323: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ /usr/lib64/python3.14/site-packages/sqlalchemy/util/typing.py:157: in de_stringify_annotation annotation = str_cleanup_fn(annotation, originating_module) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ annotation = 't.ClassVar[type[Query]]', originating_module = 'test_session' def _cleanup_mapped_str_annotation( annotation: str, originating_module: str ) -> str: # fix up an annotation that comes in as the form: # 'Mapped[List[Address]]' so that it instead looks like: # 'Mapped[List["Address"]]' , which will allow us to get # "Address" as a string # additionally, resolve symbols for these names since this is where # we'd have to do it inner: Optional[Match[str]] mm = re.match(r"^([^ \|]+?)\[(.+)\]$", annotation) if not mm: return annotation # ticket #8759. Resolve the Mapped name to a real symbol. # originally this just checked the name. try: obj = eval_name_only(mm.group(1), originating_module) except NameError as ne: > raise _CleanupError( f'For annotation "{annotation}", could not resolve ' f'container type "{mm.group(1)}". ' "Please ensure this type is imported at the module level " "outside of TYPE_CHECKING blocks" ) from ne E sqlalchemy.orm.util._CleanupError: For annotation "t.ClassVar[type[Query]]", could not resolve container type "t.ClassVar". Please ensure this type is imported at the module level outside of TYPE_CHECKING blocks /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2223: _CleanupError The above exception was the direct cause of the following exception: app = @pytest.mark.usefixtures("app_ctx") def test_get_bind_inheritance(app: Flask) -> None: app.config["SQLALCHEMY_BINDS"] = {"a": "sqlite://"} db = SQLAlchemy(app) > class User(db.Model): tests/test_session.py:74: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .User'> originating_module = 'test_session', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: > raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce E sqlalchemy.orm.exc.MappedAnnotationError: Could not interpret annotation t.ClassVar[type[Query]]. Check that it uses names that are correctly imported at the module level. See chained stack trace for more hints. /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2330: MappedAnnotationError ___________________________ test_track_modifications ___________________________ app = @pytest.mark.usefixtures("app_ctx") def test_track_modifications(app: Flask) -> None: app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True db = SQLAlchemy(app) > class Example(db.Model): tests/test_track_modifications.py:21: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Example'> originating_module = 'test_track_modifications', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Example.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError __________________________ test_view_get_or_404_typed __________________________ db = , app = @pytest.mark.usefixtures("app_ctx") def test_view_get_or_404_typed(db: SQLAlchemy, app: Flask) -> None: > class Quiz(db.Model): tests/test_view_query.py:67: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:100: in __init__ super().__init__(name, bases, d, **kwargs) ../BUILDROOT/usr/lib/python3.14/site-packages/flask_sqlalchemy/model.py:120: in __init__ super().__init__(name, bases, d, **kwargs) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_api.py:198: in __init__ _as_declarative(reg, cls, dict_) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:244: in _as_declarative return _MapperConfig.setup_mapping(registry, cls, dict_, None, {}) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:325: in setup_mapping return _ClassScanMapperConfig( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:561: in __init__ self._scan_attributes() /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1021: in _scan_attributes collected_annotation = self._collect_annotation( /usr/lib64/python3.14/site-packages/sqlalchemy/orm/decl_base.py:1303: in _collect_annotation extracted = _extract_mapped_subtype( _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ raw_annotation = 't.ClassVar[type[Query]]' cls = .Quiz'> originating_module = 'test_view_query', key = 'query_class' attr_cls = , required = False, is_dataclass_field = False expect_mapped = True, raiseerr = True def _extract_mapped_subtype( raw_annotation: Optional[_AnnotationScanType], cls: type, originating_module: str, key: str, attr_cls: Type[Any], required: bool, is_dataclass_field: bool, expect_mapped: bool = True, raiseerr: bool = True, ) -> Optional[Tuple[Union[_AnnotationScanType, str], Optional[type]]]: """given an annotation, figure out if it's ``Mapped[something]`` and if so, return the ``something`` part. Includes error raise scenarios and other options. """ if raw_annotation is None: if required: raise orm_exc.MappedAnnotationError( f"Python typing annotation is required for attribute " f'"{cls.__name__}.{key}" when primary argument(s) for ' f'"{attr_cls.__name__}" construct are None or not present' ) return None try: # destringify the "outside" of the annotation. note we are not # adding include_generic so it will *not* dig into generic contents, # which will remain as ForwardRef or plain str under future annotations # mode. The full destringify happens later when mapped_column goes # to do a full lookup in the registry type_annotations_map. annotated = de_stringify_annotation( cls, raw_annotation, originating_module, str_cleanup_fn=_cleanup_mapped_str_annotation, ) except _CleanupError as ce: raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ce except NameError as ne: if raiseerr and "Mapped[" in raw_annotation: # type: ignore raise orm_exc.MappedAnnotationError( f"Could not interpret annotation {raw_annotation}. " "Check that it uses names that are correctly imported at the " "module level. See chained stack trace for more hints." ) from ne annotated = raw_annotation # type: ignore if is_dataclass_field: return annotated, None else: if not hasattr(annotated, "__origin__") or not is_origin_of_cls( annotated, _MappedAnnotationBase ): if expect_mapped: if not raiseerr: return None origin = getattr(annotated, "__origin__", None) if origin is typing.ClassVar: return None # check for other kind of ORM descriptor like AssociationProxy, # don't raise for that (issue #9957) elif isinstance(origin, type) and issubclass( origin, ORMDescriptor ): return None > raise orm_exc.MappedAnnotationError( f'Type annotation for "{cls.__name__}.{key}" ' "can't be correctly interpreted for " "Annotated Declarative Table form. ORM annotations " "should normally make use of the ``Mapped[]`` generic " "type, or other ORM-compatible generic type, as a " "container for the actual type, which indicates the " "intent that the attribute is mapped. " "Class variables that are not intended to be mapped " "by the ORM should use ClassVar[]. " "To allow Annotated Declarative to disregard legacy " "annotations which don't use Mapped[] to pass, set " '"__allow_unmapped__ = True" on the class or a ' "superclass this class.", code="zlpr", ) E sqlalchemy.orm.exc.MappedAnnotationError: Type annotation for "Quiz.query_class" can't be correctly interpreted for Annotated Declarative Table form. ORM annotations should normally make use of the ``Mapped[]`` generic type, or other ORM-compatible generic type, as a container for the actual type, which indicates the intent that the attribute is mapped. Class variables that are not intended to be mapped by the ORM should use ClassVar[]. To allow Annotated Declarative to disregard legacy annotations which don't use Mapped[] to pass, set "__allow_unmapped__ = True" on the class or a superclass this class. (Background on this error at: https://sqlalche.me/e/20/zlpr) /usr/lib64/python3.14/site-packages/sqlalchemy/orm/util.py:2366: MappedAnnotationError =============================== warnings summary =============================== tests/test_legacy_query.py::test_get_or_404 /usr/lib/python3.14/site-packages/pluggy/_callers.py:119: ResourceWarning: unclosed database in for teardown in reversed(teardowns): Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. tests/test_legacy_query.py::test_get_or_404 /usr/lib/python3.14/site-packages/pluggy/_callers.py:119: ResourceWarning: unclosed database in for teardown in reversed(teardowns): Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. tests/test_model.py::test_model_repr /usr/lib64/python3.14/site-packages/sqlalchemy/engine/create.py:92: ResourceWarning: unclosed database in @util.deprecated_params( Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. tests/test_model.py::test_model_repr /usr/lib64/python3.14/site-packages/sqlalchemy/engine/create.py:92: ResourceWarning: unclosed database in @util.deprecated_params( Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. tests/test_model.py::test_model_repr /usr/lib64/python3.14/site-packages/sqlalchemy/engine/create.py:92: ResourceWarning: unclosed database in @util.deprecated_params( Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. tests/test_model.py::test_model_repr /usr/lib64/python3.14/site-packages/sqlalchemy/engine/create.py:92: ResourceWarning: unclosed database in @util.deprecated_params( Enable tracemalloc to get traceback where the object was allocated. See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info. -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html =========================== short test summary info ============================ FAILED tests/test_legacy_query.py::test_default_query_class - sqlalchemy.orm.... FAILED tests/test_legacy_query.py::test_custom_query_class - sqlalchemy.orm.e... FAILED tests/test_metadata.py::test_create_drop_all - sqlalchemy.orm.exc.Mapp... FAILED tests/test_metadata.py::test_create_key_spec[a] - sqlalchemy.orm.exc.M... FAILED tests/test_metadata.py::test_create_key_spec[bind_key1] - sqlalchemy.o... FAILED tests/test_model.py::test_model_repr - sqlalchemy.orm.exc.MappedAnnota... FAILED tests/test_model_bind.py::test_bind_key_default - sqlalchemy.orm.exc.M... FAILED tests/test_model_bind.py::test_metadata_per_bind - sqlalchemy.orm.exc.... FAILED tests/test_model_bind.py::test_multiple_binds_same_table_name - sqlalc... FAILED tests/test_model_bind.py::test_inherit_parent - sqlalchemy.orm.exc.Map... FAILED tests/test_model_bind.py::test_inherit_abstract_parent - sqlalchemy.or... FAILED tests/test_model_bind.py::test_explicit_metadata - sqlalchemy.orm.exc.... FAILED tests/test_model_bind.py::test_explicit_table - sqlalchemy.orm.exc.Map... FAILED tests/test_model_name.py::test_name - sqlalchemy.orm.exc.MappedAnnotat... FAILED tests/test_model_name.py::test_single_name - sqlalchemy.orm.exc.Mapped... FAILED tests/test_model_name.py::test_joined_name - sqlalchemy.orm.exc.Mapped... FAILED tests/test_model_name.py::test_mixin_id - sqlalchemy.orm.exc.MappedAnn... FAILED tests/test_model_name.py::test_mixin_attr - sqlalchemy.orm.exc.MappedA... FAILED tests/test_model_name.py::test_abstract_name - sqlalchemy.orm.exc.Mapp... FAILED tests/test_model_name.py::test_complex_inheritance - sqlalchemy.orm.ex... FAILED tests/test_model_name.py::test_manual_name - sqlalchemy.orm.exc.Mapped... FAILED tests/test_model_name.py::test_primary_constraint - sqlalchemy.orm.exc... FAILED tests/test_model_name.py::test_no_access_to_class_property - sqlalchem... FAILED tests/test_model_name.py::test_metadata_has_table - sqlalchemy.orm.exc... FAILED tests/test_model_name.py::test_correct_error_for_no_primary_key - asse... FAILED tests/test_model_name.py::test_single_has_parent_table - sqlalchemy.or... FAILED tests/test_record_queries.py::test_query_info - sqlalchemy.orm.exc.Map... FAILED tests/test_session.py::test_session_uses_bind_key - sqlalchemy.orm.exc... FAILED tests/test_session.py::test_get_bind_inheritance - sqlalchemy.orm.exc.... FAILED tests/test_track_modifications.py::test_track_modifications - sqlalche... FAILED tests/test_view_query.py::test_view_get_or_404_typed - sqlalchemy.orm.... ERROR tests/test_cli.py::test_shell_context - sqlalchemy.orm.exc.MappedAnnota... ERROR tests/test_legacy_query.py::test_get_or_404 - sqlalchemy.orm.exc.Mapped... ERROR tests/test_legacy_query.py::test_first_or_404 - sqlalchemy.orm.exc.Mapp... ERROR tests/test_legacy_query.py::test_one_or_404 - sqlalchemy.orm.exc.Mapped... ERROR tests/test_legacy_query.py::test_paginate - sqlalchemy.orm.exc.MappedAn... ERROR tests/test_pagination.py::test_paginate - sqlalchemy.orm.exc.MappedAnno... ERROR tests/test_pagination.py::test_paginate_qs - sqlalchemy.orm.exc.MappedA... ERROR tests/test_pagination.py::test_paginate_max - sqlalchemy.orm.exc.Mapped... ERROR tests/test_pagination.py::test_next_page_size - sqlalchemy.orm.exc.Mapp... ERROR tests/test_pagination.py::test_no_count - sqlalchemy.orm.exc.MappedAnno... ERROR tests/test_pagination.py::test_error_out[abc-None] - sqlalchemy.orm.exc... ERROR tests/test_pagination.py::test_error_out[None-abc] - sqlalchemy.orm.exc... ERROR tests/test_pagination.py::test_error_out[0-None] - sqlalchemy.orm.exc.M... ERROR tests/test_pagination.py::test_error_out[None--1] - sqlalchemy.orm.exc.... ERROR tests/test_pagination.py::test_no_items_404 - sqlalchemy.orm.exc.Mapped... ERROR tests/test_view_query.py::test_view_get_or_404 - sqlalchemy.orm.exc.Map... ERROR tests/test_view_query.py::test_first_or_404 - sqlalchemy.orm.exc.Mapped... ERROR tests/test_view_query.py::test_view_one_or_404 - sqlalchemy.orm.exc.Map... ERROR tests/test_view_query.py::test_paginate - sqlalchemy.orm.exc.MappedAnno... ============= 31 failed, 79 passed, 6 warnings, 19 errors in 5.48s ============= RPM build errors: error: Bad exit status from /var/tmp/rpm-tmp.vLPbTq (%check) Bad exit status from /var/tmp/rpm-tmp.vLPbTq (%check) Finish: rpmbuild python-flask-sqlalchemy-3.0.5-7.fc43.src.rpm Finish: build phase for python-flask-sqlalchemy-3.0.5-7.fc43.src.rpm INFO: chroot_scan: 1 files copied to /var/lib/copr-rpmbuild/results/chroot_scan INFO: /var/lib/mock/fedora-rawhide-x86_64-1747164249.761615/root/var/log/dnf5.log INFO: chroot_scan: creating tarball /var/lib/copr-rpmbuild/results/chroot_scan.tar.gz /bin/tar: Removing leading `/' from member names ERROR: Exception(/var/lib/copr-rpmbuild/results/python-flask-sqlalchemy-3.0.5-7.fc43.src.rpm) Config(fedora-rawhide-x86_64) 0 minutes 22 seconds INFO: Results and/or logs in: /var/lib/copr-rpmbuild/results INFO: Cleaning up build root ('cleanup_on_failure=True') Start: clean chroot INFO: unmounting tmpfs. Finish: clean chroot ERROR: Command failed: # /usr/bin/systemd-nspawn -q -M 03a69c43c05143f485c76d4b14a36167 -D /var/lib/mock/fedora-rawhide-x86_64-1747164249.761615/root -a -u mockbuild --capability=cap_ipc_lock --rlimit=RLIMIT_NOFILE=10240 --capability=cap_ipc_lock --bind=/tmp/mock-resolv.ykt9_ksm:/etc/resolv.conf --bind=/dev/btrfs-control --bind=/dev/mapper/control --bind=/dev/fuse --bind=/dev/loop-control --bind=/dev/loop0 --bind=/dev/loop1 --bind=/dev/loop2 --bind=/dev/loop3 --bind=/dev/loop4 --bind=/dev/loop5 --bind=/dev/loop6 --bind=/dev/loop7 --bind=/dev/loop8 --bind=/dev/loop9 --bind=/dev/loop10 --bind=/dev/loop11 --console=pipe --setenv=TERM=vt100 --setenv=SHELL=/bin/bash --setenv=HOME=/builddir --setenv=HOSTNAME=mock --setenv=PATH=/usr/bin:/bin:/usr/sbin:/sbin '--setenv=PROMPT_COMMAND=printf "\033]0;\007"' '--setenv=PS1= \s-\v\$ ' --setenv=LANG=C.UTF-8 --resolv-conf=off bash --login -c '/usr/bin/rpmbuild -ba --noprep --target x86_64 --nodeps /builddir/build/originals/python-flask-sqlalchemy.spec' Copr build error: Build failed