Remove aqt dependency from media extraction in ankihub client #1246
Remove aqt dependency from media extraction in ankihub client #1246RisingOrange merged 4 commits intomainfrom
Conversation
Refactor get_media_names_from_notetype to accept a note type dict instead of an ID, removing the aqt dependency from the client layer. Add a get_notetype_by_id callback parameter to get_media_names_from_notes_data so callers in the GUI/business layer provide the lookup function. https://claude.ai/code/session_01ENEZrvFPchRVdnATauZfo9
Summary of ChangesHello @RisingOrange, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request refactors the core media extraction functions to significantly improve their testability and reduce coupling with the Anki collection API. By introducing callback functions for notetype resolution and passing notetype objects directly, the media extraction logic becomes more modular and flexible. This change allows for easier unit testing of these components and provides greater adaptability for future custom notetype resolution strategies, ultimately leading to a more robust and maintainable codebase. Highlights
🧠 New Feature in Public Preview: You can now enable Memory to help Gemini Code Assist learn from your team's feedback. This makes future code reviews more consistent and personalized to your project's style. Click here to enable Memory in your admin console. Changelog
Activity
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
* Fix import sorting: add blank line between stdlib and third-party imports Ruff I001 was failing because the typing import ran directly into the mashumaro import without a blank line separator. https://claude.ai/code/session_01K8GeVjG7MjJzhZMtrzRh48 * Remove fragile get_media_names_from_notetype mock in client tests Replace `lambda mid: {}` (which would crash with KeyError if the mock were removed) with a proper empty notetype dict `{"css": "", "tmpls": []}`. This removes the implicit dependency on the get_media_names_from_notetype mock and makes each call site self-sufficient. https://claude.ai/code/session_01K8GeVjG7MjJzhZMtrzRh48 --------- Co-authored-by: Claude <noreply@anthropic.com>
* Fix import sorting: add blank line between stdlib and third-party imports Ruff I001 was failing because the typing import ran directly into the mashumaro import without a blank line separator. https://claude.ai/code/session_01K8GeVjG7MjJzhZMtrzRh48 * Remove fragile get_media_names_from_notetype mock in client tests Replace `lambda mid: {}` (which would crash with KeyError if the mock were removed) with a proper empty notetype dict `{"css": "", "tmpls": []}`. This removes the implicit dependency on the get_media_names_from_notetype mock and makes each call site self-sufficient. https://claude.ai/code/session_01K8GeVjG7MjJzhZMtrzRh48 * Fix mypy errors: wrap mid with NotetypeId() for ModelManager.get() calls https://claude.ai/code/session_01K8GeVjG7MjJzhZMtrzRh48 --------- Co-authored-by: Claude <noreply@anthropic.com>
|
@abdnh This isn't so important, but I think it would be better for the ankihub client to not depend on anki/aqt code |
This PR refactors the media extraction functions to not import from
aqtin the ankihub client code.Proposed changes
get_media_names_from_notes_data(): Now accepts aget_notetype_by_idcallback function instead of directly accessing the Anki collection. This allows callers to provide their own notetype resolution logic.get_media_names_from_notetype(): Changed to accept a notetype dictionary object directly instead of a notetype ID. This eliminates the need for the function to import and accessaqt.mw.col.models.Removed unused import: Removed
NotetypeIdfromanki.modelswhich is no longer needed.These changes improve:
All call sites have been updated to pass the required callback or notetype object:
deck_creation.py: Passes lambda to accessaqt.mw.col.models.get()decks_dialog.py: Passes notetype object directlysuggestions.py: Passes lambda to accessaqt.mw.col.models.get()media_sync.py: Retrieves notetype before calling the function