コード例 #1
0
    def find_best(self, scores):
        date_risk = "N/A"
        value_risk = 0.0
        date_cost = "N/A"
        value_cost = 0.0
        id_risk = 1
        id_cost = 1
        scores_1, scores_2 = itertools.tee(scores)
        for row in scores_1:
            if row.score_type == 1:
                date_risk = row.date
                value_risk = row.score_value
                id_risk = row.userid
                break
        for row in scores_2:
            if row.score_type == 2:
                date_cost = row.date
                value_cost = row.score_value
                id_cost = row.userid
                break

        value_risk_cost = db.select(
            'scores',
            where="date=$date_risk&&userid=$id_risk&&score_type=2",
            vars=locals())[0].score_value
        value_cost_risk = db.select(
            'scores',
            where="date=$date_cost&&userid=$id_cost&&score_type=1",
            vars=locals())[0].score_value
        return value_risk, value_risk_cost, date_risk, value_cost, value_cost_risk, date_cost
コード例 #2
0
ファイル: pw_policy.py プロジェクト: daviducl/sprks
    def latest_policy(self, user_id):
        policy = {
            'location': "",
            'employee': "",
            'device': "",
            'bdata': "", # why are these strings and not numbers?
            'pdata': ""}
        policy.update(self.default)

        db_policy_all = db.select('policies', where="user_id=$user_id", order="date DESC", vars=locals())
        if len(db_policy_all) > 0:
            db_policy = db_policy_all[0]
            db_bio = db.select('biometrics', where="id=$db_policy.bio_id", vars=locals())[0]
            db_pass = db.select('passfaces', where="id=$db_policy.pass_id", vars=locals())[0]
            db_pw = db.select('pw_policy_test', where="id=$db_policy.pw_id", vars=locals())[0]
            policy["location"] = db_policy.location
            policy["employee"] = db_policy.employee
            policy["device"] = db_policy.device
            policy["bdata"] = db_bio.bdata
            policy["pdata"] = db_pass.pdata
            policy["plen"] = db_pw.plen
            policy["psets"] = db_pw.psets
            policy["pdict"] = db_pw.pdict
            policy["phist"] = db_pw.phist
            policy["prenew"] = db_pw.prenew
            policy["pattempts"] = db_pw.pattempts
            policy["precovery"] = db_pw.precovery

        return policy
コード例 #3
0
ファイル: users.py プロジェクト: Zhanelya/sprks
 def select_users(cls, user_id=0, username=''):
     """
     Returns list of all users with 'username' and 'user_id' (optional) parameters.
     """
     if user_id > 0:
         if username != '':
             return db.select('users', where="username=$username&&user_id=$user_id", vars=locals())
         else:
             return db.select('users', where="user_id=$user_id", vars=locals())
     else:
         return db.select('users', where="username=$username", vars=locals())
コード例 #4
0
ファイル: policy_history.py プロジェクト: daviducl/sprks
    def GET(self):

        web.header('Content-Type', 'application/json')

        #get policy history (used in table display on a Profile page)
        policy_history = policies_model.get_policy_history(context.user_id())

        #get risks, costs for all months played by a user (used in graphs display on a Profile page)
        userid = context.user_id()
        scores = db.select('scores', where='userid=$userid', order="date ASC", vars=locals())
        scores_result = []
        for row in scores:
            tmp = {}
            for key, value in row.iteritems():
                tmp[key] = str(value)
            scores_result.append(tmp)
        history = json.dumps(
            {
            'policy_history': json.dumps(policy_history),
            'graph_data': json.dumps(scores_result)
            }
        )

        if history:
            return history
コード例 #5
0
    def GET(self):

        web.header('Content-Type', 'application/json')

        #get policy history (used in table display on a Profile page)
        policy_history = policies_model.get_policy_history(context.user_id())

        #get risks, costs for all months played by a user (used in graphs display on a Profile page)
        userid = context.user_id()
        scores = db.select('scores',
                           where='userid=$userid',
                           order="date ASC",
                           vars=locals())
        scores_result = []
        for row in scores:
            tmp = {}
            for key, value in row.iteritems():
                tmp[key] = str(value)
            scores_result.append(tmp)
        history = json.dumps({
            'policy_history': json.dumps(policy_history),
            'graph_data': json.dumps(scores_result)
        })

        if history:
            return history
