mirror of
https://github.com/Jylpah/blitz-tools.git
synced 2026-10-28 20:49:52 +01:00
Workaround for Python 3.8 Asyncio issues with Win 10
This commit is contained in:
1 parent
a706903b18
commit
7cfdd872c8
4 files changed
+259
-194
No files matched your search
+67
-51
@@ -1,8 +1,16 @@
|
||||
#!/usr/local/bin/python3.7
|
||||
#!/usr/local/bin/python3.7
|
||||
|
||||
# Get Tankpedia from WoTinspector.com
|
||||
|
||||
import sys, argparse, json, os, inspect, aiohttp, asyncio, re, logging
|
||||
import sys
|
||||
import argparse
|
||||
import json
|
||||
import os
|
||||
import inspect
|
||||
import aiohttp
|
||||
import asyncio
|
||||
import re
|
||||
import logging
|
||||
from pathlib import Path
|
||||
import blitzutils as bu
|
||||
from blitzutils import WG
|
||||
@@ -11,65 +19,73 @@ from blitzutils import WoTinspector
|
||||
logging.getLogger("asyncio").setLevel(logging.DEBUG)
|
||||
|
||||
VERBOSE = False
|
||||
DEBUG = False
|
||||
DEBUG = False
|
||||
|
||||
tank_type = [ 'lightTank', 'mediumTank', 'heavyTank', 'AT-SPG' ]
|
||||
tank_type = ['lightTank', 'mediumTank', 'heavyTank', 'AT-SPG']
|
||||
|
||||
#@asyncio.coroutine
|
||||
# @asyncio.coroutine
|
||||
async def get_tankopedia(filename: str):
|
||||
url="https://wotinspector.com/static/armorinspector/tank_db_blitz.js"
|
||||
async with aiohttp.ClientSession() as client:
|
||||
async with client.get(url) as r:
|
||||
if r.status == 200:
|
||||
WI_tank_db=await r.text()
|
||||
WI_tank_db = WI_tank_db.split("\n")
|
||||
else:
|
||||
print('Error: Could not get valid HTTPS response. HTTP: ' + str(r.status) )
|
||||
sys.exit(1)
|
||||
tanks = {}
|
||||
n = 0
|
||||
p = re.compile('\\s*(\\d+):\\s{"en":"([^"]+)",.*?"tier":(\\d+), "type":(\\d), "premium":(\\d).*')
|
||||
for line in WI_tank_db[1:-1]:
|
||||
m = p.match(line)
|
||||
tank = {}
|
||||
tank['tank_id'] = int(m.group(1))
|
||||
tank['name'] = m.group(2)
|
||||
tank['tier'] = int(m.group(3))
|
||||
tank['type'] = tank_type[int(m.group(4))]
|
||||
tank['is_premium'] = (int(m.group(5)) == 1)
|
||||
tanks[str(m.group(1))] = tank
|
||||
n += 1
|
||||
url = "https://wotinspector.com/static/armorinspector/tank_db_blitz.js"
|
||||
async with aiohttp.ClientSession() as client:
|
||||
async with client.get(url) as r:
|
||||
if r.status == 200:
|
||||
WI_tank_db = await r.text()
|
||||
WI_tank_db = WI_tank_db.split("\n")
|
||||
else:
|
||||
print('Error: Could not get valid HTTPS response. HTTP: ' + str(r.status) )
|
||||
sys.exit(1)
|
||||
tanks = {}
|
||||
n = 0
|
||||
p = re.compile('\\s*(\\d+):\\s{"en":"([^"]+)",.*?"tier":(\\d+), "type":(\\d), "premium":(\\d).*')
|
||||
for line in WI_tank_db[1:-1]:
|
||||
m = p.match(line)
|
||||
tank = {}
|
||||
tank['tank_id'] = int(m.group(1))
|
||||
tank['name'] = m.group(2)
|
||||
tank['tier'] = int(m.group(3))
|
||||
tank['type'] = tank_type[int(m.group(4))]
|
||||
tank['is_premium'] = (int(m.group(5)) == 1)
|
||||
tanks[str(m.group(1))] = tank
|
||||
n += 1
|
||||
|
||||
tankopedia = {}
|
||||
tankopedia['status'] = "ok"
|
||||
tankopedia['meta'] = {"count" : n}
|
||||
tankopedia['data'] = tanks
|
||||
print("Tankopedia has " + str(n) + " tanks in: " + filename)
|
||||
with open(filename,'w') as outfile:
|
||||
outfile.write(json.dumps(tankopedia, ensure_ascii=False, indent=4, sort_keys=True))
|
||||
return None
|
||||
tankopedia = {}
|
||||
tankopedia['status'] = "ok"
|
||||
tankopedia['meta'] = {"count" : n}
|
||||
tankopedia['data'] = tanks
|
||||
print("Tankopedia has " + str(n) + " tanks in: " + filename)
|
||||
with open(filename,'w') as outfile:
|
||||
outfile.write(json.dumps(tankopedia, ensure_ascii=False, indent=4, sort_keys=True))
|
||||
return None
|
||||
|
||||
|
||||
async def main(argv):
|
||||
# set the directory for the script
|
||||
os.chdir(os.path.dirname(sys.argv[0]))
|
||||
# set the directory for the script
|
||||
os.chdir(os.path.dirname(sys.argv[0]))
|
||||
|
||||
parser = argparse.ArgumentParser(description='Retrieve Tankopedia from WoTinspector.com')
|
||||
parser.add_argument('--file', dest="outfile", help='Write Tankopedia to file')
|
||||
parser.add_argument('-d', '--debug', action='store_true', default=False, help='Debug mode')
|
||||
parser.add_argument('-v', '--verbose', action='store_true', default=False, help='Verbose mode')
|
||||
parser.add_argument('-s', '--silent', action='store_true', default=False, help='Silent mode')
|
||||
|
||||
args = parser.parse_args()
|
||||
bu.set_log_level(args.silent, args.verbose, args.debug)
|
||||
|
||||
wi = WoTinspector()
|
||||
parser = argparse.ArgumentParser(description='Retrieve Tankopedia from WoTinspector.com')
|
||||
parser.add_argument('--file', dest="outfile", help='Write Tankopedia to file')
|
||||
parser.add_argument('-d', '--debug', action='store_true', default=False, help='Debug mode')
|
||||
parser.add_argument('-v', '--verbose', action='store_true', default=False, help='Verbose mode')
|
||||
parser.add_argument('-s', '--silent', action='store_true', default=False, help='Silent mode')
|
||||
|
||||
await wi.get_tankopedia(args.outfile)
|
||||
args = parser.parse_args()
|
||||
bu.set_log_level(args.silent, args.verbose, args.debug)
|
||||
|
||||
await wi.close()
|
||||
wi = WoTinspector()
|
||||
await wi.get_tankopedia(args.outfile)
|
||||
|
||||
await wi.close()
|
||||
|
||||
|
||||
### main()
|
||||
# main()
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(main(sys.argv[1:]), debug=False)
|
||||
# To avoid 'Event loop is closed' RuntimeError due to compatibility issue with aiohttp
|
||||
if sys.platform.startswith("win") and sys.version_info >= (3, 8):
|
||||
try:
|
||||
from asyncio import WindowsSelectorEventLoopPolicy
|
||||
except ImportError:
|
||||
pass
|
||||
else:
|
||||
if not isinstance(asyncio.get_event_loop_policy(), WindowsSelectorEventLoopPolicy):
|
||||
asyncio.set_event_loop_policy(WindowsSelectorEventLoopPolicy())
|
||||
asyncio.run(main(sys.argv[1:]), debug=False)
|
||||
Reference in new issue
Block a user