Skip to content

Commit db58687

Browse files
committed
t2
1 parent 27dd8e0 commit db58687

File tree

7 files changed

+101
-119
lines changed

7 files changed

+101
-119
lines changed

server/djangoapp/models.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
from django.db import models
22
from django.core.validators import MinValueValidator, MaxValueValidator
3-
import uuid
43

54

65
# Create your models here.
@@ -44,9 +43,10 @@ class CarModel(models.Model):
4443
(SCOOTER, 'Scooter')
4544
]
4645
car_type = models.CharField(max_length=15, choices=CAR_TYPES, default=SEDAN)
47-
year = models.IntegerField(default=2023, validators=[
48-
MinValueValidator(1900),
49-
MaxValueValidator(2023)])
46+
year = models.IntegerField(
47+
default=2023,
48+
validators=[MinValueValidator(1900), MaxValueValidator(2023)]
49+
)
5050

5151
def __str__(self):
5252
return self.name

server/djangoapp/populate.py

Lines changed: 21 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,31 @@
1+
import os
2+
import json
13
from .models import CarMake, CarModel
24

35

46
def initiate():
5-
# Check if already populated
6-
makes = {
7-
"Honda": "Japanese multinational automotive company",
8-
"Toyota": "Japanese multinational automotive company",
9-
"BMW": "German luxury automobile company",
10-
"Mercedes": "German global automobile company",
11-
"Audi": "German automobile manufacturer",
12-
}
13-
14-
# If car makes exist, then already populated
15-
if CarMake.objects.filter(name="Honda").exists():
16-
return
7+
# Delete all data from tables
8+
CarModel.objects.all().delete()
9+
CarMake.objects.all().delete()
10+
11+
# Load car makes and models from JSON file
12+
script_dir = os.path.dirname(__file__)
13+
with open(os.path.join(script_dir, 'car_models.json'), 'r') as file:
14+
car_data = json.load(file)
1715

