def validateRequest(request):
    headerValidation = True
    '''
	BOTO3 TO VALIDATE THE HEADER IF NEEDED
	check the environment flag ("isHeaderValidationRequired")
	'''
    if ('candidateToken' not in request["body"]
            and 'testMode' not in request["body"]
            and environ.get('isHeaderValidationRequired')):
        requestBody = WOHeader.run(request)
        if (requestBody['authenticationCode'] != "200"):
            headerValidation = False
    else:
        requestBody = request['body']
    '''
	VALIDATE CANDIDATE TOKEN
	'''
    # if('candidateToken' in requestBody):
    # 	candidateInfo = validateCandidate(requestBody)
    # 	requestBody['candidate'] = candidateInfo

    response = {}
    if (not headerValidation):
        print(UNAUTHENTICATION_ERROR_MSG)
        response = {"error": UNAUTHENTICATION_ERROR_MSG, "errorCode": 404}
    elif (not checkAllRequiredValuesPresent(requestBody)):
        print(MISSING_ERROR_MSG)
        response = {"error": MISSING_ERROR_MSG, "errorCode": 402}
    '''
	BUSINESS LOGIC VALIDATION HERE
	'''
    if ('error' not in response):
        userInfo = fetch_user_info(requestBody)
        userGroupId = userInfo["user_group_id"]
        requestBody["userGroup"] = fetch_user_group_name(userGroupId)
        if (not userInfo["is_active"]):
            print(MISSING_LOGIC_MSG)
            print("User permission restricted")
            response = {"error": MISSING_LOGIC_MSG, "errorCode": 402}
        elif ("organizationId" in requestBody and not db_utility.is_exist(
                "organization_details",
            {"organization_id": requestBody["organizationId"]})):
            print(MISSING_LOGIC_MSG)
            print("Organisation ID does not exist")
            response = {"error": MISSING_LOGIC_MSG, "errorCode": 402}

    if ('error' not in response):
        response = requestBody
    return response
Example #2
0
def validateRequest(request):
    headerValidation = True
    '''
	BOTO3 TO VALIDATE THE HEADER IF NEEDED
	check the environment flag ("isHeaderValidationRequired")
	'''
    if ('candidateToken' not in request["body"]
            and 'testMode' not in request["body"]
            and environ.get('isHeaderValidationRequired')):
        requestBody = WOHeader.run(request)
        if (requestBody['authenticationCode'] != "200"):
            headerValidation = False
    else:
        requestBody = request['body']
    '''
	VALIDATE CANDIDATE TOKEN
	'''
    if ('candidateToken' in requestBody):
        if (not db_utility.is_exist("test", {
                "token": requestBody["candidateToken"],
                "is_active": True
        })):
            headerValidation = False

    response = {}
    if (not headerValidation):
        print(UNAUTHENTICATION_ERROR_MSG)
        response = {"error": UNAUTHENTICATION_ERROR_MSG, "errorCode": 404}
    elif (not checkAllRequiredValuesPresent(requestBody)):
        print(MISSING_ERROR_MSG)
        response = {"error": MISSING_ERROR_MSG, "errorCode": 402}
    '''
	BUSINESS LOGIC VALIDATION HERE
	'''
    if ('error' not in response):
        userInfo = fetch_user_info(requestBody)
        requestBody['userGroupId'] = userInfo['user_group_id']
        requestBody["userId"] = userInfo["user_id"]
        if (not userInfo["is_active"]):
            print(MISSING_LOGIC_MSG)
            print("User permission restricted")
            response = {"error": MISSING_LOGIC_MSG, "errorCode": 402}
        elif (userInfo['user_group_id'] == 2):
            requestBody["organizationId"] = userInfo["organization_id"]
            if (not fetch_organisation_status(requestBody["organizationId"])):
                print(MISSING_LOGIC_MSG)
                print("Organisation permission restricted")
                response = {"error": MISSING_LOGIC_MSG, "errorCode": 402}
            elif ('questionSetId' in requestBody and db_utility.is_exist(
                    "question_set", {
                        "question_set_id": requestBody['questionSetId'],
                        "is_question_bank": True
                    })):
                print(MISSING_LOGIC_MSG)
                print("Question bank permission restricted")
                response = {"error": MISSING_LOGIC_MSG, "errorCode": 402}
        elif (userInfo['user_group_id'] == 1):
            if ('questionSetId' in requestBody and db_utility.is_exist(
                    "question_set", {
                        "question_set_id": requestBody['questionSetId'],
                        "is_question_bank": False
                    })):
                print(MISSING_LOGIC_MSG)
                print("Question set permission restricted")
                response = {"error": MISSING_LOGIC_MSG, "errorCode": 402}

    if ('error' not in response):
        response = requestBody
    return response
