import psutil from db.DbFactory import DbFactory from mitm_receiver.MitmMapper import MitmMapper, MitmMapperManager from mitm_receiver.MITMReceiver import MITMReceiver from utils.logging import initLogging, logger from utils.madGlobals import terminate_mad from utils.rarity import Rarity from utils.version import MADVersion from utils.walkerArgs import parseArgs from websocket.WebsocketServer import WebsocketServer from utils.updater import deviceUpdater args = parseArgs() os.environ['LANGUAGE'] = args.language initLogging(args) # Patch to make exceptions in threads cause an exception. def install_thread_excepthook(): """ Workaround for sys.excepthook thread bug (https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1230540&group_id=5470). Call once from __main__ before creating any threads. If using psyco, call psycho.cannotcompile(threading.Thread.run) since this replaces a new-style class method. """ import sys run_thread_old = Thread.run run_process_old = Process.run
def main(): args = Args() initLogging(args) if len(sys.argv) != 2: logger.error("usage: remove_all_spawns_within_geofence.py GEOFENCE_FILENAME") sys.exit(1) LocationWithID = collections.namedtuple('Location', ['lat', 'lng', 'spawnpoint']) geofence_filename = sys.argv[1] #print("Argument: '%s'" % (geofence_filename)) # no .txt, add it if ".txt" not in geofence_filename: geofence_filename = geofence_filename+".txt" # no / in filename, probably not an absolute path, append standard MAD path if "/" not in geofence_filename: geofence_filename = "../configs/geofences/" + geofence_filename logger.info("Trying to use file: {}", geofence_filename) if not os.path.isfile(geofence_filename): logger.error("Geofence file {} not found, exit", geofence_filename) sys.exit(1) geofence_helper = GeofenceHelper(geofence_filename, None) minLat, minLon, maxLat, maxLon = geofence_helper.get_polygon_from_fence() query = ( "SELECT latitude, longitude, spawnpoint " "FROM trs_spawn " "WHERE (latitude >= {} AND longitude >= {} " "AND latitude <= {} AND longitude <= {}) " ).format(minLat, minLon, maxLat, maxLon) delete_query = ( "DELETE FROM trs_spawn " "WHERE spawnpoint = {} " ) list_of_coords: List[LocationWithID] = [] dbip = get_value_for(r'\s+dbip:\s+([^\s]+)') dbport = get_value_for(r'\s+dbport:\s+([^.\s]*)', False) if dbport is None: # if dbport is not set, use default dbport = '3306' dbusername = get_value_for(r'\s+dbusername:\s+([^.\s]*)') dbpassword = get_value_for(r'\s+dbpassword:\s+([^.\s]*)') dbname = get_value_for(r'\s+dbname:\s+([^.\s]*)') #print("Successfully parsed config.ini, using values:") #print("dbport: %s" % dbport) #print("dbusername: %s" % dbusername) #print("dbname: %s" % dbname) #print("dbip: %s" % dbip) connection = mysql.connector.connect( host = dbip, port = dbport, user = dbusername, passwd = dbpassword, database = dbname) cursor = connection.cursor() cursor.execute(query) res = cursor.fetchall() for (latitude, longitude, spawnpoint) in res: list_of_coords.append(LocationWithID(latitude, longitude, spawnpoint)) geofenced_coords = geofence_helper.get_geofenced_coordinates(list_of_coords) spawnpointcount = len(geofenced_coords) for coords in geofenced_coords: sql = delete_query.format(coords.spawnpoint) cursor.execute(sql) #print(sql) connection.commit() cursor.close() connection.close() logger.success("Done, deleted {} spawnpoints", spawnpointcount)