From 9765fdae73cd1d73f77b00fe284b813754755d6f Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sun, 4 Jan 2009 07:40:05 +0900 Subject: [PATCH] support media for memory backed files --- anki/deck.py | 29 +++++++++++++++++------------ tests/deck/fake.png | 1 + tests/test_deck.py | 19 +++++++++++++++++++ 3 files changed, 37 insertions(+), 12 deletions(-) create mode 100644 tests/deck/fake.png diff --git a/anki/deck.py b/anki/deck.py index 051c82f0e..889115666 100644 --- a/anki/deck.py +++ b/anki/deck.py @@ -113,6 +113,7 @@ class Deck(object): self.s = None def _initVars(self): + self.tmpMediaDir = None self.lastTags = u"" self.lastLoaded = time.time() self.undoEnabled = False @@ -1360,17 +1361,22 @@ where id = :id""", pending) def mediaDir(self, create=False): "Return the media directory if exists. None if couldn't create." - if not self.path: - return None - dir = re.sub("(?i)\.(anki)$", ".media", self.path) - if not os.path.exists(dir) and create: - try: - os.mkdir(dir) - # change to the current dir - os.chdir(dir) - except OSError: - # permission denied - return None + if self.path: + # file-backed + dir = re.sub("(?i)\.(anki)$", ".media", self.path) + if not os.path.exists(dir) and create: + try: + os.mkdir(dir) + # change to the current dir + os.chdir(dir) + except OSError: + # permission denied + return None + else: + # memory-backed; need temp store + if not self.tmpMediaDir and create: + self.tmpMediaDir = tempfile.mkdtemp() + dir = self.tmpMediaDir if not os.path.exists(dir): return None return dir @@ -2140,7 +2146,6 @@ where interval < 1""") deck.delay2 = 0.0 deck.version = 15 if deck.version < 16: - #DeckStorage._addViews(deck) deck.version = 16 if deck.version < 17: deck.s.statement("drop view if exists acqCards") diff --git a/tests/deck/fake.png b/tests/deck/fake.png new file mode 100644 index 000000000..8baef1b4a --- /dev/null +++ b/tests/deck/fake.png @@ -0,0 +1 @@ +abc diff --git a/tests/test_deck.py b/tests/test_deck.py index 22bd6b368..acdacdf84 100644 --- a/tests/test_deck.py +++ b/tests/test_deck.py @@ -12,6 +12,8 @@ from anki.stdmodels import JapaneseModel, BasicModel newPath = None newModified = None +testDir = os.path.dirname(__file__) + ## opening/closing def test_new(): @@ -131,3 +133,20 @@ def test_modelAddDelete(): deck.deleteModel(deck.currentModel) assert deck.cardCount == 0 deck.s.refresh(deck) + +def test_media(): + deck = DeckStorage.Deck() + # create a media dir + deck.mediaDir(create=True) + # put a file into it + file = unicode(os.path.join(testDir, "deck/fake.png")) + deck.addMedia(file) + # make sure it gets copied on saveas + path = "/tmp/saveAs2.anki" + sum = "0bee89b07a248e27c83fc3d5951213c1.png" + try: + os.unlink(path) + except OSError: + pass + deck.saveAs(path) + assert os.path.exists("/tmp/saveAs2.media/%s" % sum)