mirror of
https://github.com/ankitects/anki.git
synced 2025-12-17 00:30:58 -05:00
add model copy support
This commit is contained in:
parent
8e71b5fbbf
commit
93332079b5
4 changed files with 42 additions and 1 deletions
|
|
@ -29,7 +29,7 @@ from sqlalchemy import (Table, Integer, Float, Column, MetaData,
|
|||
UniqueConstraint, Index, PrimaryKeyConstraint)
|
||||
from sqlalchemy import create_engine
|
||||
from sqlalchemy.orm import mapper, sessionmaker as _sessionmaker, relation, backref, \
|
||||
object_session as _object_session
|
||||
object_session as _object_session, class_mapper
|
||||
from sqlalchemy.sql import select, text, and_
|
||||
from sqlalchemy.exceptions import DBAPIError, OperationalError
|
||||
import sqlalchemy
|
||||
|
|
|
|||
14
anki/deck.py
14
anki/deck.py
|
|
@ -1104,6 +1104,20 @@ answerAlign from cardModels""")])
|
|||
self.css = css
|
||||
return css
|
||||
|
||||
def copyModel(self, oldModel):
|
||||
"Add a new model to DB based on MODEL."
|
||||
m = Model(_("%s copy") % oldModel.name)
|
||||
for f in oldModel.fieldModels:
|
||||
f = f.copy()
|
||||
m.addFieldModel(f)
|
||||
for c in oldModel.cardModels:
|
||||
c = c.copy()
|
||||
m.addCardModel(c)
|
||||
for attr in ("tags", "spacing", "initialSpacing"):
|
||||
setattr(m, attr, getattr(oldModel, attr))
|
||||
self.addModel(m)
|
||||
return m
|
||||
|
||||
# Fields
|
||||
##########################################################################
|
||||
|
||||
|
|
|
|||
|
|
@ -58,6 +58,13 @@ class FieldModel(object):
|
|||
self.unique = unique
|
||||
self.id = genID()
|
||||
|
||||
def copy(self):
|
||||
new = FieldModel()
|
||||
for p in class_mapper(FieldModel).iterate_properties:
|
||||
setattr(new, p.key, getattr(self, p.key))
|
||||
new.id = genID()
|
||||
return new
|
||||
|
||||
mapper(FieldModel, fieldModelsTable)
|
||||
|
||||
# Card models
|
||||
|
|
@ -108,6 +115,13 @@ class CardModel(object):
|
|||
self.active = active
|
||||
self.id = genID()
|
||||
|
||||
def copy(self):
|
||||
new = CardModel()
|
||||
for p in class_mapper(CardModel).iterate_properties:
|
||||
setattr(new, p.key, getattr(self, p.key))
|
||||
new.id = genID()
|
||||
return new
|
||||
|
||||
mapper(CardModel, cardModelsTable)
|
||||
|
||||
def formatQA(cid, mid, fact, tags, cm):
|
||||
|
|
|
|||
|
|
@ -135,6 +135,19 @@ def test_modelAddDelete():
|
|||
assert deck.cardCount == 0
|
||||
deck.s.refresh(deck)
|
||||
|
||||
def test_modelCopy():
|
||||
deck = DeckStorage.Deck()
|
||||
m = JapaneseModel()
|
||||
deck.addModel(m)
|
||||
f = deck.newFact()
|
||||
f['Expression'] = u'1'
|
||||
deck.addFact(f)
|
||||
m2 = deck.copyModel(m)
|
||||
assert m2.name == "Japanese copy"
|
||||
assert m2.id != m.id
|
||||
assert m2.fieldModels[0].id != m.fieldModels[0].id
|
||||
assert m2.cardModels[0].id != m.cardModels[0].id
|
||||
|
||||
def test_media():
|
||||
deck = DeckStorage.Deck()
|
||||
# create a media dir
|
||||
|
|
|
|||
Loading…
Reference in a new issue