Example #3
0
def lambda_handler(event, context):
    proxyResponse = {}
    response = {}
    proxyResponse['headers'] = {
        "Access-Control-Allow-Methods": "*",
        "Access-Control-Allow-Headers": "*",
        "Access-Control-Allow-Origin": "*"
    }
    validRequest = validateRequest(event)
    print("Valid Request", validRequest)

    if ('error' in validRequest):
        proxyResponse['statusCode'] = validRequest['errorCode']
        proxyResponse['error'] = validRequest['error']
        return proxyResponse
    else:
        '''
		BUSINESS LOGIC ENDS HERE BY RETURNING RESPONSE JSON
		'''
        try:
            Negative = 0
            Positive = 0
            Mixed = 0
            Neutral = 0
            Nomatch = 0
            response = {}
            print("Test id = ", validRequest['testId'])
            testStatus = db.is_exist(TEST_TABLE,
                                     {"test_id": validRequest['testId']})
            print("test status = ", testStatus, " test status type =",
                  type(testStatus))
            if (not testStatus):
                proxyResponse['statusCode'] = 402
                proxyResponse['error'] = "test not found"
                return proxyResponse
            totalDescQuestions = totalNoOfMCQQuestion(validRequest)
            if (totalDescQuestions == 0):
                response['error'] = "No questions found in the test"
                response['statusCode'] = 402
                return response
            # print("Total score = ",totalScore)
            print("Total question = ", totalDescQuestions)
            questionsAnswered = db.fetch_where_and(
                DESC_SCORE, [{
                    "test_id": validRequest['testId'],
                    "key": SCORE_TYPE
                }])
            print("Ans question = ", questionsAnswered)
            questionsAnsweredCount = len(questionsAnswered)
            print("Ans count = ", questionsAnsweredCount)
            if (questionsAnsweredCount == 0):
                print("No questions found")
                response['statusCode'] = 200
                response['body'] = json.dumps([])
                return response
            for i in questionsAnswered:
                print("question =  ", i)
                if i['label'] == "Negative":
                    print("Negative")
                    Negative += 1
                elif i['label'] == "Positive":
                    print("Positive")
                    Positive += 1
                elif i['label'] == "Neutral":
                    print("Neutral")
                    Neutral += 1
                elif i['label'] == "Mixed":
                    print("Mixed")
                    Mixed += 1
                else:
                    print("Nomatch")
                    Nomatch += 1
            print(Negative, Positive, Neutral, Mixed)
            if (totalDescQuestions > questionsAnsweredCount):
                NegativePercent = int(
                    (Negative / questionsAnsweredCount) * 100)
                PositivePercent = int(
                    (Positive / questionsAnsweredCount) * 100)
                MixedPercent = int((Mixed / questionsAnsweredCount) * 100)
                NeutralPercent = int((Neutral / questionsAnsweredCount) * 100)
                response['totalQuestionInDB'] = int(questionsAnsweredCount)
            else:
                NegativePercent = int((Negative / totalDescQuestions) * 100)
                PositivePercent = int((Positive / totalDescQuestions) * 100)
                MixedPercent = int((Mixed / totalDescQuestions) * 100)
                NeutralPercent = int((Neutral / totalDescQuestions) * 100)
                response['totalQuestionInDB'] = int(totalDescQuestions)
            response['NegativePercent'] = NegativePercent
            response['PositivePercent'] = PositivePercent
            response['MixedPercent'] = MixedPercent
            response['NeutralPercent'] = NeutralPercent
            response['totalQuestion'] = findingDescQuestionCount(
                validRequest['testId'])
            print("response = ", response)
            proxyResponse['statusCode'] = 200
            proxyResponse['body'] = json.dumps(response)
            return proxyResponse
        except Exception as e:
            proxyResponse['statusCode'] = 402
            proxyResponse['error'] = str(e)
            return proxyResponse
        print(proxyResponse)
    return proxyResponse