18-
# Create car makes
19-
for make_name, make_desc in makes.items():
20-
make = CarMake.objects.create(
16+
# Create car makes and models
17+
for make_name, models in car_data.items():
18+
# Create car make
19+
car_make = CarMake.objects.create(
2120
name=make_name,
22-
description=make_desc
21+
description=f"This is the {make_name} manufacturer"
2322
)
2423

25-
# Define car models for each make
26-
models = {
27-
"Honda": ["Accord", "Civic", "Pilot", "CR-V", "Odyssey"],
28-
"Toyota": ["Camry", "Corolla", "Prius", "RAV4", "Highlander"],
29-
"BMW": ["X1", "X3", "X5", "X6", "i8"],
30-
"Mercedes": ["A-Class", "C-Class", "E-Class", "S-Class", "GLA"],
31-
"Audi": ["A3", "A4", "A5", "Q3", "Q5"]
32-
}
33-
34-
# Create car models for each car make
35-
for model_name in models[make.name]:
24+
# Create car models for this make
25+
for model in models:
3626
CarModel.objects.create(
37-
name=model_name,
38-
car_make=make,
39-
car_type="Sedan" if "Class" in model_name else "SUV",
40-
year=2023
27+
car_make=car_make,
28+
name=model['name'],
29+
car_type=model['type'],
30+
year=model.get('year', 2023)
4131
)

server/djangoapp/restapis.py

Lines changed: 47 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -1,63 +1,59 @@
1-
import os
21
import requests
32
import json
4-
from dotenv import load_dotenv
5-
6-
load_dotenv()
7-
8-
backend_url = os.getenv('backend_url', default="http://localhost:3030")
9-
sentiment_analyzer_url = os.getenv('sentiment_analyzer_url', default="http://localhost:5000/")
10-
11-
12-
# Function to get the access token
13-
def get_request(endpoint, **kwargs):
14-
# Get token from API
15-
# URL for API
16-
url = backend_url + endpoint
17-
18-
print("Endpoint: ", url)
19-
# Send the GET request
20-
try:
21-
response = requests.get(url)
22-
status_code = response.status_code
23-
print("With status {} and body: {}".format(status_code, response.text))
24-
25-
# Check if response is successful
26-
if status_code == 200:
27-
return response.json()
28-
else:
29-
print("Response code: {}".format(status_code))
30-
return None
31-
except Exception as e:
32-
print("Error: ", e)
3+
from .models import CarMake
4+
5+
6+
# Create your tests here.
7+
def get_request(endpoint):
8+
"""
9+
Performs a GET request to the specified endpoint and returns data
10+
"""
11+
server = "https://sentianalyzer1.1uclblihlz9o.us-south.codeengine.appdomain.cloud"
12+
response = requests.get(f"{server}/{endpoint}")
13+
if response.status_code == 200:
14+
data = response.json()
15+
return data
16+
else:
17+
print(f"Error: {response.status_code}")
3318
return None
3419

3520

36-
# Function to analyze reviews using Watson NLP services
37-
def analyze_review_sentiments(text):
38-
# Sample function to return a sentiment based on text
39-
if "great" in text.lower() or "good" in text.lower() or "excellent" in text.lower():
40-
return {"sentiment": "positive"}
41-
elif "bad" in text.lower() or "poor" in text.lower() or "terrible" in text.lower():
42-
return {"sentiment": "negative"}
21+
def analyze_review_sentiments(review_text):
22+
"""
23+
Analyzes review text sentiment using the sentiment analysis service
24+
"""
25+
server = "https://sentianalyzer1.1uclblihlz9o.us-south.codeengine.appdomain.cloud"
26+
endpoint = "/analyze"
27+
data = {"review": review_text}
28+
headers = {'Content-Type': 'application/json'}
29+
response = requests.post(
30+
f"{server}{endpoint}",
31+
headers=headers,
32+
data=json.dumps(data)
33+
)
34+
if response.status_code == 200:
35+
sentiment = response.json()
36+
return sentiment
4337
else:
38+
print(f"Error: {response.status_code}")
4439
return {"sentiment": "neutral"}
4540

4641

47-
# Function to post a review
48-
def post_review(review_data):
49-
# URL for API
50-
url = backend_url + "/insert_review"
51-
52-
# Send the POST request
42+
def post_review(review_json):
43+
"""
44+
Sends a review to the database server as a JSON
45+
"""
46+
server = "https://sentianalyzer1.1uclblihlz9o.us-south.codeengine.appdomain.cloud"
47+
endpoint = "/insert_review"
48+
headers = {'Content-Type': 'application/json'}
5349
response = requests.post(
54-
url,
55-
headers={"Content-Type": "application/json"},
56-
data=json.dumps(review_data)
50+
f"{server}{endpoint}",
51+
headers=headers,
52+
data=json.dumps(review_json)
5753
)
58-
59-
print("Post Status: {}".format(response.status_code))
60-
print("Post Response: {}".format(response.text))
61-
62-
return response.json()
54+
if response.status_code == 200:
55+
return {"status": "success"}
56+
else:
57+
print(f"Error: {response.status_code}")
58+
return {"status": "error"}
6359

server/djangoapp/urls.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,26 @@
88
# route is a string contains a URL pattern
99
# view refers to the view function
1010
# name the URL
11+
path('', views.registration, name='index'),
1112

12-
# path for about view
13-
path(route='', view=views.get_dealerships, name='index'),
14-
1513
# path for registration
1614
path('registration/', views.registration, name='registration'),
1715

1816
# path for login
1917
path('login/', views.login_user, name='login'),
18+
19+
# path for logout
2020
path('logout/', views.logout_request, name='logout'),
21+
2122
path('get_cars/', views.get_cars, name='get_cars'),
2223

2324
# path for dealer reviews view
24-
path('reviews/dealer/<int:dealer_id>/', views.get_dealer_reviews, name='dealer_details'),
25+
path('dealer_details/<int:dealer_id>/', views.get_dealer_details, name='dealer_details'),
2526

26-
# path for add a review view
27-
path('add_review/', views.add_review, name='add_review'),
28-
path('dealer/<int:dealer_id>/', views.get_dealer_details, name='dealer_details'),
29-
path('get_dealers/', views.get_dealerships, name='dealers'),
30-
path('get_dealers/<str:state>/', views.get_dealerships, name='dealers_by_state'),
27+
# path for dealers
28+
path('dealerships/', views.get_dealerships, name='dealerships'),
29+
path('dealerships/<str:state>/', views.get_dealerships, name='dealerships_st'),
30+
31+
# path for dealer reviews view
32+
path('dealer_reviews/<int:dealer_id>/', views.get_dealer_reviews, name='dealer_reviews'),
3133
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

server/djangoapp/views.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,14 @@ def logout_request(request):
4444
# Create a `registration` view to handle sign up request
4545
@csrf_exempt
4646
def registration(request):
47-
context = {}
4847
data = json.loads(request.body)
4948
username = data['userName']
5049
password = data['password']
5150
first_name = data['firstName']
5251
last_name = data['lastName']
5352
email = data['email']
5453
username_exist = False
55-
email_exist = False
54+
# Not using email_exist in code, can be used for future validation
5655
try:
5756
# Check if user already exists
5857
User.objects.get(username=username)
@@ -96,9 +95,9 @@ def get_dealer_reviews(request, dealer_id):
9695
reviews = get_request(endpoint)
9796
print(reviews)
9897
for review_detail in reviews:
99-
response = analyze_review_sentiments(review_detail['review'])
100-
print(response)
101-
review_detail['sentiment'] = response['sentiment']
98+
sentiment_response = analyze_review_sentiments(review_detail['review'])
99+
print(sentiment_response)
100+
review_detail['sentiment'] = sentiment_response['sentiment']
102101
return JsonResponse({"status": 200, "reviews": reviews})
103102
else:
104103
return JsonResponse({"status": 400, "message": "Bad Request"})
@@ -122,7 +121,10 @@ def add_review(request):
122121
response = post_review(data)
123122
return JsonResponse({"status": 200, "message": "Review Submitted"})
124123
except Exception:
125-
return JsonResponse({"status": 401, "message": "Error in posting review"})
124+
return JsonResponse({
125+
"status": 401,
126+
"message": "Error in posting review"
127+
})
126128
else:
127129
return JsonResponse({"status": 403, "message": "unauthorized"})
128130

server/djangoproj/settings.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/
2323

2424
# SECURITY WARNING: keep the secret key used in production secret!
25-
SECRET_KEY =\
26-
'django-insecure-ccow$tz_=9%dxu4(0%^(z%nx32#s@(zt9$ih@)5l54yny)wm-0'
25+
SECRET_KEY = ('django-insecure-ccow$tz_=9%dxu4(0%^(z%nx32#s@(zt9$ih@)'
26+
'5l54yny)wm-0')
2727

2828
# SECURITY WARNING: don't run with debug turned on in production!
2929
DEBUG = True
@@ -82,7 +82,6 @@
8282
]
8383

