# coding: utf-8
import tempfile, os, time
from anki import Deck
from anki.utils import checksum
from shared import getEmptyDeck, testDir
# uniqueness check
def test_unique():
d = getEmptyDeck()
dir = tempfile.mkdtemp(prefix="anki")
# new file
n = "foo.jpg"
new = os.path.basename(d.media.uniquePath(dir, n))
assert new == n
# duplicate file
open(os.path.join(dir, n), "w").write("hello")
n = "foo.jpg"
new = os.path.basename(d.media.uniquePath(dir, n))
assert new == "foo (1).jpg"
# another duplicate
open(os.path.join(dir, "foo (1).jpg"), "w").write("hello")
n = "foo.jpg"
new = os.path.basename(d.media.uniquePath(dir, n))
assert new == "foo (2).jpg"
# copying files to media folder
def test_copy():
d = getEmptyDeck()
dir = tempfile.mkdtemp(prefix="anki")
path = os.path.join(dir, "foo.jpg")
open(path, "w").write("hello")
# new file
assert d.media.addFile(path) == "foo.jpg"
# dupe md5
path = os.path.join(dir, "bar.jpg")
open(path, "w").write("hello")
assert d.media.addFile(path) == "foo.jpg"
# media db
def test_db():
deck = getEmptyDeck()
dir = tempfile.mkdtemp(prefix="anki")
path = os.path.join(dir, "foo.jpg")
open(path, "w").write("hello")
# add a new fact that references it twice
f = deck.newFact()
f['Front'] = u"
"
f['Back'] = u"back [sound:foo.jpg]"
deck.addFact(f)
# 1 entry in the media db, and no checksum
assert deck.db.scalar("select count() from media") == 1
assert not deck.db.scalar("select group_concat(csum, '') from media")
# copy to media folder
path = deck.media.addFile(path)
# md5 should be set now
assert deck.db.scalar("select count() from media") == 1
assert deck.db.scalar("select group_concat(csum, '') from media")
# detect file modifications
oldsum = deck.db.scalar("select csum from media")
open(path, "w").write("world")
deck.media.rebuildMediaDir()
newsum = deck.db.scalar("select csum from media")
assert newsum and newsum != oldsum
# delete underlying file and check db
os.unlink(path)
deck.media.rebuildMediaDir()
# md5 should be gone again
assert deck.db.scalar("select count() from media") == 1
assert deck.db.scalar("select not csum from media")
# media db should pick up media defined via templates & bulk update
f['Back'] = u"bar.jpg"
f.flush()
# modify template & regenerate
assert deck.db.scalar("select count() from media") == 1
m = deck.currentModel()
m.templates[0].afmt=u'
'
m.flush()
deck.renderQA(type="all")
assert deck.db.scalar("select count() from media") == 2
def test_deckIntegration():
deck = getEmptyDeck()
# create a media dir
deck.media.mediaDir(create=True)
# put a file into it
file = unicode(os.path.join(testDir, "deck/fake.png"))
deck.media.addFile(file)
print "todo: check media copied on rename"