def lambda_handler(event, context):
    print(event['body'])
    Bucket = event['body']['Bucket']
    # Bucket="workonic-media-files"
    # key="mainCSV/6_Sample.csv"
    key = event['body']['Key']
    print(key)
    s3 = boto3.client('s3')
    obj = s3.get_object(Bucket=Bucket, Key=key)
    emailcontent = obj['Body'].read().decode('utf-8')
    print("YES")
    TESTDATA = StringIO(emailcontent)
    df = pd.read_csv(TESTDATA, sep=",")
    print(df)
    event['body']['csv'] = df

    # for bucket in s3.buckets.all():
    #     print(bucket.name)
    proxyResponse = {}
    response = {}
    proxyResponse['headers'] = {
        "Access-Control-Allow-Methods": "*",
        "Access-Control-Allow-Headers": "*",
        "Access-Control-Allow-Origin": "*"
    }

    validRequest = validateRequest(event)
    if ('error' in validRequest):
        proxyResponse['statusCode'] = validRequest['errorCode']
        proxyResponse['error'] = validRequest['error']
    else:
        '''
        BUSINESS LOGIC STARTS HERE
        '''
        userName = validRequest['userId']
        userDetail = db_utility.fetch_where("user_master",
                                            {"user_name": userName})[0]
        # print(userDetail)
        csvFile = validRequest['csv']
        insertionFailed = []
        for i in range(csvFile.shape[0]):
            # print(csvFile.loc[i])
            candidate_param = {}
            test_param = {}
            tracker_param = {}
            invitation_param = {}
            param = {}
            firstName = csvFile.loc[i, 'firstName']
            email = csvFile.loc[i, 'email']
            print(email)
            candidate_param['candidate_id'] = db_utility.fetch_next_id(
                "candidate", "candidate_id")
            candidate_param["_id"] = candidate_param["candidate_id"]
            candidate_param['first_name'] = firstName
            if (not pd.isnull(csvFile.loc[i, 'lastName'])):
                lastName = csvFile.loc[i, 'lastName']
                candidate_param['last_name'] = lastName
            candidate_param['email'] = email
            candidate_param['is_active'] = True
            candidate_param['created_at'] = datetime.datetime.now().strftime(
                "%Y-%m-%dT%H:%M:%S")
            candidate_param['organization_id'] = userDetail['organization_id']
            candidate_param['created_by'] = userDetail['user_id']

            questionSetDetail = db_utility.fetch_where(
                "question_set",
                {"question_set_id": validRequest['question_set_id']})[0]

            test_param['test_id'] = db_utility.fetch_next_id("test", "test_id")
            test_param["_id"] = test_param["test_id"]
            test_param['candidate_id'] = candidate_param["candidate_id"]
            test_param['created_at'] = datetime.datetime.now().strftime(
                "%Y-%m-%dT%H:%M:%S")
            test_param['question_set_id'] = validRequest['question_set_id']
            test_param['is_active'] = True
            test_param['created_at'] = datetime.datetime.now().strftime(
                "%Y-%m-%dT%H:%M:%S")
            test_param['organization_id'] = userDetail['organization_id']
            test_param['created_by'] = userDetail['user_id']
            test_param['expire_at'] = questionSetDetail['expire_at']
            while True:
                token = ''.join(
                    random.choice(string.ascii_lowercase) for i in range(10))
                # print(token)
                tokenValidation = db_utility.is_exist("test", {"token": token})
                if (not tokenValidation):
                    test_param['token'] = token
                    break
                else:
                    continue

            tracker_param = {}
            tracker_param['tracker_id'] = db_utility.fetch_next_id(
                "log_tracker", "tracker_id")
            tracker_param["_id"] = tracker_param['tracker_id']
            tracker_param['test_id'] = test_param['test_id']
            tracker_param['activity_type_id'] = "000"
            tracker_param['activity_time'] = datetime.datetime.now().strftime(
                "%Y-%m-%dT%H:%M:%S")

            candidate_data = db_utility.insert_data_one(
                "candidate", candidate_param)
            test_data = db_utility.insert_data_one("test", test_param)
            tracker_data = db_utility.insert_data_one("log_tracker",
                                                      tracker_param)

            if candidate_data == "200" and tracker_data == "200" and test_data == "200":
                print("Data Inserted")
                param = tracker_param
                orgDetail = db_utility.fetch_where(
                    "organization_details",
                    {"organization_id": userDetail['organization_id']})[0]

                organisation_name = orgDetail['organization_name']
                test_name = questionSetDetail['question_set_name']
                first_name = firstName
                recruiter_name = orgDetail['organization_name']
                recruiter_phone = orgDetail['contact_number']
                test_url = environ.get('TESTURL') + '/#/token/' + token
                # test_url = 'localhost:4200/token/'+token
                recruiter_email = orgDetail['contact_email']
                test_duration = questionSetDetail['duration']
                test_expire = questionSetDetail['expire_at']

                inviteParam = {
                    'organisation_name': organisation_name,
                    'test_name': test_name,
                    'first_name': first_name,
                    'recruiter_name': recruiter_name,
                    'test_url': test_url,
                    'recruiter_phone': recruiter_phone,
                    'recruiter_email': recruiter_email,
                    'test_duration': test_duration,
                    'test_expire': test_expire
                }

                request = {
                    "to": [email],
                    "parameters": inviteParam,
                    'templateName': 'test_invite',
                    'candidateToken': token
                }
                client = boto3.client('lambda', region_name=environ['Region'])
                response = client.invoke(FunctionName='WO-' +
                                         environ['stage'] + '-SendEmail',
                                         InvocationType='RequestResponse',
                                         Payload=json.dumps({'body': request}))
                # response=json.loads(response['Payload'].read().decode("utf-8"))
                # print(response)
                response = "200"
                if response == "200":
                    print("Test Invitation Sent")
                    invitation_param['tracker_id'] = db_utility.fetch_next_id(
                        "log_tracker", "tracker_id")
                    invitation_param["_id"] = invitation_param['tracker_id']
                    invitation_param['test_id'] = test_param['test_id']
                    invitation_param['activity_type_id'] = "001"
                    invitation_param['activity_time'] = datetime.datetime.now(
                    ).strftime("%Y-%m-%dT%H:%M:%S")
                    invitation_data = db_utility.insert_data_one(
                        "log_tracker", invitation_param)
                else:
                    param['statusCode'] = 400
                    param['Error'] = DATABASE_CONNECTION_ERROR
                    param['erroMessage'] = "Sending Inivitation Failed"
                    invitation_data = "0"
                if invitation_data == "200":
                    print("Invitation Data Inserted")
                    param['statusCode'] = 200
                    param['Message'] = "All User Inserted"
                else:
                    param['statusCode'] = 400
                    param['Error'] = DATABASE_CONNECTION_ERROR
                    insertionFailed.append(i)
                    param["insertionFailedFor"] = insertionFailed
            else:
                param['statusCode'] = 400
                param['Error'] = DATABASE_CONNECTION_ERROR
                insertionFailed.append(i)
                param["insertionFailedFor"] = insertionFailed
            response = param
    '''
		BUSINESS LOGIC ENDS HERE BY RETURNING RESPONSE JSON
		'''
    proxyResponse['statusCode'] = 200
    # response={}
    # print(response)
    proxyResponse['body'] = json.dumps(response)
    print(proxyResponse)
    return proxyResponse
