From 4c1256014901332ca7f7241c0858533aa83c3edc Mon Sep 17 00:00:00 2001 From: ZeroRin Date: Wed, 23 Aug 2023 21:35:53 +0800 Subject: [PATCH] bugfix --- gf_utils.py | 9 ++++++--- main.py | 35 +++++++++++++++++++++++++++++++++-- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/gf_utils.py b/gf_utils.py index 895f5ae..7e378b7 100644 --- a/gf_utils.py +++ b/gf_utils.py @@ -94,7 +94,7 @@ def __len__(self): return len(self.__keys) -def download(url, path, max_retry=3, timeout_sec=5): +def download(url, path, max_retry=10, timeout_sec=5): socket.setdefaulttimeout(timeout_sec) fname = os.path.split(path)[-1] logger.info(f"Start downloading {fname}") @@ -103,11 +103,14 @@ def download(url, path, max_retry=3, timeout_sec=5): if not os.path.exists(path): request.urlretrieve(url, path + ".tmp") os.rename(path + ".tmp", path) - except (URLError, timeout, ConnectionResetError): + except Exception as e: if i + 1 < max_retry: - logger.warning(f"Failed to download {fname} for {i+1}/10 tries") + logger.warning( + f"Failed to download {fname} for {i+1}/{max_retry} tries" + ) continue else: + logger.exception(repr(e)) raise else: logger.info(f"Successfully downloaded {fname}") diff --git a/main.py b/main.py index 0289e0b..e2b29f7 100644 --- a/main.py +++ b/main.py @@ -1,7 +1,9 @@ import json import locale +import logging import os import shutil +import socket import tkinter as tk import tkinter.ttk as ttk from functools import partial, wraps @@ -12,17 +14,46 @@ from tkinter.messagebox import showerror, showinfo from tkinter.simpledialog import Dialog from typing import * +from urllib import request from urllib.error import HTTPError import pulp as lp +import urllib3 from gf_utils2.gamedata import GameData from commander_new.commander import Commander -from gf_utils import download from gunframe import GunFrame from load_user_info import load_perfect_info, load_user_info from prepare_choices import prepare_choices +logger = logging.getLogger(__name__) +https = urllib3.PoolManager() + + +def download(url, path, max_retry=10, timeout_sec=5): + socket.setdefaulttimeout(timeout_sec) + fname = os.path.split(path)[-1] + logger.info(f"Start downloading {fname}") + for i in range(max_retry): + try: + if not os.path.exists(path): + https.urlopen() + request.urlretrieve(url, path + ".tmp") + os.rename(path + ".tmp", path) + except Exception as e: + if i + 1 < max_retry: + logger.warning( + f"Failed to download {fname} for {i+1}/{max_retry} tries" + ) + continue + else: + logger.exception(repr(e)) + raise + else: + logger.info(f"Successfully downloaded {fname}") + break + return path + def menu_from_dict( master: tk.Widget, options: dict, var_key: tk.Variable, var_value: tk.Variable @@ -275,7 +306,7 @@ def download_data(self, region="ch", re_download=False): try: download(url, str(tmp_dir / f"{table}.txt")) if (data_dir / f"table/{table}.txt").exists(): - os.remove(data_dir / f"{table}.json") + os.remove(data_dir / f"table/{table}.txt") (tmp_dir / f"{table}.txt").rename( data_dir / f"table/{table}.txt" )