def update_taxonomies(filename): # Flat taxonomy is stored locally, read in here with open( os.path.join( settings.APP_PATH, 'website', 'static', filename ) ) as fp: taxonomy = json.load(fp) for subject_path in taxonomy.get('data'): subjects = subject_path.split('_') text = subjects[-1] # Search for parent subject, get id if it exists parent = None if len(subjects) > 1: try: parent = Subject.find_one(Q('text', 'eq', subjects[-2])) except NoResultsFound: pass try: subject = Subject.find_one(Q('text', 'eq', text)) logger.info('Found existing Subject "{}":{}{}'.format( subject.text, subject._id, u' with parent {}:{}'.format(parent.text, parent._id) if parent else '' )) except (NoResultsFound): # If subject does not yet exist, create it subject = Subject( text=text, parents=[parent] if parent else [], ) logger.info(u'Creating Subject "{}":{}{}'.format( subject.text, subject._id, u' with parent {}:{}'.format(parent.text, parent._id) if parent else '' )) else: # If subject does exist, append parent_id if not already added if parent and parent not in subject.parents: subject.parents.append(parent) logger.info(u'Adding parent "{}":{} to Subject "{}":{}'.format( parent.text, parent._id, subject.text, subject._id )) subject.save()
def _create(cls, target_class, text=None, parents=[], *args, **kwargs): try: subject = Subject.find_one(Q('text', 'eq', text)) except NoResultsFound: subject = target_class(*args, **kwargs) subject.text = text subject.parents = parents subject.save() return subject
def _create(cls, target_class, text=None, parents=[], *args, **kwargs): try: subject = Subject.find_one(Q('text', 'eq', text)) except NoResultsFound: subject = target_class(*args, **kwargs) subject.text = text subject.parents = parents subject.save() return subject