Example #5
0
def lambda_handler(event, context):
    proxyResponse = {}
    response = {}
    proxyResponse['headers'] = {
        "Access-Control-Allow-Methods": "*",
        "Access-Control-Allow-Headers": "*",
        "Access-Control-Allow-Origin": "*"
    }
    validRequest = validateRequest(event)
    print("Valid Request", validRequest)

    if ('error' in validRequest):
        proxyResponse['statusCode'] = validRequest['errorCode']
        proxyResponse['error'] = validRequest['error']
        return proxyResponse
    else:
        '''
		BUSINESS LOGIC ENDS HERE BY RETURNING RESPONSE JSON
		'''
        try:
            Negative = 0
            Positive = 0
            Mixed = 0
            Neutral = 0
            Nomatch = 0
            response = {}
            print("Test id = ", validRequest['testId'])
            testStatus = db.is_exist(TEST_TABLE,
                                     {"test_id": validRequest['testId']})
            print("test status = ", testStatus, " test status type =",
                  type(testStatus))
            if (not testStatus):
                proxyResponse['statusCode'] = 402
                proxyResponse['error'] = "test not found"
                return proxyResponse
            totalDescQuestions = totalNoOfMCQQuestion(validRequest)
            if (totalDescQuestions == 0):
                response['error'] = "No questions found in the test"
                response['statusCode'] = 402
                return response
            # print("Total score = ",totalScore)
            print("Total question = ", totalDescQuestions)
            questionsAnswered = db.fetch_where_and(
                DESC_SCORE, [{
                    "test_id": validRequest['testId'],
                    "key": SCORE_TYPE
                }])
            print("Ans question = ", questionsAnswered)
            questionsAnsweredCount = len(questionsAnswered)
            print("Ans count = ", questionsAnsweredCount)
            if (questionsAnsweredCount == 0):
                print("No questions found")
                response['statusCode'] = 200
                response['body'] = json.dumps([])
                return response
            high = []
            low = []
            [
                high.append(i) if (i['label'] == 'High') else low.append(i)
                for i in questionsAnswered
            ]
            highAgeRange = math.ceil(sum(i['value'] for i in high) / len(high))
            print("HighAgeRange =  ", highAgeRange)
            lowAgeRange = math.ceil(sum(i['value'] for i in low) / len(low))
            print("lowAgeRange =  ", lowAgeRange)
            questionsAnswered = db.fetch_where_and(
                DESC_SCORE, [{
                    "test_id": validRequest['testId'],
                    "key": GENDER
                }])
            genderList = []
            for i in questionsAnswered:
                genderList.append(i['label'])
            print("genderList = ", genderList)
            genderCount = {i: genderList.count(i) for i in set(genderList)}
            print("genderCount = ", genderCount)
            genderMaxProb = max(genderCount.keys(),
                                key=(lambda x: genderCount[x]))
            print("genderMaxProbability = ", genderMaxProb)
            response['highAgeRange'] = highAgeRange
            response['lowAgeRange'] = lowAgeRange
            response['gender'] = genderMaxProb
            proxyResponse['statusCode'] = 200
            proxyResponse['body'] = json.dumps(response)
            return proxyResponse
        except Exception as e:
            proxyResponse['statusCode'] = 402
            proxyResponse['error'] = str(e)
            return proxyResponse
        print(proxyResponse)
    return proxyResponse
