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