Skip to content

Commit 243c09c

Browse files
committed
Merge branch 'develop' into feature/audiodesc
2 parents adedc35 + 5d596b0 commit 243c09c

5 files changed

Lines changed: 92 additions & 57 deletions

File tree

server/src/main.py

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@
77
import sys
88
from src.signup import Signup
99
from src.login import Login
10-
from src.wayfinding import router # Import the API routes
10+
from src.preferences import router as preferences_router
1111
from src.weatherApi import weatherAPI
1212
from src.preferences import Preferences
1313
from src.networking import Networking
14+
from src.wayfinding import wayfinding_router_setup
1415

1516

1617
class Server:
@@ -21,15 +22,24 @@ def __init__(self):
2122
# Initialize FastAPI app
2223
self.app = FastAPI()
2324
# Include the API routes from the my_routes.py file
24-
self.app.include_router(router)
2525

2626
# Instantiate components
27-
self.signup_logic = Signup(self.app, self.logger)
27+
2828
self.login_logic = Login(self.app, self.logger)
29-
self.preferences_logic = Preferences(self.app, self.logger)
3029
self.connection_manager = ConnectionManager()
3130
self.weather_api = weatherAPI()
3231
self.networking = Networking(self.app, self.logger)
32+
self.preferences_logic = Preferences(self.app, self.logger)
33+
self.signup_logic = Signup(self.app, self.logger,
34+
self.preferences_logic)
35+
36+
wayfinding_router = wayfinding_router_setup(
37+
preferences_logic=self.preferences_logic,
38+
logger=self.logger,
39+
)
40+
41+
self.app.include_router(wayfinding_router, prefix="/wayfinding")
42+
self.app.include_router(preferences_router, prefix="/preferences")
3343

3444
# Configure CORS
3545
self.configure_cors()

server/src/preferences.py

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
import logging
2-
from fastapi import Body
2+
from fastapi import Body, APIRouter
33
from dotenv import load_dotenv
44
from pydantic import BaseModel
55
from src.Database_class import DataBase
66

7+
router = APIRouter()
8+
79

810
class Preferences:
911
def __init__(self, api, logger: logging.Logger):
@@ -23,22 +25,28 @@ async def set_Preferences(request: userPersonalizedSettings):
2325
self.db_handle_preferences(request)
2426
return {"message": "Successfully saved user preferences"}
2527

28+
return {"message": "Successfully saved user preferences"}
29+
2630
def db_handle_preferences(self, request):
2731
db = DataBase()
2832
db.connect_db()
2933
dict = request.request_into_dictionary()
3034

35+
3136
for key, val in dict.items():
3237
db.update_entry(
3338
"user_personalized_settings", dict["username"], key, val
39+
"user_personalized_settings", dict["username"], key, val
3440
)
3541
self.logger.info("User preferences updated in the database")
3642
db.close_con()
3743

44+
3845
def db_initialise_preferences(self, username):
3946
db = DataBase()
4047
db.connect_db()
4148

49+
4250
dict = {
4351
"username": username,
4452
"bike": False,
@@ -55,7 +63,9 @@ def db_initialise_preferences(self, username):
5563
}
5664

5765
db.add_entry("user_personalized_settings", dict)
58-
self.logger.info("User has signed up and a preferences")
66+
self.logger.info(
67+
"User has signed up and a preferences entry has been created"
68+
)
5969
db.close_con()
6070

