diff --git a/qt/aqt/import_export/exporting.py b/qt/aqt/import_export/exporting.py index 1b18c35e3..f4d132ab0 100644 --- a/qt/aqt/import_export/exporting.py +++ b/qt/aqt/import_export/exporting.py @@ -42,21 +42,21 @@ class ExportDialog(QDialog): self.col = mw.col.weakref() self.frm = aqt.forms.exporting.Ui_ExportDialog() self.frm.setupUi(self) - self.exporter: Type[Exporter] = None + self.exporter: Exporter self.nids = nids disable_help_button(self) self.setup(did) self.open() def setup(self, did: DeckId | None) -> None: - self.exporters: list[Type[Exporter]] = [ + self.exporter_classes: list[Type[Exporter]] = [ ApkgExporter, ColpkgExporter, NoteCsvExporter, CardCsvExporter, ] self.frm.format.insertItems( - 0, [f"{e.name()} (.{e.extension})" for e in self.exporters] + 0, [f"{e.name()} (.{e.extension})" for e in self.exporter_classes] ) qconnect(self.frm.format.activated, self.exporter_changed) if self.nids is None and not did: @@ -86,7 +86,7 @@ class ExportDialog(QDialog): self.frm.includeSched.setChecked(False) def exporter_changed(self, idx: int) -> None: - self.exporter = self.exporters[idx] + self.exporter = self.exporter_classes[idx]() self.frm.includeSched.setVisible(self.exporter.show_include_scheduling) self.frm.includeMedia.setVisible(self.exporter.show_include_media) self.frm.includeTags.setVisible(self.exporter.show_include_tags) @@ -190,9 +190,8 @@ class Exporter(ABC): show_include_notetype = False show_include_guid = False - @classmethod @abstractmethod - def export(cls, mw: aqt.main.AnkiQt, options: ExportOptions) -> None: + def export(self, mw: aqt.main.AnkiQt, options: ExportOptions) -> None: pass @staticmethod @@ -210,13 +209,12 @@ class ColpkgExporter(Exporter): def name() -> str: return tr.exporting_anki_collection_package() - @classmethod - def export(cls, mw: aqt.main.AnkiQt, options: ExportOptions) -> None: - options = gui_hooks.exporter_will_export(options, cls) + def export(self, mw: aqt.main.AnkiQt, options: ExportOptions) -> None: + options = gui_hooks.exporter_will_export(options, self) def on_success(_: None) -> None: mw.reopen() - gui_hooks.exporter_did_export(options, cls) + gui_hooks.exporter_did_export(options, self) tooltip(tr.exporting_collection_exported(), parent=mw) def on_failure(exception: Exception) -> None: @@ -248,12 +246,11 @@ class ApkgExporter(Exporter): def name() -> str: return tr.exporting_anki_deck_package() - @classmethod - def export(cls, mw: aqt.main.AnkiQt, options: ExportOptions) -> None: - options = gui_hooks.exporter_will_export(options, cls) + def export(self, mw: aqt.main.AnkiQt, options: ExportOptions) -> None: + options = gui_hooks.exporter_will_export(options, self) def on_success(count: int) -> None: - gui_hooks.exporter_did_export(options, cls) + gui_hooks.exporter_did_export(options, self) tooltip(tr.exporting_note_exported(count=count), parent=mw) QueryOp( @@ -282,12 +279,11 @@ class NoteCsvExporter(Exporter): def name() -> str: return tr.exporting_notes_in_plain_text() - @classmethod - def export(cls, mw: aqt.main.AnkiQt, options: ExportOptions) -> None: - options = gui_hooks.exporter_will_export(options, cls) + def export(self, mw: aqt.main.AnkiQt, options: ExportOptions) -> None: + options = gui_hooks.exporter_will_export(options, self) def on_success(count: int) -> None: - gui_hooks.exporter_did_export(options, cls) + gui_hooks.exporter_did_export(options, self) tooltip(tr.exporting_note_exported(count=count), parent=mw) QueryOp( @@ -314,12 +310,11 @@ class CardCsvExporter(Exporter): def name() -> str: return tr.exporting_cards_in_plain_text() - @classmethod - def export(cls, mw: aqt.main.AnkiQt, options: ExportOptions) -> None: - options = gui_hooks.exporter_will_export(options, cls) + def export(self, mw: aqt.main.AnkiQt, options: ExportOptions) -> None: + options = gui_hooks.exporter_will_export(options, self) def on_success(count: int) -> None: - gui_hooks.exporter_did_export(options, cls) + gui_hooks.exporter_did_export(options, self) tooltip(tr.exporting_card_exported(count=count), parent=mw) QueryOp( diff --git a/qt/tools/genhooks_gui.py b/qt/tools/genhooks_gui.py index e62713f32..6a3a139ab 100644 --- a/qt/tools/genhooks_gui.py +++ b/qt/tools/genhooks_gui.py @@ -19,7 +19,7 @@ prefix = """\ from __future__ import annotations -from typing import Any, Callable, Sequence, Literal, Type +from typing import Any, Callable, Sequence, Literal import anki import aqt @@ -822,7 +822,7 @@ gui_hooks.webview_did_inject_style_into_page.append(mytest) name="exporter_will_export", args=[ "export_options: aqt.import_export.exporting.ExportOptions", - "exporter: Type[aqt.import_export.exporting.Exporter]", + "exporter: aqt.import_export.exporting.Exporter", ], return_type="aqt.import_export.exporting.ExportOptions", doc="""Called before collection and deck exports. @@ -831,8 +831,8 @@ gui_hooks.webview_did_inject_style_into_page.append(mytest) modify the export options. To perform the export unaltered, please return `export_options` as is, e.g.: - def on_exporter_will_export(export_options: ExportOptions, exporter: Type[Exporter]): - if not exporter == ApkgExporter: + def on_exporter_will_export(export_options: ExportOptions, exporter: Exporter): + if not isinstance(exporter, ApkgExporter): return export_options export_options.limit = ... return export_options @@ -842,7 +842,7 @@ gui_hooks.webview_did_inject_style_into_page.append(mytest) name="exporter_did_export", args=[ "export_options: aqt.import_export.exporting.ExportOptions", - "exporter: Type[aqt.import_export.exporting.Exporter]", + "exporter: aqt.import_export.exporting.Exporter", ], doc="""Called after collection and deck exports.""", ),