示例#1
0
def extract_data(f):
    NUM_SKIP = 14
    ROUND_FIELDS = (12, 13)
    ROW_FIELDS = (
        ('pat1', 14),
        ('pat3', 28),
        ('gat', 48),
    )
    GROUPING_FIELD = 'nat_id'
    DATA_FIELDS = (
        ('nat_id', 4),
        ('first_name', 6),
        ('last_name', 9),
    )

    source = f.read()
    lines = source.split("\n")[NUM_SKIP:]

    scores = []
    old_key = ''
    for l in lines:
        items = l.split(",")
        if len(items) < 30:
            continue

        round_key = extract_round(tuple([items[i] for i in ROUND_FIELDS]))
        row = dict([(f[0], convert_data_field(items[f[1]]))
                    for f in ROW_FIELDS])
        data = dict([(f[0], items[f[1]]) for f in DATA_FIELDS])

        k = data[GROUPING_FIELD]

        if k != old_key:
            app_data = data
            app_data['scores'] = []
            scores.append(app_data)
            #print k
        old_key = k

        app_data = scores[-1]

        if GPExamDate.get_by_year_and_number(round_key[0],
                                             round_key[1]) != None:
            app_data['scores'].append((round_key, row))

    return scores
示例#2
0
def score_import(f):

    from datetime import datetime

    count = 0
    scores = extract_data(f)
    for s in scores:
        try:
            a = Applicant.objects.get(national_id=s['nat_id'])
        except Applicant.DoesNotExist:
            a = None
        if a == None:
            continue

        try:
            niets_scores = a.NIETS_scores
        except:
            niets_scores = NIETSScores(applicant=a)

        niets_scores.is_request_successful = True
        niets_scores.requested_at = datetime.now()

        score_list = initialialize_empty_score_list()

        for scr in s['scores']:
            y = scr[0][0]
            num = scr[0][1]
            d = GPExamDate.get_by_year_and_number(y, num)
            i = d.rank - 1

            score_list[i * 3] = scr[1]['gat']
            score_list[i * 3 + 1] = scr[1]['pat1']
            score_list[i * 3 + 2] = scr[1]['pat3']

        niets_scores.score_list = ','.join([str(x) for x in score_list])
        niets_scores.save()
        count += 1

    return u'นำเข้าข้อมูลทั้งสิ้น %d คน' % count