source: WAeUP_SRP/base/skins/waeup_utilities/fix_lgas.py @ 2978

Last change on this file since 2978 was 2978, checked in by joachim, 17 years ago

this fixes most lgas

  • Property svn:keywords set to Id
File size: 3.7 KB
Line 
1## Script (Python) "fix_lgas"
2##bind container=container
3##bind context=context
4##bind namespace=
5##bind script=script
6##bind subpath=traverse_subpath
7##parameters=
8##title=
9##
10# $Id: fix_lgas.py 2978 2008-01-04 16:07:14Z joachim $
11"""
12"""
13try:
14    from Products.zdb import set_trace
15except:
16    def set_trace():
17        pass
18
19mtool = context.portal_membership
20member = mtool.getAuthenticatedMember()
21if str(member) not in ('admin','joachim'):
22    return
23
24
25import logging
26import DateTime
27logger = logging.getLogger('Skins.fix_lgas')
28from Products.AdvancedQuery import Eq, Between, Le,In
29aq_portal = context.portal_catalog_real.evalAdvancedQuery
30aq_students = context.students_catalog.evalAdvancedQuery
31students_folder = context.portal_url.getPortalObject().campus.students
32
33request = context.REQUEST
34session = request.SESSION
35response = request.RESPONSE
36setheader = request.RESPONSE.setHeader
37def rwrite(s):
38    response.setHeader('Content-type','text/html; charset=ISO-8859-15')
39    response.write("%s<br>\n\r" % s)
40
41def getLGAs():
42    voc = getattr(context.portal_vocabularies,'local_gov_areas')
43    states = []
44    lgas  = []
45    d = {}
46    for k,v in voc.items():
47        parts = v.split(' / ')
48        if len(parts) == 1:
49            state = parts[0].lower()
50            lga = ""
51        elif len(parts) == 2:
52            state = parts[0].lower()
53            lga = "_".join(parts[1].lower().split())
54        else:
55            continue
56        if state not in states:
57            states.append(state)
58        if lga not in lgas:
59            lgas.append(lga)
60        d[k] = v
61    return (d,states,lgas)
62
63#logger.info('')
64student_records = context.students_catalog()
65total = len(student_records)
66logger.info("found %d students" % total)
67count = 0
68commit_after = 50
69logger.info('started to fix %d lga' % total)
70d,states,lgas = getLGAs()
71d = {}
72for student_record in student_records:
73    if not student_record.lga:
74        continue
75    if student_record.lga.find('_') > -1:
76        continue
77    if student_record.lga.startswith('no state'):
78        continue
79    #rwrite("%s: %s" % (student_record.id,student_record.lga))
80    sl = student_record.lga.split('/')
81    if len(sl) != 2:
82        #rwrite("wrong size %s: %s" % (student_record.id,sl))
83        continue
84    state = sl[0].lower().strip()
85    lga = sl[1].lower().strip()
86    if not lga or not state:
87        continue
88    count += 1
89    if len(d) and not len(d)  % commit_after:
90        logger.info("found %d correct of  %d sofar" % (len(d),count))
91    state_lga = state + '_' + lga
92    if state in states:
93        found = False
94        while True:
95            if lga in lgas:
96                found = True
97                break
98            lga = lga.replace(' ','-')
99            if lga in lgas:
100                found = True
101            break
102        if found:
103            msg = "found %s for %s" % (state_lga,student_record.id)
104            d[student_record.id] = state_lga
105        else:
106            msg = "no '%s' '%s' for %s" % (state,lga,student_record.id)
107            #rwrite(msg)
108    else:
109        msg = "no state '%s' '%s' for %s" % (state,lga,student_record.id)
110        #rwrite(msg)
111    # if count > 150:
112    #     break
113to_edit = len(d)
114logger.info("found %d correct lgas of %d" % (to_edit,count))
115#return
116
117edited = 1
118for student_id,lga in d.items():
119    msg = "set clearance.lga to %s for %s" % (lga,student_id)
120    getattr(getattr(students_folder,student_id),'clearance').getContent().edit(mapping={'lga':lga})
121    logger.info(msg)
122    edited += 1
123    if edited and not edited  % commit_after:
124        context.waeup_tool.doCommit()
125        logger.info("Committing %d,  %d of %d" % (commit_after,edited,to_edit))
126logger.info('finished, %d checked, %d edited' % (count,
127                                               edited,))
128
Note: See TracBrowser for help on using the repository browser.