""" Routines to reformat data """ def fromHardness (hardness): # convert the general hardness number to Shore A or D a = [30.0 , 31.0 , 32.0 , 33.0 , 34.0 , \ 35.0 , 36.0 , 37.0 , 38.0 , 39.0 , \ 40.0 , 41.0 , 42.0 , 43.0 , 44.0 , \ 45.0 , 46.0 , 47.0 , 48.0 , 49.0 , \ 50.0 , 51.0 , 52.0 , 53.0 , 54.0 , \ 55.0 , 56.0 , 57.0 , 58.0 , 59.0 , \ 60.0 , 61.0 , 62.0 , 63.0 , 64.0 , \ 65.0 , 66.0 , 67.0 , 68.0 , 69.0 , \ 70.0 , 71.0 , 72.0 , 73.0 , 74.0 , \ 75.0 , 76.0 , 77.0 , 78.0 , 79.0 , \ 80.0 , 81.0 , 82.0 , 83.0 , 84.0 , \ 85.0 , 86.0 , 87.0 , 88.0 , 89.0 , \ 90.0 , 91.0 , 92.0 , 93.0 , 94.0 , \ 95.0 , 96.0 , 97.0 , 98.0 , 99.0 , \ 100.0] d = [6.0 , 6.2 , 6.4 , 6.6 , 6.8 , \ 7.0 , 7.2 , 7.4 , 7.6 , 7.8 , \ 8.0 , 8.4 , 8.8 , 9.2 , 9.6 , \ 10.0 , 10.4 , 10.8 , 11.2 , 11.6 , \ 12.0 , 12.4 , 12.8 , 13.2 , 13.6 , \ 14.0 , 14.4 , 14.8 , 15.2 , 15.6 , \ 16.0 , 16.6 , 17.2 , 17.8 , 18.4 , \ 19.0 , 19.6 , 20.2 , 20.8 , 21.4 , \ 22.0 , 22.6 , 23.2 , 23.8 , 24.4 , \ 25.0 , 25.8 , 26.6 , 27.4 , 28.2 , \ 29.0 , 29.8 , 30.6 , 31.4 , 32.2 , \ 33.0 , 34.2 , 35.4 , 36.6 , 37.8 , \ 39.0 , 40.4 , 41.8 , 43.2 , 44.6 , \ 46.0 , 48.4 , 50.8 , 53.2 , 55.6 , \ 58.0] shoreA = '' shoreD = '' if hardness < 30: # has to be Shore A shoreA = int (hardness) return str (shoreA)+' A', str (shoreD)+' D' if hardness > 100: # has to be Shore D shoreD = hardness - 42 return str (shoreA)+' A', str (shoreD)+' D' # could be either shore A or D shoreA = int (hardness) if shoreA in a: loc = a.index (shoreA) shoreD = int (d [loc]) return str (shoreA)+' A', str (shoreD)+' D' def fromPercent (percent): # change internal float percentage to string + % return str (percent) + '%' def fromPli (var): # change internal tear strength to string + pli return str (var) + ' pli' def fromPsi (var): # change internal psi to string + psi return str (var) + ' psi' def fromRatio (ratio): # changes internal mixRatio to normal from fractions import Fraction temp = Fraction.from_float (ratio).limit_denominator () a = temp._numerator b = temp._denominator b = b - a mixRatio = str (a)+'A:'+str (b)+'B' return (mixRatio) def fromSeconds (seconds): """ convert seconds into days, hours, minutes, seconds """ days = seconds / (24.*60.*60.) if days > 1.: return str (days)+' days' hours = seconds /(60.*60.) if hours > 1.: return str (hours)+' hrs' minutes = seconds / 60. if minutes > 1.: return str (minutes)+' min' return str (seconds)+' sec' def fromViscosity (var): # convert internal representation of viscosity to # a string for output # check for the special cases if var == 91000: return 'brushable' if var == 92000: return 'paste' if var == 93000: return 'dough' if var == 94000: return 'putty' # some smaller number string = str (var)+ ' cps' return string def toFloat (string): """ Check var (string) for float conversion return 0 if it does not pass. The value as float if it does. """ # remove < if present string = string.replace ('<','') try: return float (string) except: return 0. def toHardness (shoreNo): # convert shore A or D to a standard hardness number import string a = [30.0, 35.0, 40.0, 42.5, 45.0, \ 47.5, 50.0, 52.5, 55.0, 57.5, \ 60.0, 61.666, 63.333, 65.0, 66.666, \ 68.333, 70.0, 71.666, 73.333, 75.0, \ 76.25, 77.5, 78.75, 80.0, 81.25, \ 82.5, 83.75, 85.0, 85.833, 86.666, \ 87.5, 88.333, 89.167, 90.0, 90.714, \ 91.428, 92.142, 92.857, 93.571, 94.285, \ 95.0, 95.417, 95.833, 96.25, 96.667, \ 97.083, 97.5, 97.917, 98.333, 98.75, \ 99.167, 99.583, 100.0] d = [6, 7, 8, 9, 10, \ 11, 12, 13, 14, 15, \ 16, 17, 18, 19, 20, \ 21, 22, 23, 24, 25, \ 26, 27, 28, 29, 30, \ 31, 32, 33, 34, 35, \ 36, 37, 38, 39, 40, \ 41, 42, 43, 44, 45, \ 46, 47, 48, 49, 50, \ 51, 52, 53, 54, 55, \ 56, 57, 58] # set to lower case shoreNo = shoreNo.lower () if 'a' in shoreNo: loc = shoreNo.index ('a') try: hardness = int (shoreNo [:loc]) except: hardness = 0 return hardness if 'd' in shoreNo: loc = shoreNo.index ('d') try: hardness = int (shoreNo [:loc]) except: hardness = 0 if hardness > 58: hardness += 42 else: loc = hardness - 6 if loc < 6: loc = 6 hardness = a [loc] return hardness # don't know if it's A or D - assume A try: hardness = int (shoreNo) except: hardness = 0 return hardness def toInt (string): """ Check string for int conversion return 0 if it does not pass. The value as int if it does. """ try: return int (string) except: return 0 def toPercent (string): # convert percentage to internal # just remove the % sign string = string.replace ('%','') try: percent = float (string) except: percent = 0. return percent def toPli (string): # convert tear strength to intermal # remove 'pli' string = string.replace ('pli','') try: var = int (string) except: var = 0 return var def toPsi (string): # remove 'psi' and convert to int string = string.replace ('psi','') try: var = int (string) except: var = 0 return var def toRatio (mixRatio): # convert the mix ratio to a number for storage & sorting # *** don't know how to handle weight vs. volume problem # lower case mixRatio = mixRatio.lower () # mixRatio must have a : try: a,b = mixRatio.split (':') except: return 0. # remove trailer characters a = a.rstrip ('a') try: aFloat = float (a) except: return 0. b = b.rstrip ('pbv') b = b.rstrip ('pbw') b = b.rstrip () b = b.rstrip ('b') try: bFloat = float (b) except: return 0. ratio = aFloat/(aFloat+bFloat) return ratio def toSeconds (timeString): # convert days, hours, minutes into seconds import string # check if there is a dash - if '-' in timeString: # this should be something like "1-2 days" # drop the low end loc = timeString.index ('-') + 1 timeString = timeString [loc:] # check for day, hour, minute, second if 'day' in timeString: loc = timeString.index ('day') multiplier = 24.*60.*60. elif 'hr' in timeString: loc = timeString.index ('hr') multiplier = 60.*60. elif 'hour' in timeString: loc = timeString.index ('hour') multiplier = 60.*60. elif 'min' in timeString: loc = timeString.index ('min') multiplier = 60. elif 'sec' in timeString: loc = timeString.index ('sec') multiplier = 1. else: # if there is no indication assume seconds loc = len (timeString) multiplier = 1. # pull numeric value temp = timeString [:loc] # try to convert try: time = float (temp) except: time = 0. return time*multiplier def toViscosity (string): # convert viscosity field (cps) to an integer # check for non numeric designation # 90000 series numbers are just arbitrary large nos. # not actual cps string = string.lower () if 'brushable' in string: return 91000 if 'paste' in string: return 92000 if 'dough' in string: return 93000 if 'putty' in string: return 94000 # remove 'cps' string = string.replace ('cps','') try: var = int (string) except: var = 0 return var