def delete(self, for_resonance_id): if self._phase_storage == PhaseStorage.redis: REDIS.delete(_get_rediskey_name(for_resonance_id)) elif self._phase_storage == PhaseStorage.db: conn = engine.connect() conn.execute("DELETE FROM %s WHERE resonance_id = %s;" % (TABLENAME, for_resonance_id)) elif self._phase_storage == PhaseStorage.file: filepath = get_file_name(for_resonance_id) if os.path.exists(filepath): os.remove(filepath)
def clear_phases(start: int, stop: int, planets: Tuple[str]): conn = engine.connect() resonance_ids = [] redis_logged = False for resonance in get_resonances(start, stop, False, planets): try: REDIS.delete('%s:%i' % (TABLENAME, resonance.id)) except ConnectionError: redis_logged = _log_redis(redis_logged) resonance_ids.append(str(resonance.id)) filename = get_file_name(resonance.id) if os.path.exists(filename): os.remove(filename) conn.execute("DELETE FROM %s WHERE resonance_id = ANY('{%s}'::int[]);" % (TABLENAME, ','.join(resonance_ids)))
def _build_redis_phases(by_aei_data: List[str], in_key: str, orbital_elem_set: ResonanceOrbitalElementSetFacade) \ -> List[Dict[str, float]]: pipe = REDIS.pipeline() serialized_phases = [] for year, value in orbital_elem_set.get_resonant_phases(by_aei_data): serialized_phase = dict(year=year, value=value) pipe = pipe.rpush(in_key, '%s' % serialized_phase) serialized_phases.append(serialized_phase) pipe.execute() return serialized_phases
def load(self, resonance_id: int) -> List[float]: phases = None if self._phase_storage == PhaseStorage.redis: phases = [ json.loads(x.decode('utf-8').replace('\'', '"'))['value'] for x in REDIS.lrange(_get_rediskey_name(resonance_id), 0, -1) ] elif self._phase_storage == PhaseStorage.db: conn = engine.connect() result = conn.execute('SELECT value FROM %s WHERE resonance_id=%i' % (TABLENAME, resonance_id)) phases = [x['value'] for x in result] elif self._phase_storage == PhaseStorage.file: with open(get_file_name(resonance_id)) as f: phases = [json.loads(x.replace('\'', '"'))['value'] for x in f] return phases
def _save_redis(serialized_phases: List[Dict[str, float]], in_key: str): pipe = REDIS.pipeline() for phase in serialized_phases: pipe = pipe.rpush(in_key, '%s' % phase) pipe.execute()