def lambda_handler(event, context):
    proxyResponse = {}
    response = {}
    proxyResponse['headers'] = {
        "Access-Control-Allow-Methods": "*",
        "Access-Control-Allow-Headers": "*",
        "Access-Control-Allow-Origin": "*"
    }
    validRequest = validateRequest(event)
    print("Valid Request", validRequest)

    if ('error' in validRequest):
        proxyResponse['statusCode'] = validRequest['errorCode']
        proxyResponse['error'] = validRequest['error']
        return proxyResponse
    else:
        '''
		BUSINESS LOGIC ENDS HERE BY RETURNING RESPONSE JSON
		'''
        try:
            response = {}
            print("Test id = ", validRequest['testId'])
            testStatus = db.is_exist(TEST_TABLE,
                                     {"test_id": validRequest['testId']})
            print("test status = ", testStatus, " test status type =",
                  type(testStatus))
            if (not testStatus):
                proxyResponse['statusCode'] = 402
                proxyResponse['error'] = "test not found"
                return proxyResponse
            totalMCQQuestions, totalScore = totalNoOfMCQQuestion(validRequest)
            if (totalMCQQuestions == 0):
                # response['error'] = "No questions found in the test"
                # response['statusCode'] = 402
                # return response
                print("No quesiton attempted ")
                response['percentage'] = 0
                response['correctAnswers'] = 0
                response['testId'] = validRequest['testId']
                response['totalQuestions'] = totalMCQQuestions
                response['overallScore'] = int(
                    overallScore(validRequest['testId']))
                proxyResponse['statusCode'] = 200
                proxyResponse['body'] = json.dumps(response)
                return proxyResponse
            print("Total score = ", totalScore)
            print("Total question = ", totalMCQQuestions)
            mcqAttended = db.fetch_where_and(
                MCQ_SCORE, [{
                    "test_id": validRequest['testId']
                }])
            mcqAttendedCount = len(mcqAttended)
            if (mcqAttendedCount == 0):
                print("No quesiton attempted ")
                response['percentage'] = 0
                response['correctAnswers'] = 0
                response['testId'] = validRequest['testId']
                response['totalQuestions'] = totalMCQQuestions
                proxyResponse['statusCode'] = 200
                proxyResponse['body'] = json.dumps(response)
                return proxyResponse
            print("Attended questions = ", mcqAttended)
            print("Attended question count = ", mcqAttendedCount)
            attendedScore = sum(i['score'] for i in mcqAttended)
            wrongAnswersList = [i for i in mcqAttended if (i['score'] == 0)]
            print("Wrong answers list = ", wrongAnswersList)
            wrongAnswersCount = len(wrongAnswersList)
            print("wrongAnswersCount = ", wrongAnswersCount)
            percentageScore = (attendedScore / totalScore) * 100
            print("percentage  = ", percentageScore)
            response['percentage'] = int(percentageScore)
            response['correctAnswers'] = mcqAttendedCount - wrongAnswersCount
            response['totalQuestions'] = totalMCQQuestions
            response['testId'] = validRequest['testId']
            response['overallScore'] = int(overallScore(
                validRequest['testId']))
            proxyResponse['statusCode'] = 200
            proxyResponse['body'] = json.dumps(response)
            print("last response = ", response)
            return proxyResponse
        except Exception as e:
            proxyResponse['statusCode'] = 402
            proxyResponse['error'] = "Error in database"
            return proxyResponse
        print(proxyResponse)
    return proxyResponse
