def on_post(self, req, resp, dataset_id, dataset_dto, entities_pair):
"""This method return the true distance between two entities
{"distance":
["http://www.wikidata.org/entity/Q1492",
"http://www.wikidata.org/entity/Q2807"]
}
:param int dataset_id: The dataset identifier on database
:param DTO dataset_dto: The Dataset DTO from dataset_id (from hook)
:param tuple entities_pair: A pair of entities (from hook)
:returns: A distance attribute, float number
:rtype: dict
"""
dataset_dao = data_access.DatasetDAO()
dataset = dataset_dao.build_dataset_object(dataset_dto) # TODO: design
# Get server to do 'queries'
search_index, err = dataset_dao.get_search_index(dataset_dto)
if search_index is None:
msg_title = "Dataset not ready perform search operation"
raise falcon.HTTPConflict(title=msg_title, description=str(err))
# TODO: Maybe extract server management anywhere to simplify this
search_server = server.Server(search_index)
entity_x, entity_y = entities_pair
id_x = dataset.get_entity_id(entity_x)
id_y = dataset.get_entity_id(entity_y)
if id_x is None or id_y is None:
raise falcon.HTTPNotFound(
description=("The {} id from entity {} or the {} id from {} "
"entity can't be found on the dataset")
.format(id_x, entity_x, id_y, entity_y))
dist = search_server.distance_between_entities(id_x, id_y)
resp.body = json.dumps({"distance": dist})
resp.content_type = 'application/json'
resp.status = falcon.HTTP_200
评论列表
文章目录