Open kjplunkett opened 3 weeks ago
Thank you. I will add condition on python >= 3.11.
recordclass 0.22.0.1 just uploaded to PyPI.
I have the same ..
.. and 0.22.0.1 still fails.
Ah.. I set the tag 22.0.1 before actual commit in github repo. PyPI 22.0.1 source archive contain correct adapter.py. I make new realease 22.0.2 in order to make source archive and realease on github with correct tag.
I just make new release 22.0.2. Distributions on PyPI and github with tag 22.0.2 are identical now.
Just tested 22.0.2 and now python crashes with SIGSEGV probably in recordclass
DSO.
+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-recordclass-0.22.0.2-2.fc37.x86_64/usr/lib64/python3.10/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-recordclass-0.22.0.2-2.fc37.x86_64/usr/lib/python3.10/site-packages
+ /usr/bin/pytest -ra -m 'not network'
==================================================================================== test session starts ====================================================================================
platform linux -- Python 3.10.14, pytest-8.2.2, pluggy-1.5.0
rootdir: /home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2
plugins: asyncio-0.23.7
asyncio: mode=strict
collecting ... Fatal Python error: Segmentation fault
Current thread 0x00007f85a4e3db80 (most recent call first):
File "/home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2/examples/test_leak_dataobject.py", line 22 in <module>
File "/usr/lib/python3.10/site-packages/_pytest/assertion/rewrite.py", line 178 in exec_module
File "<frozen importlib._bootstrap>", line 688 in _load_unlocked
File "<frozen importlib._bootstrap>", line 1006 in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 1027 in _find_and_load
File "<frozen importlib._bootstrap>", line 1050 in _gcd_import
File "/usr/lib64/python3.10/importlib/__init__.py", line 126 in import_module
File "/usr/lib/python3.10/site-packages/_pytest/pathlib.py", line 591 in import_path
File "/usr/lib/python3.10/site-packages/_pytest/python.py", line 492 in importtestmodule
File "/usr/lib/python3.10/site-packages/_pytest/python.py", line 545 in _getobj
File "/usr/lib/python3.10/site-packages/_pytest/python.py", line 287 in obj
File "/usr/lib/python3.10/site-packages/pytest_asyncio/plugin.py", line 629 in _patched_collect
File "/usr/lib/python3.10/site-packages/_pytest/runner.py", line 389 in collect
File "/usr/lib/python3.10/site-packages/_pytest/runner.py", line 341 in from_call
File "/usr/lib/python3.10/site-packages/_pytest/runner.py", line 391 in pytest_make_collect_report
File "/usr/lib/python3.10/site-packages/pluggy/_callers.py", line 103 in _multicall
File "/usr/lib/python3.10/site-packages/pluggy/_manager.py", line 120 in _hookexec
File "/usr/lib/python3.10/site-packages/pluggy/_hooks.py", line 513 in __call__
File "/usr/lib/python3.10/site-packages/_pytest/runner.py", line 567 in collect_one_node
File "/usr/lib/python3.10/site-packages/_pytest/main.py", line 844 in _collect_one_node
File "/usr/lib/python3.10/site-packages/_pytest/main.py", line 981 in genitems
File "/usr/lib/python3.10/site-packages/_pytest/main.py", line 986 in genitems
File "/usr/lib/python3.10/site-packages/_pytest/main.py", line 986 in genitems
File "/usr/lib/python3.10/site-packages/_pytest/main.py", line 818 in perform_collect
File "/usr/lib/python3.10/site-packages/_pytest/main.py", line 356 in pytest_collection
File "/usr/lib/python3.10/site-packages/pluggy/_callers.py", line 103 in _multicall
File "/usr/lib/python3.10/site-packages/pluggy/_manager.py", line 120 in _hookexec
File "/usr/lib/python3.10/site-packages/pluggy/_hooks.py", line 513 in __call__
File "/usr/lib/python3.10/site-packages/_pytest/main.py", line 345 in _main
File "/usr/lib/python3.10/site-packages/_pytest/main.py", line 292 in wrap_session
File "/usr/lib/python3.10/site-packages/_pytest/main.py", line 339 in pytest_cmdline_main
File "/usr/lib/python3.10/site-packages/pluggy/_callers.py", line 103 in _multicall
File "/usr/lib/python3.10/site-packages/pluggy/_manager.py", line 120 in _hookexec
File "/usr/lib/python3.10/site-packages/pluggy/_hooks.py", line 513 in __call__
File "/usr/lib/python3.10/site-packages/_pytest/config/__init__.py", line 178 in main
File "/usr/lib/python3.10/site-packages/_pytest/config/__init__.py", line 206 in console_main
File "/usr/bin/pytest", line 8 in <module>
Extension modules: recordclass._dataobject, recordclass._litelist, recordclass._litetuple, psutil._psutil_linux, psutil._psutil_posix (total: 5)
/var/tmp/rpm-tmp.0o5kIP: line 57: 1818181 Segmentation fault (core dumped) PATH=/home/tkloczko/rpmbuild/BUILDROOT/python-recordclass-0.22.0.2-2.fc37.x86_64/usr/bin:$PATH LD_LIBRARY_PATH=/home/tkloczko/rpmbuild/BUILDROOT/python-recordclass-0.22.0.2-2.fc37.x86_64/usr/lib64 PYTHONDONTWRITEBYTECODE=1 PDM_BUILD_SCM_VERSION=0.22.0.2 PBR_VERSION=0.22.0.2 SETUPTOOLS_SCM_PRETEND_VERSION=0.22.0.2 PYTHONPATH=${PYTHONPATH:-/home/tkloczko/rpmbuild/BUILDROOT/python-recordclass-0.22.0.2-2.fc37.x86_64/usr/lib64/python3.10/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-recordclass-0.22.0.2-2.fc37.x86_64/usr/lib/python3.10/site-packages} /usr/bin/pytest -ra -m "not network"
I hope the issue was fixed in last commit.
Just tested last release + 3c093eee and now python is not crashing byt pytest is not able to finish collecting units.
+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-recordclass-0.22.0.2-2.fc37.x86_64/usr/lib64/python3.10/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-recordclass-0.22.0.2-2.fc37.x86_64/usr/lib/python3.10/site-packages
+ /usr/bin/pytest -ra -m 'not network'
==================================================================================== test session starts ====================================================================================
platform linux -- Python 3.10.14, pytest-8.2.2, pluggy-1.5.0
rootdir: /home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2
plugins: asyncio-0.23.7
asyncio: mode=strict
collecting ...
But strace shows that pytest is constantly making new mmap() calls
[tkloczko@barrel SPECS]$ strace -p 2633537
strace: Process 2633537 attached
mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f200ce00000
mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f200cd00000
mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f200cc00000
mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f200cb00000
mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f200ca00000
mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f200c900000
mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f200c800000
mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f200c700000
.
.
getpid() = 1820531
openat(AT_FDCWD, "/proc/1820531/stat", O_RDONLY|O_CLOEXEC) = 13
fstat(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
lseek(13, 0, SEEK_CUR) = 0
lseek(13, 0, SEEK_CUR) = 0
fstat(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
read(13, "1820531 (pytest) R 1820530 18198"..., 8192) = 346
read(13, "", 7846) = 0
close(13) = 0
openat(AT_FDCWD, "/proc/1820531/statm", O_RDONLY|O_CLOEXEC) = 13
fstat(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
lseek(13, 0, SEEK_CUR) = 0
read(13, "42466 38504 2112 1 0 38496 0\n", 32768) = 29
close(13) = 0
write(6, "157712384", 9) = 9
write(6, "\n", 1) = 1
munmap(0x7f057e500000, 1048576) = 0
munmap(0x7f057e500000, 1048576) = 0
munmap(0x7f057e500000, 1048576) = 0
munmap(0x7f057e500000, 1048576) = 0
Single loop iteration looks like below
Some test_*.py files from the folder /example are not tests. I used them for memory leaks. May be I need to rename them so that pytest do not consider them as tests.
вт, 25 июн. 2024 г. в 19:01, Tomasz Kłoczko @.***>:
Full loop looks iteration like below
pselect6(0, NULL, NULL, NULL, {tv_sec=1, tv_nsec=0}, NULL) = 0 (Timeout)getpid() = 1820531openat(AT_FDCWD, "/proc/1820531/stat", O_RDONLY|O_CLOEXEC) = 13fstat(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0lseek(13, 0, SEEK_CUR) = 0lseek(13, 0, SEEK_CUR) = 0fstat(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0read(13, "1820531 (pytest) R 1820530 18198"..., 8192) = 345read(13, "", 7847) = 0close(13) = 0openat(AT_FDCWD, "/proc/1820531/statm", O_RDONLY|O_CLOEXEC) = 13fstat(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0lseek(13, 0, SEEK_CUR) = 0read(13, "13794 9675 2112 1 0 9824 0\n", 32768) = 27close(13) = 0write(6, "39628800", 8) = 8write(6, "\n", 1) = 1munmap(0x7f057e100000, 1048576) = 0mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0585300000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0585200000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0585100000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0585000000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0584f00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0584e00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0584d00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0584c00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0584b00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0584a00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0584900000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0584800000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0584700000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0584600000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0584500000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0584400000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0584300000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0584200000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0584100000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0584000000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0583f00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0583e00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0583d00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0583c00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0583b00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0583a00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0583900000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0583800000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0583700000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0583600000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0583500000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0583400000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0583300000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0583200000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0583100000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0583000000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0582f00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0582e00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0582d00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0582c00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0582b00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0582a00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0582900000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0582800000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0582700000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0582600000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0582500000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0582400000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0582300000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0582200000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0582100000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0582000000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0581f00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0581e00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0581d00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0581c00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0581b00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0581a00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0581900000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0581800000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0581700000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0581600000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0581500000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0581400000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0581300000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0581200000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0581100000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0581000000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0580f00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0580e00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0580d00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0580c00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0580b00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0580a00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0580900000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0580800000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0580700000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0580600000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0580500000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0580400000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0580300000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0580200000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0580100000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f0580000000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057ff00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057fe00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057fd00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057fc00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057fb00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057fa00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057f900000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057f800000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057f700000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057f600000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057f500000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057f400000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057f300000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057f200000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057f100000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057f000000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057ef00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057ee00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057ed00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057ec00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057eb00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057ea00000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057e900000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057e800000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057e700000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057e600000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057e500000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057e400000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057e200000mmap(NULL, 1048576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f057e100000getpid() = 1820531openat(AT_FDCWD, "/proc/1820531/stat", O_RDONLY|O_CLOEXEC) = 13fstat(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0lseek(13, 0, SEEK_CUR) = 0lseek(13, 0, SEEK_CUR) = 0fstat(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0read(13, "1820531 (pytest) R 1820530 18198"..., 8192) = 347read(13, "", 7845) = 0close(13) = 0openat(AT_FDCWD, "/proc/1820531/statm", O_RDONLY|O_CLOEXEC) = 13fstat(13, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0lseek(13, 0, SEEK_CUR) = 0read(13, "42722 38571 2112 1 0 38752 0\n", 32768) = 29close(13) = 0write(6, "157986816", 9) = 9write(6, "\n", 1) = 1munmap(0x7f057e400000, 1048576) = 0munmap(0x7f057e500000, 1048576) = 0munmap(0x7f057e600000, 1048576) = 0munmap(0x7f057e700000, 1048576) = 0munmap(0x7f057e800000, 1048576) = 0munmap(0x7f057e900000, 1048576) = 0munmap(0x7f057ea00000, 1048576) = 0munmap(0x7f057eb00000, 1048576) = 0munmap(0x7f057ec00000, 1048576) = 0munmap(0x7f057ed00000, 1048576) = 0munmap(0x7f057ee00000, 1048576) = 0munmap(0x7f057ef00000, 1048576) = 0munmap(0x7f057f000000, 1048576) = 0munmap(0x7f057f100000, 1048576) = 0munmap(0x7f057f200000, 1048576) = 0munmap(0x7f057f300000, 1048576) = 0munmap(0x7f057f400000, 1048576) = 0munmap(0x7f057f500000, 1048576) = 0munmap(0x7f057f600000, 1048576) = 0munmap(0x7f057f700000, 1048576) = 0munmap(0x7f057f800000, 1048576) = 0munmap(0x7f057f900000, 1048576) = 0munmap(0x7f057fa00000, 1048576) = 0munmap(0x7f057fb00000, 1048576) = 0munmap(0x7f057fc00000, 1048576) = 0munmap(0x7f057fd00000, 1048576) = 0munmap(0x7f057fe00000, 1048576) = 0munmap(0x7f057ff00000, 1048576) = 0munmap(0x7f0580000000, 1048576) = 0munmap(0x7f0580100000, 1048576) = 0munmap(0x7f0580200000, 1048576) = 0munmap(0x7f0580300000, 1048576) = 0munmap(0x7f0580400000, 1048576) = 0munmap(0x7f0580500000, 1048576) = 0munmap(0x7f0580600000, 1048576) = 0munmap(0x7f0580700000, 1048576) = 0munmap(0x7f0580800000, 1048576) = 0munmap(0x7f0580900000, 1048576) = 0munmap(0x7f0580a00000, 1048576) = 0munmap(0x7f0580b00000, 1048576) = 0munmap(0x7f0580c00000, 1048576) = 0munmap(0x7f0580d00000, 1048576) = 0munmap(0x7f0580e00000, 1048576) = 0munmap(0x7f0580f00000, 1048576) = 0munmap(0x7f0581000000, 1048576) = 0munmap(0x7f0581100000, 1048576) = 0munmap(0x7f0581200000, 1048576) = 0munmap(0x7f0581300000, 1048576) = 0munmap(0x7f0581400000, 1048576) = 0munmap(0x7f0581500000, 1048576) = 0munmap(0x7f0581600000, 1048576) = 0munmap(0x7f0581700000, 1048576) = 0munmap(0x7f0581800000, 1048576) = 0munmap(0x7f0581900000, 1048576) = 0munmap(0x7f0581a00000, 1048576) = 0munmap(0x7f0581b00000, 1048576) = 0munmap(0x7f0581c00000, 1048576) = 0munmap(0x7f0581d00000, 1048576) = 0munmap(0x7f0581e00000, 1048576) = 0munmap(0x7f0581f00000, 1048576) = 0munmap(0x7f0582000000, 1048576) = 0munmap(0x7f0582100000, 1048576) = 0munmap(0x7f0582200000, 1048576) = 0munmap(0x7f0582300000, 1048576) = 0munmap(0x7f0582400000, 1048576) = 0munmap(0x7f0582500000, 1048576) = 0munmap(0x7f0582600000, 1048576) = 0munmap(0x7f0582700000, 1048576) = 0munmap(0x7f0582800000, 1048576) = 0munmap(0x7f0582900000, 1048576) = 0munmap(0x7f0582a00000, 1048576) = 0munmap(0x7f0582b00000, 1048576) = 0munmap(0x7f0582c00000, 1048576) = 0munmap(0x7f0582d00000, 1048576) = 0munmap(0x7f0582e00000, 1048576) = 0munmap(0x7f0582f00000, 1048576) = 0munmap(0x7f0583000000, 1048576) = 0munmap(0x7f0583100000, 1048576) = 0munmap(0x7f0583200000, 1048576) = 0munmap(0x7f0583300000, 1048576) = 0munmap(0x7f0583400000, 1048576) = 0munmap(0x7f0583500000, 1048576) = 0munmap(0x7f0583600000, 1048576) = 0munmap(0x7f0583700000, 1048576) = 0munmap(0x7f0583800000, 1048576) = 0munmap(0x7f0583900000, 1048576) = 0munmap(0x7f0583a00000, 1048576) = 0munmap(0x7f0583b00000, 1048576) = 0munmap(0x7f0583c00000, 1048576) = 0munmap(0x7f0583d00000, 1048576) = 0munmap(0x7f0583e00000, 1048576) = 0munmap(0x7f0583f00000, 1048576) = 0munmap(0x7f0584000000, 1048576) = 0munmap(0x7f0584100000, 1048576) = 0munmap(0x7f0584200000, 1048576) = 0munmap(0x7f0584300000, 1048576) = 0munmap(0x7f0584400000, 1048576) = 0munmap(0x7f0584500000, 1048576) = 0munmap(0x7f0584600000, 1048576) = 0munmap(0x7f0584700000, 1048576) = 0munmap(0x7f0584800000, 1048576) = 0munmap(0x7f0584900000, 1048576) = 0munmap(0x7f0584a00000, 1048576) = 0munmap(0x7f0584b00000, 1048576) = 0munmap(0x7f0584c00000, 1048576) = 0munmap(0x7f0584d00000, 1048576) = 0munmap(0x7f0584e00000, 1048576) = 0munmap(0x7f0584f00000, 1048576) = 0munmap(0x7f0585000000, 1048576) = 0munmap(0x7f0585100000, 1048576) = 0munmap(0x7f0585200000, 1048576) = 0munmap(0x7f0585300000, 1048576) = 0munmap(0x7f057e300000, 1048576) = 0
— Reply to this email directly, view it on GitHub https://github.com/intellimath/recordclass/issues/8#issuecomment-2189352754, or unsubscribe https://github.com/notifications/unsubscribe-auth/AA3V5PLWMEKXGRC3FGONM4TZJGH7JAVCNFSM6AAAAABJ2MRLCGVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDCOBZGM2TENZVGQ . You are receiving this because you commented.Message ID: @.***>
If those files should not be used testpaths
i pytest settings should be added.
https://docs.pytest.org/en/stable/reference/customize.html
BTW test suite .. why not move lib/recordclass/test to tests/? 🤔
Currently looks like this is causing that test suite is included in .whl archive.
As long as you're working on the setup for pytest, it might be a good idea to add a pyproject.toml file to replace setup.py. You could then use the toml to configure any particular settings your repo would need for pytest. See: https://packaging.python.org/en/latest/guides/modernize-setup-py-project/
I think that by 0.23 it will be possible to try to transfer to py project.toml
pytest can obtain its settings from pyproject.toml, setup.cfg and at thenn from pytest.ini and last from tox.ini. Full migration to pyproject.toml in this case is not essential.
After last commit segfault shouldn't happen.
With current master cannot test that using "test as installed" methodology.
c37.x86_64/usr/lib/python3.10/site-packages
+ /usr/bin/pytest -ra -m 'not network' --import-mode=importlib
==================================================================================== test session starts ====================================================================================
platform linux -- Python 3.10.14, pytest-8.2.2, pluggy-1.5.0
rootdir: /home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2
collected 0 items / 11 errors
========================================================================================== ERRORS ===========================================================================================
___________________________________________________________ ERROR collecting lib/recordclass/test/match/test_dataobject_match.py ____________________________________________________________
ImportError while importing test module '/home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2/lib/recordclass/test/match/test_dataobject_match.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
lib/recordclass/__init__.py:25: in <module>
from ._dataobject import dataobject, datastruct, astuple, asdict, clone, update, make, Factory
E ModuleNotFoundError: No module named 'recordclass._dataobject'
_________________________________________________________________ ERROR collecting lib/recordclass/test/test_arrayclass.py __________________________________________________________________
<frozen importlib._bootstrap_external>:883: in exec_module
???
<frozen importlib._bootstrap>:241: in _call_with_frames_removed
???
lib/recordclass/test/__init__.py:3: in <module>
from recordclass.test.test_recordclass import *
<frozen importlib._bootstrap>:1027: in _find_and_load
???
<frozen importlib._bootstrap>:1006: in _find_and_load_unlocked
???
<frozen importlib._bootstrap>:688: in _load_unlocked
???
/usr/lib/python3.10/site-packages/_pytest/assertion/rewrite.py:178: in exec_module
exec(co, module.__dict__)
lib/recordclass/test/test_recordclass.py:20: in <module>
TestNT = recordclass('TestNT', 'x y z') # type used for pickle tests
E TypeError: 'module' object is not callable
_________________________________________________________________ ERROR collecting lib/recordclass/test/test_dataobject.py __________________________________________________________________
ImportError while importing test module '/home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2/lib/recordclass/test/test_dataobject.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
lib/recordclass/test/test_dataobject.py:7: in <module>
from recordclass import make_dataclass, dataobject, make, clone, update
E ImportError: cannot import name 'make_dataclass' from 'recordclass' (/home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2/lib/recordclass/__init__.py)
__________________________________________________________________ ERROR collecting lib/recordclass/test/test_litelist.py ___________________________________________________________________
ImportError while importing test module '/home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2/lib/recordclass/test/test_litelist.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
lib/recordclass/test/test_litelist.py:2: in <module>
from recordclass import litelist, litelist_fromargs
E ImportError: cannot import name 'litelist' from 'recordclass' (/home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2/lib/recordclass/__init__.py)
__________________________________________________________________ ERROR collecting lib/recordclass/test/test_litetuple.py __________________________________________________________________
ImportError while importing test module '/home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2/lib/recordclass/test/test_litetuple.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
lib/recordclass/test/test_litetuple.py:2: in <module>
from recordclass import litetuple, mutabletuple
E ImportError: cannot import name 'litetuple' from 'recordclass' (/home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2/lib/recordclass/__init__.py)
_________________________________________________________________ ERROR collecting lib/recordclass/test/test_recordclass.py _________________________________________________________________
lib/recordclass/test/test_recordclass.py:20: in <module>
TestNT = recordclass('TestNT', 'x y z') # type used for pickle tests
E TypeError: 'module' object is not callable
___________________________________________________________________ ERROR collecting lib/recordclass/test/test_sqlite.py ____________________________________________________________________
ImportError while importing test module '/home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2/lib/recordclass/test/test_sqlite.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
lib/recordclass/test/test_sqlite.py:3: in <module>
from recordclass import dataobject
E ImportError: cannot import name 'dataobject' from 'recordclass' (/home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2/lib/recordclass/__init__.py)
______________________________________________________________ ERROR collecting lib/recordclass/test/typing/test_dataobject.py ______________________________________________________________
ImportError while importing test module '/home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2/lib/recordclass/test/typing/test_dataobject.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
lib/recordclass/test/typing/test_dataobject.py:7: in <module>
from recordclass import as_dataclass
E ImportError: cannot import name 'as_dataclass' from 'recordclass' (/home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2/lib/recordclass/__init__.py)
______________________________________________________________ ERROR collecting lib/recordclass/test/typing/test_datastruct.py ______________________________________________________________
ImportError while importing test module '/home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2/lib/recordclass/test/typing/test_datastruct.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
lib/recordclass/test/typing/test_datastruct.py:7: in <module>
from recordclass import as_record
E ImportError: cannot import name 'as_record' from 'recordclass' (/home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2/lib/recordclass/__init__.py)
_____________________________________________________________ ERROR collecting lib/recordclass/test/typing/test_recordclass.py ______________________________________________________________
ImportError while importing test module '/home/tkloczko/rpmbuild/BUILD/recordclass-0.22.0.2/lib/recordclass/test/typing/test_recordclass.py'.
Hint: make sure your test modules/packages have valid Python names.
Traceback:
lib/recordclass/test/typing/test_recordclass.py:3: in <module>
from recordclass.typing import RecordClass
lib/recordclass/typing/__init__.py:24: in <module>
from recordclass._dataobject import dataobject
E ModuleNotFoundError: No module named 'recordclass._dataobject'
_______________________________________________________________________________ ERROR collecting test_all.py ________________________________________________________________________________
test_all.py:25: in <module>
test_all()
E NameError: name 'test_all' is not defined
================================================================================== short test summary info ==================================================================================
ERROR lib/recordclass/test/match/test_dataobject_match.py
ERROR lib/recordclass/test/test_arrayclass.py - TypeError: 'module' object is not callable
ERROR lib/recordclass/test/test_dataobject.py
ERROR lib/recordclass/test/test_litelist.py
ERROR lib/recordclass/test/test_litetuple.py
ERROR lib/recordclass/test/test_recordclass.py - TypeError: 'module' object is not callable
ERROR lib/recordclass/test/test_sqlite.py
ERROR lib/recordclass/test/typing/test_dataobject.py
ERROR lib/recordclass/test/typing/test_datastruct.py
ERROR lib/recordclass/test/typing/test_recordclass.py
ERROR test_all.py - NameError: name 'test_all' is not defined
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 11 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
==================================================================================== 11 errors in 1.23s =====================================================================================
it would be good to:
if _PY36: ..
and other by if sys.version_info <= (3,6): ..
to make code filterable by pyupgrade
Additionally after prepare code for pyupgrade
it would be good to filter everything over pyupgrade --py38-plus
(python 3.7 has been EOSed almost year ago).
Description
I noticed this line in the recent release of
recordclass
0.22 creates a compatibility issue specific to Python 3.10 sincedataclass_transform
has only been added in Python 3.11.Impact
Any Python < 3.11 project importing
recordclass
like so:Will run into the following exception:
Steps to reproduce
Remaining unknowns
I've not used Appveyor before but it looks the
appveyor.yml
file in this repo is configured to test python 3.7 to 3.12.3 prior to release...did that run successfully before the release of0.22
?Resolution
Possible solutions include:
adapter.py
introduced in version0.22
as_dataclass
on python >= 3.11 (use the _PY311 similar to this version check)python_requires
argument to thesetup.py
call tosetup()
with a version specifier that specifically excludes python < 3.11