GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — Email API · codeclassroom/codeclassroom@69fec29

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
  • api
    • urls.py
    • views.py
  • app
    • serializers.py
  • codeclassroom
    • settings.py
  • utilities
    • email.py
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎api/urls.py‎

Copy file name to clipboardExpand all lines: api/urls.py
+5-2Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@
88
AssignmentList, AssignmentCreate, AssignmentDetail,
99
QuestionList, QuestionCreate, QuestionDetail,
1010
SubmissionCreate, SubmissionList, SubmissionDetail,
11-
PlagiarismView, JudgeCode
11+
PlagiarismView, JudgeCode,
12+
FeedBackView, ReportQuesiton
1213
)
1314

1415

@@ -56,6 +57,8 @@
5657
# Utility URLs
5758
path('judge', JudgeCode.as_view(), name='code-judge'),
5859
path('codesim/', PlagiarismView.as_view(),
59-
name='plagiarism-detector')
60+
name='plagiarism-detector'),
61+
path('email/feedback', FeedBackView.as_view(), name='feedback'),
62+
path('email/report', ReportQuesiton.as_view(), name='report-question')
6063

6164
]
Collapse file

‎api/views.py‎

Copy file name to clipboardExpand all lines: api/views.py
+33-1Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,12 @@
1717
ClassroomCreateSerializer, ClassroomJoincodeSerializer, ClassroomSerializer,
1818
AssignmentSerializer,
1919
QuestionSerializer,
20-
SolutionSerializer, JudgeSerializer
20+
SolutionSerializer, JudgeSerializer,
21+
FeedBackEmailSerializer, ReportQuestionSerializer
2122
)
2223
from utilities.judge import run_code, submit_code
2324
from utilities.codesim import codesim
25+
from utilities.email import feedback ,report
2426

2527

2628
@api_view(['GET'])
@@ -289,3 +291,33 @@ def post(self, request):
289291
{"detail": "Assignment Does Not Exist"},
290292
status=status.HTTP_404_NOT_FOUND
291293
)
294+
295+
296+
class FeedBackView(generics.CreateAPIView):
297+
"""Feedback for CodeClassroom Website"""
298+
serializer_class = FeedBackEmailSerializer
299+
permission_classes = [AllowAny]
300+
301+
def post(self, request):
302+
email_status = feedback(request.data["email"], request.data["message"])
303+
if email_status:
304+
return Response(
305+
{"detail": "Thanks for your feedback"},
306+
status=status.HTTP_202_ACCEPTED
307+
)
308+
else:
309+
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
310+
311+
312+
class ReportQuesiton(generics.CreateAPIView):
313+
serializer_class = ReportQuestionSerializer
314+
315+
def post(self, request):
316+
report_status = report(request.data["question"], request.data["message"])
317+
if report_status:
318+
return Response(
319+
{"detail": "Thanks for your feedback"},
320+
status=status.HTTP_202_ACCEPTED
321+
)
322+
else:
323+
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)
Collapse file

‎app/serializers.py‎

Copy file name to clipboardExpand all lines: app/serializers.py
+11-1Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,14 @@ class JudgeSerializer(serializers.Serializer):
141141
code = serializers.CharField(required=True)
142142
language = serializers.CharField(required=True)
143143
question = serializers.IntegerField(required=False)
144-
testcases = serializers.CharField(required=False)
144+
testcases = serializers.CharField(required=False)
145+
146+
147+
class FeedBackEmailSerializer(serializers.Serializer):
148+
email = serializers.EmailField(required=False)
149+
message = serializers.CharField(required=True)
150+
151+
152+
class ReportQuestionSerializer(serializers.Serializer):
153+
question = serializers.IntegerField()
154+
message = serializers.CharField(required=True)
Collapse file

‎codeclassroom/settings.py‎

Copy file name to clipboardExpand all lines: codeclassroom/settings.py
+19Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,21 @@
104104
]
105105

106106

107+
# Email Settings
108+
109+
EMAIL_USE_LOCALTIME = True
110+
111+
if DEBUG:
112+
EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
113+
else:
114+
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
115+
EMAIL_HOST = 'smtp.gmail.com'
116+
EMAIL_USE_TLS = True
117+
EMAIL_PORT = 587
118+
EMAIL_HOST_USER = os.environ["user_email"]
119+
EMAIL_HOST_PASSWORD = os.environ["user_pass"]
120+
121+
107122
# Internationalization
108123
# https://docs.djangoproject.com/en/2.2/topics/i18n/
109124

@@ -117,6 +132,10 @@
117132

118133
USE_TZ = True
119134

135+
TIME_FORMAT = [
136+
'%I:%M %p', # 6:22 PM
137+
'%I %p' # 6 PM
138+
]
120139

121140
# Static files (CSS, JavaScript, Images)
122141
# https://docs.djangoproject.com/en/2.2/howto/static-files/
Collapse file

‎utilities/email.py‎

Copy file name to clipboard
+50Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
from django.core.mail import send_mail
2+
from app.models import (
3+
Professor, Question, Assignment,
4+
Classroom, User
5+
)
6+
7+
TO_EMAIL = '[email protected]'
8+
9+
10+
def feedback(email, message):
11+
send_mail(
12+
'User FeedBack',
13+
message,
14+
email,
15+
[TO_EMAIL],
16+
fail_silently=False,
17+
)
18+
return True
19+
20+
21+
def report(question, message):
22+
assignment = Question.objects.filter(pk=question).values('assignment')[0]
23+
classroom = Assignment.objects.filter(
24+
pk=assignment['assignment']).values('classroom')[0]
25+
professor = Classroom.objects.filter(
26+
pk=classroom['classroom']).values('professor')[0]
27+
user = Professor.objects.filter(
28+
pk=professor['professor']).values('user_id')[0]
29+
user_email = User.objects.get(pk=user["user_id"]).email
30+
31+
question_title = Question.objects.get(pk=question).title
32+
print(question_title)
33+
34+
full_message = """
35+
Question titled "{question_title}" has been reported by a user.
36+
FeedBack:
37+
{message}""".format(
38+
question_title=question_title,
39+
message=message
40+
)
41+
42+
send_mail(
43+
'Reported Question',
44+
full_message,
45+
TO_EMAIL,
46+
[user_email],
47+
fail_silently=False,
48+
)
49+
50+
return True

0 commit comments

Comments
0 (0)
You are visitor 01402520 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.