コード例 #6
0
ファイル: pwpolicy.py プロジェクト: Zhanelya/sprks
    def GET(self):
        """
        Handles AJAX requests to get client's most recent policies.
        """

        if context.user_id() == 0:
            raise web.seeother(path + '/home')

        check = db.select('pw_policy', where='userid=$context.user_id()', order='date DESC', vars=locals())
        if len(check) > 0:
            result_get = check[0]
            return json.dumps(
                {
                    'plen': result_get.plen,
                    'psets': result_get.psets,
                    'pdict': result_get.pdict,
                    'phist': result_get.phist,
                    'prenew': result_get.prenew,
                    'pattempts': result_get.pattempts,
                    'precovery': result_get.precovery,
                    'date': result_get.date
                }
            )

        else:
            return json.dumps(self.default_policy)
コード例 #7
0
 def select_users(cls, user_id=0, username=''):
     """
     Returns list of all users with 'username' and 'user_id' (optional) parameters.
     """
     if user_id > 0:
         if username != '':
             return db.select('users',
                              where="username=$username&&user_id=$user_id",
                              vars=locals())
         else:
             return db.select('users',
                              where="user_id=$user_id",
                              vars=locals())
     else:
         return db.select('users',
                          where="username=$username",
                          vars=locals())
コード例 #8
0
ファイル: users.py プロジェクト: Zhanelya/sprks
 def get_user_id(cls, username):
     """
     Returns user_id given username, 0 otherwise.
     """
     users = db.select('users', where="username=$username", vars=locals())
     if len(users) == 1:
         return users[0].user_id
     else:
         return 0
コード例 #9
0
ファイル: users.py プロジェクト: Zhanelya/sprks
 def get_username(cls, user_id):
     """
     Returns username of user given user_id, empty string otherwise.
     """
     users = db.select('users', where="user_id=$user_id", vars=locals())
     if len(users) == 1:
         return users[0].username
     else:
         return ''
コード例 #10
0
 def get_user_id(cls, username):
     """
     Returns user_id given username, 0 otherwise.
     """
     users = db.select('users', where="username=$username", vars=locals())
     if len(users) == 1:
         return users[0].user_id
     else:
         return 0
コード例 #11
0
 def get_username(cls, user_id):
     """
     Returns username of user given user_id, empty string otherwise.
     """
     users = db.select('users', where="user_id=$user_id", vars=locals())
     if len(users) == 1:
         return users[0].username
     else:
         return ''
コード例 #12
0
ファイル: users.py プロジェクト: Zhanelya/sprks
 def password_recovery_user(cls, token):
     """
     Return user_id if password request ticket is valid. 0 otherwise.
     :param token:
     """
     user_list = db.select('password_recovery', where="token=$token&&invalid=0", vars=locals())
     if len(user_list) == 1:
         return user_list[0].user_id
     else:
         return 0
コード例 #13
0
ファイル: users.py プロジェクト: Zhanelya/sprks
 def check_credentials(cls, username, password):
     """
     Returns ID of user if credentials match, 0 otherwise.
     """
     password = hash_utils.hash_password(password)
     auth = db.select('users', where="username=$username&&password=$password", vars=locals())
     if len(auth) == 1:
         return auth[0].user_id
     else:
         return 0
コード例 #14
0
 def password_recovery_user(cls, token=''):
     """
     Return user_id if password request ticket is valid. 0 otherwise.
     :param token:
     """
     user_list = db.select('password_recovery',
                           where="token=$token&&invalid=0",
                           vars=locals())
     if len(user_list) == 1:
         return user_list[0].user_id
     else:
         return 0
コード例 #15
0
 def check_credentials(cls, username, password):
     """
     Returns ID of user if credentials match, 0 otherwise.
     """
     password = hash_utils.hash_password(password)
     auth = db.select('users',
                      where="username=$username&&password=$password",
                      vars=locals())
     if len(auth) == 1:
         return auth[0].user_id
     else:
         return 0
