7ac1fa17e6
Will allow importing the Protobuf without pulling in the rest of the library. This is not a full PEP420 namespace, and the wheel still bundles everything - it just makes things easier in a Bazel workspace. I originally tried with PEP420, but it required more invasive changes, and I ran into issues with mypy.
82 lines
1.8 KiB
Python
82 lines
1.8 KiB
Python
# Copyright: Ankitects Pty Ltd and contributors
|
|
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
|
|
|
|
import os
|
|
import shutil
|
|
import tempfile
|
|
import time
|
|
|
|
from anki.collection import Collection as aopen
|
|
|
|
# Between 2-4AM, shift the time back so test assumptions hold.
|
|
lt = time.localtime()
|
|
if lt.tm_hour >= 2 and lt.tm_hour < 4:
|
|
orig_time = time.time
|
|
|
|
def adjusted_time():
|
|
return orig_time() - 60 * 60 * 2
|
|
|
|
time.time = adjusted_time
|
|
else:
|
|
orig_time = None
|
|
|
|
|
|
def assertException(exception, func):
|
|
found = False
|
|
try:
|
|
func()
|
|
except exception:
|
|
found = True
|
|
assert found
|
|
|
|
|
|
# Creating new decks is expensive. Just do it once, and then spin off
|
|
# copies from the master.
|
|
def getEmptyCol():
|
|
if len(getEmptyCol.master) == 0:
|
|
(fd, nam) = tempfile.mkstemp(suffix=".anki2")
|
|
os.close(fd)
|
|
os.unlink(nam)
|
|
col = aopen(nam)
|
|
col.close(downgrade=False)
|
|
getEmptyCol.master = nam
|
|
(fd, nam) = tempfile.mkstemp(suffix=".anki2")
|
|
shutil.copy(getEmptyCol.master, nam)
|
|
col = aopen(nam)
|
|
return col
|
|
|
|
|
|
getEmptyCol.master = ""
|
|
|
|
# Fallback for when the DB needs options passed in.
|
|
def getEmptyDeckWith(**kwargs):
|
|
(fd, nam) = tempfile.mkstemp(suffix=".anki2")
|
|
os.close(fd)
|
|
os.unlink(nam)
|
|
return aopen(nam, **kwargs)
|
|
|
|
|
|
def getUpgradeDeckPath(name="anki12.anki"):
|
|
src = os.path.join(testDir, "support", name)
|
|
(fd, dst) = tempfile.mkstemp(suffix=".anki2")
|
|
shutil.copy(src, dst)
|
|
return dst
|
|
|
|
|
|
testDir = os.path.dirname(__file__)
|
|
|
|
|
|
def errorsAfterMidnight(func):
|
|
def wrapper():
|
|
lt = time.localtime()
|
|
if lt.tm_hour < 4:
|
|
print("test disabled around cutoff", func)
|
|
else:
|
|
func()
|
|
|
|
return wrapper
|
|
|
|
|
|
def isNearCutoff():
|
|
return orig_time is not None
|