osdict_project/spider/action_migration.py

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()