コード例 #16
0
    def latest_policy(self, user_id):
        policy = {
            'location': "",
            'employee': "",
            'device': "",
            'bdata': "",  # why are these strings and not numbers?
            'pdata': ""
        }
        policy.update(self.default)

        db_policy_all = db.select('policies',
                                  where="user_id=$user_id",
                                  order="date DESC",
                                  vars=locals())
        if len(db_policy_all) > 0:
            db_policy = db_policy_all[0]
            db_bio = db.select('biometrics',
                               where="id=$db_policy.bio_id",
                               vars=locals())[0]
            db_pass = db.select('passfaces',
                                where="id=$db_policy.pass_id",
                                vars=locals())[0]
            db_pw = db.select('pw_policy_test',
                              where="id=$db_policy.pw_id",
                              vars=locals())[0]
            policy["location"] = db_policy.location
            policy["employee"] = db_policy.employee
            policy["device"] = db_policy.device
            policy["bdata"] = db_bio.bdata
            policy["pdata"] = db_pass.pdata
            policy["plen"] = db_pw.plen
            policy["psets"] = db_pw.psets
            policy["pdict"] = db_pw.pdict
            policy["phist"] = db_pw.phist
            policy["prenew"] = db_pw.prenew
            policy["pattempts"] = db_pw.pattempts
            policy["precovery"] = db_pw.precovery

        return policy
コード例 #17
0
ファイル: policy_history.py プロジェクト: daviducl/sprks
    def GET(self):
        # get the latest risk and cost

        user_id = context.user_id()
        web.header('Content-Type', 'application/json')
        scores = db.select('scores', where='userid=$user_id', order="date DESC", limit=2, vars=locals())
        scores_result = []
        for row in scores:
            tmp = {}
            for key, value in row.iteritems():
                tmp[key] = str(value)
            scores_result.append(tmp)

        return json.dumps(scores_result)
コード例 #18
0
ファイル: score.py プロジェクト: daviducl/sprks
    def find_best(self, scores):
        date_risk = "N/A"
        value_risk = 0.0
        date_cost = "N/A"
        value_cost = 0.0
        id_risk = 1
        id_cost = 1
        scores_1, scores_2 = itertools.tee(scores)
        for row in scores_1:
            if row.score_type == 1:
                date_risk = row.date
                value_risk = row.score_value
                id_risk = row.userid
                break
        for row in scores_2:
            if row.score_type == 2:
                date_cost = row.date
                value_cost = row.score_value
                id_cost = row.userid
                break

        value_risk_cost = db.select('scores', where="date=$date_risk&&userid=$id_risk&&score_type=2", vars=locals())[0].score_value
        value_cost_risk = db.select('scores', where="date=$date_cost&&userid=$id_cost&&score_type=1", vars=locals())[0].score_value
        return value_risk, value_risk_cost, date_risk, value_cost, value_cost_risk, date_cost
コード例 #19
0
    def GET(self):
        # get the latest risk and cost

        user_id = context.user_id()
        web.header('Content-Type', 'application/json')
        scores = db.select('scores',
                           where='userid=$user_id',
                           order="date DESC",
                           limit=2,
                           vars=locals())
        scores_result = []
        for row in scores:
            tmp = {}
            for key, value in row.iteritems():
                tmp[key] = str(value)
            scores_result.append(tmp)

        return json.dumps(scores_result)
