Description
Checklist
- I am using an up-to-date version.
- I have read the documentation.
- I have searched existing issues.
TagStudio Version
Operating System & Version
NixOS 25.05 (Warbler), 25.05.20250417.b024ced (NixOS/nixpkgs/b024ced1aac25639f8ca8fdfc2f8c4fbd66c48ef)
Description
It looks like there is a regression for the GlobalMenu in the current packages from nixos-unstable
.
(See PR #870 and it's linked issues.)
It doesn't work for Nixpkgs Commit b024ced.
If I'm not mistaken, it worked at least until Nixpkgs Commit 2631b0b.
I discovered this because I was trying to update my system and there is a build error.
There were also some other questionable messages about fontconfig and ffmpeg.
Apart from the JXL plugin, I'm using the installation suggested in the documentation.
TagStudio Installation in Flake
flake.nix
:
tagstudio = {
url = "github:TagStudioDev/TagStudio";
inputs.nixpkgs.follows = "nixpkgs";
};
home.nix
:
inputs.tagstudio.packages.${pkgs.stdenv.hostPlatform.system}.tagstudio-jxl
In order to update my system at all, I had to remove inputs.nixpkgs.follows = "nixpkgs";
.
However, as mentioned above, the global menu is now missing too.
If I saw it correctly, new QT packages were deployed. That one might have something to do with that.
Expected Behavior
- A working global menu.
- Working build with
inputs.nixpkgs.follows = "nixpkgs";
,- like recommended in Documentation for NixOS.
Steps to Reproduce
Rebuild System Flake with TagStudio.
Logs
System Flake Rebuild Output
error: builder for '/nix/store/ky5xbswbwip8il43hald97408p6igdrb-TagStudio-9.5.2.drv' failed with exit code 1;
last 25 log lines:
> tests/qt/test_file_path_options.py: 3 warnings
> tests/qt/test_qt_driver.py: 4 warnings
> /nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/lib/python3.12/site-packages/tagstudio/core/library/alchemy/library.py:910: SADeprecationWarning: DISTINCT ON is currently supported only by the PostgreSQL dialect. Use of DISTINCT ON for other backends is currently silently ignored, however this usage is deprecated, and will raise CompileError in a future release for all backends that do not support this syntax.
> query_full=str(statement.compile(compile_kwargs={"literal_binds": True})),
>
> tests/test_library.py: 25 warnings
> tests/macros/test_missing_files.py: 1 warning
> tests/macros/test_dupe_entries.py: 1 warning
> tests/test_search.py: 66 warnings
> tests/qt/test_file_path_options.py: 3 warnings
> tests/qt/test_qt_driver.py: 3 warnings
> /nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/lib/python3.12/site-packages/tagstudio/core/library/alchemy/library.py:914: SADeprecationWarning: DISTINCT ON is currently supported only by the PostgreSQL dialect. Use of DISTINCT ON for other backends is currently silently ignored, however this usage is deprecated, and will raise CompileError in a future release for all backends that do not support this syntax.
> items = session.scalars(statement).fetchall()
>
> tests/test_search.py::test_single_constraint[-31]
> /nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/lib/python3.12/site-packages/tagstudio/core/library/alchemy/visitors.py:61: SADeprecationWarning: Invoking or_() without arguments is deprecated, and will be disallowed in a future release. For an empty or_() construct, use 'or_(false(), *args)' or 'or_(False, *args)'.
> return or_(*[self.visit(element) for element in node.elements])
>
> -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
> =========================== short test summary info ============================
> FAILED tests/qt/test_tag_search_panel.py::test_update_tags - TypeError: Expected signal or callable, got "NoneType"
> ================= 1 failed, 193 passed, 442 warnings in 2.76s ==================
> 2025-04-19 14:37:26 [info ] [FFmpeg] Using FFprobe location: ffprobe (Not Found)
> 2025-04-19 14:37:26 [info ] [FFmpeg] Using FFmpeg location: ffmpeg (Not Found)
> 2025-04-19 14:37:27 [info ] [ResourceManager] Resources Registered: count=32
For full logs, run:
nix log /nix/store/ky5xbswbwip8il43hald97408p6igdrb-TagStudio-9.5.2.drv
error: 1 dependencies of derivation '/nix/store/v1283cwyfnrb0k7lqjgzbsqk5mypvq72-home-manager-path.drv' failed to build
error: 1 dependencies of derivation '/nix/store/igc3pdqq0vpw62kkcaljlz5rvrig63ma-home-manager-generation.drv' failed to build
error: 1 dependencies of derivation '/nix/store/0biz9hnd2dks8y09m6m192r33c7jhgzg-user-environment.drv' failed to build
error: 1 dependencies of derivation '/nix/store/bshg80qrla2app6d7ppjz5gjhfl4sc2h-etc.drv' failed to build
error: 1 dependencies of derivation '/nix/store/ba81vh6l2xpj8l9bfv6fmaszs062d50d-nixos-system-znix-25.05.20250417.b024ced.drv' failed to build
Full Build Log
$> `nix log /nix/store/ky5xbswbwip8il43hald97408p6igdrb-TagStudio-9.5.2.drv`
Sourcing python-remove-tests-dir-hook
Sourcing python-catch-conflicts-hook.sh
Sourcing python-remove-bin-bytecode-hook.sh
Sourcing pypa-build-hook
Using pypaBuildPhase
Sourcing python-runtime-deps-check-hook
Using pythonRuntimeDepsCheckHook
Sourcing pypa-install-hook
Using pypaInstallPhase
Sourcing python-imports-check-hook.sh
Using pythonImportsCheckPhase
Sourcing python-namespaces-hook
Sourcing python-catch-conflicts-hook.sh
Sourcing pytest-check-hook
/nix/store/lbw329diypjdljmc229l9h6zd51drp2v-pytest-check-hook/nix-support/setup-hook: line 41: warning: command substitution: 1 unterminated here-document
Using pytestCheckPhase
Running phase: qtPreHook
@nix { "action": "setPhase", "phase": "qtPreHook" }
Running phase: unpackPhase
@nix { "action": "setPhase", "phase": "unpackPhase" }
unpacking source archive /nix/store/lyyyp4wqkf4fyyvfs0giar16283i6rm5-ni78p1q4pliddyw4n2z4jbx36j19i96w-source
source root is ni78p1q4pliddyw4n2z4jbx36j19i96w-source
setting SOURCE_DATE_EPOCH to timestamp 315619200 of file "ni78p1q4pliddyw4n2z4jbx36j19i96w-source/tests/test_translations.py"
Running phase: patchPhase
@nix { "action": "setPhase", "phase": "patchPhase" }
Running phase: updateAutotoolsGnuConfigScriptsPhase
@nix { "action": "setPhase", "phase": "updateAutotoolsGnuConfigScriptsPhase" }
Running phase: configurePhase
@nix { "action": "setPhase", "phase": "configurePhase" }
no configure script, doing nothing
Running phase: buildPhase
@nix { "action": "setPhase", "phase": "buildPhase" }
Executing pypaBuildPhase
Creating a wheel...
pypa build flags: --no-isolation --outdir dist/ --wheel
�[1m* Getting build dependencies for wheel...�[0m
�[1m* Building wheel...�[0m
�[1m�[92mSuccessfully built �[4mtagstudio-9.5.2-py2.py3-none-any.whl�[0m�[1m�[92m�[0m
Finished creating a wheel...
/build/ni78p1q4pliddyw4n2z4jbx36j19i96w-source/dist /build/ni78p1q4pliddyw4n2z4jbx36j19i96w-source
Unpacking to: unpacked/tagstudio-9.5.2...OK
Repacking wheel as ./tagstudio-9.5.2-py2.py3-none-any.whl...OK
/build/ni78p1q4pliddyw4n2z4jbx36j19i96w-source
Finished executing pypaBuildPhase
Running phase: pythonRuntimeDepsCheckHook
@nix { "action": "setPhase", "phase": "pythonRuntimeDepsCheckHook" }
Executing pythonRuntimeDepsCheck
Checking runtime dependencies for tagstudio-9.5.2-py2.py3-none-any.whl
Finished executing pythonRuntimeDepsCheck
Running phase: glibPreInstallPhase
@nix { "action": "setPhase", "phase": "glibPreInstallPhase" }
Running phase: glibPreInstallPhase
@nix { "action": "setPhase", "phase": "glibPreInstallPhase" }
Running phase: glibPreInstallPhase
@nix { "action": "setPhase", "phase": "glibPreInstallPhase" }
Running phase: installPhase
@nix { "action": "setPhase", "phase": "installPhase" }
Executing pypaInstallPhase
Successfully installed tagstudio-9.5.2-py2.py3-none-any.whl
Finished executing pypaInstallPhase
Running phase: pythonOutputDistPhase
@nix { "action": "setPhase", "phase": "pythonOutputDistPhase" }
Executing pythonOutputDistPhase
Finished executing pythonOutputDistPhase
Running phase: qtOwnPathsHook
@nix { "action": "setPhase", "phase": "qtOwnPathsHook" }
Running phase: gappsWrapperArgsHook
@nix { "action": "setPhase", "phase": "gappsWrapperArgsHook" }
Running phase: dropIconThemeCache
@nix { "action": "setPhase", "phase": "dropIconThemeCache" }
Running phase: dropIconThemeCache
@nix { "action": "setPhase", "phase": "dropIconThemeCache" }
Running phase: fixupPhase
@nix { "action": "setPhase", "phase": "fixupPhase" }
wrapping Qt applications in /nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/bin /nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/sbin /nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/libexec /nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/Applications
Wrapping program '/nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/bin/tagstudio'
shrinking RPATHs of ELF executables and libraries in /nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2
shrinking /nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/bin/tagstudio
checking for references to /build/ in /nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2...
patching script interpreter paths in /nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2
/nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/lib/python3.12/site-packages/tagstudio/main.py: interpreter directive changed from "#!/usr/bin/env python" to "/nix/store/fqm9bqqlmaqqr02qbalm1bazp810qfiw-python3-3.12.9/bin/python"
stripping (with command strip and flags -S -p) in /nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/lib /nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/bin
shrinking RPATHs of ELF executables and libraries in /nix/store/1qjravg3dggw0al24mw5kdc9b4vzfhkj-TagStudio-9.5.2-dist
checking for references to /build/ in /nix/store/1qjravg3dggw0al24mw5kdc9b4vzfhkj-TagStudio-9.5.2-dist...
patching script interpreter paths in /nix/store/1qjravg3dggw0al24mw5kdc9b4vzfhkj-TagStudio-9.5.2-dist
Rewriting #!/nix/store/fqm9bqqlmaqqr02qbalm1bazp810qfiw-python3-3.12.9/bin/python3.12 to #!/nix/store/fqm9bqqlmaqqr02qbalm1bazp810qfiw-python3-3.12.9
wrapping `/nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/bin/.tagstudio-wrapped'...
Executing pythonRemoveTestsDir
Finished executing pythonRemoveTestsDir
Running phase: installCheckPhase
@nix { "action": "setPhase", "phase": "installCheckPhase" }
no Makefile or custom installCheckPhase, doing nothing
Running phase: pythonCatchConflictsPhase
@nix { "action": "setPhase", "phase": "pythonCatchConflictsPhase" }
Running phase: pythonRemoveBinBytecodePhase
@nix { "action": "setPhase", "phase": "pythonRemoveBinBytecodePhase" }
Running phase: pythonImportsCheckPhase
@nix { "action": "setPhase", "phase": "pythonImportsCheckPhase" }
Executing pythonImportsCheckPhase
Check whether the following modules can be imported: tagstudio
Running phase: pytestCheckPhase
@nix { "action": "setPhase", "phase": "pytestCheckPhase" }
Executing pytestCheckPhase
pytest flags: -m pytest -k not\ \(test_build_tag_panel_add_alias_callback\)\ and\ not\ \(test_build_tag_panel_add_aliases\)\ and\ not\ \(test_build_tag_panel_add_sub_tag_callback\)\ and\ not\ \(test_build_tag_panel_build_tag\)\ and\ not\ \(test_build_tag_panel_remove_alias_callback\)\ and\ not\ \(test_build_tag_panel_remove_subtag_callback\)\ and\ not\ \(test_build_tag_panel_set_aliases\)\ and\ not\ \(test_build_tag_panel_set_parent_tags\)\ and\ not\ \(test_build_tag_panel_set_tag\)\ and\ not\ \(test_json_migration\)\ and\ not\ \(test_library_migrations\)\ and\ not\ \(test_add_same_tag_to_selection_single\)\ and\ not\ \(test_add_tag_to_selection_multiple\)\ and\ not\ \(test_add_tag_to_selection_single\)\ and\ not\ \(test_custom_tag_category\)\ and\ not\ \(test_file_path_display\)\ and\ not\ \(test_meta_tag_category\)\ and\ not\ \(test_update_selection_empty\)\ and\ not\ \(test_update_selection_empty\)\ and\ not\ \(test_update_selection_multiple\)\ and\ not\ \(test_update_selection_single\)\ and\ not\ \(test_filepath_setting\) --numprocesses=32
�[1m============================= test session starts ==============================�[0m
platform linux -- Python 3.12.9, pytest-8.3.5, pluggy-1.5.0
PySide6 6.9.0 -- Qt runtime 6.9.0 -- Qt compiled 6.9.0
rootdir: /build/ni78p1q4pliddyw4n2z4jbx36j19i96w-source
configfile: pyproject.toml
plugins: qt-4.4.0, xdist-3.6.1, syrupy-4.9.1
�[1m
created: 32/32 workers�[0m�[1m
initialized: 1/32 workers�[0m�[1m
initialized: 2/32 workers�[0m�[1m
initialized: 3/32 workers�[0m�[1m
initialized: 4/32 workers�[0m�[1m
initialized: 5/32 workers�[0m�[1m
initialized: 6/32 workers�[0m�[1m
initialized: 7/32 workers�[0m�[1m
initialized: 8/32 workers�[0m�[1m
initialized: 9/32 workers�[0m�[1m
initialized: 10/32 workers�[0m�[1m
initialized: 11/32 workers�[0m�[1m
initialized: 12/32 workers�[0m�[1m
initialized: 13/32 workers�[0m�[1m
initialized: 14/32 workers�[0m�[1m
initialized: 15/32 workers�[0m�[1m
initialized: 16/32 workers�[0m�[1m
initialized: 17/32 workers�[0m�[1m
initialized: 18/32 workers�[0m�[1m
initialized: 19/32 workers�[0m�[1m
initialized: 20/32 workers�[0m�[1m
initialized: 21/32 workers�[0m�[1m
initialized: 22/32 workers�[0m�[1m
initialized: 23/32 workers�[0m�[1m
initialized: 24/32 workers�[0m�[1m
initialized: 25/32 workers�[0m�[1m
initialized: 26/32 workers�[0m�[1m
initialized: 27/32 workers�[0m�[1m
initialized: 28/32 workers�[0m�[1m
initialized: 29/32 workers�[0m�[1m
initialized: 30/32 workers�[0m�[1m
initialized: 31/32 workers�[0m�[1m
initialized: 32/32 workers�[0m�[1m
ready: 1/32 workers �[0m�[1m
ready: 2/32 workers�[0m�[1m
ready: 3/32 workers�[0m�[1m
ready: 4/32 workers�[0m�[1m
collecting: 1/32 workers�[0m�[1m
collecting: 1/32 workers�[0m�[1m
collecting: 2/32 workers�[0m�[1m
collecting: 3/32 workers�[0m�[1m
collecting: 3/32 workers�[0m�[1m
collecting: 4/32 workers�[0m�[1m
collecting: 4/32 workers�[0m�[1m
collecting: 4/32 workers�[0m�[1m
collecting: 5/32 workers�[0m�[1m
collecting: 6/32 workers�[0m�[1m
collecting: 7/32 workers�[0m�[1m
collecting: 7/32 workers�[0m�[1m
collecting: 8/32 workers�[0m�[1m
collecting: 8/32 workers�[0m�[1m
collecting: 8/32 workers�[0m�[1m
collecting: 8/32 workers�[0m�[1m
collecting: 9/32 workers�[0m�[1m
collecting: 9/32 workers�[0m�[1m
collecting: 10/32 workers�[0m�[1m
collecting: 11/32 workers�[0m�[1m
collecting: 12/32 workers�[0m�[1m
collecting: 12/32 workers�[0m�[1m
collecting: 13/32 workers�[0m�[1m
collecting: 14/32 workers�[0m�[1m
collecting: 14/32 workers�[0m�[1m
collecting: 14/32 workers�[0m�[1m
collecting: 14/32 workers�[0m�[1m
collecting: 14/32 workers�[0m�[1m
collecting: 15/32 workers�[0m�[1m
collecting: 16/32 workers�[0m�[1m
collecting: 17/32 workers�[0m�[1m
collecting: 18/32 workers�[0m�[1m
collecting: 18/32 workers�[0m�[1m
collecting: 18/32 workers�[0m�[1m
collecting: 18/32 workers�[0m�[1m
collecting: 19/32 workers�[0m�[1m
collecting: 19/32 workers�[0m�[1m
collecting: 19/32 workers�[0m�[1m
collecting: 20/32 workers�[0m�[1m
collecting: 20/32 workers�[0m�[1m
collecting: 21/32 workers�[0m�[1m
collecting: 21/32 workers�[0m�[1m
collecting: 22/32 workers�[0m�[1m
collecting: 23/32 workers�[0m�[1m
collecting: 24/32 workers�[0m�[1m
collecting: 25/32 workers�[0m�[1m
collecting: 25/32 workers�[0m�[1m
collecting: 25/32 workers�[0m�[1m
collecting: 25/32 workers�[0m�[1m
collecting: 26/32 workers�[0m�[1m
collecting: 26/32 workers�[0m�[1m
collecting: 27/32 workers�[0m�[1m
collecting: 27/32 workers�[0m�[1m
collecting: 27/32 workers�[0m�[1m
collecting: 28/32 workers�[0m�[1m
collecting: 29/32 workers�[0m�[1m
collecting: 30/32 workers�[0m�[1m
collecting: 30/32 workers�[0m�[1m
collecting: 31/32 workers�[0m�[1m
32 workers [194 items] �[0m
�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[31mF�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[31m [ 37%]
�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[31m [ 74%]
�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[32m.�[0m�[31m [100%]�[0mFontconfig error: Cannot load default config file: No such file: (null)
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: Cannot load default config file: No such file: (null)
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
=================================== FAILURES ===================================
�[31m�[1m_______________________________ test_update_tags _______________________________�[0m
[gw11] linux -- Python 3.12.9 /nix/store/fqm9bqqlmaqqr02qbalm1bazp810qfiw-python3-3.12.9/bin/python3.12
qtbot = <pytestqt.qtbot.QtBot object at 0x7ffed598a540>
library = <tagstudio.core.library.alchemy.library.Library object at 0x7ffed5989e50>
def test_update_tags(qtbot, library):
# Given
panel = TagSearchPanel(library)
qtbot.addWidget(panel)
# When
> panel.update_tags()
�[1m�[31mtests/qt/test_tag_search_panel.py�[0m:11:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
�[1m�[31m/nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/lib/python3.12/site-packages/tagstudio/qt/modals/tag_search.py�[0m:244: in update_tags
self.set_tag_widget(tag=tag, index=i)
�[1m�[31m/nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/lib/python3.12/site-packages/tagstudio/qt/modals/tag_search.py�[0m:262: in set_tag_widget
new_tw = TagWidget(tag=None, has_edit=True, has_remove=True, library=self.lib)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tagstudio.qt.widgets.tag.TagWidget(0x1dd5a90) at 0x7ffed5520f40>
tag = None, has_edit = True, has_remove = True
library = <tagstudio.core.library.alchemy.library.Library object at 0x7ffed5989e50>
on_remove_callback = None, on_click_callback = None, on_edit_callback = None
def __init__(
self,
tag: Tag | None,
has_edit: bool,
has_remove: bool,
library: "Library | None" = None,
on_remove_callback: FunctionType = None,
on_click_callback: FunctionType = None,
on_edit_callback: FunctionType = None,
) -> None:
super().__init__()
self.tag = tag
self.lib: Library | None = library
self.has_edit = has_edit
self.has_remove = has_remove
# if on_click_callback:
self.setCursor(Qt.CursorShape.PointingHandCursor)
self.base_layout = QVBoxLayout(self)
self.base_layout.setObjectName("baseLayout")
self.base_layout.setContentsMargins(0, 0, 0, 0)
self.bg_button = QPushButton(self)
self.bg_button.setFlat(True)
if has_edit:
edit_action = QAction(self)
edit_action.setText(Translations["generic.edit"])
> edit_action.triggered.connect(on_edit_callback)
�[1m�[31mE TypeError: Expected signal or callable, got "NoneType"�[0m
�[1m�[31m/nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/lib/python3.12/site-packages/tagstudio/qt/widgets/tag.py�[0m:129: TypeError
---------------------------- Captured stdout setup -----------------------------
2025-04-19 14:37:29 [info ] [Library] Opening SQLite Library connection_string=sqlite:///:memory: library_dir=PosixPath('/dev/null')
2025-04-19 14:37:29 [info ] [Library] DB_VERSION: 0
2025-04-19 14:37:29 [info ] [Library] Creating DB tables...
----------------------------- Captured stdout call -----------------------------
2025-04-19 14:37:29 [info ] [TagSearchPanel] Updating Tags
2025-04-19 14:37:29 [info ] searching tags limit=25 results=2 search=None statement='SELECT tags.id, tags.name, tags.shorthand, tags.color_namespace, tags.color_slug, tags.is_category, tags.icon, tags.disambiguation_id, tag_colors_1.slug, tag_colors_1.namespace, tag_colors_1.name AS name_1, tag_colors_1."primary", tag_colors_1.secondary, tag_colors_1.color_border \nFROM tags LEFT OUTER JOIN tag_aliases ON tags.id = tag_aliases.tag_id LEFT OUTER JOIN tag_colors AS tag_colors_1 ON tag_colors_1.namespace = tags.color_namespace AND tag_colors_1.slug = tags.color_slug ORDER BY lower(tags.name)\n LIMIT :param_1'
----------------------------- Captured stderr call -----------------------------
Fontconfig error: Cannot load default config file: No such file: (null)
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
Fontconfig error: No writable cache directories
/var/cache/fontconfig
/homeless-shelter/.cache/fontconfig
�[33m=============================== warnings summary ===============================�[0m
../../nix/store/6abd2b4xw6i713dk1vknkfyz7y08qhmn-python3.12-pydub-0.25.1/lib/python3.12/site-packages/pydub/utils.py:14: 33 warnings
/nix/store/6abd2b4xw6i713dk1vknkfyz7y08qhmn-python3.12-pydub-0.25.1/lib/python3.12/site-packages/pydub/utils.py:14: DeprecationWarning: 'audioop' is deprecated and slated for removal in Python 3.13
import audioop
../../nix/store/6abd2b4xw6i713dk1vknkfyz7y08qhmn-python3.12-pydub-0.25.1/lib/python3.12/site-packages/pydub/utils.py:170: 33 warnings
/nix/store/6abd2b4xw6i713dk1vknkfyz7y08qhmn-python3.12-pydub-0.25.1/lib/python3.12/site-packages/pydub/utils.py:170: RuntimeWarning: Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work
warn("Couldn't find ffmpeg or avconv - defaulting to ffmpeg, but may not work", RuntimeWarning)
../../nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/lib/python3.12/site-packages/tagstudio/qt/widgets/thumb_renderer.py:78: 33 warnings
/nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/lib/python3.12/site-packages/tagstudio/qt/widgets/thumb_renderer.py:78: DeprecationWarning: The AVIF support in this library is marked as deprecated and will be removed in the next version. If you still need AVIF support until it natively appears in Pillow, use the https://github.com/fdintino/pillow-avif-plugin project instead.
register_avif_opener()
tests/test_driver.py:14: 32 warnings
/build/ni78p1q4pliddyw4n2z4jbx36j19i96w-source/tests/test_driver.py:14: PytestCollectionWarning: cannot collect test class 'TestDriver' because it has a __init__ constructor (from: tests/test_driver.py)
class TestDriver(DriverMixin):
tests/test_library.py: 25 warnings
tests/macros/test_missing_files.py: 1 warning
tests/macros/test_dupe_entries.py: 1 warning
tests/test_search.py: 66 warnings
tests/qt/test_file_path_options.py: 3 warnings
tests/qt/test_qt_driver.py: 3 warnings
/nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/lib/python3.12/site-packages/tagstudio/core/library/alchemy/library.py:891: SADeprecationWarning: DISTINCT ON is currently supported only by the PostgreSQL dialect. Use of DISTINCT ON for other backends is currently silently ignored, however this usage is deprecated, and will raise CompileError in a future release for all backends that do not support this syntax.
count_all: int = session.execute(query_count).scalar() or 0
tests/test_library.py: 35 warnings
tests/macros/test_missing_files.py: 1 warning
tests/macros/test_dupe_entries.py: 3 warnings
tests/test_search.py: 66 warnings
tests/qt/test_file_path_options.py: 3 warnings
tests/qt/test_qt_driver.py: 4 warnings
/nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/lib/python3.12/site-packages/tagstudio/core/library/alchemy/library.py:910: SADeprecationWarning: DISTINCT ON is currently supported only by the PostgreSQL dialect. Use of DISTINCT ON for other backends is currently silently ignored, however this usage is deprecated, and will raise CompileError in a future release for all backends that do not support this syntax.
query_full=str(statement.compile(compile_kwargs={"literal_binds": True})),
tests/test_library.py: 25 warnings
tests/macros/test_missing_files.py: 1 warning
tests/macros/test_dupe_entries.py: 1 warning
tests/test_search.py: 66 warnings
tests/qt/test_file_path_options.py: 3 warnings
tests/qt/test_qt_driver.py: 3 warnings
/nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/lib/python3.12/site-packages/tagstudio/core/library/alchemy/library.py:914: SADeprecationWarning: DISTINCT ON is currently supported only by the PostgreSQL dialect. Use of DISTINCT ON for other backends is currently silently ignored, however this usage is deprecated, and will raise CompileError in a future release for all backends that do not support this syntax.
items = session.scalars(statement).fetchall()
tests/test_search.py::test_single_constraint[-31]
/nix/store/j7wrnk4i2cjjv1r0psih6krfqnqhkh06-TagStudio-9.5.2/lib/python3.12/site-packages/tagstudio/core/library/alchemy/visitors.py:61: SADeprecationWarning: Invoking or_() without arguments is deprecated, and will be disallowed in a future release. For an empty or_() construct, use 'or_(false(), *args)' or 'or_(False, *args)'.
return or_(*[self.visit(element) for element in node.elements])
-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
�[36m�[1m=========================== short test summary info ============================�[0m
�[31mFAILED�[0m tests/qt/test_tag_search_panel.py::�[1mtest_update_tags�[0m - TypeError: Expected signal or callable, got "NoneType"
�[31m================= �[31m�[1m1 failed�[0m, �[32m193 passed�[0m, �[33m442 warnings�[0m�[31m in 2.76s�[0m�[31m ==================�[0m
2025-04-19 14:37:26 [info ] [FFmpeg] Using FFprobe location: ffprobe (Not Found)
2025-04-19 14:37:26 [info ] [FFmpeg] Using FFmpeg location: ffmpeg (Not Found)
2025-04-19 14:37:27 [info ] [ResourceManager] Resources Registered: count=32
QT-Version
$> qtdiag | head -5
versionFunctions: Not supported on OpenGL ES
versionFunctions: Not supported on OpenGL ES
Qt 6.9.0 (x86_64-little_endian-lp64 shared (dynamic) release build; by GCC 14.2.1 20250322) on "wayland"
OS: NixOS 25.05 (Warbler) [linux version 6.14.2]
Architecture: x86_64; features: SSE2 SSE3 SSSE3 SSE4.1 SSE4.2 AVX AVX2 AVX512F AVX512IFMA AVX512VBMI2 RDRAND RDSEED AES VAES SHA