8484

85-
8685
WSGI_APPLICATION = 'djangoproj.wsgi.application'
8786

8887

server/djangoproj/urls.py

Lines changed: 8 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,18 @@
1313
1. Import the include() function: from django.urls import include, path
1414
2. Add a URL to urlpatterns: path('blog/', include('blog.urls'))
1515
"""
16+
1617
from django.contrib import admin
17-
from django.urls import path, include, re_path
18-
from django.views.generic import RedirectView, TemplateView
18+
from django.urls import path, include
1919
from django.conf.urls.static import static
2020
from django.conf import settings
2121

2222
urlpatterns = [
2323
path('admin/', admin.site.urls),
24-
path('djangoapp/', include('djangoapp.urls')),
25-
re_path(r'^$', RedirectView.as_view(
26-
pattern_name='djangoapp:index',
27-
permanent=False)),
28-
path('', TemplateView.as_view(template_name="Home.html")),
29-
path('about/', TemplateView.as_view(template_name="About.html")),
30-
path('contact/', TemplateView.as_view(template_name="Contact.html")),
31-
path('login/', TemplateView.as_view(template_name="index.html")),
32-
path('register/', TemplateView.as_view(template_name="index.html")),
33-
path('logout/', TemplateView.as_view(template_name="index.html")),
34-
path('dealers/', TemplateView.as_view(template_name="index.html")),
35-
path('dealer/<int:dealer_id>', TemplateView.as_view(template_name="index.html")),
36-
path('postreview/<int:dealer_id>', TemplateView.as_view(template_name="index.html"))
24+
25+
# Add a path to the djangoapp URLs
26+
path('djangoapp/', include('djangoapp.urls', namespace='djangoapp')),
27+
28+
# Map the root path to the djangoapp/ URL path
29+
path('', include('djangoapp.urls', namespace='djangoapp_root')),
3730
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

0 commit comments

Comments
 (0)