Ignore:
Timestamp:
20 Sep 2012, 08:49:37 (12 years ago)
Author:
uli
Message:

Merge changes from update branch (includes trunk changes until r9107).

Location:
main/waeup.kofa/branches/uli-zc-async
Files:
3 edited
2 copied

Legend:

Unmodified
Added
Removed
  • main/waeup.kofa/branches/uli-zc-async

  • main/waeup.kofa/branches/uli-zc-async/tools/copy_media_files.py

    r8523 r9209  
    7878    return
    7979
    80 def copy_file(src, dst):
     80def copy_file(file_src, file_dst):
    8181    create_path(os.path.dirname(dst))
    8282    print "COPY FILE: %s -> %s" % (file_src, file_dst)
  • main/waeup.kofa/branches/uli-zc-async/tools/fix_import_file.py

    r8785 r9209  
    6565    'sex': 'gender',
    6666    'birthday': 'date',
    67     'request_date': 'datetime',
    6867    'marit_stat': 'marit_stat',
    6968    'session': 'session',
     
    8584    'lga': 'lga',
    8685    'order_id': 'no_int',
     86    'uniben': 'former',
     87    'nysc_year': 'year',
     88    'alr_date': 'date',
     89    'fst_sit_date': 'date',
     90    'scd_sit_date': 'date',
     91    'emp_start': 'date',
     92    'emp_end': 'date',
     93    'emp_start2': 'date',
     94    'emp_end2': 'date',
     95    'fst_sit_results': 'result',
     96    'scd_sit_results': 'result',
     97    'alr_results': 'result',
     98    'email': 'email',
     99    'fst_sit_type': 'sittype',
     100    'scd_sit_type': 'sittype',
     101    'resp_pay_reference': 'no_int',
     102    'type': 'company',
     103    'date': 'date',
     104    'core_or_elective': 'bool',
     105    'category': 'p_category',
     106    'reg_transition': 'reg_state',  # we completely change this column,
     107                                    # since reg_state import is usually intended
     108    'transition': 'reg_transition',
     109    'payment_date': 'date',
     110    'validation_date': 'date',
    87111    }
    88112
     
    90114COLNAME_MAPPING = {
    91115    # base data
     116    'id': 'student_id',
    92117    'reg_state': 'state',
     118    'reg_transition': 'state',
    93119    'jamb_reg_no': 'reg_number',
    94120    'matric_no': 'matric_number',
    95121    'birthday': 'date_of_birth',
    96122    'clr_ac_pin': 'clr_code',
     123    # clearance
     124    'hq_grade': 'hq_degree',
     125    'uniben': 'former_matric',
     126    'hq_type2': 'hq2_type',
     127    'hq_grade2': 'hq2_degree',
     128    'hq_school2': 'hq2_school',
     129    'hq_matric_no2': 'hq2_matric_no',
     130    'hq_session2': 'hq2_session',
     131    'hq_disc2': 'hq2_disc',
     132    'emp': 'employer',
     133    'emp2': 'employer2',
     134    'emp_position2': 'emp2_position',
     135    'emp_start2': 'emp2_start',
     136    'emp_end2': 'emp2_end',
     137    'emp_reason2': 'emp2_reason',
    97138    # study course
    98139    'study_course': 'certificate',
     
    117158    'surcharge': 'surcharge_1',
    118159    'session_id': 'p_session',
     160    'type': 'r_company',
    119161    }
    120162
     
    131173    'courses_registered': 'courses registered',
    132174    'courses_validated': 'courses validated',
     175    'admit': 'admitted',
     176    'return': 'returning'
    133177    }
    134178
     
    143187    """Replace input fieldnames by fieldnames of COLNAME_MAPPING.
    144188    """
    145     header = dict([(name, name) for name in fieldnames])
     189    # Remove whitespaces
     190    header = dict([(name, name.strip()) for name in fieldnames])
    146191    for in_name, out_name in COLNAME_MAPPING.items():
    147         if in_name not in header:
     192        if in_name not in header.values():
    148193            continue
    149         header[in_name] = out_name
     194        # Inverse dictionary lookup
     195        key = [key for key,value in header.items() if value==in_name][0]
     196        header[key] = out_name
    150197    return header
    151198
     
    155202
    156203    @classmethod
    157     def student_id(self, value):
     204    def student_id(self, value, row):
    158205        """ 'A123456' --> 'EA123456'
    159206        """
    160207        if len(value) == 7:
    161             return 'E' + value
    162         return value
    163 
    164     @classmethod
    165     def reg_state(self, value):
     208            return 'K' + value
     209        return value
     210
     211    @classmethod
     212    def reg_state(self, value, row):
    166213        """ 'courses_validated' --> 'courses validated'
    167214        """
     
    169216
    170217    @classmethod
    171     def level(self, value):
     218    def reg_transition(self, value, row):
     219        if value == "admitted":
     220            return "admit"
     221        if value == "returning":
     222            return "return"
     223        return value
     224
     225    @classmethod
     226    def level(self, value, row):
    172227        """ '000' --> '10'
     228        '800' --> '999' if pg student
    173229        """
    174230        try:
     
    178234        if number == 0:
    179235            return 10
     236        if row.get('entry_mode') and row.get('entry_mode').startswith('pg'):
     237            return 999
    180238        return number
    181239
    182240    @classmethod
    183     def semester(self, value):
     241    def semester(self, value, row):
    184242        """ '0' --> '9'
    185243        """
     
    193251
    194252    @classmethod
    195     def application_category(self, value):
     253    def application_category(self, value, row):
    196254        """ '' --> 'no'
    197255        """
     
    201259
    202260    @classmethod
    203     def lga(self, value):
     261    def lga(self, value, row):
    204262        """ Remove apostrophe
    205263        """
    206264        if value == 'akwa_ibom_uru_offong_oruko':
    207265            return 'akwa_ibom_urue-offong-oruko'
     266        if value == 'edo_ohionmwon':
     267            return 'edo_orhionmwon'
     268
     269        if value == 'nassarawa_nassarawa':
     270            return 'nassarawa_nassawara'
     271
     272        if value == 'kogi_mopa-muro-mopi':
     273            return 'kogi_mopa-muro'
     274
     275        if value == 'delta_osimili-north':
     276            return 'delta_oshielli-north'
     277
     278        if value == 'delta_osimili':
     279            return 'delta_oshimili'
     280
     281        if value == 'delta_osimili-south':
     282            return 'delta_oshimili-south'
    208283        try:
    209284            value = value.replace("'","")
     
    220295
    221296    @classmethod
    222     def session(self, value):
     297    def session(self, value, row):
    223298        """ '08' --> '2008'
    224299        '2008/2009' --> '2008'
     
    244319
    245320    @classmethod
    246     def marit_stat(self, value):
     321    def former(self, value, row):
     322        """ True --> yes
     323        '2008/2009' --> '2008'
     324        """
     325        if value == 'True':
     326            return 'yes'
     327        return
     328
     329    @classmethod
     330    def bool(self, value, row):
     331        """ True --> 1
     332        """
     333        if value in ('TRUE', 'True'):
     334            return '1'
     335        elif value in ('FALSE', 'False'):
     336            return '0'
     337        return
     338
     339    @classmethod
     340    def year(self, value, row):
     341        """ '0' --> ''
     342        """
     343        if value == '0':
     344            return
     345        if value == 'None':
     346            return
     347        return value
     348
     349
     350    @classmethod
     351    def marit_stat(self, value, row):
    247352        """ 'True'/'False' --> 'married'/'unmarried'
    248353        """
     
    256361
    257362    @classmethod
    258     def gender(self, value):
     363    def gender(self, value, row):
    259364        """ 'True'/'False' --> 'f'/'m'
    260365        """
     
    268373
    269374    @classmethod
    270     def date(self, value):
     375    def date(self, value, row):
    271376        """ 'yyyy/mm/dd' --> 'yyyy-mm-dd'
    272377        """
     
    283388
    284389    @classmethod
    285     def no_int(self, value):
    286         """ Add hash.
     390    def no_int(self, value, row):
     391        """ Add hash and skip numbers starting with 999999
    287392        """
    288393        # We add the hash symbol to avoid automatic number transformation
    289394        # in Excel and Calc for further processing
    290         value += '#'
    291         return value
    292 
    293 
    294     @classmethod
    295     def datetime(self, value):
    296         """ 'yyyy/mm/dd' --> 'yyyy-mm-dd'
    297         """
    298         #print  "IN: ", value
    299         if value == "None":
    300             value = ""
    301         elif value == "":
    302             value = ""
    303         else:
    304             #value = datetime.datetime.strptime(value, '%Y/%m/%d')
    305             #value = datetime.datetime.strftime(value, '%Y-%m-%d')
     395        try:
     396            intvalue = int(value)
     397            value += '#'
     398        except:
    306399            pass
    307         #print "OUT: ", value
    308         return value
    309 
    310     @classmethod
    311     def mode(self, value):
     400        if value.startswith('999999'):
     401            return
     402        return value
     403
     404    @classmethod
     405    def mode(self, value, row):
    312406        if value == "transfer_fulltime":
    313407            return "transfer_ft"
     
    317411
    318412    @classmethod
    319     def password(self, value):
     413    def password(self, value, row):
    320414        if value == "not set":
    321415            return ""
     
    323417
    324418    @classmethod
    325     def nationality(self, value):
     419    def nationality(self, value, row):
    326420        if value == "nigeria":
    327421            return "NG"
    328         return value
    329 
    330     @classmethod
    331     def phone(self, value):
     422        if value == "niger":
     423            return "NE"
     424        return value
     425
     426    @classmethod
     427    def sittype(self, value, row):
     428        if value == "nabtec":
     429            return "nabteb"
     430        return value
     431
     432    @classmethod
     433    def company(self, value, row):
     434        if value == "online":
     435            return "interswitch"
     436        return value
     437
     438    @classmethod
     439    def p_category(self, value, row):
     440        if value == "acceptance":
     441            return "clearance"
     442        return value
     443
     444    @classmethod
     445    def email(self, value, row):
     446        return value.strip()
     447
     448    @classmethod
     449    def phone(self, value, row):
    332450        """ '<num-seq1>-<num-seq2> asd' -> '--<num-seq1><num-seq2>'
    333451
     
    335453        of numbers.
    336454        """
     455        if not value:
     456            return
     457        value = value.strip('#')
    337458        value = value.replace('-', '')
    338459        value = value.replace('/', '')
    339460        match = RE_PHONE.match(value)
    340461        phone = match.groups()[0]
    341         value = '-%s' % phone
    342         return value
     462        if value.startswith('234'):
     463            value = '+' + value[:3] + '-' + value[3:]
     464        else:
     465            value = '-%s' % phone
     466        return value + '#'
     467
     468    @classmethod
     469    def result(self, value, row):
     470        try:
     471            liste = eval(value)
     472        except:
     473            return
     474        if isinstance(liste,list):
     475            return [(i[0].lower(),i[1]) for i in liste]
     476        return
    343477
    344478
     
    357491            header = convert_fieldnames(reader.fieldnames)
    358492            writer.writerow(header)
     493        if row.get('reg_state') == 'student_created':
     494            # We do not reimport student records which have never been accessed.
     495            continue
     496        if row.get('status') == 'started':
     497            # We do not reimport started payments.
     498            continue
    359499        for key, value in row.items():
     500            # Remove unwanted whitespaces.
     501            row[key] = row[key].strip()
    360502            if not key in OPTIONS.keys():
    361503                continue
     
    365507                print "WARNING: cannot find converter %s" % conv_name
    366508                continue
    367             row[key] = converter(row[key])
     509            row[key] = converter(row[key], row)
    368510        try:
    369511            writer.writerow(row)
Note: See TracChangeset for help on using the changeset viewer.