def cells(self, origin: str, map_proto: dict): protocells = map_proto.get("cells", []) query = ( "INSERT INTO trs_s2cells (id, level, center_latitude, center_longitude, updated) " "VALUES (%s, %s, %s, %s, %s) " "ON DUPLICATE KEY UPDATE updated=VALUES(updated)") cells = [] for cell in protocells: cell_id = cell["id"] if cell_id < 0: cell_id = cell_id + 2**64 lat, lng, alt = S2Helper.get_position_from_cell(cell_id) cells.append( (cell_id, 15, lat, lng, cell["current_timestamp"] / 1000)) self._db_exec.executemany(query, cells, commit=True)
def submit_spawnpoints_map_proto(self, origin, map_proto): log.debug("{DbWrapperBase::submit_spawnpoints_map_proto} called with data received by %s" % str(origin)) cells = map_proto.get("cells", None) if cells is None: return False spawnpoint_args, spawnpoint_args_unseen = [], [] spawnids = [] query_spawnpoints = ( "INSERT INTO trs_spawn (spawnpoint, latitude, longitude, earliest_unseen, " "last_scanned, spawndef, calc_endminsec) " "VALUES (%s, %s, %s, %s, %s, %s, %s) " "ON DUPLICATE KEY UPDATE last_scanned=VALUES(last_scanned), " "earliest_unseen=LEAST(earliest_unseen, VALUES(earliest_unseen)), " "spawndef=VALUES(spawndef), calc_endminsec=VALUES(calc_endminsec)" "" ) query_spawnpoints_unseen = ( "INSERT INTO trs_spawn (spawnpoint, latitude, longitude, earliest_unseen, last_non_scanned, spawndef) " "VALUES (%s, %s, %s, %s, %s, %s) " "ON DUPLICATE KEY UPDATE spawndef=VALUES(spawndef), last_non_scanned=VALUES(last_non_scanned)" "" ) now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") dt = datetime.now() for cell in cells: for wild_mon in cell["wild_pokemon"]: spawnids.append(int(str(wild_mon['spawnpoint_id']), 16)) spawndef = self.getspawndef(spawnids) for cell in cells: for wild_mon in cell["wild_pokemon"]: spawnid = int(str(wild_mon['spawnpoint_id']), 16) lat, lng, alt = S2Helper.get_position_from_cell(int(str(wild_mon['spawnpoint_id']) + '00000', 16)) despawntime = wild_mon['time_till_hidden'] minpos = self._get_min_pos_in_array() # TODO: retrieve the spawndefs by a single executemany and pass that... spawndef_ = spawndef.get(spawnid, False) if spawndef_: newspawndef = self._set_spawn_see_minutesgroup(spawndef_, minpos) else: newspawndef = self._set_spawn_see_minutesgroup(DbWrapperBase.def_spawn, minpos) last_scanned = None last_non_scanned = None if 0 <= int(despawntime) <= 90000: fulldate = dt + timedelta(milliseconds=despawntime) earliest_unseen = int(despawntime) last_scanned = now calcendtime = fulldate.strftime("%M:%S") spawnpoint_args.append( ( spawnid, lat, lng, earliest_unseen, last_scanned, newspawndef, calcendtime ) ) else: earliest_unseen = 99999999 last_non_scanned = now calcendtime = None spawnpoint_args_unseen.append( ( spawnid, lat, lng, earliest_unseen, last_non_scanned, newspawndef ) ) self.executemany(query_spawnpoints, spawnpoint_args, commit=True) self.executemany(query_spawnpoints_unseen, spawnpoint_args_unseen, commit=True)