コード例 #20
0
    def get_scores(cls, id_user):

        all_scores = db.select('scores', order="score_value ASC")
        length = len(all_scores)
        scores_1, scores_2, scores_3, scores_4 = itertools.tee(all_scores, 4)

        if len(all_scores) > 0:
            b_u_risk, b_u_risk_cost, b_u_risk_date, b_u_cost, b_u_cost_risk, b_u_cost_date, b_u_risk_rank, b_u_cost_rank,\
            c_risk, c_risk_cost, c_risk_rank, c_risk_when, c_pc, c_pc_risk, c_pc_rank, c_pc_when = \
                score_model().check_closest_competitor(id_user, scores_2)
            b_risk, b_risk_cost, b_risk_when, b_pc, b_pc_risk, b_pc_when = score_model(
            ).find_best(scores_3)

            avg_risk, avg_pc = score_model().find_avg()

            msg = {
                "b_u_risk": str(b_u_risk),
                "b_u_risk_cost": str(b_u_risk_cost),
                "b_u_risk_date": str(b_u_risk_date),
                "b_u_risk_rank": b_u_risk_rank,
                "b_u_cost": str(b_u_cost),
                "b_u_cost_risk": str(b_u_cost_risk),
                "b_u_cost_date": str(b_u_cost_date),
                "b_u_cost_rank": b_u_cost_rank,
                "c_risk": str(c_risk),
                "c_risk_cost": str(c_risk_cost),
                "c_risk_when": str(c_risk_when),
                "c_risk_rank": c_risk_rank,
                "c_pc": str(c_pc),
                "c_pc_risk": str(c_pc_risk),
                "c_pc_when": str(c_pc_when),
                "c_pc_rank": c_pc_rank,
                "b_risk": str(b_risk),
                "b_risk_cost": str(b_risk_cost),
                "b_risk_when": str(b_risk_when),
                "b_pc": str(b_pc),
                "b_pc_risk": str(b_pc_risk),
                "b_pc_when": str(b_pc_when),
                "avg_risk": str(avg_risk),
                "avg_pc": str(avg_pc)
            }
        return msg
コード例 #21
0
ファイル: score.py プロジェクト: daviducl/sprks
    def get_scores(cls, id_user):

        all_scores = db.select('scores', order="score_value ASC")
        length = len(all_scores)
        scores_1, scores_2, scores_3, scores_4 = itertools.tee(all_scores, 4)

        if len(all_scores) > 0:
            b_u_risk, b_u_risk_cost, b_u_risk_date, b_u_cost, b_u_cost_risk, b_u_cost_date, b_u_risk_rank, b_u_cost_rank,\
            c_risk, c_risk_cost, c_risk_rank, c_risk_when, c_pc, c_pc_risk, c_pc_rank, c_pc_when = \
                score_model().check_closest_competitor(id_user, scores_2)
            b_risk, b_risk_cost, b_risk_when, b_pc, b_pc_risk, b_pc_when = score_model().find_best(scores_3)

            avg_risk, avg_pc = score_model().find_avg()

            msg = {
                "b_u_risk": str(b_u_risk),
                "b_u_risk_cost": str(b_u_risk_cost),
                "b_u_risk_date": str(b_u_risk_date),
                "b_u_risk_rank": b_u_risk_rank,
                "b_u_cost": str(b_u_cost),
                "b_u_cost_risk": str(b_u_cost_risk),
                "b_u_cost_date": str(b_u_cost_date),
                "b_u_cost_rank": b_u_cost_rank,
                "c_risk": str(c_risk),
                "c_risk_cost": str(c_risk_cost),
                "c_risk_when": str(c_risk_when),
                "c_risk_rank": c_risk_rank,
                "c_pc": str(c_pc),
                "c_pc_risk": str(c_pc_risk),
                "c_pc_when": str(c_pc_when),
                "c_pc_rank": c_pc_rank,
                "b_risk": str(b_risk),
                "b_risk_cost": str(b_risk_cost),
                "b_risk_when": str(b_risk_when),
                "b_pc": str(b_pc),
                "b_pc_risk": str(b_pc_risk),
                "b_pc_when": str(b_pc_when),
                "avg_risk": str(avg_risk),
                "avg_pc": str(avg_pc)
            }
        return msg
