Public Member Functions | |
def | __init__ |
def | __call__ |
def | DoIO |
def | Close |
Private Member Functions | |
def | __ClearCache |
def | __ReadItem |
def | __WriteItem |
Private Attributes | |
__file | |
__mode |
I/O Helper class
Definition at line 6 of file GBSIOHelper.py.
def python::GBSIOHelper::GBSIOHelper::__call__ | ( | self, | ||
name, | ||||
type, | ||||
value = "" | ||||
) |
def python::GBSIOHelper::GBSIOHelper::__ClearCache | ( | self | ) | [private] |
Clear internally cached value (only used for reading).
Definition at line 76 of file GBSIOHelper.py.
00076 : 00077 00078 """Clear internally cached value (only used for reading).""" 00079 00080 self.__name = None 00081 self.__type = None 00082 self.__value = None 00083 def __ReadItem(self):
def python::GBSIOHelper::GBSIOHelper::__init__ | ( | self, | ||
file_name, | ||||
mode | ||||
) |
Definition at line 9 of file GBSIOHelper.py.
00009 : 00010 self.__file = None 00011 self.__mode = mode 00012 self.__ClearCache() 00013 if mode != "r" and mode != "w": 00014 print "GBSIOHelper: Bad I/O mode " + str(mode) + " on " + str(file_name) 00015 raise IOError 00016 self.__file = open(file_name,mode) 00017 def __call__(self,name,type,value=""): return self.DoIO(name,type,value)
def python::GBSIOHelper::GBSIOHelper::__ReadItem | ( | self | ) | [private] |
Read item if not already in cache.
Definition at line 84 of file GBSIOHelper.py.
00084 : 00085 00086 """Read item if not already in cache.""" 00087 if self.__name: return 00088 00089 line = self.__file.readline() 00090 if not line: 00091 Log(self,logger.ERROR,"GBSIOHelper: EOF on " + str(self.__file)) 00092 raise IOError 00093 mo = re.search(r"(.)\s*(.*?):\s+(.*)",line) 00094 if not mo: 00095 Log(self,logger.ERROR,"GBSIOHelper: Malformed data:" + str(line)\ 00096 + " on " + str(self.__file)) 00097 raise IOError 00098 (self.__type,self.__name,self.__value) = mo.groups() 00099 if self.__type == "s": pass 00100 elif self.__type == "i": self.__value = int(self.__value) 00101 elif self.__type == "f": self.__value = float(self.__value) 00102 elif self.__type == "p": 00103 self.__value = pickle.load(self.__file) 00104 self.__file.readline() 00105 else: 00106 Log(self,logger.ERROR,"GBSIOHelper: Bad type: '" + str(self.__type) + "' reading line:" + str(line)\ 00107 + " on " + str(self.__file)) 00108 raise IOError 00109 00110 def __WriteItem(self,name,type,value):
def python::GBSIOHelper::GBSIOHelper::__WriteItem | ( | self, | ||
name, | ||||
type, | ||||
value | ||||
) | [private] |
Write item to file.
Definition at line 111 of file GBSIOHelper.py.
00111 : 00112 00113 """Write item to file.""" 00114 00115 self.__file.write(type + name.rjust(30) + ": ") 00116 if type != "p": 00117 # For strings, replace any '\n' by ' ' before storing 00118 if type == "s": 00119 p = re.compile('(\n)') 00120 value = p.sub(' ',value) 00121 self.__file.write(str(value) + "\n") 00122 else: 00123 self.__file.write("\n") 00124 pickle.dump(value,self.__file) 00125 self.__file.write("\n") 00126 return value 00127 00128 00129 00130 00131 def TestIOHelper():
def python::GBSIOHelper::GBSIOHelper::Close | ( | self | ) |
If reading, check that all the data has been read.
Definition at line 62 of file GBSIOHelper.py.
00062 : 00063 00064 """If reading, check that all the data has been read.""" 00065 if self.__mode == "r": 00066 line = self.__file.readline() 00067 if line: 00068 Log(self,logger.ERROR,"GBSIOHelper: File " + str(self.__file)\ 00069 + " has extra data:-\n" + str(line) + " after I/O complete.'") 00070 raise IOError 00071 self.__file.close() 00072 00073 ###### Private Methods (not user callable) ######
def python::GBSIOHelper::GBSIOHelper::DoIO | ( | self, | ||
name, | ||||
type, | ||||
value = "" | ||||
) |
Definition at line 21 of file GBSIOHelper.py.
00021 : 00022 if self.__file == None: raise IOError 00023 if type != "s" and type != "i" and type != "f" and type != "p": 00024 Log(self,logger.ERROR,"GBSIOHelper: Bad I/O type " + str(type) + " on " + str(self.__file)) 00025 raise IOError 00026 00027 # Check for schema evolution tags '+' and '-' 00028 schema_tag = "" 00029 mo = re.search(r"^(\+|-)(.*)",name) 00030 if mo: (schema_tag,name) = mo.groups() 00031 00032 ### Reading ### 00033 00034 if self.__mode == "r": 00035 self.__ReadItem() 00036 00037 # Deal with matching names but tolerate case differences. 00038 if name.lower() == self.__name.lower(): 00039 if type != self.__type: 00040 Log(self,logger.ERROR,"GBSIOHelper: Type mismatch on name: '" + str(name)\ 00041 + "', found type '" + str(self.__type) + "' but expecting type '"\ 00042 + str(type) + "' in " + str(self.__file)) 00043 raise IOError 00044 value = self.__value 00045 self.__ClearCache() 00046 return value 00047 00048 # Mismatch is O.K. if schema evolution is active 00049 if schema_tag: return value 00050 Log(self,logger.ERROR,"GBSIOHelper: Found name: '" + str(self.__name) + "', but expecting '"\ 00051 + str(name) + "' on " + str(self.__file)) 00052 raise IOError 00053 00054 ### Writing ### 00055 00056 else: 00057 00058 # Schema evolution: don't write dropped names 00059 if schema_tag == "-": return value 00060 return self.__WriteItem(name,type,value) 00061 def Close(self):
python::GBSIOHelper::GBSIOHelper::__file [private] |
Definition at line 10 of file GBSIOHelper.py.
python::GBSIOHelper::GBSIOHelper::__mode [private] |
Definition at line 11 of file GBSIOHelper.py.