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 spawnpoints(self, origin: str, map_proto: dict, proto_dt: datetime): origin_logger = get_origin_logger(logger, origin=origin) origin_logger.debug3( "DbPogoProtoSubmit::spawnpoints called with data received") cells = map_proto.get("cells", None) if cells is None: return False spawnpoint_args, spawnpoint_args_unseen = [], [] spawn_ids = [] query_spawnpoints = ( "INSERT INTO trs_spawn (spawnpoint, latitude, longitude, earliest_unseen, " "last_scanned, spawndef, calc_endminsec, eventid) " "VALUES (%s, %s, %s, %s, %s, %s, %s, " "(select id from trs_event where now() between event_start and " "event_end order by event_start desc limit 1)) " "ON DUPLICATE KEY UPDATE " "last_scanned=VALUES(last_scanned), " "earliest_unseen=LEAST(earliest_unseen, VALUES(earliest_unseen)), " "spawndef=if(((select id from trs_event where now() between event_start and event_end order " "by event_start desc limit 1)=1 and eventid=1) or (select id from trs_event where now() between " "event_start and event_end order by event_start desc limit 1)<>1 and eventid<>1, VALUES(spawndef), " "spawndef), " "calc_endminsec=VALUES(calc_endminsec)") query_spawnpoints_unseen = ( "INSERT INTO trs_spawn (spawnpoint, latitude, longitude, earliest_unseen, last_non_scanned, spawndef, " "eventid) VALUES (%s, %s, %s, %s, %s, %s, " "(select id from trs_event where now() between event_start and " "event_end order by event_start desc limit 1)) " "ON DUPLICATE KEY UPDATE " "spawndef=if(((select id from trs_event where now() between event_start and event_end order " "by event_start desc limit 1)=1 and eventid=1) or (select id from trs_event where now() between " "event_start and event_end order by event_start desc limit 1)<>1 and eventid<>1, VALUES(spawndef), " "spawndef), " "last_non_scanned=VALUES(last_non_scanned)") now = proto_dt.strftime("%Y-%m-%d %H:%M:%S") dt = proto_dt for cell in cells: for wild_mon in cell["wild_pokemon"]: spawn_ids.append(int(str(wild_mon['spawnpoint_id']), 16)) spawndef = self._get_spawndef(spawn_ids) for cell in cells: for wild_mon in cell["wild_pokemon"]: spawnid = int(str(wild_mon["spawnpoint_id"]), 16) lat, lng, _ = S2Helper.get_position_from_cell( int(str(wild_mon["spawnpoint_id"]) + "00000", 16)) despawntime = wild_mon["time_till_hidden"] minpos = self._get_current_spawndef_pos() # 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( self.default_spawndef, 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 spawnpoint_args_unseen.append( (spawnid, lat, lng, earliest_unseen, last_non_scanned, newspawndef)) self._db_exec.executemany(query_spawnpoints, spawnpoint_args, commit=True) self._db_exec.executemany(query_spawnpoints_unseen, spawnpoint_args_unseen, commit=True)