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

View file

@ -4,6 +4,8 @@
import sys import sys
from anki.storage import Collection
if sys.version_info[0] < 3 or sys.version_info[1] < 5: if sys.version_info[0] < 3 or sys.version_info[1] < 5:
raise Exception("Anki requires Python 3.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.") raise Exception("Anki requires a UTF-8 locale.")
version="2.1.17" # build scripts grep this line, so preserve formatting version="2.1.17" # build scripts grep this line, so preserve formatting
from anki.storage import Collection
__all__ = ["Collection"] __all__ = ["Collection"]

View file

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

View file

@ -2,38 +2,40 @@
# Copyright: Ankitects Pty Ltd and contributors # Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # 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 copy
import traceback import datetime
import json 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.cards
import anki.find
import anki.latex # sets up hook
import anki.notes import anki.notes
import anki.template import anki.template
import anki.find
from typing import Any, List, Optional, Tuple, Union, Dict
from anki.cards import Card from anki.cards import Card
from anki.consts import *
from anki.db import DB 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.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 = { defaultConf = {
# review options # review options
'activeDecks': [1], 'activeDecks': [1],
@ -59,8 +61,6 @@ def timezoneOffset() -> int:
else: else:
return time.timezone//60 return time.timezone//60
from anki.sched import Scheduler as V1Scheduler
from anki.schedv2 import Scheduler as V2Scheduler
# this is initialized by storage.Collection # this is initialized by storage.Collection
class _Collection: class _Collection:
db: Optional[DB] db: Optional[DB]

View file

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

View file

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

View file

@ -2,16 +2,17 @@
# Copyright: Ankitects Pty Ltd and contributors # Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import copy, operator import copy
import unicodedata
import json 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.consts import *
from anki.lang import _
from anki.errors import DeckRenameError 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: # fixmes:
# - make sure users can't set grad interval < 1 # - make sure users can't set grad interval < 1

View file

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

View file

@ -5,12 +5,12 @@
import re import re
import sre_constants import sre_constants
import unicodedata 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.consts import *
from anki.hooks import * from anki.hooks import *
from typing import Any, List, Optional, Tuple, Set from anki.utils import (fieldChecksum, ids2str, intTime, joinFields,
splitFields, stripHTMLMedia)
# Find # 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(). automatically but can be called with _old().
""" """
from typing import Any, Callable, Dict, List
import decorator import decorator
from typing import List, Any, Callable, Dict
# Hooks # Hooks
############################################################################## ##############################################################################

View file

@ -2,12 +2,12 @@
# Copyright: Ankitects Pty Ltd and contributors # Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # 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.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.mnemo import MnemosyneImporter
from anki.importing.pauker import PaukerImporter from anki.importing.pauker import PaukerImporter
from anki.importing.supermemo_xml import SupermemoXmlImporter
from anki.lang import _ from anki.lang import _
Importers = ( Importers = (

View file

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

View file

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

View file

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

View file

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

View file

@ -2,11 +2,14 @@
# Copyright: Ankitects Pty Ltd and contributors # Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # 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.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.stdmodels import addBasicModel, addClozeModel
from anki.lang import ngettext, _
class MnemosyneImporter(NoteImporter): class MnemosyneImporter(NoteImporter):

View file

@ -2,18 +2,16 @@
# Copyright: Ankitects Pty Ltd and contributors # Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import html import html
import unicodedata 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.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 # Stores a list of fields, tags and deck
###################################################################### ######################################################################

View file

@ -2,9 +2,14 @@
# Copyright: Andreas Klauer <Andreas.Klauer@metamorpher.de> # Copyright: Andreas Klauer <Andreas.Klauer@metamorpher.de>
# License: BSD-3 # 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 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 from anki.stdmodels import addForwardReverse
ONE_DAY = 60*60*24 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 # License: GNU GPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
# pytype: disable=attribute-error # pytype: disable=attribute-error
import re
import sys import sys
import time
from anki.stdmodels import addBasicModel import unicodedata
from anki.importing.noteimp import NoteImporter, ForeignNote, ForeignCard
from anki.lang import _
from anki.lang import ngettext
from xml.dom import minidom
from string import capwords 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): class SmartDict(dict):
""" """

View file

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

View file

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

View file

@ -2,24 +2,25 @@
# Copyright: Ankitects Pty Ltd and contributors # Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import io import io
import re
import traceback
import urllib.request, urllib.parse, urllib.error
import unicodedata
import sys
import zipfile
import pathlib
import json import json
import os 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.consts import *
from anki.latex import mungeQA from anki.db import DB, DBError
from anki.lang import _ 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: class MediaManager:

View file

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

View file

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

View file

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

View file

@ -2,17 +2,17 @@
# Copyright: Ankitects Pty Ltd and contributors # Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import time
import random
import itertools import itertools
from operator import itemgetter import random
import time
from heapq import * 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.consts import *
from anki.hooks import runHook 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 # 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 # revlog types: 0=lrn, 1=rev, 2=relrn, 3=cram

View file

@ -2,17 +2,20 @@
# Copyright: Ankitects Pty Ltd and contributors # Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # 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 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.cards import Card
from anki.lang import _
from anki.consts import * from anki.consts import *
from anki.hooks import runHook 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 # card types: 0=new, 1=lrn, 2=rev, 3=relrn
# queue types: 0=new, 1=(re)lrn, 2=rev, 3=day (re)lrn, # 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) # positive revlog intervals are in days (rev), negative in seconds (lrn)
# odue/odid store original due/did when cards moved to filtered deck # 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: class Scheduler:

View file

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

View file

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

View file

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

View file

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

View file

@ -2,23 +2,25 @@
# Copyright: Ankitects Pty Ltd and contributors # Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import io
import gzip import gzip
import random import io
import requests
import json import json
import os import os
import random
import sqlite3 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 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 # syncing vars
HTTP_TIMEOUT = 90 HTTP_TIMEOUT = 90
HTTP_BUF_SIZE = 64*1024 HTTP_BUF_SIZE = 64*1024

View file

@ -11,10 +11,11 @@ This module manages the tag cache and tags for notes.
""" """
import json import json
from anki.utils import intTime, ids2str
from anki.hooks import runHook
import re 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: class TagManager:

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -6,24 +6,25 @@ import json
import re import re
import zipfile import zipfile
from collections import defaultdict from collections import defaultdict
from typing import Callable, Dict, Any from typing import Any, Callable, Dict
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 zipfile import ZipFile from zipfile import ZipFile
import aqt.forms
import jsonschema
import markdown
from jsonschema.exceptions import ValidationError
from send2trash import send2trash
import aqt import aqt
from aqt.downloader import download import aqt.forms
from anki.lang import _, ngettext from anki.lang import _, ngettext
from anki.utils import intTime
from anki.sync import AnkiRequestsClient 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: class AddonManager:

View file

@ -2,35 +2,32 @@
# Copyright: Ankitects Pty Ltd and contributors # Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import sre_constants
import html import html
import time import json
import re import re
import sre_constants
import time
import unicodedata import unicodedata
from operator import itemgetter from operator import itemgetter
from typing import Callable, List, Optional 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 anki
import aqt.forms import aqt.forms
from anki.utils import fmtTimeSpan, ids2str, htmlToTextLine, \ from anki.collection import _Collection
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.consts import * 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 # Data model
########################################################################## ##########################################################################
@ -2264,4 +2261,3 @@ Are you sure you want to continue?""")):
def onHelp(self): def onHelp(self):
openHelp("browsermisc") openHelp("browsermisc")

View file

@ -3,20 +3,20 @@
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import collections import collections
import json
import re import re
from aqt.qt import *
from anki.consts import *
import aqt import aqt
from anki.sound import playFromText, clearAudioQueue from anki.consts import *
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.hooks import runFilter from anki.hooks import runFilter
from anki.lang import _, ngettext 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): class CardLayout(QDialog):

View file

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

View file

@ -1,18 +1,19 @@
# Copyright: Ankitects Pty Ltd and contributors # Copyright: Ankitects Pty Ltd and contributors
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
from copy import deepcopy
from typing import Any 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 import aqt
from anki.sound import clearAudioQueue from anki.errors import DeckRenameError
from anki.hooks import runHook from anki.hooks import runHook
from copy import deepcopy
from anki.lang import _, ngettext 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: class DeckBrowser:
_dueTree: Any _dueTree: Any

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,30 +1,32 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Copyright: Ankitects Pty Ltd and contributors # Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # 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 base64
import unicodedata import html
import json 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.lang import _
from anki.sync import AnkiRequestsClient
from anki.utils import checksum, isWin, namedtmp, stripHTMLMedia
from aqt import AnkiQt from aqt import AnkiQt
from aqt.qt import * 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.sound import getAudio
from aqt.utils import (getFile, openHelp, qtMenuShortcutWorkaround, shortcut,
showInfo, showWarning, tooltip)
from aqt.webview import AnkiWebView 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") pics = ("jpg", "jpeg", "png", "tif", "tiff", "gif", "svg", "webp")
audio = ("wav", "mp3", "ogg", "flac", "mp4", "swf", "mov", "mpeg", "mkv", "m4a", "3gp", "spx", "oga", "webm") 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 # Copyright: Ankitects Pty Ltd and contributors
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import sys, traceback
import html import html
import re import re
import sys
import traceback
from anki.lang import _ from anki.lang import _
from aqt import mw
from aqt.qt import * from aqt.qt import *
from aqt.utils import showText, showWarning, supportText from aqt.utils import showText, showWarning, supportText
from aqt import mw
if not os.environ.get("DEBUG"): if not os.environ.get("DEBUG"):
def excepthook(etype,val,tb): def excepthook(etype,val,tb):

View file

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

View file

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

View file

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

View file

@ -2,39 +2,39 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import faulthandler
import gc
import platform
import re import re
import signal import signal
import zipfile
import gc
import time import time
import faulthandler import zipfile
import platform from argparse import Namespace
from threading import Thread from threading import Thread
from typing import Sequence from typing import Any, Callable, Dict, List, Optional, Sequence, Tuple
from send2trash import send2trash 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.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.profiles import ProfileManager as ProfileManagerType
from aqt.qt import * 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 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): class AnkiQt(QMainWindow):
col: _Collection col: _Collection

View file

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

View file

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

View file

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

View file

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

View file

@ -6,8 +6,19 @@
# pylint: disable=import-error,unused-import # 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 # required by requests library
import queue import queue
import typing
import uuid
import PyQt5.QtSvg
from anki.utils import isWin from anki.utils import isWin
@ -16,15 +27,3 @@ if isWin:
import pythoncom import pythoncom
import win32com import win32com
import pywintypes 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 # Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # 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 import anki.lang
from aqt.utils import openHelp, showInfo, askUser
import aqt import aqt
from anki.lang import _ from anki.lang import _
from aqt import AnkiQt
from aqt.qt import *
from aqt.utils import askUser, openHelp, showInfo
class Preferences(QDialog): class Preferences(QDialog):

View file

@ -6,24 +6,24 @@
# - Saves in pickles rather than json to easily store Qt window state. # - 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 # - Saves in sqlite rather than a flat file so the config can't be corrupted
import random
import pickle
import shutil
import io import io
import locale 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 from send2trash import send2trash
import anki.lang
import anki.sound import anki.sound
import aqt.forms
from anki.db import DB
from anki.lang import _ 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( metaConf = dict(
ver=0, ver=0,

View file

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

View file

@ -5,32 +5,34 @@
# pylint: disable=unused-import # pylint: disable=unused-import
import os 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 # fix buggy ubuntu12.04 display of language selector
os.environ["LIBOVERLAY_SCROLLBAR"] = "0" 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: try:
from PyQt5 import sip from PyQt5 import sip
except ImportError: except ImportError:
import sip # type: ignore import sip # type: ignore
from PyQt5.QtCore import pyqtRemoveInputHook # pylint: disable=no-name-in-module
def debug(): def debug():
from pdb import set_trace from pdb import set_trace
pyqtRemoveInputHook() pyqtRemoveInputHook()
set_trace() set_trace()
import sys, traceback
if os.environ.get("DEBUG"): if os.environ.get("DEBUG"):
def info(type, value, tb): 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 # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import difflib import difflib
import re
import html import html
import unicodedata as ucd
import html.parser import html.parser
import json import json
import re
import unicodedata as ucd
from typing import List from typing import List
import aqt
from anki.cards import Card from anki.cards import Card
from anki.hooks import addHook, runFilter, runHook
from anki.lang import _, ngettext from anki.lang import _, ngettext
from anki.sound import clearAudioQueue, play, playFromText
from anki.utils import bodyClass, stripHTML
from aqt import AnkiQt from aqt import AnkiQt
from aqt.qt import * 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 from aqt.sound import getAudio
import aqt from aqt.utils import (askUserDialog, downArrow, mungeQA,
qtMenuShortcutWorkaround, tooltip)
class Reviewer: class Reviewer:

View file

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

View file

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

View file

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

View file

@ -1,16 +1,16 @@
# Copyright: Ankitects Pty Ltd and contributors # Copyright: Ankitects Pty Ltd and contributors
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import time
import gc 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 anki.hooks import addHook, remHook
from aqt.utils import tooltip, askUserDialog, showWarning, showText, showInfo
from anki.lang import _ 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 # Sync manager
###################################################################### ######################################################################
@ -461,5 +461,3 @@ class SyncThread(QThread):
def fireEvent(self, cmd, arg=""): def fireEvent(self, cmd, arg=""):
self._event.emit(cmd, arg) self._event.emit(cmd, arg)

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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