6171
def db_get_preferences(self, username):
@@ -67,9 +77,16 @@ def db_get_preferences(self, username):
6777
tollsPref = db.search_entry(
6878
"user_personalized_settings", username, "tolls"
6979
)
80+
motorwayPref = db.search_entry(
81+
"user_personalized_settings", username, "motorways"
82+
)
83+
tollsPref = db.search_entry(
84+
"user_personalized_settings", username, "tolls"
85+
)
7086
self.logger.info("User preferences retrieved from database")
7187
print("preferences retrieved from db", motorwayPref, tollsPref)
7288
db.close_con()
89+
return {
7390
return {
7491
"motorways": motorwayPref,
7592
"tolls": tollsPref,
@@ -92,6 +109,7 @@ class userPersonalizedSettings(BaseModel):
92109

93110
def request_into_dictionary(self):
94111
return {
112+
"username": self.username,
95113
"username": self.username,
96114
"bike": self.bike,
97115
"private_vehicle": self.privateVehicle,

server/src/signup.py

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,17 @@
33
from .Database_class import DataBase
44
from src.preferences import Preferences
55
import logging
6-
from fastapi import FastAPI
76

8-
app = FastAPI()
7+
98
logger = logging.getLogger("test_logger")
10-
preferences = Preferences(api=app, logger=logger)
119

1210

1311
class Signup:
14-
def __init__(self, api, logger: logging.Logger):
12+
def __init__(self, api, logger: logging.Logger,
13+
preferences_logic: Preferences):
1514
self.app = api
1615
self.logger = logger
17-
16+
self.preferences = preferences_logic
1817
# register signup route
1918
self.handle_signup()
2019

@@ -59,7 +58,7 @@ def signup_user(self, username: str, password: str):
5958
self.logger.info(f"User {username} signed up")
6059
db.close_con()
6160

62-
preferences.db_initialise_preferences(username)
61+
self.preferences.db_initialise_preferences(username)
6362
return True
6463

6564

server/src/wayfinding.py

Lines changed: 45 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,19 @@
22
import os
33
from fastapi import APIRouter, Body
44
from dotenv import load_dotenv
5-
from src.preferences import Preferences
65
import logging
7-
from fastapi import FastAPI
6+
from src.preferences import Preferences
87

98
load_dotenv()
109

1110
GOOGLE_MAPS_API_KEY = os.getenv("GOOGLE_MAPS_API_KEY")
1211

1312
router = APIRouter()
14-
app = FastAPI()
1513
logger = logging.getLogger("test_logger")
1614
preferences = Preferences(api=app, logger=logger)
1715

1816

17+
1918
@router.post("/wayfinding/get_routes")
2019
def get_routes(
2120
origin: str = Body(...),
@@ -36,48 +35,50 @@ def get_routes(
3635
return response.json()
3736

3837

39-
@router.post("/wayfinding/preferences/get_routes")
40-
def get_routes_with_preferences(
41-
origin: str = Body(...),
42-
destination: str = Body(...),
43-
mode: str = Body(...),
44-
alternatives: bool = Body(...),
45-
username: str = Body(...),
46-
):
38+
def wayfinding_router_setup(preferences_logic: Preferences, logger):
39+
router = APIRouter()
4740

48-
print(username)
49-
preferencesList = preferences.db_get_preferences(username)
50-
print(preferencesList)
51-
if not preferencesList:
52-
logger.error(
53-
f"No preferences found for user {username}. Using default route."
54-
)
55-
return get_routes(
56-
origin=origin,
57-
destination=destination,
58-
mode=mode,
59-
alternatives=alternatives,
60-
)
41+
@router.post("/preferences/get_routes")
42+
def get_routes_with_preferences(
43+
origin: str = Body(...),
44+
destination: str = Body(...),
45+
mode: str = Body(...),
46+
alternatives: bool = Body(...),
47+
username: str = Body(...),
48+
):
6149

62-
if preferencesList["tolls"] and preferencesList["motorways"]:
63-
toAvoid = "tolls|highways"
64-
elif preferencesList["tolls"]:
65-
toAvoid = "tolls"
66-
elif preferencesList["motorways"]:
67-
toAvoid = "motorways"
68-
else:
69-
toAvoid = ""
50+
print(username)
51+
preferencesList = preferences_logic.db_get_preferences(username)
52+
print(preferencesList)
53+
if not preferencesList:
54+
logger.error(f"No preferences {username}. Using default route.")
55+
return get_routes(
56+
origin=origin,
57+
destination=destination,
58+
mode=mode,
59+
alternatives=alternatives,
60+
)
7061

71-
url = "https://maps.googleapis.com/maps/api/directions/json"
72-
parameters = {
73-
"origin": origin,
74-
"destination": destination,
75-
"mode": mode.lower(),
76-
"alternatives": str(alternatives).lower(),
77-
"key": GOOGLE_MAPS_API_KEY,
78-
"username": username,
79-
"avoid": toAvoid,
80-
}
62+
if preferencesList["tolls"] and preferencesList["motorways"]:
63+
toAvoid = "tolls|highways"
64+
elif preferencesList["tolls"]:
65+
toAvoid = "tolls"
66+
elif preferencesList["motorways"]:
67+
toAvoid = "motorways"
68+
else:
69+
toAvoid = ""
8170

82-
response = requests.get(url, params=parameters)
83-
return response.json()
71+
url = "https://maps.googleapis.com/maps/api/directions/json"
72+
parameters = {
73+
"origin": origin,
74+
"destination": destination,
75+
"mode": mode.lower(),
76+
"alternatives": str(alternatives).lower(),
77+
"key": GOOGLE_MAPS_API_KEY,
78+
"username": username,
79+
"avoid": toAvoid
80+
}
81+
82+
response = requests.get(url, params=parameters)
83+
return response.json()
84+
return router

server/tests/test_signup.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@
66
from src.signup import Signup
77

88

9+
class MockPreferences:
10+
def db_initialise_preferences(self, username):
11+
print("Mocking preferences")
12+
13+
914
@pytest.fixture
1015
def test_app():
1116
"""
@@ -14,7 +19,9 @@ def test_app():
1419
"""
1520
app = FastAPI()
1621
logger = logging.getLogger("test_logger")
17-
signup = Signup(api=app, logger=logger) # noqa: F841
22+
mock_preferences = MockPreferences()
23+
signup = Signup( # noqa: F841
24+
api=app, logger=logger, preferences_logic=mock_preferences)
1825
return TestClient(app)
1926

2027

0 commit comments

Comments
 (0)