def load_environments(self): query = "SELECT rowid, data FROM environments" for row in self.cn.execute(query): # Note, populating the cache is mandatory otherwise. Otherwise, when the # generator populates its cache, it might give us back an env_id that # we've never seen. Another indicaton that Database is misdesigned. tools_env = nodetypes.ToolsEnv(row[0], util.Unpickle(row[1])) self.env_cache_[tools_env.env_id] = tools_env self.env_reverse_lookup_[tools_env.env_data] = tools_env
def add_environment(self, env_data): if env_data in self.env_reverse_lookup_: return self.env_reverse_lookup_[env_data] stamp = time.time() blob = util.BlobType(util.CompatPickle(env_data)) query = "INSERT INTO environments (stamp, data) VALUES (?, ?)" cursor = self.cn.execute(query, (stamp, blob)) tools_env = nodetypes.ToolsEnv(cursor.lastrowid, env_data) self.env_cache_[tools_env.env_id] = tools_env self.env_reverse_lookup_[env_data] = tools_env return tools_env
def fetch_environment(self, env_id): if env_id in self.env_cache_: return self.env_cache_[env_id] query = "SELECT data FROM environments WHERE rowid = ?" cursor = self.cn.execute(query, (env_id, )) row = cursor.fetchone() if not row: raise Exception( 'Database error, invalid environment id {}'.format(env_id)) tools_env = nodetypes.ToolsEnv(env_id, util.Unpickle(row[0])) self.env_cache_[env_id] = tools_env self.env_reverse_lookup_[tools_env.env_data] = tools_env return tools_env