コード例 #22
0
ファイル: score.py プロジェクト: Zhanelya/sprks
    def get_scores(cls, id_user):

        all_scores = db.select("scores", order="score_value ASC")
        length = len(all_scores)
        scores_1, scores_2, scores_3, scores_4 = itertools.tee(all_scores, 4)

        if len(all_scores) > 0:

            b_u_risk, b_u_risk_rank, b_u_risk_date, b_u_cost, b_u_cost_rank, b_u_cost_date = cls.find_best_USER(
                length, id_user, scores_1
            )
            c_risk, c_risk_rank, c_risk_when, c_pc, c_pc_rank, c_pc_when = cls.check_closest_competitor(
                length, id_user, scores_2
            )
            b_risk, b_risk_when, b_pc, b_pc_when = cls.find_best(scores_3)

            avg_risk, avg_pc = cls.find_avg(scores_4)

            msg = {
                "b_u_risk": str(b_u_risk),
                "b_u_risk_date": str(b_u_risk_date.date()),
                "b_u_risk_rank": b_u_risk_rank,
                "b_u_cost": str(b_u_cost),
                "b_u_cost_date": str(b_u_cost_date.date()),
                "b_u_cost_rank": b_u_cost_rank,
                "c_risk": str(c_risk),
                "c_risk_when": str(c_risk_when.date()),
                "c_risk_rank": c_risk_rank,
                "c_pc": str(c_pc),
                "c_pc_when": str(c_pc_when.date()),
                "c_pc_rank": c_pc_rank,
                "b_risk": str(b_risk),
                "b_risk_when": str(b_risk_when.date()),
                "b_pc": str(b_pc),
                "b_pc_when": str(b_pc_when.date()),
                "avg_risk": str(avg_risk),
                "avg_pc": str(avg_pc),
            }
        return msg
コード例 #23
0
ファイル: score.py プロジェクト: daviducl/sprks
    def check_closest_competitor(self, usrid, your_score):
        value_risk = 0.0
        value_cost = 0.0
        value_risk_cost_contender = 2.0
        value_cost_risk_contender = 1.0
        prev_value_risk = 2.0
        prev_value_cost = 1.0
        next_value_risk = 2.0
        next_value_cost = 1.0
        prev_risk_rank = 0
        next_risk_rank = 0
        prev_cost_rank = 0
        next_cost_rank = 0
        next_value_risk_date = "2014-01-06"
        prev_value_risk_date = "2014-01-06"
        prev_value_cost_date = "2014-01-06"
        next_value_cost_date = "2014-01-06"
        date_risk = "2014-01-06"
        date_cost = "2014-01-06"
        checked = False
        u_rank_risk = 1
        u_rank_cost = 1
        users_risk = []
        users_cost = []
        risk_values = []
        cost_values = []
        contender_id_prev_risk = 1
        contender_id_next_risk = 1
        contender_id_prev_cost = 1
        contender_id_next_cost = 1
        scores_1, scores_2 = itertools.tee(your_score)
        for row in scores_1:
            if row.score_type == 1:
                if row.userid == usrid:
                    if not checked:
                        value_risk = row.score_value
                        checked = True
                        date_risk = row.date
                else:
                    if not checked:
                        if not row.userid in users_risk:
                            if not float(row.score_value) in risk_values:
                                risk_values.append(float(row.score_value))
                                u_rank_risk += 1
                                prev_value_risk = row.score_value
                                prev_value_risk_date = row.date
                                contender_id_prev_risk = row.userid
                            users_risk.append(row.userid)
                    else:
                        if not row.userid in users_risk:
                            next_value_risk = row.score_value
                            next_value_risk_date = row.date
                            contender_id_next_risk = row.userid
                            break
        checked = False
        for row in scores_2:
            if row.score_type == 2:
                if row.userid == usrid:
                    if not checked:
                        value_cost = row.score_value
                        checked = True
                        date_cost = row.date
                else:
                    if not checked:
                        if not row.userid in users_cost:
                            if not float(row.score_value) in cost_values:
                                users_cost.append(row.userid)
                                cost_values.append(float(row.score_value))
                                u_rank_cost += 1
                                prev_value_cost = row.score_value
                                prev_value_cost_date = row.date
                                contender_id_prev_cost = row.userid
                    else:
                        if not row.userid in users_cost:
                            next_value_cost = row.score_value
                            next_value_cost_date = row.date
                            contender_id_next_cost = row.userid
                            break
        u_rank_risk -= risk_values.count(float(value_risk))
        u_rank_cost -= cost_values.count(float(value_cost))
        prev_risk_rank = u_rank_risk - 1
        if prev_risk_rank == 0:
            prev_value_risk = 9
        prev_cost_rank = u_rank_cost - 1
        if prev_cost_rank == 0:
            prev_value_cost = 9
        if next_value_risk == value_risk:
            next_risk_rank = u_rank_risk
        else:
            next_risk_rank = u_rank_risk + 1
        if next_value_cost == value_cost:
            next_cost_rank = u_rank_cost
        else:
            next_cost_rank = u_rank_cost + 1
        if prev_value_risk == value_risk:
            prev_risk_rank = u_rank_risk
        if prev_value_cost == value_cost:
            prev_cost_rank = u_rank_cost
        if math.fabs(float(value_risk) - float(prev_value_risk)) <= math.fabs(
                        float(next_value_risk) - float(value_risk)):
            closest_score_risk = prev_value_risk
            closest_ranking_risk = prev_risk_rank
            closest_date_risk = prev_value_risk_date
            contender_id_risk = contender_id_prev_risk
        else:
            closest_score_risk = next_value_risk
            closest_ranking_risk = next_risk_rank
            closest_date_risk = next_value_risk_date
            contender_id_risk = contender_id_next_risk
        if math.fabs(float(value_cost) - float(prev_value_cost)) <= math.fabs(
                        float(next_value_cost) - float(value_cost)):
            closest_score_cost = prev_value_cost
            closest_ranking_cost = prev_cost_rank
            closest_date_cost = prev_value_cost_date
            contender_id_cost = contender_id_prev_cost
        else:
            closest_score_cost = next_value_cost
            closest_ranking_cost = next_cost_rank
            closest_date_cost = next_value_cost_date
            contender_id_cost = contender_id_next_cost

        value_risk_cost = db.select('scores', where="date=$date_risk&&score_type=2&&userid=$usrid", vars=locals())[0].score_value
        value_cost_risk = db.select('scores', where="date=$date_cost&&score_type=1&&userid=$usrid", vars=locals())[0].score_value
        res1 = db.select('scores', where="date=$closest_date_risk&&score_type=2&&userid=$contender_id_risk", vars=locals())
        if len(res1) > 0:
            value_risk_cost_contender = res1[0].score_value
        res2 = db.select('scores', where="date=$closest_date_cost&&score_type=1&&userid=$contender_id_cost", vars=locals())
        if len(res2) > 0:
            value_cost_risk_contender = res2[0].score_value
        return value_risk, value_risk_cost, date_risk, value_cost, value_cost_risk, date_cost, u_rank_risk, u_rank_cost, closest_score_risk, value_risk_cost_contender, \
               closest_ranking_risk, closest_date_risk, closest_score_cost, value_cost_risk_contender, closest_ranking_cost, closest_date_cost
