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
def view(dataset, entity): dataset = Dataset.find(dataset) entity = Entity.find(dataset, entity) print entity.data format = response_format() if format == 'json': return jsonify(entity) query = request.args.get('query', '').strip().lower() choices = match_op(entity.name, dataset) choices = filter(lambda (c,e,s): e != entity.id, choices) if len(query): choices = filter(lambda (c,e,s): query in Entity.find(dataset,e).name.lower(), choices) # THIS is very inefficient - rather do this # differently pager = Pager(choices, '.view', dataset=dataset.name, entity=entity.id, limit=10) # HACK: Fetch only the entities on the selected page. entities = Entity.id_map(dataset, map(lambda (c,v,s): v, pager.query[pager.offset:pager.offset+pager.limit])) for i, (c,e,s) in enumerate(pager.query): if e in entities: pager.query[i] = (c, entities.get(e), s) return render_template('entity/view.html', dataset=dataset, entity=entity, entities=pager, query=query)
def match(dataset, alias, random=False): dataset = Dataset.find(dataset) authz.require(authz.dataset_edit(dataset)) alias = Alias.find(dataset, alias) random = random or request.args.get('random')=='True' choices = match_op(alias.name, dataset, query=request.args.get('query')) pager = Pager(choices, '.match', dataset=dataset.name, alias=alias.id, limit=10) # HACK: Fetch only the entities on the selected page. entities = Entity.id_map(dataset, map(lambda (c,e,s): e, pager.query[pager.offset:pager.offset+pager.limit])) for i, (c,e,s) in enumerate(pager.query): if e in entities: pager.query[i] = (c, entities.get(e), s) html = render_template('alias/match.html', dataset=dataset, alias=alias, choices=pager, random=random) choice = 'INVALID' if alias.is_invalid else alias.entity_id if len(choices) and choice is None: c, e, s = choices[0] choice = 'INVALID' if s <= 50 else e.id return htmlfill.render(html, force_defaults=False, defaults={'choice': choice, 'name': alias.name, 'query': request.args.get('query', ''), 'random': random})
def lookup(cls, dataset, data, account, match_value=True, readonly=False): data = LinkLookupSchema().to_python(data) if match_value: value = Value.by_value(dataset, data["key"]) if value is not None: return value else: value = None link = cls.by_key(dataset, data["key"]) if link is not None: return link choices = match_op(data["key"], dataset) choices = filter(lambda (c, v, s): s > 99.9, choices) if len(choices) == 1: c, value, s = choices.pop() value = Value.by_id(dataset, value) if readonly: return value link = cls() link.creator = account link.dataset = dataset link.value = value link.is_matched = value is not None link.key = data["key"] link.data = data["data"] db.session.add(link) db.session.flush() return link
def view(dataset, value): dataset = Dataset.find(dataset) value = Value.find(dataset, value) format = response_format() if format == 'json': return jsonify(value) query = request.args.get('query', '').strip().lower() choices = match_op(value.value, dataset) choices = filter(lambda (c,v,s): v != value.id, choices) if len(query): choices = filter(lambda (c,v,s): query in Value.find(dataset,v).value.lower(), choices) # THIS is very inefficient - rather do this # differently pager = Pager(choices, '.view', dataset=dataset.name, value=value.id, limit=10) # HACK: Fetch only the values on the selected page. value_objs = Value.id_map(dataset, map(lambda (c,v,s): v, pager.query[pager.offset:pager.offset+pager.limit])) for i, (c,v,s) in enumerate(pager.query): if v in value_objs: pager.query[i] = (c, value_objs.get(v), s) return render_template('value/view.html', dataset=dataset, value=value, values=pager, query=query)
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
def match(dataset, link, random=False): dataset = Dataset.find(dataset) authz.require(authz.dataset_edit(dataset)) link = Link.find(dataset, link) random = random or request.args.get('random')=='True' choices = match_op(link.key, dataset, query=request.args.get('query')) pager = Pager(choices, '.match', dataset=dataset.name, link=link.id, limit=10) # HACK: Fetch only the values on the selected page. value_objs = Value.id_map(dataset, map(lambda (c,v,s): v, pager.query[pager.offset:pager.offset+pager.limit])) for i, (c,v,s) in enumerate(pager.query): if v in value_objs: pager.query[i] = (c, value_objs.get(v), s) html = render_template('link/match.html', dataset=dataset, link=link, choices=pager, random=random) choice = 'INVALID' if link.is_invalid else link.value_id if len(choices) and choice is None: c, v, s = choices[0] choice = 'INVALID' if s <= 50 else v return htmlfill.render(html, force_defaults=False, defaults={'choice': choice, 'value': link.key, 'query': request.args.get('query', ''), 'random': random})
def view(dataset, value): dataset = Dataset.find(dataset) value = Value.find(dataset, value) format = response_format() if format == 'json': return jsonify(value) query = request.args.get('query', '').strip().lower() choices = match_op(value.value, dataset) choices = filter(lambda (c,v,s): v != value, choices) if len(query): choices = filter(lambda (c,v,s): query in v.value.lower(), choices) pager = Pager(choices, '.view', dataset=dataset.name, value=value.id, limit=10) return render_template('value/view.html', dataset=dataset, value=value, values=pager, query=query)
def match(dataset, link, random=False): dataset = Dataset.find(dataset) authz.require(authz.dataset_edit(dataset)) link = Link.find(dataset, link) random = random or request.args.get('random')=='True' choices = match_op(link.key, dataset, query=request.args.get('query')) pager = Pager(choices, '.match', dataset=dataset.name, link=link.id, limit=10) html = render_template('link/match.html', dataset=dataset, link=link, choices=pager, random=random) choice = 'INVALID' if link.is_invalid else link.value_id if len(choices): choice = choices[0][1].id if choice is None else choice return htmlfill.render(html, force_defaults=False, defaults={'choice': choice, 'value': link.key, 'query': request.args.get('query', ''), 'random': random})
def match(dataset, alias, random=False): dataset = Dataset.find(dataset) authz.require(authz.dataset_edit(dataset)) alias = Alias.find(dataset, alias) random = random or request.args.get('random') == 'True' choices = match_op(alias.name, dataset, query=request.args.get('query')) pager = Pager(choices, '.match', dataset=dataset.name, alias=alias.id, limit=10) # HACK: Fetch only the entities on the selected page. entities = Entity.id_map( dataset, map(lambda (c, e, s): e, pager.query[pager.offset:pager.offset + pager.limit])) for i, (c, e, s) in enumerate(pager.query): if e in entities: pager.query[i] = (c, entities.get(e), s) html = render_template('alias/match.html', dataset=dataset, alias=alias, choices=pager, random=random) choice = 'INVALID' if alias.is_invalid else alias.entity_id if len(choices) and choice is None: c, e, s = choices[0] choice = 'INVALID' if s <= 50 else e.id return htmlfill.render(html, force_defaults=False, defaults={ 'choice': choice, 'name': alias.name, 'query': request.args.get('query', ''), 'random': random })
def view(dataset, entity): dataset = Dataset.find(dataset) entity = Entity.find(dataset, entity) print entity.data format = response_format() if format == 'json': return jsonify(entity) query = request.args.get('query', '').strip().lower() choices = match_op(entity.name, dataset) choices = filter(lambda (c, e, s): e != entity.id, choices) if len(query): choices = filter( lambda (c, e, s): query in Entity.find(dataset, e).name.lower(), choices) # THIS is very inefficient - rather do this # differently pager = Pager(choices, '.view', dataset=dataset.name, entity=entity.id, limit=10) # HACK: Fetch only the entities on the selected page. entities = Entity.id_map( dataset, map(lambda (c, v, s): v, pager.query[pager.offset:pager.offset + pager.limit])) for i, (c, e, s) in enumerate(pager.query): if e in entities: pager.query[i] = (c, entities.get(e), s) return render_template('entity/view.html', dataset=dataset, entity=entity, entities=pager, query=query)