create new endpoint to expose eligible students for an opeining id

This commit is contained in:
karthikmurakonda 2023-10-19 06:30:46 +05:30
parent f4a55b1d60
commit 158851f6e4
4 changed files with 78 additions and 0 deletions

View File

@ -16,4 +16,5 @@ urlpatterns = [
path('addPPO/', adminViews.addPPO, name="Add PPO"), path('addPPO/', adminViews.addPPO, name="Add PPO"),
path('getStudentApplication/', adminViews.getStudentApplication, name="Get student application"), path('getStudentApplication/', adminViews.getStudentApplication, name="Get student application"),
path('getStats/', adminViews.getStats, name="Get Stats"), path('getStats/', adminViews.getStats, name="Get Stats"),
path('getEligibleStudents/', adminViews.get_eligible_students, name="Get Eligible Students"),
] ]

View File

@ -750,3 +750,28 @@ def getStats(request, id, email, user_type):
print(sys.exc_info()) print(sys.exc_info())
return Response({'action': "Get Stats", 'message': "Something Went Wrong"}, return Response({'action': "Get Stats", 'message': "Something Went Wrong"},
status=status.HTTP_400_BAD_REQUEST) status=status.HTTP_400_BAD_REQUEST)
@api_view(['GET'])
@isAuthorizedService()
@precheck(required_data=[OPENING_ID])
def get_eligible_students(request):
try:
data = request.GET
opening_id = data[OPENING_ID]
if OPENING_TYPE in data:
opening_type= data[OPENING_TYPE]
else:
opening_type= "Placement"
eligible_students=get_eligible_emails(opening_id=opening_id, opening_type=opening_type)
return Response({'action': "Get Eligible Students", 'message': "Eligible Students Fetched",
'eligible_students': eligible_students},
status=status.HTTP_200_OK)
except Http404:
return Response({'action': "Get Eligible Students", 'message': "Opening Not Found"},
status=status.HTTP_404_NOT_FOUND)
except:
logger.warning("Get Eligible Students: " + str(sys.exc_info()))
return Response({'action': "Get Eligible Students", 'message': "Something Went Wrong"},
status=status.HTTP_400_BAD_REQUEST)

View File

@ -100,6 +100,7 @@ EMAIL = "email"
STUDENT = 'student' STUDENT = 'student'
ADMIN = 'admin' ADMIN = 'admin'
SUPER_ADMIN = 's_admin' SUPER_ADMIN = 's_admin'
SERVICE= 'service'
COMPANY = 'company' COMPANY = 'company'
TIER = 'tier' TIER = 'tier'
# To be Configured Properly # To be Configured Properly

View File

@ -151,6 +151,26 @@ def isAuthorized(allowed_users=None):
return decorator return decorator
def isAuthorizedService():
def decorator(view_func):
def wrapper_func(request, *args, **kwargs):
try:
headers = request.META
if 'HTTP_AUTHORIZATION' in headers:
token_id = headers['HTTP_AUTHORIZATION'][7:]
jwt.decode(token_id, os.environ.get("SERVICE_SECRET_KEY"), algorithms="HS256")
return view_func(request, *args, **kwargs)
else:
raise PermissionError("Authorization Header Not Found")
except:
logger.warning("Is Authorized? " + str(sys.exc_info()))
return Response(
{'action': "Is Authorized?", 'message': "Something went wrong. Contact CDC for more details"},
status=status.HTTP_400_BAD_REQUEST)
return wrapper_func
return decorator
def generateRandomString(): def generateRandomString():
try: try:
@ -435,6 +455,37 @@ def send_opening_notifications(opening_id, opening_type=PLACEMENT):
logger.warning('Utils - send_opening_notifications: ' + str(sys.exc_info())) logger.warning('Utils - send_opening_notifications: ' + str(sys.exc_info()))
return False return False
def get_eligible_emails(opening_id, opening_type=PLACEMENT):
try:
# print(opening_id, opening_type)
if opening_type == PLACEMENT:
opening = get_object_or_404(Placement, id=opening_id)
else:
opening = get_object_or_404(Internship, id=opening_id)
emails=[]
students = Student.objects.all()
for student in students.iterator():
if student.branch in opening.allowed_branch:
if student.degree == 'bTech' or opening.rs_eligible is True:
if (isinstance(opening,Placement) and PlacementApplicationConditions(student, opening)[0]) or (
isinstance(opening,Internship) and InternshipApplicationConditions(student, opening)[0]):
try:
student_user = get_object_or_404(User, id=student.id)
# check if he applied
if opening_type == PLACEMENT:
if PlacementApplication.objects.filter(student=student, placement=opening).exists():
continue
else:
if InternshipApplication.objects.filter(student=student, internship=opening).exists():
continue
emails.append(student_user.email)
except Exception as e:
logger.warning('Utils - send_opening_notifications: For Loop' + str(e))
return False
return True, emails
except:
logger.warning('Utils - send_opening_notifications: ' + str(sys.exc_info()))
return False
def exception_email(opening): def exception_email(opening):
opening = opening.dict() opening = opening.dict()