added descriptions
This commit is contained in:
parent
ca711c614f
commit
2bf38119d6
10062
backend/landmarks.json
10062
backend/landmarks.json
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@ -97,10 +97,14 @@ def new_trip(preferences: Preferences,
|
|||||||
if len(landmarks) == 0 :
|
if len(landmarks) == 0 :
|
||||||
raise HTTPException(status_code=500, detail="No landmarks were found.")
|
raise HTTPException(status_code=500, detail="No landmarks were found.")
|
||||||
|
|
||||||
# store landmarks in json file for debug
|
|
||||||
|
|
||||||
|
###################### store landmarks in json file for debug ######################
|
||||||
landmarks_list = [jsonable_encoder(item) for item in landmarks]
|
landmarks_list = [jsonable_encoder(item) for item in landmarks]
|
||||||
with open('landmarks.json', 'w+') as file:
|
with open('landmarks.json', 'w+') as file:
|
||||||
json.dump(landmarks_list, file, indent=4)
|
json.dump(landmarks_list, file, indent=4)
|
||||||
|
####################################################################################
|
||||||
|
|
||||||
|
|
||||||
# insert start and finish to the landmarks list
|
# insert start and finish to the landmarks list
|
||||||
landmarks_short.insert(0, start_landmark)
|
landmarks_short.insert(0, start_landmark)
|
||||||
|
@ -50,6 +50,7 @@ class Landmark(BaseModel) :
|
|||||||
image_url : Optional[str] = None
|
image_url : Optional[str] = None
|
||||||
website_url : Optional[str] = None
|
website_url : Optional[str] = None
|
||||||
wiki_url : Optional[str] = None
|
wiki_url : Optional[str] = None
|
||||||
|
keywords: Optional[dict] = {}
|
||||||
description : Optional[str] = None
|
description : Optional[str] = None
|
||||||
duration : Optional[int] = 5
|
duration : Optional[int] = 5
|
||||||
name_en : Optional[str] = None
|
name_en : Optional[str] = None
|
||||||
|
@ -11,7 +11,7 @@ def client():
|
|||||||
"""Client used to call the app."""
|
"""Client used to call the app."""
|
||||||
return TestClient(app)
|
return TestClient(app)
|
||||||
|
|
||||||
'''
|
|
||||||
def test_turckheim(client, request): # pylint: disable=redefined-outer-name
|
def test_turckheim(client, request): # pylint: disable=redefined-outer-name
|
||||||
"""
|
"""
|
||||||
Test n°1 : Custom test in Turckheim to ensure small villages are also supported.
|
Test n°1 : Custom test in Turckheim to ensure small villages are also supported.
|
||||||
@ -219,7 +219,7 @@ def test_zurich(client, request) : # pylint: disable=redefined-outer-name
|
|||||||
assert duration_minutes*0.8 < result['total_time'], f"Trip too short: {result['total_time']} instead of {duration_minutes}"
|
assert duration_minutes*0.8 < result['total_time'], f"Trip too short: {result['total_time']} instead of {duration_minutes}"
|
||||||
assert duration_minutes*1.2 > result['total_time'], f"Trip too long: {result['total_time']} instead of {duration_minutes}"
|
assert duration_minutes*1.2 > result['total_time'], f"Trip too long: {result['total_time']} instead of {duration_minutes}"
|
||||||
|
|
||||||
'''
|
|
||||||
def test_paris(client, request) : # pylint: disable=redefined-outer-name
|
def test_paris(client, request) : # pylint: disable=redefined-outer-name
|
||||||
"""
|
"""
|
||||||
Test n°6 : Custom test in Paris (les Halles) centre to ensure proper decision making in crowded area.
|
Test n°6 : Custom test in Paris (les Halles) centre to ensure proper decision making in crowded area.
|
||||||
@ -259,7 +259,7 @@ def test_paris(client, request) : # pylint: disable=redefined-outer-name
|
|||||||
assert comp_time < 30, f"Computation time exceeded 30 seconds: {comp_time:.2f} seconds"
|
assert comp_time < 30, f"Computation time exceeded 30 seconds: {comp_time:.2f} seconds"
|
||||||
assert duration_minutes*0.8 < result['total_time'], f"Trip too short: {result['total_time']} instead of {duration_minutes}"
|
assert duration_minutes*0.8 < result['total_time'], f"Trip too short: {result['total_time']} instead of {duration_minutes}"
|
||||||
assert duration_minutes*1.2 > result['total_time'], f"Trip too long: {result['total_time']} instead of {duration_minutes}"
|
assert duration_minutes*1.2 > result['total_time'], f"Trip too long: {result['total_time']} instead of {duration_minutes}"
|
||||||
'''
|
|
||||||
|
|
||||||
def test_new_york(client, request) : # pylint: disable=redefined-outer-name
|
def test_new_york(client, request) : # pylint: disable=redefined-outer-name
|
||||||
"""
|
"""
|
||||||
@ -342,4 +342,4 @@ def test_shopping(client, request) : # pylint: disable=redefined-outer-name
|
|||||||
assert duration_minutes*0.8 < result['total_time'], f"Trip too short: {result['total_time']} instead of {duration_minutes}"
|
assert duration_minutes*0.8 < result['total_time'], f"Trip too short: {result['total_time']} instead of {duration_minutes}"
|
||||||
assert duration_minutes*1.2 > result['total_time'], f"Trip too long: {result['total_time']} instead of {duration_minutes}"
|
assert duration_minutes*1.2 > result['total_time'], f"Trip too long: {result['total_time']} instead of {duration_minutes}"
|
||||||
|
|
||||||
'''
|
|
@ -246,8 +246,6 @@ class LandmarkManager:
|
|||||||
attractiveness=0,
|
attractiveness=0,
|
||||||
n_tags=len(tags))
|
n_tags=len(tags))
|
||||||
|
|
||||||
# self.logger.debug('added landmark.')
|
|
||||||
|
|
||||||
# Browse through tags to add information to landmark.
|
# Browse through tags to add information to landmark.
|
||||||
for key, value in tags.items():
|
for key, value in tags.items():
|
||||||
|
|
||||||
@ -277,6 +275,7 @@ class LandmarkManager:
|
|||||||
if 'building:' in key or 'pay' in key :
|
if 'building:' in key or 'pay' in key :
|
||||||
landmark.n_tags -= 1
|
landmark.n_tags -= 1
|
||||||
|
|
||||||
|
|
||||||
# Set the duration.
|
# Set the duration.
|
||||||
if value in ['museum', 'aquarium', 'planetarium'] :
|
if value in ['museum', 'aquarium', 'planetarium'] :
|
||||||
landmark.duration = 60
|
landmark.duration = 60
|
||||||
@ -287,13 +286,103 @@ class LandmarkManager:
|
|||||||
landmark.is_place_of_worship = False
|
landmark.is_place_of_worship = False
|
||||||
landmark.duration = 10
|
landmark.duration = 10
|
||||||
|
|
||||||
else:
|
landmark.description, landmark.keywords = self.description_and_keywords(tags)
|
||||||
self.set_landmark_score(landmark, landmarktype, preference_level)
|
self.set_landmark_score(landmark, landmarktype, preference_level)
|
||||||
landmarks.append(landmark)
|
landmarks.append(landmark)
|
||||||
|
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
||||||
return landmarks
|
return landmarks
|
||||||
|
|
||||||
|
|
||||||
|
def description_and_keywords(self, tags: dict):
|
||||||
|
# Extract relevant fields
|
||||||
|
name = tags.get('name')
|
||||||
|
importance = tags.get('importance', None)
|
||||||
|
n_visitors = tags.get('tourism:visitors', None)
|
||||||
|
height = tags.get('height')
|
||||||
|
place_type = self.get_place_type(tags)
|
||||||
|
date = self.get_date(tags)
|
||||||
|
|
||||||
|
if place_type is None :
|
||||||
|
return None, None
|
||||||
|
|
||||||
|
# Start the description.
|
||||||
|
if importance is None :
|
||||||
|
if len(tags.keys()) < 5 :
|
||||||
|
return None, None
|
||||||
|
if len(tags.keys()) < 10 :
|
||||||
|
description = f"{name} is a well known {place_type}."
|
||||||
|
|
||||||
|
if len(tags.keys()) < 17 :
|
||||||
|
importance = 'national'
|
||||||
|
description = f"{name} is a {place_type} of national importance."
|
||||||
|
else :
|
||||||
|
importance = 'international'
|
||||||
|
description = f"{name} is an internationally famous {place_type}."
|
||||||
|
else :
|
||||||
|
description = f"{name} is a {place_type} of {importance} importance."
|
||||||
|
|
||||||
|
if height is not None and date is not None :
|
||||||
|
description += f" This {place_type} was constructed in {date} and is ca. {height} meters high."
|
||||||
|
elif height is not None :
|
||||||
|
description += f" This {place_type} stands ca. {height} meters tall."
|
||||||
|
elif date is not None:
|
||||||
|
description += f" It was constructed in {date}."
|
||||||
|
|
||||||
|
# Format the visitor number
|
||||||
|
if n_visitors is not None :
|
||||||
|
n_visitors = int(n_visitors)
|
||||||
|
if n_visitors > 1000 :
|
||||||
|
description += f" {name} welcomes {int(n_visitors/1000)} thousand visitors every year."
|
||||||
|
if n_visitors > 1000000 :
|
||||||
|
description += f" {name} welcomes {round(n_visitors/1000000, 1)} millionvisitors every year."
|
||||||
|
|
||||||
|
# Set the keywords.
|
||||||
|
keywords = {"importance": importance,
|
||||||
|
"height": height,
|
||||||
|
"place_type": place_type,
|
||||||
|
"date": date}
|
||||||
|
|
||||||
|
return description, keywords
|
||||||
|
|
||||||
|
|
||||||
|
def get_place_type(self, data):
|
||||||
|
amenity = data.get('amenity', None)
|
||||||
|
building = data.get('building', None)
|
||||||
|
historic = data.get('historic', None)
|
||||||
|
|
||||||
|
if historic and historic != "yes":
|
||||||
|
return historic
|
||||||
|
if building and building not in ["yes", "civic", "government", "apartments", "residential", "commericial", "industrial", "retail", "religious", "public", "service"]:
|
||||||
|
return building
|
||||||
|
if amenity:
|
||||||
|
return amenity
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
def get_date(self, data):
|
||||||
|
construction_date = data.get('construction_date', None)
|
||||||
|
opening_date = data.get('opening_date', None)
|
||||||
|
start_date = data.get('start_date', None)
|
||||||
|
year_of_construction = data.get('year_of_construction', None)
|
||||||
|
|
||||||
|
# Prioritize based on availability
|
||||||
|
if construction_date:
|
||||||
|
return construction_date
|
||||||
|
if start_date:
|
||||||
|
return start_date
|
||||||
|
if year_of_construction:
|
||||||
|
return year_of_construction
|
||||||
|
if opening_date:
|
||||||
|
return opening_date
|
||||||
|
|
||||||
|
return None
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def dict_to_selector_list(d: dict) -> list:
|
def dict_to_selector_list(d: dict) -> list:
|
||||||
"""
|
"""
|
||||||
@ -315,3 +404,5 @@ def dict_to_selector_list(d: dict) -> list:
|
|||||||
else:
|
else:
|
||||||
return_list.append(f'{key}={value}')
|
return_list.append(f'{key}={value}')
|
||||||
return return_list
|
return return_list
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user