Changeset 2189


Ignore:
Timestamp:
11 Sep 2007, 09:02:49 (17 years ago)
Author:
joachim
Message:

dumpAll function implemented for WAeUPTables usage: applicants_catalog/dumpAll

File:
1 edited

Legend:

Unmodified
Added
Removed
  • WAeUP_SRP/trunk/WAeUPTables.py

    r2185 r2189  
    9090###)
    9191
     92    def record2dict(self,fields,record):
     93        d = {}
     94        for key in fields:
     95            v = getattr(record, key, None)
     96            if v:
     97                if key == 'lga':
     98                    v = self.portal_vocabularies.local_gov_areas.get(v)
     99                d[key] = v
     100            else:
     101                d[key] = ''
     102        return d
     103   
    92104    def addRecord(self, **data): ###(
    93105        # The uid is the same as "bed".
     
    166178
    167179###)
     180
     181    security.declareProtected(ModifyPortalContent,"dumpAll")###(
     182    def dumpAll(self):
     183        """dump all data in the table to a csv"""
     184        member = self.portal_membership.getAuthenticatedMember()
     185        logger = logging.getLogger('WAeUPTables.dump_%s' % self.__name__)
     186        current = DateTime.DateTime().strftime("%d-%m-%y_%H_%M_%S")
     187        export_file = "%s/export/%s_%s.csv" % (i_home,self.__name__,current,)
     188        print export_file
     189        res_list = []
     190        lines = []
     191        if hasattr(self,"export_keys"):
     192            fields = self.export_keys
     193        else:
     194            fields = []
     195            for f in self.schema():
     196                fields.append(f)
     197        headline = ','.join(fields)
     198        #open(export_file,"a").write(headline +'\n')
     199        out = open(export_file,"wb")
     200        out.write(headline +'\n')
     201        out.close()
     202        out = open(export_file,"a")
     203        csv_writer = csv.DictWriter(out,fields,)
     204        format = '"%(' + ')s","%('.join(fields) + ')s"'
     205        records = self()
     206        nr2export = len(records)
     207        logger.info('%s starts dumping, %s records to export' % (member,nr2export))
     208        chunk = 2000
     209        total = 0
     210        start = DateTime.DateTime().timeTime()
     211        start_chunk = DateTime.DateTime().timeTime()
     212        for record in records:
     213            not_all = False
     214            d = self.record2dict(fields,record)
     215            #d['state'],d['lga'] = formatLGA(d['lga'],voc = self.portal_vocabularies.local_gov_areas)
     216            #lines.append(format % d)
     217            lines.append(d)
     218            total += 1
     219            if total and not total % chunk or total == len(records):
     220                #open(export_file,"a").write('\n'.join(lines) +'\n')
     221                csv_writer.writerows(lines)
     222                anz = len(lines)
     223                logger.info("wrote %(anz)d  total written %(total)d" % vars())
     224                end_chunk = DateTime.DateTime().timeTime()
     225                duration = end_chunk-start_chunk
     226                per_record = duration/anz
     227                till_now = end_chunk - start
     228                avarage_per_record = till_now/total
     229                estimated_end = DateTime.DateTime(start + avarage_per_record * nr2export)
     230                estimated_end = estimated_end.strftime("%H:%M:%S")
     231                logger.info('%(duration)4.1f, %(per_record)4.3f,end %(estimated_end)s' % vars())
     232                start_chunk = DateTime.DateTime().timeTime()
     233                lines = []
     234        end = DateTime.DateTime().timeTime()
     235        logger.info('total time %6.2f m' % ((end-start)/60))
     236        import os
     237        filename, extension = os.path.splitext(export_file)
     238        from subprocess import call
     239        msg = "wrote %(total)d records to %(export_file)s" % vars()
     240        try:
     241            retcode = call('gzip %s' % (export_file),shell=True)
     242            if retcode == 0:
     243                msg = "wrote %(total)d records to %(export_file)s.gz" % vars()
     244        except OSError, e:
     245            retcode = -99
     246            logger.info("zip failed with %s" % e)
     247        logger.info(msg)
     248        args = {'portal_status_message': msg}
     249        #url = self.REQUEST.get('URL1') + '?' + urlencode(args)
     250        url = self.REQUEST.get('URL2')
     251        return self.REQUEST.RESPONSE.redirect(url)
     252    ###)
    168253
    169254    security.declarePrivate("_import_old") ###(
     
    473558    key = "reg_no"
    474559    security = ClassSecurityInfo()
    475 
     560    export_keys = (
     561                   "reg_no",
     562                   "status",
     563                   "lastname",
     564                   "sex",
     565                   "date_of_birth",
     566                   "lga",
     567                   "email",
     568                   "phone",
     569                   "passport",
     570                   "entry_mode",
     571                   "pin",
     572                   "screening_type",
     573                   "registration_date",
     574                   "testdate",
     575                   "application_date",
     576                   "screening_date",
     577                   "faculty",
     578                   "department",
     579                   "course1",
     580                   "course2",
     581                   "course3",
     582                   "eng_score",
     583                   "subj1",
     584                   "subj1score",
     585                   "subj2",
     586                   "subj2score",
     587                   "subj3",
     588                   "subj3score",
     589                   "aggregate",
     590                   "course_admitted",
     591                   )
    476592    def __init__(self,name=None):
    477593        if name ==  None:
    478594            name = self.name
    479595        WAeUPTable.__init__(self, name)
     596
     597   
    480598
    481599    security.declareProtected(ModifyPortalContent,"new_importCSV")###(
Note: See TracChangeset for help on using the changeset viewer.