def __init__(self, filename): """ Initialize. Parameters ---------- filename : str The path to the filename containing the recorded data. """ super(SqliteCaseReader, self).__init__(filename) if filename is not None: if not is_valid_sqlite3_db(filename): raise IOError('File does not contain a valid ' 'sqlite database ({0})'.format(filename)) self._coordinate_split_re = re.compile('\|\\d+\|*') with sqlite3.connect(self.filename) as con: cur = con.cursor() cur.execute( "SELECT format_version, abs2prom, prom2abs, abs2meta FROM metadata" ) row = cur.fetchone() self.format_version = row[0] self._abs2prom = None self._prom2abs = None self._abs2meta = None if PY2: self._abs2prom = pickle.loads(str( row[1])) if row[1] is not None else None self._prom2abs = pickle.loads(str( row[2])) if row[2] is not None else None self._abs2meta = pickle.loads(str( row[3])) if row[3] is not None else None if PY3: self._abs2prom = pickle.loads( row[1]) if row[1] is not None else None self._prom2abs = pickle.loads( row[2]) if row[2] is not None else None self._abs2meta = pickle.loads( row[3]) if row[3] is not None else None con.close() self.output2meta = PromotedToAbsoluteMap(self._abs2meta, self._prom2abs, self._abs2prom, True) self.input2meta = PromotedToAbsoluteMap(self._abs2meta, self._prom2abs, self._abs2prom, False) self._load()
def __init__(self, filename): """ Initialize. Parameters ---------- filename : str The path to the filename containing the recorded data. """ super(SqliteCaseReader, self).__init__(filename) if filename is not None: if not is_valid_sqlite3_db(filename): if not os.path.exists(filename): raise IOError('File does not exist({0})'.format(filename)) else: raise IOError('File does not contain a valid ' 'sqlite database ({0})'.format(filename)) self._coordinate_split_re = re.compile('\|\\d+\|*') with sqlite3.connect(self.filename) as con: cur = con.cursor() # need to see what columns are in the metadata table before we query it cursor = cur.execute('select * from metadata') names = [description[0] for description in cursor.description] if "var_settings" in names: cur.execute( "SELECT format_version, abs2prom, prom2abs, abs2meta, var_settings " "FROM metadata") else: cur.execute( "SELECT format_version, abs2prom, prom2abs, abs2meta FROM metadata" ) row = cur.fetchone() self.format_version = row[0] self._abs2prom = None self._prom2abs = None self._abs2meta = None self._var_settings = None if self.format_version >= 4: self._var_settings = safe_load(row[4]) if self.format_version >= 3: self._abs2prom = safe_load(row[1]) self._prom2abs = safe_load(row[2]) self._abs2meta = safe_load(row[3]) for name in self._abs2meta: if 'lower' in self._abs2meta[name]: self._abs2meta[name]['lower'] =\ convert_to_np_array(self._abs2meta[name]['lower'], name, self._abs2meta) if 'upper' in self._abs2meta[name]: self._abs2meta[name]['upper'] =\ convert_to_np_array(self._abs2meta[name]['upper'], name, self._abs2meta) elif self.format_version in (1, 2): if PY2: self._abs2prom = pickle.loads(str( row[1])) if row[1] is not None else None self._prom2abs = pickle.loads(str( row[2])) if row[2] is not None else None self._abs2meta = pickle.loads(str( row[3])) if row[3] is not None else None if PY3: try: self._abs2prom = pickle.loads( row[1]) if row[1] is not None else None self._prom2abs = pickle.loads( row[2]) if row[2] is not None else None self._abs2meta = pickle.loads( row[3]) if row[3] is not None else None except TypeError: # Reading in a python 2 pickle recorded pre-OpenMDAO 2.4. self._abs2prom = pickle.loads(row[1].encode()) if row[1] is not None \ else None self._prom2abs = pickle.loads(row[2].encode()) if row[2] is not None \ else None self._abs2meta = pickle.loads(row[3].encode()) if row[3] is not None \ else None con.close() self.output2meta = PromotedToAbsoluteMap(self._abs2meta, self._prom2abs, self._abs2prom, True) self.input2meta = PromotedToAbsoluteMap(self._abs2meta, self._prom2abs, self._abs2prom, False) self._load()