Example #7
0
def lambda_handler(event, context):
    proxyResponse = {}
    response = {}
    proxyResponse['headers'] = {
        "Access-Control-Allow-Methods": "*",
        "Access-Control-Allow-Headers": "*",
        "Access-Control-Allow-Origin": "*"
    }

    validRequest = validateRequest(event)
    if ('error' in validRequest):
        proxyResponse['statusCode'] = validRequest['errorCode']
        proxyResponse['error'] = validRequest['error']
    else:
        '''
        BUSINESS LOGIC STARTS HERE
        '''
        userName = validRequest['userId']
        userDetail = db_utility.fetch_where("user_master",
                                            {"user_name": userName})[0]
        print(userDetail)
        candidate_param = {}
        test_param = {}
        tracker_param = {}
        invitation_param = {}
        param = {}

        # for i in requiredParams:
        # 	candidate_param[i]=validRequest[i]

        candidate_param['candidate_id'] = db_utility.fetch_next_id(
            "candidate", "candidate_id")
        candidate_param["_id"] = candidate_param["candidate_id"]
        candidate_param['first_name'] = validRequest['first_name']
        if 'last_name' in validRequest:
            candidate_param['last_name'] = validRequest['last_name']
        if 'mobile_number' in validRequest:
            candidate_param['mobile_number'] = validRequest['mobile_number']
        candidate_param['email'] = validRequest['email']
        candidate_param['is_active'] = True
        candidate_param['created_at'] = datetime.datetime.now().strftime(
            "%Y-%m-%dT%H:%M:%S")
        candidate_param['organization_id'] = userDetail['organization_id']
        candidate_param['created_by'] = userDetail['user_id']

        questionSetDetail = db_utility.fetch_where(
            "question_set",
            {"question_set_id": validRequest['question_set_id']})[0]
        # print(questionSetDetail)
        test_param['test_id'] = db_utility.fetch_next_id("test", "test_id")
        test_param["_id"] = test_param["test_id"]
        test_param['candidate_id'] = candidate_param["candidate_id"]
        test_param['created_at'] = datetime.datetime.now().strftime(
            "%Y-%m-%dT%H:%M:%S")
        test_param['question_set_id'] = validRequest['question_set_id']
        test_param['is_active'] = True
        test_param['created_at'] = datetime.datetime.now().strftime(
            "%Y-%m-%dT%H:%M:%S")
        test_param['organization_id'] = userDetail['organization_id']
        test_param['created_by'] = userDetail['user_id']
        test_param['expire_at'] = questionSetDetail['expire_at']
        while True:
            token = ''.join(
                random.choice(string.ascii_lowercase) for i in range(10))
            # print(token)
            tokenValidation = db_utility.is_exist("test", {"token": token})
            if (not tokenValidation):
                test_param['token'] = token
                break
            else:
                continue

        tracker_param = {}
        tracker_param['tracker_id'] = db_utility.fetch_next_id(
            "log_tracker", "tracker_id")
        tracker_param["_id"] = tracker_param['tracker_id']
        tracker_param['test_id'] = test_param['test_id']
        tracker_param['activity_type_id'] = "000"
        tracker_param['activity_time'] = datetime.datetime.now().strftime(
            "%Y-%m-%dT%H:%M:%S")

        candidate_data = db_utility.insert_data_one("candidate",
                                                    candidate_param)
        test_data = db_utility.insert_data_one("test", test_param)
        tracker_data = db_utility.insert_data_one("log_tracker", tracker_param)

        if candidate_data == "200" and tracker_data == "200" and test_data == "200":
            print("Data Inserted")
            param = tracker_param
            orgDetail = db_utility.fetch_where(
                "organization_details",
                {"organization_id": userDetail['organization_id']})[0]

            organisation_name = orgDetail['organization_name']
            test_name = questionSetDetail['question_set_name']
            first_name = validRequest['first_name']
            recruiter_name = orgDetail['organization_name']
            recruiter_phone = orgDetail['contact_number']
            test_url = environ.get('TESTURL') + '/#/token/' + token
            recruiter_email = orgDetail['contact_email']
            test_duration = questionSetDetail['duration']
            test_expire = questionSetDetail['expire_at']

            inviteParam = {
                'organisation_name': organisation_name,
                'test_name': test_name,
                'first_name': first_name,
                'recruiter_name': recruiter_name,
                'test_url': test_url,
                'recruiter_phone': recruiter_phone,
                'recruiter_email': recruiter_email,
                'test_duration': test_duration,
                'test_expire': test_expire
            }

            request = {
                "to": [validRequest['email']],
                "parameters": inviteParam,
                'templateName': 'test_invite',
                'candidateToken': token
            }

            client = boto3.client('lambda', region_name=environ['Region'])
            response = client.invoke(FunctionName='WO-' + environ['stage'] +
                                     '-SendEmail',
                                     InvocationType='RequestResponse',
                                     Payload=json.dumps({'body': request}))

            response = "200"
            if response == "200":
                print("Test Invitation Sent")
                invitation_param['tracker_id'] = db_utility.fetch_next_id(
                    "log_tracker", "tracker_id")
                invitation_param["_id"] = invitation_param['tracker_id']
                invitation_param['test_id'] = test_param['test_id']
                invitation_param['activity_type_id'] = "001"
                invitation_param['activity_time'] = datetime.datetime.now(
                ).strftime("%Y-%m-%dT%H:%M:%S")
                invitation_data = db_utility.insert_data_one(
                    "log_tracker", invitation_param)
            else:
                param['statusCode'] = 400
                param['Error'] = DATABASE_CONNECTION_ERROR
                param['erroMessage'] = "Sending Inivitation Failed"
                invitation_data = "0"
            if invitation_data == "200":
                print("Invitation Data Inserted")
                param = invitation_param
            else:
                param['statusCode'] = 400
                param['Error'] = DATABASE_CONNECTION_ERROR
        else:
            param['statusCode'] = 400
            param['Error'] = DATABASE_CONNECTION_ERROR
        response = param
    '''
		BUSINESS LOGIC ENDS HERE BY RETURNING RESPONSE JSON
		'''
    proxyResponse['statusCode'] = 200
    # response={}
    # print(response)
    proxyResponse['body'] = json.dumps(response)
    print(proxyResponse)
    return proxyResponse
