Changeset 380


Ignore:
Timestamp:
04/09/15 11:26:08 (4 years ago)
Author:
mjuckes
Message:

cleaned utils to avoid unnecessary imports

Location:
CMIP6dreq/trunk/src
Files:
1 added
1 edited
1 moved

Legend:

Unmodified
Added
Removed
  • CMIP6dreq/trunk/src/scanDreq.py

    r365 r380  
    1 import dreq, collections, string, os, utils_wb 
     1import dreq, collections, string, os 
    22import htmlTemplates as tmpl 
    33import xml, re 
    44import xml.dom, xml.dom.minidom 
    55 
    6 from utils_wb import uniCleanFunc 
     6from utils_dreq import uniCleanFunc 
    77 
    88empty=re.compile('^$') 
     
    495495    lines = string.split( txt, '\n' ) 
    496496    for line in lines: 
    497       l = utils_wb.uniCleanFunc( string.strip(line) ) 
     497      l = uniCleanFunc( string.strip(line) ) 
    498498      if empty.match(l): 
    499499        continue 
  • CMIP6dreq/trunk/src/utils_dreq.py

    r379 r380  
    1 import string, itertools 
    2 from fcc_utils2 import snlist 
    3 import xlrd, string, shelve, os, re, sys 
    4 import collections 
    5 import xlutils, xlwt 
    6 import xlutils.copy 
    7 import xlutils.styles 
    8 import copy 
    9 #### 
    10 import dreq_cfg 
     1import string 
    112 
    12 nt__deckrq = collections.namedtuple( 'dckrq', ['control','AMIP','abrupt4xCO2','rq_1pctCO2','historical'] ) 
    13 dd_rq = collections.defaultdict( dict ) 
    14 dd_tbl = collections.defaultdict( int ) 
    153def uniCleanFunc(ss,jsFilt=False): 
    164      if type(ss) in [type('x'),type(u'x')]: 
     
    3321     
    3422 
    35 class wbcp(object): 
    36   def __init__( self, inbook=dreq_cfg.rqcfg.tmpl ): 
    37     self.book = xlrd.open_workbook(inbook,formatting_info=True) 
    38     self.sns = self.book.sheet_names() 
    39     self.wb = xlutils.copy.copy(self.book) 
    40     ##self.book = xlrd.open_workbook(inbook,formatting_info=True) 
    41     self.plain = xlwt.easyxf('') 
    42     self.styles = xlutils.styles.Styles(self.book) 
    43  
    44  
    45   def styleUpdate(self,other): 
    46     self.styles.cell_styles.update( other.styles.cell_styles ) 
    47   def _getOutCell(self, rowIndex, colIndex,stbk=None): 
    48     """ HACK: Extract the internal xlwt cell representation. """ 
    49     
    50     if stbk == None: 
    51       this = self 
    52     else: 
    53       this = stbk 
    54     row = this.currentSo._Worksheet__rows.get(rowIndex) 
    55  
    56     if not row: return None 
    57  
    58     cell = row._Row__cells.get(colIndex) 
    59     return cell 
    60  
    61   def rowValues(self, i, f=None, uniClean=False, jsFilt=False ): 
    62     if f == None: 
    63       v1 = map( lambda x: x.value, self.currentSi.row(i) ) 
    64     else: 
    65       v1 = map( lambda x: f(x.value), self.currentSi.row(i) ) 
    66     if not uniClean: 
    67       return v1 
    68     else: 
    69       return map( lambda x: uniCleanFunc(x,jsFilt=jsFilt), v1 ) 
    70  
    71   def putValue2(self, row, col, value,sti=None,stj=None,stbk=None,style=0): 
    72     """ Change cell value without changing formatting. """ 
    73     # HACK to retain cell style. 
    74     if sti == None: 
    75       sti = col 
    76     if stj == None: 
    77       stj = row 
    78     self.previousCell = self._getOutCell( stj,sti,stbk=stbk ) 
    79     # END HACK, PART I 
    80  
    81     if style==0: 
    82       self.currentSo.write(row, col, value) 
    83     else: 
    84       self.currentSo.write(row, col, value,style=style) 
    85  
    86     # HACK, PART II 
    87  
    88     do_style = False 
    89     if self.previousCell and style==0 and do_style: 
    90         self.newCell = self._getOutCell( row, col) 
    91         if self.newCell: 
    92           if stbk == None: 
    93             self.newCell.xf_idx = self.previousCell.xf_idx 
    94           else: 
    95             self.newCell.xf_idx = self.previousCell.xf_idx 
    96             ##nn = len( self.styles.cell_styles.keys() ) 
    97             ##print stj,sti,self.previousCell.xf_idx, nn 
    98             ##self.styles.cell_styles[nn] = stbk.styles.cell_styles.items()[self.previousCell.xf_idx] 
    99             ##self.newCell.xf_idx = nn 
    100     # END HACK 
    101  
    102   def focus( self, name, old=None ): 
    103     if old == None: 
    104       oname = name 
    105       new=False 
    106     else: 
    107       oname = old 
    108       new = True 
    109      
    110     if oname not in self.sns: 
    111       print '%s not in %s' % (oname,str(self.sns) ) 
    112       raise 
    113      
    114     self.currentIndex = self.sns.index(oname) 
    115     self.currentSi = self.book.sheet_by_name( oname ) 
    116  
    117     if new: 
    118       self.currentSo = self.get_sheet_by_name( name ) 
    119     else: 
    120       self.currentSo = self.wb.get_sheet( self.currentIndex ) 
    121  
    122   def putValue(self,i,j,value,sti=None,stj=None): 
    123     ##self.currentSi.write(i,j,value,self.plain) 
    124     if sti == None: 
    125       sti = i 
    126     if stj == None: 
    127       stj = j 
    128     cell_style = self.styles[self.currentSi.cell(sti,stj)] 
    129     self.currentSo.write(i,j,value,cell_style) 
    130  
    131   def write(self,file='output.xls'): 
    132     self.wb.save( file ) 
    133  
    134  
    135   def get_sheet_by_name(self, name): 
    136     """Get a sheet by name from xlwt.Workbook, a strangely missing method. 
    137     Returns None if no sheet with the given name is present. 
    138     http://stackoverflow.com/questions/14587271/accessing-worksheets-using-xlwt-get-sheet-method dhdaines 
    139     """ 
    140     # Note, we have to use exceptions for flow control because the 
    141     # xlwt API is broken and gives us no other choice. 
    142     try: 
    143         sheets = [] 
    144         for idx in itertools.count(): 
    145             sheet = self.wb.get_sheet(idx) 
    146             sheets.append( sheet.name ) 
    147             if sheet.name == name: 
    148                 return sheet 
    149     except: 
    150         print '################# failed to find sheet: %s ############' % name 
    151         return None 
    152  
    153   def copy_sheet(self, source_index, new_name):  
    154     ''' 
    155     self.wb      == source + book in use  
    156     source_index == index of sheet you want to copy (0 start)  
    157     new_name     == name of new copied sheet  
    158     return: copied sheet 
    159     Original code: https://groups.google.com/forum/#!topic/python-excel/gafa0rP3KyU [John Machin] 
    160     ''' 
    161  
    162     source_worksheet = self.wb.get_sheet(source_index) 
    163     copied_sheet = copy.deepcopy(source_worksheet)  
    164     copied_workbook = copied_sheet._Worksheet__parent 
    165  
    166     self.wb._Workbook__worksheets.append(copied_sheet) 
    167  
    168     copied_sheet.set_name(new_name) 
    169     self.wb._Workbook__sst = copied_workbook._Workbook__sst 
    170     self.wb._Workbook__styles = copied_workbook._Workbook__styles 
    171     return copied_sheet 
    172  
    173 class tupsort: 
    174    def __init__(self,k=0): 
    175      self.k = k 
    176    def cmp(self,x,y): 
    177      return cmp( x[self.k], y[self.k] ) 
    178  
    179 def uniquify( ll ): 
    180   ll.sort() 
    181   l0 = [ll[0],] 
    182   for l in ll[1:]: 
    183     if l != l0[-1]: 
    184       l0.append(l) 
    185   return l0 
    186  
    187 class workbook(object): 
    188   def __init__(self,file): 
    189     assert os.path.isfile(file), 'File %s not found' % file 
    190     self.book = xlrd.open_workbook( file ) 
    191     self.sns = self.book.sheet_names() 
    192  
    193 clabs = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 
    194 def clab(n): 
    195   i = n/26 
    196   assert i < 26, 'Not ready for row number greater than 26*26' 
    197   if i == 0: 
    198     return clabs[n] 
    199   else: 
    200     return clabs[i-1] + clabs[ n - i*26] 
    201  
    202 def getRow(sht): 
    203   ee = {} 
    204   for i in range(sht.nrows): 
    205     if sht.row(i)[0].ctype == 2 and str( sht.row(i)[0].value ) != '0.0': 
    206       l = map( lambda x: str( x.value ), sht.row(i) ) 
    207       ##k = string.replace( l[5], ' ','') 
    208       k = l[5] 
    209       try: 
    210         ee[k] = l 
    211       except: 
    212         print l 
    213         raise 
    214   return ee 
    215      
    216 def outvSer( ov ): 
    217   ll = [] 
    218   for i in ov: 
    219     ll.append( '%s|%s|%s' % tuple( map( str, i) ) ) 
    220   return string.join(ll, '; ' ) 
    221    
    222  
    223 class cpsh(object): 
    224  
    225   def __init__(self,wk0,mip,path,kk=3,oo=None): 
    226     self.oo = oo 
    227     self.nn = 0 
    228     self.kk = kk 
    229     wk = wbcp( path ) 
    230     wk0.focus( u'New variables') 
    231     self.wk = wk 
    232     self.mip = mip 
    233     self.nvgs = [] 
    234     for s in wk.sns: 
    235       if s not in ['Objectives','Experiments','Experiment Groups','Request scoping','New variables','__lists__']: 
    236         self.nvgs.append(s) 
    237     self.outv = collections.defaultdict(list) 
    238     for s in self.nvgs: 
    239       thiss = wk.book.sheet_by_name( s ) 
    240       for k in range(4,thiss.nrows): 
    241         r = thiss.row(k) 
    242         v = r[1].value 
    243         t = r[2].value 
    244         f = r[3].value 
    245         s = r[5].value 
    246         m = r[7].value 
    247         if t[:3] == 'new': 
    248           self.outv[v].append( (f,s,m) ) 
    249     this = wk.book.sheet_by_name(u'New variables') 
    250     ee = collections.defaultdict( list ) 
    251     for i in range(3,this.nrows): 
    252       r = this.row(i) 
    253       if r[0].value == "**end**": 
    254         break 
    255       v = r[0].value 
    256       ee[v].append(i) 
    257  
    258     for i in range(3,this.nrows): 
    259       r = this.row(i) 
    260       if r[0].value == "**end**": 
    261         break 
    262  
    263       v = r[0].value 
    264       l = r[4].value 
    265       novar = v == '' and l == '' 
    266       omitOld = True 
    267       omit = False 
    268       if vdict.has_key(v) and omitOld: 
    269         omit = True 
    270  
    271       if not omit: 
    272         if not novar: 
    273           wk0.putValue2( self.kk, 0, mip ) 
    274           s = r[1].value 
    275           if s in ['','?']: 
    276             chk = 0 
    277           elif esn.has_key(s): 
    278             chk = 1 
    279           elif esna.has_key(s): 
    280             chk = 2 
    281           else: 
    282             chk = -1 
    283           wk0.putValue2( self.kk, 1, chk ) 
    284           self.nn += 1 
    285           htmlline = "<td>%s</td>" % mip 
    286         else: 
    287           chk = 0 
    288           htmlline = "<td></td>" 
    289        
    290         j = 3 
    291         jo = 1 
    292         wk0.putValue2( self.kk, 3, outvSer( self.outv[v] ) ) 
    293         for x in r: 
    294           if j == 3: 
    295             v = x.value 
    296             v0 = x.value 
    297             if str(v0) != "": 
    298               if len(ee[v0]) != 1: 
    299                  v += '!' 
    300               if vdict.has_key(v0): 
    301                  v += '**' 
    302             wk0.putValue2( self.kk, j+jo, v ) 
    303           else: 
    304             wk0.putValue2( self.kk, j+jo, x.value ) 
    305           if j in [3,7]: 
    306             htmlline += "<td>%s</td>\n" % x.value 
    307           elif j == 4: 
    308             if chk == -1: 
    309               htmlline += "<td>?%s?</td>\n" % x.value 
    310             else: 
    311               htmlline += "<td>%s</td>\n" % x.value 
    312           elif j == 8: 
    313             y = x.value 
    314           elif j == 9: 
    315             htmlline += '<td><span title="%s">%s</span></td>\n' % (x.value,y) 
    316           j += 1 
    317         self.kk += 1 
    318         if not novar: 
    319           if mip == "SIMIP": 
    320             print htmlline 
    321           htmlline = string.replace( htmlline, u'\u2013', '-' ) 
    322           htmlline = string.replace( htmlline, u'\u2018', "'" ) 
    323           htmlline = string.replace( htmlline, u'\u2019', "'" ) 
    324           htmlline = string.replace( htmlline, u'\u2026', '...' ) 
    325           htmlline = string.replace( htmlline, u'\u25e6', 'o' ) 
    326           htmlline = string.replace( htmlline, u'\xb2', '2' ) 
    327           htmlline = string.replace( htmlline, u'\xb3', '3' ) 
    328           if self.oo != None: 
    329             self.oo.write( "<tr>%s</tr>" % str(htmlline) + '\n' ) 
    330  
    331  
    332   def parseRQ(self): 
    333     this = self.wk.book.sheet_by_name(u'Request scoping') 
    334     for i in range(6,this.nrows): 
    335       r = this.row(i) 
    336       mipt = r[0].value 
    337       s = r[1].value 
    338       if mipt[:4]  in ['SPEC','CORD', 'CCMI'] and s != 'none': 
    339         print self.mip,mipt 
Note: See TracChangeset for help on using the changeset viewer.