示例#1
0
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()
示例#2
0
 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
示例#3
0
 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