コード例 #1
0
def find_child_and_grandchild(grandpa, childIndex=0):
    parent = Subject.find(Q('parents', 'eq', grandpa))[childIndex]
    try:
        child = Subject.find(Q('parents', 'eq', parent))[0]
    except IndexError:
        return find_child_and_grandchild(grandpa, childIndex=childIndex + 1)
    return parent, child
コード例 #2
0
def find_child_and_grandchild(grandpa, childIndex=0):
    parent = Subject.find(Q('parents', 'eq', grandpa))[childIndex]
    try:
        child = Subject.find(Q('parents', 'eq', parent))[0]
    except IndexError:
        return find_child_and_grandchild(grandpa, childIndex=childIndex+1)
    return parent, child
コード例 #3
0
def create_subject_rules():
    top_levels = Subject.find(Q('parents', 'eq', []))
    subA = top_levels[0]
    subB = top_levels[1]
    subC = top_levels[2]

    children_of_A = Subject.find(Q('parents', 'eq', subA))
    subD = children_of_A[0]
    subE = children_of_A[1]

    subF, subG = find_child_and_grandchild(subB)

    rules = [([subA._id, subD._id], False), ([subA._id, subE._id], True),
             ([subB._id, subF._id, subG._id], True), ([subC._id], True)]
    return rules
コード例 #4
0
ファイル: serializers.py プロジェクト: baylee-d/osf.io
 def to_representation(self, subject):
     if not isinstance(subject, Subject):
         subject = Subject.load(subject)
     if subject is not None:
         return {'id': subject._id,
                 'text': subject.text}
     return None
コード例 #5
0
ファイル: views.py プロジェクト: darshanman40/osf.io
 def get_queryset(self):
     parent = self.request.query_params.get(
         'filter[parents]', None) or self.request.query_params.get(
             'filter[parent]', None)
     provider = get_object_or_error(PreprintProvider,
                                    self.kwargs['provider_id'],
                                    display_name='PreprintProvider')
     if parent:
         if parent == 'null':
             return provider.top_level_subjects
         if provider.subjects.exists():
             return provider.subjects.filter(parent___id=parent)
         else:
             # TODO: Delet this when all PreprintProviders have a mapping
             #  Calculate this here to only have to do it once.
             allowed_parents = [
                 id_ for sublist in provider.subjects_acceptable
                 for id_ in sublist[0]
             ]
             allows_children = [
                 subs[0][-1] for subs in provider.subjects_acceptable
                 if subs[1]
             ]
             return [
                 sub
                 for sub in Subject.find(MQ('parent___id', 'eq', parent))
                 if provider.subjects_acceptable == []
                 or self.is_valid_subject(allows_children=allows_children,
                                          allowed_parents=allowed_parents,
                                          sub=sub)
             ]
     return provider.all_subjects
コード例 #6
0
def create_subject_rules():
    top_levels = Subject.find(Q('parents', 'eq', []))
    subA = top_levels[0]
    subB = top_levels[1]
    subC = top_levels[2]

    children_of_A = Subject.find(Q('parents', 'eq', subA))
    subD = children_of_A[0]
    subE = children_of_A[1]

    subF, subG = find_child_and_grandchild(subB)

    rules = [
        ([subA._id, subD._id], False),
        ([subA._id, subE._id], True),
        ([subB._id, subF._id, subG._id], True),
        ([subC._id], True)
    ]
    return rules
コード例 #7
0
 def get_queryset(self):
     parent = self.request.query_params.get('filter[parents]', None)
     provider = PreprintProvider.load(self.kwargs['provider_id'])
     if parent:
         if parent == 'null':
             return provider.top_level_subjects
         #  Calculate this here to only have to do it once.
         allowed_parents = [id_ for sublist in provider.subjects_acceptable for id_ in sublist[0]]
         allows_children = [subs[0][-1] for subs in provider.subjects_acceptable if subs[1]]
         return [sub for sub in Subject.find(Q('parents', 'eq', parent)) if provider.subjects_acceptable == [] or self.is_valid_subject(allows_children=allows_children, allowed_parents=allowed_parents, sub=sub)]
     return provider.all_subjects
