44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
import logging
|
|
|
|
from normalutils.choices import StateType
|
|
import omodels as om
|
|
import models as sm
|
|
|
|
|
|
word_fn = lambda word: {
|
|
"spelling": word.spelling,
|
|
"importance": word.importance,
|
|
"state": StateType.PUBLISHED.value,
|
|
}
|
|
meaning_fn = lambda meaning: {
|
|
"meaning": meaning.meaning,
|
|
"word_property": meaning.word_property,
|
|
"state": StateType.PUBLISHED.value
|
|
}
|
|
|
|
|
|
def migrate_word_meanings(o_session, word: sm.Word):
|
|
if word.spelling is None:
|
|
logging.error("word is None. word id is {}".format(word.id))
|
|
return
|
|
meanings = word.meanings
|
|
o_word_dict = word_fn(word)
|
|
o_word = om.OWord(**o_word_dict)
|
|
o_session.add(o_word)
|
|
|
|
for meaning in meanings:
|
|
meaningfield = om.OMeaningField(word=o_word)
|
|
o_session.add(meaningfield)
|
|
meaning_dict = meaning_fn(meaning)
|
|
meaning = om.OMeaning(meaningfield=meaningfield, **meaning_dict)
|
|
o_session.add(meaning)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
with sm.Session() as s_session:
|
|
words = s_session.query(sm.Word)
|
|
with om.OSession() as o_session:
|
|
for word in words:
|
|
migrate_word_meanings(o_session, word)
|
|
o_session.commit()
|