コード例 #24
0
    def check_closest_competitor(self, usrid, your_score):
        value_risk = 0.0
        value_cost = 0.0
        value_risk_cost_contender = 2.0
        value_cost_risk_contender = 1.0
        prev_value_risk = 2.0
        prev_value_cost = 1.0
        next_value_risk = 2.0
        next_value_cost = 1.0
        prev_risk_rank = 0
        next_risk_rank = 0
        prev_cost_rank = 0
        next_cost_rank = 0
        next_value_risk_date = "2014-01-06"
        prev_value_risk_date = "2014-01-06"
        prev_value_cost_date = "2014-01-06"
        next_value_cost_date = "2014-01-06"
        date_risk = "2014-01-06"
        date_cost = "2014-01-06"
        checked = False
        u_rank_risk = 1
        u_rank_cost = 1
        users_risk = []
        users_cost = []
        risk_values = []
        cost_values = []
        contender_id_prev_risk = 1
        contender_id_next_risk = 1
        contender_id_prev_cost = 1
        contender_id_next_cost = 1
        scores_1, scores_2 = itertools.tee(your_score)
        for row in scores_1:
            if row.score_type == 1:
                if row.userid == usrid:
                    if not checked:
                        value_risk = row.score_value
                        checked = True
                        date_risk = row.date
                else:
                    if not checked:
                        if not row.userid in users_risk:
                            if not float(row.score_value) in risk_values:
                                risk_values.append(float(row.score_value))
                                u_rank_risk += 1
                                prev_value_risk = row.score_value
                                prev_value_risk_date = row.date
                                contender_id_prev_risk = row.userid
                            users_risk.append(row.userid)
                    else:
                        if not row.userid in users_risk:
                            next_value_risk = row.score_value
                            next_value_risk_date = row.date
                            contender_id_next_risk = row.userid
                            break
        checked = False
        for row in scores_2:
            if row.score_type == 2:
                if row.userid == usrid:
                    if not checked:
                        value_cost = row.score_value
                        checked = True
                        date_cost = row.date
                else:
                    if not checked:
                        if not row.userid in users_cost:
                            if not float(row.score_value) in cost_values:
                                users_cost.append(row.userid)
                                cost_values.append(float(row.score_value))
                                u_rank_cost += 1
                                prev_value_cost = row.score_value
                                prev_value_cost_date = row.date
                                contender_id_prev_cost = row.userid
                    else:
                        if not row.userid in users_cost:
                            next_value_cost = row.score_value
                            next_value_cost_date = row.date
                            contender_id_next_cost = row.userid
                            break
        u_rank_risk -= risk_values.count(float(value_risk))
        u_rank_cost -= cost_values.count(float(value_cost))
        prev_risk_rank = u_rank_risk - 1
        if prev_risk_rank == 0:
            prev_value_risk = 9
        prev_cost_rank = u_rank_cost - 1
        if prev_cost_rank == 0:
            prev_value_cost = 9
        if next_value_risk == value_risk:
            next_risk_rank = u_rank_risk
        else:
            next_risk_rank = u_rank_risk + 1
        if next_value_cost == value_cost:
            next_cost_rank = u_rank_cost
        else:
            next_cost_rank = u_rank_cost + 1
        if prev_value_risk == value_risk:
            prev_risk_rank = u_rank_risk
        if prev_value_cost == value_cost:
            prev_cost_rank = u_rank_cost
        if math.fabs(float(value_risk) - float(prev_value_risk)) <= math.fabs(
                float(next_value_risk) - float(value_risk)):
            closest_score_risk = prev_value_risk
            closest_ranking_risk = prev_risk_rank
            closest_date_risk = prev_value_risk_date
            contender_id_risk = contender_id_prev_risk
        else:
            closest_score_risk = next_value_risk
            closest_ranking_risk = next_risk_rank
            closest_date_risk = next_value_risk_date
            contender_id_risk = contender_id_next_risk
        if math.fabs(float(value_cost) - float(prev_value_cost)) <= math.fabs(
                float(next_value_cost) - float(value_cost)):
            closest_score_cost = prev_value_cost
            closest_ranking_cost = prev_cost_rank
            closest_date_cost = prev_value_cost_date
            contender_id_cost = contender_id_prev_cost
        else:
            closest_score_cost = next_value_cost
            closest_ranking_cost = next_cost_rank
            closest_date_cost = next_value_cost_date
            contender_id_cost = contender_id_next_cost

        value_risk_cost = db.select(
            'scores',
            where="date=$date_risk&&score_type=2&&userid=$usrid",
            vars=locals())[0].score_value
        value_cost_risk = db.select(
            'scores',
            where="date=$date_cost&&score_type=1&&userid=$usrid",
            vars=locals())[0].score_value
        res1 = db.select(
            'scores',
            where=
            "date=$closest_date_risk&&score_type=2&&userid=$contender_id_risk",
            vars=locals())
        if len(res1) > 0:
            value_risk_cost_contender = res1[0].score_value
        res2 = db.select(
            'scores',
            where=
            "date=$closest_date_cost&&score_type=1&&userid=$contender_id_cost",
            vars=locals())
        if len(res2) > 0:
            value_cost_risk_contender = res2[0].score_value
        return value_risk, value_risk_cost, date_risk, value_cost, value_cost_risk, date_cost, u_rank_risk, u_rank_cost, closest_score_risk, value_risk_cost_contender, \
               closest_ranking_risk, closest_date_risk, closest_score_cost, value_cost_risk_contender, closest_ranking_cost, closest_date_cost