コード例 #8
0
def get_subject_id(name):
    if not name in SUBJECTS_CACHE:
        subject = None
        try:
            subject = Subject.find_one(Q('text', 'eq', name))
        except NoResultsFound:
            raise Exception('Subject: "{}" not found'.format(name))
        else:
            SUBJECTS_CACHE[name] = subject._id

    return SUBJECTS_CACHE[name]
コード例 #9
0
def get_subject_id(name):
    if not name in SUBJECTS_CACHE:
        subject = None
        try:
            subject = Subject.find_one(Q('text', 'eq', name))
        except NoResultsFound:
            raise Exception('Subject: "{}" not found'.format(name))
        else:
            SUBJECTS_CACHE[name] = subject._id

    return SUBJECTS_CACHE[name]
コード例 #10
0
def migrate_preprint(preprint):
    logger.info('Preparint to migrate {}'.format(preprint['_id']))
    new_hiers = []
    for hier in preprint['subjects']:
        leaf = get_leaf(hier)
        new_leaf_name = PLOS_TO_BP_MAP[database['plos_subject'].find_one(
            {'_id': leaf})['text']]
        if new_leaf_name != '<drop>':
            new_hiers.append(
                Subject.find_one(Q('text', 'eq', new_leaf_name)).hierarchy)

    logger.info('Setting subjects on {} to {}'.format(preprint['_id'],
                                                      new_hiers))
    database['preprintservice'].find_and_modify(
        {'_id': preprint['_id']}, {'$set': {
            'subjects': new_hiers
        }})
コード例 #11
0
def migrate_preprint(preprint):
    logger.info('Preparint to migrate {}'.format(preprint['_id']))
    new_hiers = []
    for hier in preprint['subjects']:
        leaf = get_leaf(hier)
        new_leaf_name = PLOS_TO_BP_MAP[database['plos_subject'].find_one({'_id': leaf})['text']]
        if new_leaf_name != '<drop>':
            new_hiers.append(
                Subject.find_one(Q('text', 'eq', new_leaf_name)).hierarchy
            )

    logger.info('Setting subjects on {} to {}'.format(preprint['_id'], new_hiers))
    database['preprintservice'].find_and_modify(
        {'_id': preprint['_id']},
        {'$set':{
            'subjects': new_hiers
        }}
    )
コード例 #12
0
def load_bepress(f_path):
    assert Subject.find().count() == 0
    logger.info('Loading BePress...')
    with open(f_path) as fp:
        bpress = json.load(fp)
        validate_map_bepress_correctness(set(bpress.keys()))
        logger.info('Populating Subjects...')
        for text in bpress.keys():
            Subject(text=text).save()
        assert Subject.find().count() == len(bpress.keys())
        logger.info('Setting parents...')
        for s in Subject.find():
            if bpress[s.text]['lineage']:
                s.parents = [
                    Subject.find_one(
                        Q('text', 'eq', bpress[s.text]['lineage'][-1]))
                ]
                s.save()
        logger.info('Setting children...')
        for s in Subject.find():
            s.children = Subject.find(Q('parents', 'eq', s))
            s.save()
    logger.info('Successfully imported BePress taxonomy.')
コード例 #13
0
def load_bepress(f_path):
    assert Subject.find().count() == 0
    logger.info('Loading BePress...')
    with open(f_path) as fp:
        bpress = json.load(fp)
        validate_map_bepress_correctness(set(bpress.keys()))
        logger.info('Populating Subjects...')
        for text in bpress.keys():
            Subject(text=text).save()
        assert Subject.find().count() == len(bpress.keys())
        logger.info('Setting parents...')
        for s in Subject.find():
            if bpress[s.text]['lineage']:
                s.parents = [Subject.find_one(Q('text', 'eq', bpress[s.text]['lineage'][-1]))]
                s.save()
        logger.info('Setting children...')
        for s in Subject.find():
            s.children = Subject.find(Q('parents', 'eq', s))
            s.save()
    logger.info('Successfully imported BePress taxonomy.')
コード例 #14
0
 def to_representation(self, subject):
     if not isinstance(subject, Subject):
         subject = Subject.load(subject)
     if subject is not None:
         return {'id': subject._id, 'text': subject.text}
     return None