Skip to content

Conversation

@pSpitzner
Copy link
Owner

  • Adds aisauce plugin as a default dependency.
  • Adds basic support to configure settings on a per-inbox level. This has great potential to wreak havoc, causing inconsistent libraries if the wrong settings are altered. The focus are plugins. To avoid user errors, config parts that can be altered have to be manually coded into the schema.

@github-actions
Copy link

github-actions bot commented Jan 9, 2026

Thank you for the PR! The changelog has not been updated, so here is a friendly reminder to check if you need to add an entry.

@pSpitzner
Copy link
Owner Author

Locally ai_source and ai_cleanup seem to work for me, configured on separate inboxes.

Next steps:

  • figure out how to grab logs or states of beets plugins
  • test for that (and how to mock ai response?)
  • communicate plugin logs and logs to frontend (and well, the beets-flask log, to begin with)

aisauce: PluginAiSauceSchema = field(default_factory=lambda: PluginAiSauceSchema())
# Note: we currently set the defaults from the schema in commit_to_beets.
# This prevents us from using None as default value in beets root-level entries.
# For instance `aisauce: PluginAiSauceSchema | None = None` wont work, we need
Copy link
Owner Author

@pSpitzner pSpitzner Jan 25, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reconsidering, I think we need to solve this, otherwise we will regret it later.

If we do not find a way to allow using None as the default value for a plugin section at root level (meaning "I dont care about it in the global settings"), we will not be able to allow overrides later while also having the typing.

Edit: with latest eyconf we can now pass Nones, and get through our own validation steps, so thats good.

However, problem remains in beets plugin loading logic:

beets-flask-dev  |   File "/repo/backend/beets_flask/config/beets_config.py", line 132, in commit_to_beets
beets-flask-dev  |     load_plugins()
beets-flask-dev  |   File "/repo/backend/.venv/lib/python3.12/site-packages/beets/plugins.py", line 488, in load_plugins
beets-flask-dev  |     send("pluginload")
beets-flask-dev  |   File "/repo/backend/.venv/lib/python3.12/site-packages/beets/plugins.py", line 648, in send
beets-flask-dev  |     if (r := handler(**arguments)) is not None
beets-flask-dev  |              ^^^^^^^^^^^^^^^^^^^^
beets-flask-dev  |   File "/repo/backend/.venv/lib/python3.12/site-packages/beets/plugins.py", line 329, in wrapper
beets-flask-dev  |     return func(*args, **kwargs)
beets-flask-dev  |            ^^^^^^^^^^^^^^^^^^^^^
beets-flask-dev  |   File "/repo/backend/.venv/lib/python3.12/site-packages/beets/plugins.py", line 255, in _verify_config
beets-flask-dev  |     or "source_weight" not in self.config
beets-flask-dev  |        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
beets-flask-dev  |   File "/repo/backend/.venv/lib/python3.12/site-packages/confuse/core.py", line 148, in __contains__
beets-flask-dev  |     return self[key].exists()
beets-flask-dev  |            ^^^^^^^^^^^^^^^^^^
beets-flask-dev  |   File "/repo/backend/.venv/lib/python3.12/site-packages/confuse/core.py", line 87, in exists
beets-flask-dev  |     self.first()
beets-flask-dev  |   File "/repo/backend/.venv/lib/python3.12/site-packages/confuse/core.py", line 79, in first
beets-flask-dev  |     return util.iter_first(pairs)
beets-flask-dev  |            ^^^^^^^^^^^^^^^^^^^^^^
beets-flask-dev  |   File "/repo/backend/.venv/lib/python3.12/site-packages/confuse/util.py", line 21, in iter_first
beets-flask-dev  |     return next(it)
beets-flask-dev  |            ^^^^^^^^
beets-flask-dev  |   File "/repo/backend/.venv/lib/python3.12/site-packages/confuse/core.py", line 459, in resolve
beets-flask-dev  |     raise ConfigTypeError(
beets-flask-dev  | confuse.exceptions.ConfigTypeError: aisauce must be a collection, not NoneType

Options:

  • Try to set the section in beets config to {} instead of None, but might need deep nesting, and will likely not solve the issue, once plugins realize a key is missing (like aisauces providers)
  • pop None sections before putting them into beets. ugly but sensible.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant