예제 #1
0
 def lookup(cls, dataset, data, account, match_entity=True, readonly=False):
     data = AliasLookupSchema().to_python(data)
     if match_entity:
         entity = Entity.by_name(dataset, data['name'])
         if entity is not None:
             return entity
     else:
         entity = None
     alias = cls.by_name(dataset, data['name'])
     if alias is not None:
         return alias
     choices = match_op(data['name'], dataset)
     choices = filter(lambda (c, v, s): s > 99.9, choices)
     if len(choices) == 1:
         c, entity_id, s = choices.pop()
         entity = Entity.by_id(dataset, entity_id)
     if readonly:
         return entity
     alias = cls()
     alias.creator = account
     alias.dataset = dataset
     alias.entity = entity
     alias.is_matched = entity is not None
     alias.name = data['name']
     alias.data = data['data']
     db.session.add(alias)
     db.session.flush()
     if entity is not None:
         add_candidate_to_cache(dataset, alias.name, entity.id)
     return alias
예제 #2
0
 def lookup(cls, dataset, data, account, match_entity=True,
         readonly=False):
     data = AliasLookupSchema().to_python(data)
     if match_entity:
         entity = Entity.by_name(dataset, data['name'])
         if entity is not None:
             return entity
     else:
         entity = None
     alias = cls.by_name(dataset, data['name'])
     if alias is not None:
         return alias
     choices = match_op(data['name'], dataset)
     choices = filter(lambda (c,v,s): s > 99.9, choices)
     if len(choices)==1:
         c, entity_id, s = choices.pop()
         entity = Entity.by_id(dataset, entity_id)
     if readonly:
         return entity
     alias = cls()
     alias.creator = account
     alias.dataset = dataset
     alias.entity = entity
     alias.is_matched = entity is not None
     alias.name = data['name']
     alias.data = data['data']
     db.session.add(alias)
     db.session.flush()
     if entity is not None:
         add_candidate_to_cache(dataset, alias.name, entity.id)
     return alias
예제 #3
0
 def create(cls, dataset, data, account):
     state = EntityState(dataset, None)
     data = EntitySchema().to_python(data, state)
     entity = cls()
     entity.dataset = dataset
     entity.creator = account
     entity.name = data['name']
     entity.data = data['data']
     db.session.add(entity)
     db.session.flush()
     add_candidate_to_cache(dataset, entity.name, entity.id)
     return entity
예제 #4
0
 def create(cls, dataset, data, account):
     state = EntityState(dataset, None)
     data = EntitySchema().to_python(data, state)
     entity = cls()
     entity.dataset = dataset
     entity.creator = account
     entity.name = data['name']
     entity.data = data['data']
     db.session.add(entity)
     db.session.flush()
     add_candidate_to_cache(dataset, entity.name, entity.id)
     return entity
예제 #5
0
파일: value.py 프로젝트: okfn/nomenklatura
def create(dataset):
    dataset = Dataset.find(dataset)
    authz.require(authz.dataset_edit(dataset))
    data = request_content()
    try:
        value = Value.create(dataset, data, request.account)
        add_candidate_to_cache(dataset, value.value, value.id)
        db.session.commit()
        return redirect(url_for('.view',
            dataset=dataset.name,
            value=value.id))
    except Invalid, inv:
        return handle_invalid(inv, view_dataset, data=data, 
                              args=[dataset.name])
예제 #6
0
파일: link.py 프로젝트: okfn/nomenklatura
def match_save(dataset, link):
    dataset = Dataset.find(dataset)
    authz.require(authz.dataset_edit(dataset))
    link = Link.find(dataset, link)
    random = request.form.get('random')=='True'
    data = request_content()
    try:
        link.match(dataset, data, request.account)
        if link.value is not None:
            add_candidate_to_cache(dataset, link.key, link.value.id)
        db.session.commit()
    except Invalid, inv:
        return handle_invalid(inv, match, data=data, 
                              args=[dataset.name, link.id, random])
예제 #7
0
파일: link.py 프로젝트: okfn/nomenklatura
def lookup(dataset):
    dataset = Dataset.find(dataset)
    readonly = validators.StringBool(if_empty=False, if_missing=False)\
            .to_python(request.args.get('readonly'))
    readonly = readonly if authz.logged_in() else True
    data = request_content()
    if response_format() != 'json':
        return Response("Not implemented!", status=400)

    try:
        link = Link.lookup(dataset, data, request.account,
                           readonly=readonly)
        if link is None:
            return jsonify({
                'is_matched': False,
                'value': None,
                'key': data.get('key'),
                'dataset': dataset.name
                }, status=404)

        if isinstance(link, Value):
            add_candidate_to_cache(dataset, data.get('key'), link.id)
            return jsonify({
                'is_matched': True,
                'value': link,
                'key': data.get('key'),
                'dataset': dataset.name
                }, status=200)

        if link.value:
            add_candidate_to_cache(dataset, link.key, link.value.id)

        db.session.commit()
        status = 200 if link.is_matched else 404
        status = 418 if link.is_invalid else status
        return jsonify(link, status=status)
    except Invalid, inv:
        return handle_invalid(inv, index, data=data,
                              args=[dataset.name])