use isort to tidy up imports

This commit is contained in:
Damien Elmes 2019-12-20 19:19:03 +10:00
parent 638a8515bc
commit c1587254f4
82 changed files with 545 additions and 457 deletions

2
.isort.cfg Normal file
View file

@ -0,0 +1,2 @@
[settings]
skip=aqt/forms

View file

@ -108,7 +108,7 @@ run: build
######################
.PHONY: check
check: mypy pytest pylint pytype checkpretty
check: mypy pyimports pytest pylint pytype checkpretty
# Checking python
######################
@ -131,11 +131,21 @@ PYCHECKDEPS := $(BUILDDEPS) $(shell find anki aqt -name '*.py' | grep -v buildha
pytype --config pytype.conf
touch $@
.PHONY: mypy pytest pylint pytype
.build/pyimports: $(PYCHECKDEPS)
isort -rc anki aqt --check # if this fails, run 'make fixpyimports'
touch $@
.PHONY: mypy pytest pylint pytype pyimports fixpyimports
mypy: .build/mypy
pytest: .build/pytest
pylint: .build/pylint
pytype: .build/pytype
pyimports: .build/pyimports
.PHONY: fixpyimports
fixpyimports:
isort -rc anki aqt
# Checking typescript
######################

View file

@ -4,6 +4,8 @@
import sys
from anki.storage import Collection
if sys.version_info[0] < 3 or sys.version_info[1] < 5:
raise Exception("Anki requires Python 3.5+")
@ -11,5 +13,4 @@ if sys.getfilesystemencoding().lower() in ("ascii", "ansi_x3.4-1968"):
raise Exception("Anki requires a UTF-8 locale.")
version="2.1.17" # build scripts grep this line, so preserve formatting
from anki.storage import Collection
__all__ = ["Collection"]

View file

@ -2,13 +2,13 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import pprint
import time
from anki.hooks import runHook
from anki.utils import intTime, timestampID, joinFields
from typing import Any, Dict, Optional
from anki.consts import *
from anki.hooks import runHook
from anki.notes import Note
from typing import Any, Optional, Dict
from anki.utils import intTime, joinFields, timestampID
# Cards
##########################################################################

View file

@ -2,38 +2,40 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import pprint
import re
import time
import os
import random
import stat
import datetime
import copy
import traceback
import datetime
import json
import os
import pprint
import random
import re
import stat
import time
import traceback
from typing import Any, Dict, List, Optional, Tuple, Union
from anki.lang import _, ngettext
from anki.utils import ids2str, fieldChecksum, \
intTime, splitFields, joinFields, maxID, devMode, stripHTMLMedia
from anki.hooks import runFilter, runHook
from anki.models import ModelManager
from anki.media import MediaManager
from anki.decks import DeckManager
from anki.tags import TagManager
from anki.consts import *
from anki.errors import AnkiError
from anki.sound import stripSounds
import anki.latex # sets up hook
import anki.cards
import anki.find
import anki.latex # sets up hook
import anki.notes
import anki.template
import anki.find
from typing import Any, List, Optional, Tuple, Union, Dict
from anki.cards import Card
from anki.consts import *
from anki.db import DB
from anki.decks import DeckManager
from anki.errors import AnkiError
from anki.hooks import runFilter, runHook
from anki.lang import _, ngettext
from anki.media import MediaManager
from anki.models import ModelManager
from anki.notes import Note
from anki.sched import Scheduler as V1Scheduler
from anki.schedv2 import Scheduler as V2Scheduler
from anki.sound import stripSounds
from anki.tags import TagManager
from anki.utils import (devMode, fieldChecksum, ids2str, intTime, joinFields,
maxID, splitFields, stripHTMLMedia)
defaultConf = {
# review options
'activeDecks': [1],
@ -59,8 +61,6 @@ def timezoneOffset() -> int:
else:
return time.timezone//60
from anki.sched import Scheduler as V1Scheduler
from anki.schedv2 import Scheduler as V2Scheduler
# this is initialized by storage.Collection
class _Collection:
db: Optional[DB]

View file

@ -2,9 +2,10 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from anki.lang import _
from typing import Any, Dict
from anki.lang import _
# whether new cards should be mixed with reviews, or shown first or last
NEW_CARDS_DISTRIBUTE = 0
NEW_CARDS_LAST = 1

View file

@ -4,8 +4,8 @@
import os
import time
from sqlite3 import dbapi2 as sqlite, Cursor
from sqlite3 import Cursor
from sqlite3 import dbapi2 as sqlite
from typing import Any, List
DBError = sqlite.Error

View file

@ -2,16 +2,17 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import copy, operator
import unicodedata
import copy
import json
import operator
import unicodedata
from typing import Any, Dict, List, Optional, Set, Tuple, Union
from anki.utils import intTime, ids2str
from anki.hooks import runHook
from anki.consts import *
from anki.lang import _
from anki.errors import DeckRenameError
from typing import Any, Dict, List, Optional, Tuple, Set, Union
from anki.hooks import runHook
from anki.lang import _
from anki.utils import ids2str, intTime
# fixmes:
# - make sure users can't set grad interval < 1

View file

@ -1,4 +1,5 @@
from typing import Any
# -*- coding: utf-8 -*-
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html

View file

@ -2,18 +2,24 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import re, os, zipfile, shutil, unicodedata
import json, typing
from anki.lang import _
from anki.utils import ids2str, splitFields, namedtmp, stripHTML
from anki.hooks import runHook
from anki.storage import Collection
from typing import Any, Dict, List, Tuple
import json
import os
import re
import shutil
import typing
import unicodedata
import zipfile
from io import BufferedWriter
from anki.collection import _Collection
from typing import Any, Dict, List, Tuple
from zipfile import ZipFile
from anki.collection import _Collection
from anki.hooks import runHook
from anki.lang import _
from anki.storage import Collection
from anki.utils import ids2str, namedtmp, splitFields, stripHTML
class Exporter:
includeHTML: typing.Union[bool, None] = None

View file

@ -5,12 +5,12 @@
import re
import sre_constants
import unicodedata
from typing import Any, List, Optional, Set, Tuple
from anki.utils import ids2str, splitFields, joinFields, intTime, fieldChecksum, stripHTMLMedia
from anki.consts import *
from anki.hooks import *
from typing import Any, List, Optional, Tuple, Set
from anki.utils import (fieldChecksum, ids2str, intTime, joinFields,
splitFields, stripHTMLMedia)
# Find
##########################################################################

View file

@ -13,8 +13,9 @@ If you call wrap() with pos='around', the original function will not be called
automatically but can be called with _old().
"""
from typing import Any, Callable, Dict, List
import decorator
from typing import List, Any, Callable, Dict
# Hooks
##############################################################################

View file

@ -2,12 +2,12 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from anki.importing.csvfile import TextImporter
from anki.importing.apkg import AnkiPackageImporter
from anki.importing.anki2 import Anki2Importer
from anki.importing.supermemo_xml import SupermemoXmlImporter
from anki.importing.apkg import AnkiPackageImporter
from anki.importing.csvfile import TextImporter
from anki.importing.mnemo import MnemosyneImporter
from anki.importing.pauker import PaukerImporter
from anki.importing.supermemo_xml import SupermemoXmlImporter
from anki.lang import _
Importers = (

View file

@ -4,12 +4,13 @@
import os
import unicodedata
from anki.storage import Collection
from anki.utils import intTime, splitFields, joinFields
from typing import Any, Dict, List, Optional, Tuple
from anki.collection import _Collection
from anki.importing.base import Importer
from anki.lang import _
from typing import Any, Optional, Dict, Tuple, List
from anki.collection import _Collection
from anki.storage import Collection
from anki.utils import intTime, joinFields, splitFields
GUID = 1
MID = 2

View file

@ -2,13 +2,16 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import zipfile, os
import unicodedata
import json
from anki.utils import tmpfile
from anki.importing.anki2 import Anki2Importer
import os
import unicodedata
import zipfile
from typing import Any, Dict, Optional
from anki.importing.anki2 import Anki2Importer
from anki.utils import tmpfile
class AnkiPackageImporter(Anki2Importer):
nameToNum: Dict[str, str]
zip: Optional[zipfile.ZipFile]

View file

@ -2,9 +2,10 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from anki.utils import maxID
from typing import Any, Optional, List
from typing import Any, List, Optional
from anki.collection import _Collection
from anki.utils import maxID
# Base importer
##########################################################################

View file

@ -4,12 +4,13 @@
import csv
import re
from anki.importing.noteimp import NoteImporter, ForeignNote
from anki.lang import _
from typing import List, Optional, Any, TextIO, Union
from typing import Any, List, Optional, TextIO, Union
from anki.collection import _Collection
from anki.importing.noteimp import ForeignNote, NoteImporter
from anki.lang import _
class TextImporter(NoteImporter):
needDelimiter = True

View file

@ -2,11 +2,14 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import time, re
import re
import time
from anki.db import DB
from anki.importing.noteimp import NoteImporter, ForeignNote, ForeignCard
from anki.importing.noteimp import ForeignCard, ForeignNote, NoteImporter
from anki.lang import _, ngettext
from anki.stdmodels import addBasicModel, addClozeModel
from anki.lang import ngettext, _
class MnemosyneImporter(NoteImporter):

View file

@ -2,18 +2,16 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import html
import html
import unicodedata
from typing import Any, Dict, List, Optional, Tuple, Union
from anki.consts import NEW_CARDS_RANDOM, STARTING_FACTOR
from anki.lang import _
from anki.utils import fieldChecksum, guid64, timestampID, \
joinFields, intTime, splitFields
from anki.importing.base import Importer
from anki.lang import ngettext
from typing import Any, List, Optional, Tuple, Dict, Union
from anki.collection import _Collection
from anki.consts import NEW_CARDS_RANDOM, STARTING_FACTOR
from anki.importing.base import Importer
from anki.lang import _, ngettext
from anki.utils import (fieldChecksum, guid64, intTime, joinFields,
splitFields, timestampID)
# Stores a list of fields, tags and deck
######################################################################

View file

@ -2,9 +2,14 @@
# Copyright: Andreas Klauer <Andreas.Klauer@metamorpher.de>
# License: BSD-3
import gzip, math, random, time, html
import gzip
import html
import math
import random
import time
import xml.etree.ElementTree as ET
from anki.importing.noteimp import NoteImporter, ForeignNote, ForeignCard
from anki.importing.noteimp import ForeignCard, ForeignNote, NoteImporter
from anki.stdmodels import addForwardReverse
ONE_DAY = 60*60*24

View file

@ -3,16 +3,17 @@
# License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
# pytype: disable=attribute-error
import re
import sys
from anki.stdmodels import addBasicModel
from anki.importing.noteimp import NoteImporter, ForeignNote, ForeignCard
from anki.lang import _
from anki.lang import ngettext
from xml.dom import minidom
import time
import unicodedata
from string import capwords
import re, unicodedata, time
from xml.dom import minidom
from anki.importing.noteimp import ForeignCard, ForeignNote, NoteImporter
from anki.lang import _, ngettext
from anki.stdmodels import addBasicModel
class SmartDict(dict):
"""

View file

@ -2,8 +2,10 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import os, sys, re
import gettext
import os
import re
import sys
import threading
from typing import Any

View file

@ -2,11 +2,15 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import re, os, shutil, html
from anki.utils import checksum, call, namedtmp, tmpdir, isMac, stripHTML
import html
import os
import re
import shutil
from typing import Any, Dict, List, Optional, Union
from anki.hooks import addHook
from anki.lang import _
from typing import Any, Dict, List, Optional, Union
from anki.utils import call, checksum, isMac, namedtmp, stripHTML, tmpdir
pngCommands = [
["latex", "-interaction=nonstopmode", "tmp.tex"],

View file

@ -2,24 +2,25 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import io
import re
import traceback
import urllib.request, urllib.parse, urllib.error
import unicodedata
import sys
import zipfile
import pathlib
import json
import os
import pathlib
import re
import sys
import traceback
import unicodedata
import urllib.error
import urllib.parse
import urllib.request
import zipfile
from typing import Any, Callable, List, Optional, Tuple, Union
from anki.utils import checksum, isWin, isMac
from anki.db import DB, DBError
from anki.consts import *
from anki.latex import mungeQA
from anki.db import DB, DBError
from anki.lang import _
from typing import Any, List, Optional, Tuple
from anki.latex import mungeQA
from anki.utils import checksum, isMac, isWin
from typing import Callable, Union
class MediaManager:

View file

@ -2,14 +2,16 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import copy, re, json
from anki.utils import intTime, joinFields, splitFields, ids2str,\
checksum
from anki.lang import _
import copy
import json
import re
import time
from typing import Any, Callable, Dict, List, Optional, Tuple, Union
from anki.consts import *
from anki.hooks import runHook
import time
from typing import Tuple, Union, Any, Callable, Dict, List, Optional
from anki.lang import _
from anki.utils import checksum, ids2str, intTime, joinFields, splitFields
# Models
##########################################################################

View file

@ -25,22 +25,23 @@
#
# ------------------------------------------------------------------------------
import sys
import os
import time
import inspect
import json
import socket
import os
import select
import socket
import subprocess
import sys
import tempfile
import threading
import subprocess
import inspect
from distutils.spawn import find_executable # pylint: disable=import-error,no-name-in-module
from queue import Queue, Empty, Full
import time
from distutils.spawn import \
find_executable # pylint: disable=import-error,no-name-in-module
from queue import Empty, Full, Queue
from typing import Dict, Optional
from anki.utils import isWin
class MPVError(Exception):
pass
@ -57,7 +58,6 @@ class MPVCommandError(MPVError):
class MPVTimeoutError(MPVError):
pass
from anki.utils import isWin
if isWin:
# pylint: disable=import-error
import win32file, win32pipe, pywintypes, winerror # pytype: disable=import-error
@ -569,4 +569,3 @@ class MPV(MPVBase):
"""Set the value of property `name`.
"""
return self.command("set_property", name, value)

View file

@ -2,10 +2,11 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from anki.utils import fieldChecksum, intTime, \
joinFields, splitFields, stripHTMLMedia, timestampID, guid64
from typing import List, Tuple
from typing import Any, Optional
from typing import Any, List, Optional, Tuple
from anki.utils import (fieldChecksum, guid64, intTime, joinFields,
splitFields, stripHTMLMedia, timestampID)
class Note:
tags: List[str]

View file

@ -2,17 +2,17 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import time
import random
import itertools
from operator import itemgetter
import random
import time
from heapq import *
from operator import itemgetter
#from anki.cards import Card
from anki.utils import ids2str, intTime, fmtTimeSpan
from anki.lang import _
from anki.consts import *
from anki.hooks import runHook
from anki.lang import _
#from anki.cards import Card
from anki.utils import fmtTimeSpan, ids2str, intTime
# queue types: 0=new/cram, 1=lrn, 2=rev, 3=day lrn, -1=suspended, -2=buried
# revlog types: 0=lrn, 1=rev, 2=relrn, 3=cram

View file

@ -2,17 +2,20 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import time
import random
import itertools
from operator import itemgetter
from heapq import *
import datetime
import itertools
import random
import time
from heapq import *
from operator import itemgetter
#from anki.collection import _Collection
from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Union
from anki.utils import ids2str, intTime, fmtTimeSpan
from anki.lang import _
from anki.cards import Card
from anki.consts import *
from anki.hooks import runHook
from anki.lang import _
from anki.utils import fmtTimeSpan, ids2str, intTime
# card types: 0=new, 1=lrn, 2=rev, 3=relrn
# queue types: 0=new, 1=(re)lrn, 2=rev, 3=day (re)lrn,
@ -21,9 +24,6 @@ from anki.hooks import runHook
# positive revlog intervals are in days (rev), negative in seconds (lrn)
# odue/odid store original due/did when cards moved to filtered deck
from anki.cards import Card
#from anki.collection import _Collection
from typing import Any, Callable, Dict, List, Optional, Union, Tuple, Set
class Scheduler:

View file

@ -2,15 +2,21 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import atexit
import html
import re, sys, threading, time, subprocess, os, atexit
import random
from typing import List, Tuple, Dict, Any
from typing import Callable, NoReturn, Optional
import os
import random
import re
import subprocess
import sys
import threading
import time
from typing import Any, Callable, Dict, List, NoReturn, Optional, Tuple
from anki.hooks import addHook, runHook
from anki.utils import tmpdir, isWin, isMac, isLin
from anki.lang import _
from anki.mpv import MPV, MPVBase
from anki.utils import isLin, isMac, isWin, tmpdir
# Shared utils
##########################################################################
@ -90,7 +96,6 @@ def retryWait(proc) -> Any:
# MPV
##########################################################################
from anki.mpv import MPV, MPVBase
_player: Optional[Callable[[Any], Any]]
_queueEraser: Optional[Callable[[], Any]]

View file

@ -2,14 +2,13 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import time
import datetime
import json
import time
from typing import Any, Dict, List, Optional, Tuple
from anki.utils import fmtTimeSpan, ids2str
from anki.lang import _, ngettext
from typing import Any, List, Tuple, Optional, Dict
from anki.utils import fmtTimeSpan, ids2str
# Card stats
##########################################################################

View file

@ -1,10 +1,10 @@
# -*- coding: utf-8 -*-
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from typing import Dict, Any
from typing import Any, Dict
from anki.lang import _
from anki.consts import MODEL_CLOZE
from anki.lang import _
models = []

View file

@ -3,18 +3,19 @@
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import copy
import re
import json
import os
import re
from typing import Any, Dict, Tuple
from anki.lang import _
from anki.utils import intTime, isWin
from anki.db import DB
from anki.collection import _Collection
from anki.consts import *
from anki.stdmodels import addBasicModel, addClozeModel, addForwardReverse, \
addForwardOptionalReverse, addBasicTypingModel
from typing import Any, Dict, Tuple
from anki.db import DB
from anki.lang import _
from anki.stdmodels import (addBasicModel, addBasicTypingModel, addClozeModel,
addForwardOptionalReverse, addForwardReverse)
from anki.utils import intTime, isWin
def Collection(path: str, lock: bool = True, server: bool = False, log: bool = False) -> _Collection:
"Open a new or existing collection. Path must be unicode."

View file

@ -2,23 +2,25 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import io
import gzip
import random
import requests
import io
import json
import os
import random
import sqlite3
from anki.db import DB, DBError
from anki.utils import ids2str, intTime, platDesc, checksum, devMode
from anki.consts import *
from anki.utils import versionWithBuild
from .hooks import runHook
import anki
from .lang import ngettext
from typing import Any, Dict, List, Optional, Tuple, Union
import requests
import anki
from anki.consts import *
from anki.db import DB, DBError
from anki.utils import (checksum, devMode, ids2str, intTime, platDesc,
versionWithBuild)
from .hooks import runHook
from .lang import ngettext
# syncing vars
HTTP_TIMEOUT = 90
HTTP_BUF_SIZE = 64*1024

View file

@ -11,10 +11,11 @@ This module manages the tag cache and tags for notes.
"""
import json
from anki.utils import intTime, ids2str
from anki.hooks import runHook
import re
from typing import Any, List, Tuple, Callable, Dict
from typing import Any, Callable, Dict, List, Tuple
from anki.hooks import runHook
from anki.utils import ids2str, intTime
class TagManager:

View file

@ -1,7 +1,9 @@
from typing import Any
from .template import Template
from . import furigana; furigana.install()
from . import hint; hint.install()
from typing import Any
def render(template, context=None, **kwargs) -> Any:
context = context and context.copy() or {}

View file

@ -4,9 +4,10 @@
# Based off Kieran Clancy's initial implementation.
import re
from anki.hooks import addHook
from typing import Any, Callable
from anki.hooks import addHook
r = r' ?([^ >]+?)\[(.+?)\]'
ruby = r'<ruby><rb>\1</rb><rt>\2</rt></ruby>'

View file

@ -5,6 +5,7 @@
from anki.hooks import addHook
from anki.lang import _
def hint(txt, extra, context, tag, fullname) -> str:
if not txt.strip():
return ""

View file

@ -1,7 +1,8 @@
import re
from anki.utils import stripHTML, stripHTMLMedia
from typing import Any, Callable, Dict, Pattern
from anki.hooks import runFilter
from typing import Any, Callable, Pattern, Dict
from anki.utils import stripHTML, stripHTMLMedia
clozeReg = r"(?si)\{\{(c)%s::(.*?)(::(.*?))?\}\}"

View file

@ -1,8 +1,10 @@
from .template import Template
import os.path
import re
from typing import Any
from .template import Template
class View:
# Path where this view's template(s) live
template_path = '.'

View file

@ -2,29 +2,28 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import re
import os
import random
import time
# some add-ons expect json to be in the utils module
import json # pylint: disable=unused-import
import locale
import math
from html.entities import name2codepoint
import subprocess
import tempfile
import os
import platform
import random
import re
import shutil
import string
import subprocess
import sys
import locale
from hashlib import sha1
import platform
import tempfile
import time
import traceback
from contextlib import contextmanager
from anki.lang import _, ngettext
# some add-ons expect json to be in the utils module
import json # pylint: disable=unused-import
from hashlib import sha1
from html.entities import name2codepoint
from typing import Any, Iterator, List, Optional, Tuple, Union
from anki.db import DB
from typing import Any, Iterator, List, Union, Optional, Tuple
from anki.lang import _, ngettext
_tmpdir: Optional[str]

View file

@ -1,22 +1,21 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from anki import version as _version
import getpass
import sys
import argparse
import tempfile
import builtins
import locale
import getpass
import gettext
from typing import Optional, Any
import locale
import sys
import tempfile
from typing import Any, Optional
from aqt.qt import *
import anki.lang
from anki import version as _version
from anki.consts import HELP_SITE
from anki.lang import langDir
from anki.utils import isMac, isLin
from anki.utils import checksum, isLin, isMac
from aqt.qt import *
appVersion=_version
appWebsite="http://ankisrs.net/"
@ -26,8 +25,8 @@ appShared="https://ankiweb.net/shared/"
appUpdate="https://ankiweb.net/update/desktop"
appHelpSite=HELP_SITE
from aqt.main import AnkiQt
from aqt.profiles import ProfileManager
from aqt.main import AnkiQt # isort:skip
from aqt.profiles import ProfileManager # isort:skip
mw: Optional[AnkiQt] = None # set on init
@ -41,7 +40,6 @@ except ImportError as e:
print()
raise
from anki.utils import checksum
# Dialog manager
##########################################################################
@ -59,8 +57,8 @@ from anki.utils import checksum
#- make preferences modal? cmd+q does wrong thing
from aqt import addcards, browser, editcurrent, stats, about, \
preferences
from aqt import addcards, browser, editcurrent # isort:skip
from aqt import stats, about, preferences # isort:skip
class DialogManager:

View file

@ -2,11 +2,12 @@
# -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from aqt.qt import *
import aqt.forms
from anki.utils import versionWithBuild
from aqt.utils import supportText, tooltip
from anki.lang import _
from anki.utils import versionWithBuild
from aqt.qt import *
from aqt.utils import supportText, tooltip
class ClosableQDialog(QDialog):
def reject(self):

View file

@ -1,21 +1,22 @@
# Copyright: Ankitects Pty Ltd and contributors
# -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from typing import List
from typing import Callable, List
import aqt.deckchooser
import aqt.editor
import aqt.forms
import aqt.modelchooser
from anki.hooks import addHook, remHook, runHook
from anki.lang import _
from anki.notes import Note
from anki.sound import clearAudioQueue
from anki.utils import htmlToTextLine, isMac
from aqt import AnkiQt
from aqt.qt import *
import aqt.forms
from aqt.utils import saveGeom, restoreGeom, showWarning, askUser, shortcut, \
tooltip, openHelp, addCloseShortcut, downArrow
from anki.sound import clearAudioQueue
from anki.hooks import addHook, remHook, runHook
from anki.utils import htmlToTextLine, isMac
import aqt.editor, aqt.modelchooser, aqt.deckchooser
from aqt.utils import (addCloseShortcut, askUser, downArrow, openHelp,
restoreGeom, saveGeom, shortcut, showWarning, tooltip)
from anki.notes import Note
from typing import Callable
class AddCards(QDialog):

View file

@ -6,24 +6,25 @@ import json
import re
import zipfile
from collections import defaultdict
from typing import Callable, Dict, Any
import markdown
from send2trash import send2trash
import jsonschema
from jsonschema.exceptions import ValidationError
from aqt.qt import *
from aqt.utils import showInfo, openFolder, isWin, openLink, \
askUser, restoreGeom, saveGeom, restoreSplitter, saveSplitter, \
showWarning, tooltip, getFile
from typing import Any, Callable, Dict
from zipfile import ZipFile
import aqt.forms
import jsonschema
import markdown
from jsonschema.exceptions import ValidationError
from send2trash import send2trash
import aqt
from aqt.downloader import download
import aqt.forms
from anki.lang import _, ngettext
from anki.utils import intTime
from anki.sync import AnkiRequestsClient
from anki.utils import intTime
from aqt.downloader import download
from aqt.qt import *
from aqt.utils import (askUser, getFile, isWin, openFolder, openLink,
restoreGeom, restoreSplitter, saveGeom, saveSplitter,
showInfo, showWarning, tooltip)
class AddonManager:

View file

@ -2,35 +2,32 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import sre_constants
import html
import time
import json
import re
import sre_constants
import time
import unicodedata
from operator import itemgetter
from operator import itemgetter
from typing import Callable, List, Optional
from anki.collection import _Collection
from anki.lang import ngettext
import json
from aqt import AnkiQt
from aqt.qt import *
import anki
import aqt.forms
from anki.utils import fmtTimeSpan, ids2str, htmlToTextLine, \
isWin, intTime, \
isMac, bodyClass
from aqt.utils import saveGeom, restoreGeom, saveSplitter, restoreSplitter, \
saveHeader, restoreHeader, saveState, restoreState, getTag, \
showInfo, askUser, tooltip, openHelp, showWarning, shortcut, mungeQA, \
getOnlyText, MenuList, SubMenu, qtMenuShortcutWorkaround
from anki.lang import _
from anki.hooks import runHook, addHook, remHook, runFilter
from aqt.webview import AnkiWebView
from anki.collection import _Collection
from anki.consts import *
from anki.sound import clearAudioQueue, allSounds, play
from anki.hooks import addHook, remHook, runFilter, runHook
from anki.lang import _, ngettext
from anki.sound import allSounds, clearAudioQueue, play
from anki.utils import (bodyClass, fmtTimeSpan, htmlToTextLine, ids2str,
intTime, isMac, isWin)
from aqt import AnkiQt
from aqt.qt import *
from aqt.utils import (MenuList, SubMenu, askUser, getOnlyText, getTag,
mungeQA, openHelp, qtMenuShortcutWorkaround,
restoreGeom, restoreHeader, restoreSplitter,
restoreState, saveGeom, saveHeader, saveSplitter,
saveState, shortcut, showInfo, showWarning, tooltip)
from aqt.webview import AnkiWebView
# Data model
##########################################################################
@ -2264,4 +2261,3 @@ Are you sure you want to continue?""")):
def onHelp(self):
openHelp("browsermisc")

View file

@ -3,20 +3,20 @@
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import collections
import json
import re
from aqt.qt import *
from anki.consts import *
import aqt
from anki.sound import playFromText, clearAudioQueue
from aqt.utils import saveGeom, restoreGeom, mungeQA,\
showInfo, askUser, getOnlyText, \
showWarning, openHelp, downArrow
from anki.utils import isMac, isWin, joinFields, bodyClass
from aqt.webview import AnkiWebView
import json
from anki.consts import *
from anki.hooks import runFilter
from anki.lang import _, ngettext
from anki.sound import clearAudioQueue, playFromText
from anki.utils import bodyClass, isMac, isWin, joinFields
from aqt.qt import *
from aqt.utils import (askUser, downArrow, getOnlyText, mungeQA, openHelp,
restoreGeom, saveGeom, showInfo, showWarning)
from aqt.webview import AnkiWebView
class CardLayout(QDialog):

View file

@ -2,11 +2,11 @@
# -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from aqt.qt import *
import aqt
from aqt.utils import showInfo, showWarning
from anki.consts import *
from anki.lang import _
from aqt.qt import *
from aqt.utils import showInfo, showWarning
RADIO_NEW = 1
RADIO_REV = 2

View file

@ -1,18 +1,19 @@
# Copyright: Ankitects Pty Ltd and contributors
# -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from copy import deepcopy
from typing import Any
from aqt.qt import *
from aqt.utils import askUser, getOnlyText, openLink, showWarning, shortcut, \
openHelp
from anki.utils import ids2str, fmtTimeSpan
from anki.errors import DeckRenameError
import aqt
from anki.sound import clearAudioQueue
from anki.errors import DeckRenameError
from anki.hooks import runHook
from copy import deepcopy
from anki.lang import _, ngettext
from anki.sound import clearAudioQueue
from anki.utils import fmtTimeSpan, ids2str
from aqt.qt import *
from aqt.utils import (askUser, getOnlyText, openHelp, openLink, shortcut,
showWarning)
class DeckBrowser:
_dueTree: Any

View file

@ -2,10 +2,11 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from aqt.qt import *
from anki.hooks import addHook, remHook
from aqt.utils import shortcut
from anki.lang import _
from aqt.qt import *
from aqt.utils import shortcut
class DeckChooser(QHBoxLayout):

View file

@ -3,12 +3,13 @@
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from operator import itemgetter
from anki.consts import NEW_CARDS_RANDOM
from aqt.qt import *
import aqt
from aqt.utils import showInfo, showWarning, openHelp, getOnlyText, askUser, \
tooltip, saveGeom, restoreGeom
from anki.consts import NEW_CARDS_RANDOM
from anki.lang import _, ngettext
from aqt.qt import *
from aqt.utils import (askUser, getOnlyText, openHelp, restoreGeom, saveGeom,
showInfo, showWarning, tooltip)
class DeckConf(QDialog):
def __init__(self, mw, deck):

View file

@ -2,12 +2,15 @@
# -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import time, re
from aqt.qt import *
from anki.sync import AnkiRequestsClient
from anki.hooks import addHook, remHook
import re
import time
import aqt
from anki.hooks import addHook, remHook
from anki.lang import _
from anki.sync import AnkiRequestsClient
from aqt.qt import *
def download(mw, code):
"Download addon from AnkiWeb. Caller must start & stop progress diag."

View file

@ -2,10 +2,11 @@
# -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from aqt.qt import *
import aqt
from aqt.utils import showWarning, openHelp, askUser, saveGeom, restoreGeom
from anki.lang import _
from aqt.qt import *
from aqt.utils import askUser, openHelp, restoreGeom, saveGeom, showWarning
class DeckConf(QDialog):
def __init__(self, mw, first=False, search="", deck=None):

View file

@ -2,13 +2,12 @@
# -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from aqt.qt import *
from aqt.utils import tooltip
import aqt.editor
from aqt.utils import saveGeom, restoreGeom
from anki.hooks import addHook, remHook
from anki.utils import isMac
from anki.lang import _
from aqt.qt import *
from aqt.utils import restoreGeom, saveGeom, tooltip
class EditCurrent(QDialog):

View file

@ -1,30 +1,32 @@
# -*- coding: utf-8 -*-
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import re
import urllib.request, urllib.parse, urllib.error
import warnings
import html
import mimetypes
import base64
import unicodedata
import html
import json
import mimetypes
import re
import unicodedata
import urllib.error
import urllib.parse
import urllib.request
import warnings
import requests
from bs4 import BeautifulSoup
import anki.sound
import aqt
from anki.hooks import addHook, runFilter, runHook
from anki.lang import _
from anki.sync import AnkiRequestsClient
from anki.utils import checksum, isWin, namedtmp, stripHTMLMedia
from aqt import AnkiQt
from aqt.qt import *
from anki.utils import isWin, namedtmp, stripHTMLMedia, \
checksum
import anki.sound
from anki.hooks import runHook, runFilter, addHook
from aqt.sound import getAudio
from aqt.utils import (getFile, openHelp, qtMenuShortcutWorkaround, shortcut,
showInfo, showWarning, tooltip)
from aqt.webview import AnkiWebView
from aqt.utils import shortcut, showInfo, showWarning, getFile, \
openHelp, tooltip, qtMenuShortcutWorkaround
import aqt
from bs4 import BeautifulSoup
import requests
from anki.sync import AnkiRequestsClient
pics = ("jpg", "jpeg", "png", "tif", "tiff", "gif", "svg", "webp")
audio = ("wav", "mp3", "ogg", "flac", "mp4", "swf", "mov", "mpeg", "mkv", "m4a", "3gp", "spx", "oga", "webm")

View file

@ -1,14 +1,15 @@
# Copyright: Ankitects Pty Ltd and contributors
# -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import sys, traceback
import html
import re
import sys
import traceback
from anki.lang import _
from aqt import mw
from aqt.qt import *
from aqt.utils import showText, showWarning, supportText
from aqt import mw
if not os.environ.get("DEBUG"):
def excepthook(etype,val,tb):

View file

@ -3,15 +3,16 @@
import os
import re
import time
from aqt.qt import *
import aqt
from aqt.utils import getSaveFile, tooltip, showWarning, \
checkInvalidFilename, showInfo
import aqt
from anki.exporting import exporters
from anki.hooks import addHook, remHook
from anki.lang import ngettext, _
import time
from anki.lang import _, ngettext
from aqt.qt import *
from aqt.utils import (checkInvalidFilename, getSaveFile, showInfo,
showWarning, tooltip)
class ExportDialog(QDialog):

View file

@ -1,11 +1,12 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from aqt.qt import *
from anki.consts import *
import aqt
from aqt.utils import showWarning, openHelp, getOnlyText, askUser
from anki.consts import *
from anki.lang import _, ngettext
from aqt.qt import *
from aqt.utils import askUser, getOnlyText, openHelp, showWarning
class FieldDialog(QDialog):

View file

@ -2,24 +2,25 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import json
import os
import re
import traceback
import zipfile
import json
import unicodedata
import shutil
import traceback
import unicodedata
import zipfile
from aqt import AnkiQt
from aqt.qt import *
import anki.importing as importing
from aqt.utils import getOnlyText, getFile, showText, showWarning, openHelp, \
askUser, tooltip, showInfo
from anki.hooks import addHook, remHook
import aqt.deckchooser
import aqt.forms
import aqt.modelchooser
import aqt.deckchooser
from anki.lang import ngettext, _
from anki.hooks import addHook, remHook
from anki.lang import _, ngettext
from aqt import AnkiQt
from aqt.qt import *
from aqt.utils import (askUser, getFile, getOnlyText, openHelp, showInfo,
showText, showWarning, tooltip)
class ChangeMap(QDialog):
def __init__(self, mw: AnkiQt, model, current):

View file

@ -2,39 +2,39 @@
# -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import faulthandler
import gc
import platform
import re
import signal
import zipfile
import gc
import time
import faulthandler
import platform
import zipfile
from argparse import Namespace
from threading import Thread
from typing import Sequence
from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple
from send2trash import send2trash
import anki.mpv
import anki.sound
import aqt
import aqt.mediasrv
import aqt.progress
import aqt.stats
import aqt.toolbar
import aqt.webview
from anki.collection import _Collection
from anki.hooks import addHook, runFilter, runHook
from anki.lang import _, ngettext
from anki.storage import Collection
from anki.utils import devMode, ids2str, intTime, isMac, isWin, splitFields
from aqt.profiles import ProfileManager as ProfileManagerType
from aqt.qt import *
from anki.storage import Collection
from anki.utils import isWin, isMac, intTime, splitFields, ids2str, \
devMode
from anki.hooks import runHook, addHook, runFilter
import aqt
import aqt.progress
import aqt.webview
import aqt.toolbar
import aqt.stats
import aqt.mediasrv
import anki.sound
import anki.mpv
from aqt.utils import saveGeom, restoreGeom, showInfo, showWarning, \
restoreState, getOnlyText, askUser, showText, tooltip, \
openHelp, openLink, checkInvalidFilename, getFile
from aqt.qt import sip
from anki.lang import _, ngettext
from aqt.utils import (askUser, checkInvalidFilename, getFile, getOnlyText,
openHelp, openLink, restoreGeom, restoreState, saveGeom,
showInfo, showText, showWarning, tooltip)
from argparse import Namespace
from typing import Any, Callable, Dict, List, Optional, Tuple
class AnkiQt(QMainWindow):
col: _Collection

View file

@ -1,17 +1,18 @@
# Copyright: Ankitects Pty Ltd and contributors
# -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import http.server
import re
import socket
import socketserver
import threading
from http import HTTPStatus
from typing import Optional
from anki.collection import _Collection
from aqt.qt import *
from http import HTTPStatus
import http.server
import socketserver
import socket
from anki.utils import devMode
import threading
import re
from aqt.qt import *
# locate web folder in source/binary distribution
def _getExportFolder():

View file

@ -2,10 +2,11 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from aqt.qt import *
from anki.hooks import addHook, remHook, runHook
from aqt.utils import shortcut
from anki.lang import _
from aqt.qt import *
from aqt.utils import shortcut
class ModelChooser(QHBoxLayout):

View file

@ -1,14 +1,16 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from aqt import AnkiQt
from aqt.qt import *
import collections
from operator import itemgetter
from aqt.utils import showInfo, askUser, getText, maybeHideClose, openHelp
import aqt.clayout
from anki import stdmodels
from aqt.utils import saveGeom, restoreGeom
import collections
from anki.lang import _, ngettext
from aqt import AnkiQt
from aqt.qt import *
from aqt.utils import (askUser, getText, maybeHideClose, openHelp, restoreGeom,
saveGeom, showInfo)
class Models(QDialog):
def __init__(self, mw: AnkiQt, parent=None, fromMain=False):

View file

@ -2,10 +2,11 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from aqt.utils import openLink, shortcut, tooltip, askUserDialog
import aqt
from anki.sound import clearAudioQueue
from anki.lang import _
from anki.sound import clearAudioQueue
from aqt.utils import askUserDialog, openLink, shortcut, tooltip
class Overview:
"Deck overview."

View file

@ -6,8 +6,19 @@
# pylint: disable=import-error,unused-import
# included implicitly in the past, and relied upon by some add-ons
import cgi
import decimal
# useful for add-ons
import logging
import logging.config
import logging.handlers
# required by requests library
import queue
import typing
import uuid
import PyQt5.QtSvg
from anki.utils import isWin
@ -16,15 +27,3 @@ if isWin:
import pythoncom
import win32com
import pywintypes
# included implicitly in the past, and relied upon by some add-ons
import cgi
import uuid
import decimal
import PyQt5.QtSvg
# useful for add-ons
import logging
import logging.handlers
import logging.config
import typing

View file

@ -2,14 +2,16 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import datetime, time
import datetime
import time
from aqt import AnkiQt
from aqt.qt import *
import anki.lang
from aqt.utils import openHelp, showInfo, askUser
import aqt
from anki.lang import _
from aqt import AnkiQt
from aqt.qt import *
from aqt.utils import askUser, openHelp, showInfo
class Preferences(QDialog):

View file

@ -6,24 +6,24 @@
# - Saves in pickles rather than json to easily store Qt window state.
# - Saves in sqlite rather than a flat file so the config can't be corrupted
import random
import pickle
import shutil
import io
import locale
import pickle
import random
import shutil
from typing import Any, Dict
from typing import Dict, Any
from aqt.qt import *
from anki.db import DB
from anki.utils import isMac, isWin, intTime
import anki.lang
from aqt.utils import showWarning
from aqt import appHelpSite
import aqt.forms
from send2trash import send2trash
import anki.lang
import anki.sound
import aqt.forms
from anki.db import DB
from anki.lang import _
from anki.utils import intTime, isMac, isWin
from aqt import appHelpSite
from aqt.qt import *
from aqt.utils import showWarning
metaConf = dict(
ver=0,

View file

@ -3,9 +3,10 @@
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import time
from aqt.qt import *
import aqt.forms
from anki.lang import _
from aqt.qt import *
# fixme: if mw->subwindow opens a progress dialog with mw as the parent, mw
# gets raised on finish on compiz. perhaps we should be using the progress

View file

@ -5,32 +5,34 @@
# pylint: disable=unused-import
import os
import sys
import traceback
from PyQt5.Qt import * # type: ignore
from PyQt5.QtCore import *
from PyQt5.QtCore import \
pyqtRemoveInputHook # pylint: disable=no-name-in-module
from PyQt5.QtGui import * # type: ignore
from PyQt5.QtWebEngineWidgets import * # type: ignore
from PyQt5.QtWidgets import *
from anki.utils import isMac, isWin
# fix buggy ubuntu12.04 display of language selector
os.environ["LIBOVERLAY_SCROLLBAR"] = "0"
from anki.utils import isWin, isMac
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5.QtGui import * # type: ignore
from PyQt5.Qt import * # type: ignore
# trigger explicit message in case of missing libraries
# instead of silently failing to import
from PyQt5.QtWebEngineWidgets import * # type: ignore
try:
from PyQt5 import sip
except ImportError:
import sip # type: ignore
from PyQt5.QtCore import pyqtRemoveInputHook # pylint: disable=no-name-in-module
def debug():
from pdb import set_trace
pyqtRemoveInputHook()
set_trace()
import sys, traceback
if os.environ.get("DEBUG"):
def info(type, value, tb):

View file

@ -3,25 +3,24 @@
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import difflib
import re
import html
import unicodedata as ucd
import html.parser
import json
import re
import unicodedata as ucd
from typing import List
import aqt
from anki.cards import Card
from anki.hooks import addHook, runFilter, runHook
from anki.lang import _, ngettext
from anki.sound import clearAudioQueue, play, playFromText
from anki.utils import bodyClass, stripHTML
from aqt import AnkiQt
from aqt.qt import *
from anki.utils import stripHTML, bodyClass
from anki.hooks import addHook, runHook, runFilter
from anki.sound import playFromText, clearAudioQueue, play
from aqt.utils import mungeQA, tooltip, askUserDialog, \
downArrow, qtMenuShortcutWorkaround
from aqt.sound import getAudio
import aqt
from aqt.utils import (askUserDialog, downArrow, mungeQA,
qtMenuShortcutWorkaround, tooltip)
class Reviewer:

View file

@ -1,12 +1,12 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from aqt.qt import *
import time
from anki.sound import Recorder
from aqt.utils import saveGeom, restoreGeom, showWarning
from anki.lang import _
from anki.sound import Recorder
from aqt.qt import *
from aqt.utils import restoreGeom, saveGeom, showWarning
if not Recorder:
print("pyaudio not installed")

View file

@ -2,12 +2,13 @@
# -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from aqt.qt import *
import os, time
from aqt.utils import saveGeom, restoreGeom, maybeHideClose, addCloseShortcut, \
tooltip, getSaveFile
import time
import aqt
from anki.lang import _
from aqt.qt import *
from aqt.utils import (addCloseShortcut, getSaveFile, maybeHideClose,
restoreGeom, saveGeom, tooltip)
# Deck Stats
######################################################################

View file

@ -2,11 +2,13 @@
# -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from aqt.qt import *
import aqt
from aqt.utils import showInfo, openHelp, getOnlyText, shortcut, restoreGeom, saveGeom
from anki.hooks import addHook, remHook
from anki.lang import _
from aqt.qt import *
from aqt.utils import (getOnlyText, openHelp, restoreGeom, saveGeom, shortcut,
showInfo)
class StudyDeck(QDialog):
def __init__(self, mw, names=None, accept=None, title=None,

View file

@ -1,16 +1,16 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import time
import gc
import time
from aqt.qt import *
from anki.storage import Collection
from anki.sync import Syncer, RemoteServer, FullSyncer, MediaSyncer, \
RemoteMediaServer
from anki.hooks import addHook, remHook
from aqt.utils import tooltip, askUserDialog, showWarning, showText, showInfo
from anki.lang import _
from anki.storage import Collection
from anki.sync import (FullSyncer, MediaSyncer, RemoteMediaServer,
RemoteServer, Syncer)
from aqt.qt import *
from aqt.utils import askUserDialog, showInfo, showText, showWarning, tooltip
# Sync manager
######################################################################
@ -461,5 +461,3 @@ class SyncThread(QThread):
def fireEvent(self, cmd, arg=""):
self._event.emit(cmd, arg)

View file

@ -1,9 +1,11 @@
# Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from aqt.qt import *
import re
from aqt.qt import *
class TagEdit(QLineEdit):
lostFocus = pyqtSignal()
@ -112,4 +114,4 @@ class TagCompleter(QCompleter):
self.tags.remove("")
except ValueError:
pass
return " ".join(self.tags) + " "
return " ".join(self.tags) + " "

View file

@ -3,7 +3,8 @@
import aqt
from aqt.qt import *
from aqt.utils import saveGeom, restoreGeom
from aqt.utils import restoreGeom, saveGeom
class TagLimit(QDialog):

View file

@ -2,8 +2,9 @@
# -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from aqt.qt import *
from anki.lang import _
from aqt.qt import *
class Toolbar:

View file

@ -5,11 +5,12 @@ import time
import requests
from aqt.qt import *
import aqt
from aqt.utils import openLink, showText
from anki.utils import platDesc, versionWithBuild
from anki.lang import _
from anki.utils import platDesc, versionWithBuild
from aqt.qt import *
from aqt.utils import openLink, showText
class LatestVersionFinder(QThread):

View file

@ -1,15 +1,19 @@
# Copyright: Ankitects Pty Ltd and contributors
# -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import os
import re
import subprocess
import sys
from typing import Optional
from aqt.qt import *
import re, os, sys, subprocess
import aqt
from anki.sound import stripSounds
from anki.utils import isWin, isMac, invalidFilename, noBundledLibs, \
versionWithBuild
from anki.lang import _
from anki.sound import stripSounds
from anki.utils import (invalidFilename, isMac, isWin, noBundledLibs,
versionWithBuild)
from aqt.qt import *
def openHelp(section):
link = aqt.appHelpSite

View file

@ -2,13 +2,14 @@
# -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import json
import sys
import math
import sys
from anki.hooks import runHook
from anki.lang import _
from anki.utils import isLin, isMac, isWin
from aqt.qt import *
from aqt.utils import openLink
from anki.utils import isMac, isWin, isLin
from anki.lang import _
# Page for debug messages
##########################################################################

View file

@ -7,7 +7,7 @@ Depends only on ctypes, and retrieves path locations in Unicode
"""
import ctypes
from ctypes import windll, wintypes # type: ignore
from ctypes import windll, wintypes # type: ignore
__license__ = "MIT"
__version__ = "0.2"

View file

@ -3,3 +3,4 @@ mypy==0.750
pylint
mock
pytype
isort