Skip to content

[Bug]: TagStudio breaks in nixos-unstable #915

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
3 tasks done
zierf opened this issue Apr 19, 2025 · 5 comments
Open
3 tasks done

[Bug]: TagStudio breaks in nixos-unstable #915

zierf opened this issue Apr 19, 2025 · 5 comments
Assignees
Labels
System: Linux For Linux/BSD distributions Type: Bug Something isn't working as intended Type: Installation Installing, building, and/or launching the program

Comments

@zierf
Copy link
Contributor

zierf commented Apr 19, 2025

Checklist

  • I am using an up-to-date version.
  • I have read the documentation.
  • I have searched existing issues.

TagStudio Version

97ee43c

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.

GlobalMenu


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";,

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
@zierf zierf added the Type: Bug Something isn't working as intended label Apr 19, 2025
@xarvex
Copy link
Member

xarvex commented Apr 19, 2025

Looks like Qt bumped from 6.8.x to 6.9.x in nixpkgs, that also explains the failing test talking about signals and callables. I suppose some sort of change in behavior that showed up in the test, might show up in other stuff too. Doesn't entirely explain the GlobalMenu, though.

@xarvex xarvex self-assigned this Apr 19, 2025
@xarvex xarvex added Type: Installation Installing, building, and/or launching the program System: Linux For Linux/BSD distributions labels Apr 19, 2025
@zierf
Copy link
Contributor Author

zierf commented Apr 19, 2025

Yep, removing inputs.nixpkgs.follows is at least a solution of sorts. The advantage of flakes, that they can still be created consistently with their pinned versions, unfortunately does not save this one specific case.

The build with the locked packages seems to be valid, but it no longer interfaces correctly with the desktop/menu in a more recent QT version. I just wanted to point this out early, as it might still work now for other people not using unstable, but it will ultimately break sooner or later.

I recently moved my system and removed some files from the Library folder. Without the global menu, there was no longer an option to rescan the data.

A good addition might be to temporarily display the menu directly in the window when pressing the 'Alt' key, like some other applications do it (no idea how).
Alternatively, the global menu could be deactivated for a certain time using a special start parameter. So you're not locked out of relevant actions (if this could happen any future QT/Python update).

I have temporarily started my previous boot entry once, in which QT and TagStudio still fit together. This at least allowed me to trigger another rescan for the time being. Wondering if the global menu then might also break sometimes on other distributions with KDE Desktop …

But for now, happy Easter! 🐇🥚

@xarvex
Copy link
Member

xarvex commented Apr 19, 2025

Yes, something else I realized in reading this is that my proposal for a check in #892 would not have helped this, at least not without updating the nixpkgs input regularly. At the very least, I am able to reproduce this issue by updating that input.

What I have now noticed is that the breakage might be caused by PySide in specific being updated. I just need some time to figure out how best to address it. This will probably be a decision between updating the version of PySide used in the source, or adding an override to the package to use the previous version (which comes at the cost of requiring a local build). The latter may be a good idea temporarily at the very least, if it is shown that work must be done to bump.

Happy Easter to you too! 🧺

@xarvex xarvex added the Priority: High An important issue requiring attention label Apr 20, 2025
@xarvex
Copy link
Member

xarvex commented Apr 20, 2025

#916 has popped up coming from a user on EndeavourOS, which rules out this being limited to PySide, and makes this much higher priority than I had hoped.
False alarm, I seem to have gotten TagStudio to build with only PySide overrides, all works fine with Qt 6.9.x. Also, just noticed that #916 might be using an unsupported install method. PR spinning up once I have verified everything.

@xarvex xarvex removed the Priority: High An important issue requiring attention label Apr 21, 2025
@xarvex
Copy link
Member

xarvex commented Apr 22, 2025

Finally made the mentioned PR, some things came up, and it took me some time to make sure everything was working properly. Will leave it up for feedback.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
System: Linux For Linux/BSD distributions Type: Bug Something isn't working as intended Type: Installation Installing, building, and/or launching the program
Projects
None yet
Development

No branches or pull requests

2 participants