Example #8
0
def lambda_handler(event, context):
    proxyResponse = {}
    response = {}
    proxyResponse['headers'] = {
        "Access-Control-Allow-Methods": "*",
        "Access-Control-Allow-Headers": "*",
        "Access-Control-Allow-Origin": "*"
    }
    validRequest = validateRequest(event)
    print("Valid Request", validRequest)

    if ('error' in validRequest):
        proxyResponse['statusCode'] = validRequest['errorCode']
        proxyResponse['error'] = validRequest['error']
        return proxyResponse
    else:
        '''
		BUSINESS LOGIC ENDS HERE BY RETURNING RESPONSE JSON
		'''
        try:
            Negative = 0
            Positive = 0
            Mixed = 0
            Neutral = 0
            Nomatch = 0
            response = {}
            print("Test id = ", validRequest['testId'])
            testStatus = db.is_exist(TEST_TABLE,
                                     {"test_id": validRequest['testId']})
            print("test status = ", testStatus, " test status type =",
                  type(testStatus))
            if (not testStatus):
                proxyResponse['statusCode'] = 402
                proxyResponse['error'] = "test not found"
                return proxyResponse
            totalDescQuestions = totalNoOfMCQQuestion(validRequest)
            if (totalDescQuestions == 0):
                response['error'] = "No questions found in the test"
                response['statusCode'] = 402
                return response
            # print("Total score = ",totalScore)
            print("Total question = ", totalDescQuestions)
            questionsAnswered = db.fetch_where_and(
                DESC_SCORE, [{
                    "test_id": validRequest['testId'],
                    "key": SCORE_TYPE
                }])
            print("Ans question = ", questionsAnswered)
            questionsAnsweredCount = len(questionsAnswered)
            print("Ans count = ", questionsAnsweredCount)
            if (questionsAnsweredCount == 0):
                print("No questions found")
                response['statusCode'] = 200
                response['body'] = json.dumps([])
                return response
            emotionsList = []
            for i in questionsAnswered:
                emotionsList.append(i['label'])
            print("Emotions list = ", emotionsList)
            emotionScore = {
                i: emotionsList.count(i)
                for i in set(emotionsList)
            }
            print("Emotion score = ", emotionScore)
            proxyResponse['statusCode'] = 200
            proxyResponse['body'] = json.dumps(emotionScore)
            return proxyResponse
        except Exception as e:
            proxyResponse['statusCode'] = 402
            proxyResponse['error'] = str(e)
            return proxyResponse
        print(proxyResponse)
    return proxyResponse