diff --git a/src/tor_relay_scanner/scanner.py b/src/tor_relay_scanner/scanner.py index b511c8d..38e8c5d 100644 --- a/src/tor_relay_scanner/scanner.py +++ b/src/tor_relay_scanner/scanner.py @@ -124,7 +124,12 @@ def start_browser(): def str_list_with_prefix(prefix, list_): - return "\n".join([prefix + r for r in list_]) + return "\n".join(prefix + r for r in list_) + + +def chunked_list(l, size): + for i in range(0, len(l), size): + yield l[i:i+size] async def main_async(args): @@ -168,34 +173,27 @@ async def main_async(args): relays_new.append(relay_copy) relays = relays_new if not relays: - print("There are no relays within specified port number constrains!", file=sys.stderr) + print("There are no relays within specified port number constraints!", file=sys.stderr) print("Try changing port numbers.", file=sys.stderr) return 2 working_relays = list() - ntry = 0 - relaypos = 0 - numtries = round(len(relays) / NUM_RELAYS) - for ntry in range(numtries): + numtries = (len(relays) + NUM_RELAYS - 1) // NUM_RELAYS + for ntry, chunk in enumerate(chunked_list(relays, NUM_RELAYS)): if len(working_relays) >= WORKING_RELAY_NUM_GOAL: break - relaynum = min(NUM_RELAYS, len(relays) - relaypos - 1) - test_relays = [TorRelay(relays[x]) - for x in range(relaypos, relaypos+relaynum)] - relaypos += NUM_RELAYS - - if not test_relays: - break + relaynum = len(chunk) + test_relays = [TorRelay(r) for r in chunk] print( - f"\nTry {ntry}/{numtries}, We'll test the following {NUM_RELAYS} random relays:", file=sys.stderr) + f"\nTry {ntry+1}/{numtries}, We'll test the following {relaynum} random relays:", file=sys.stderr) for relay in test_relays: print(relay, file=sys.stderr) - print("", file=sys.stderr) + print(file=sys.stderr) if ntry: - print(f"Found {len(working_relays)} good relays so far. Test {ntry}/{numtries} started…", file=sys.stderr) + print(f"Found {len(working_relays)} good relays so far. Test {ntry+1}/{numtries} started…", file=sys.stderr) else: print(f"Test started…", file=sys.stderr) @@ -203,7 +201,7 @@ async def main_async(args): for relay in test_relays: tasks.append(asyncio.create_task(relay.check(TIMEOUT))) fin = await asyncio.gather(*tasks) - print("", file=sys.stderr) + print(file=sys.stderr) print("The following relays are reachable this try:", file=sys.stderr) for relay in test_relays: @@ -216,7 +214,7 @@ async def main_async(args): print("No relays are reachable this try.", file=sys.stderr) if ntry > 1: - print("", file=sys.stderr) + print(file=sys.stderr) print("All reachable relays:", file=sys.stderr) for relay in working_relays: if relay: