From 06cc316326e17e395e17dd95433ee1f94384f204 Mon Sep 17 00:00:00 2001 From: Sander Land Date: Sat, 30 May 2020 23:21:20 +0200 Subject: [PATCH] icon, config --- katrain/KataGo/analysis_config.cfg | 2 +- katrain/__main__.py | 7 +- katrain/config.json | 5 +- katrain/core/base_katrain.py | 36 +++++++-- katrain/core/constants.py | 1 + katrain/core/engine.py | 5 +- katrain/img/icon.ico | Bin 0 -> 134714 bytes katrain/img/icon.png | Bin 10817 -> 0 bytes setup.py | 2 +- spec/KaTrain.spec | 113 +++++++++++++++++++---------- 10 files changed, 117 insertions(+), 54 deletions(-) create mode 100644 katrain/img/icon.ico delete mode 100644 katrain/img/icon.png diff --git a/katrain/KataGo/analysis_config.cfg b/katrain/KataGo/analysis_config.cfg index 6c8bba0..7a9510a 100644 --- a/katrain/KataGo/analysis_config.cfg +++ b/katrain/KataGo/analysis_config.cfg @@ -5,7 +5,7 @@ # Logs------------------------------------------------------------------------------------ # Where to output log? -logFile = gtp.log +logFile = "~/.katrain/katago_log.txt" # Controls the number of moves after the first move in a variation. # analysisPVLen = 15 diff --git a/katrain/__main__.py b/katrain/__main__.py index 30dfeb4..163a94f 100644 --- a/katrain/__main__.py +++ b/katrain/__main__.py @@ -3,7 +3,7 @@ import os # isort:skip os.environ["KCFG_KIVY_LOG_LEVEL"] = os.environ.get("KCFG_KIVY_LOG_LEVEL", "warning") # isort:skip surpress info output from kivy.config import Config # isort:skip -ICON = "img/icon.png" # isort:skip # set icon +ICON = "img/icon.ico" # isort:skip # set icon Config.set("kivy", "window_icon", ICON) # isort:skip # set icon Config.set("input", "mouse", "mouse,multitouch_on_demand") # isort:skip # no red dots on right click Config.set("graphics", "width", 1300) # isort:skip @@ -27,7 +27,7 @@ from katrain.core.utils import ( DEFAULT_LANGUAGE, find_package_resource, ) -from katrain.core.constants import OUTPUT_ERROR, OUTPUT_KATAGO_STDERR, OUTPUT_INFO, OUTPUT_DEBUG, OUTPUT_EXTRA_DEBUG, MODE_PLAY, AI_STRATEGIES_RECOMMENDED_ORDER, HOMEPAGE +from katrain.core.constants import OUTPUT_ERROR, OUTPUT_KATAGO_STDERR, OUTPUT_INFO, OUTPUT_DEBUG, OUTPUT_EXTRA_DEBUG, MODE_PLAY, HOMEPAGE, VERSION from katrain.gui.popups import ConfigTeacherPopup, ConfigTimerPopup, I18NPopup from katrain.core.base_katrain import KaTrainBase from katrain.core.engine import KataGoEngine @@ -41,7 +41,6 @@ from katrain.gui.controlspanel import ControlsPanel from katrain.gui.popups import ConfigPopup, LoadSGFPopup, NewGamePopup, AIPopup from katrain.gui.style import ENGINE_BUSY_COL, ENGINE_DOWN_COL, ENGINE_READY_COL -__version__ = "1.1.0" class KaTrainGui(Screen, KaTrainBase): @@ -367,7 +366,7 @@ class KaTrainApp(MDApp): def build(self): self.icon = ICON # how you're supposed to set an icon self.gui = KaTrainGui() - self.title = f"KaTrain v{__version__}" + self.title = f"KaTrain v{VERSION}" self.theme_cls.theme_style = "Dark" self.theme_cls.primary_palette = "Blue" diff --git a/katrain/config.json b/katrain/config.json index 174fb96..ac0bf8b 100644 --- a/katrain/config.json +++ b/katrain/config.json @@ -17,7 +17,8 @@ "sgf_save": "./sgfout", "anim_pv_time": 0.5, "debug_level": 0, - "lang": "en" + "lang": "en", + "version": "1.1.0" }, "timer": { "byo_length": 30, @@ -64,7 +65,7 @@ true ], "eval_off_show_last": 3, - "eval_show_ai": false, + "eval_show_ai": true, "lock_ai": true }, "ai": { diff --git a/katrain/core/base_katrain.py b/katrain/core/base_katrain.py index ebd61e4..db52555 100644 --- a/katrain/core/base_katrain.py +++ b/katrain/core/base_katrain.py @@ -1,7 +1,7 @@ from kivy import Config from kivy.properties import ObjectProperty from kivy.storage.jsonstore import JsonStore -import os, sys +import os, sys, shutil from katrain.core.constants import * from katrain.core.utils import find_package_resource @@ -38,7 +38,8 @@ class Player: class KaTrainBase: - CONFIG_FILE = "katrain/config.json" + USER_CONFIG_FILE = os.path.expanduser("~/.katrain/config.json") + PACKAGE_CONFIG_FILE = "katrain/config.json" """Settings, logging, and players functionality, so other classes like bots who need a katrain instance can be used without a GUI""" @@ -66,15 +67,38 @@ class KaTrainBase: print(message) def _load_config(self): - config_file = os.path.abspath(sys.argv[1] if len(sys.argv) > 1 and sys.argv[1].endswith(".json") else find_package_resource(self.CONFIG_FILE)) + if len(sys.argv) > 1 and sys.argv[1].endswith(".json"): + config_file = os.path.abspath(sys.argv[1]) + self.log(f"Using command line config file {config_file}", OUTPUT_INFO) + else: + user_config_file = find_package_resource(self.USER_CONFIG_FILE) + package_config_file = find_package_resource(self.PACKAGE_CONFIG_FILE) + try: + if not os.path.exists(user_config_file): + os.makedirs(os.path.split(user_config_file)[0], exist_ok=True) + shutil.copyfile(package_config_file,user_config_file) + config_file = user_config_file + self.log(f"Copied package config to local file {config_file}", OUTPUT_INFO) + else: # user file exists + version = JsonStore(user_config_file, indent=4).get("general")["version"] + if version != VERSION: + backup = user_config_file+f".{version}.backup" + shutil.copyfile(user_config_file,backup) + shutil.copyfile(package_config_file, user_config_file) + self.log(f"Copied package config file to {user_config_file} as user file is outdated (<{VERSION}). Old version stored as {backup}", OUTPUT_INFO) + config_file = user_config_file + self.log(f"Using user config file {config_file}", OUTPUT_INFO) + except Exception as e: + config_file = package_config_file + self.log(f"Using package config file {config_file} (exception {e} occurred when finding or creating user config)", OUTPUT_INFO) try: - self.log(f"Using config file {config_file}", OUTPUT_INFO) self._config_store = JsonStore(config_file, indent=4) - self._config = dict(self._config_store) - return config_file except Exception as e: self.log(f"Failed to load config {config_file}: {e}", OUTPUT_ERROR) sys.exit(1) + self._config = dict(self._config_store) + return config_file + def save_config(self): for k, v in self._config.items(): diff --git a/katrain/core/constants.py b/katrain/core/constants.py index eff89c0..4be237b 100644 --- a/katrain/core/constants.py +++ b/katrain/core/constants.py @@ -1,3 +1,4 @@ +VERSION = "1.1.0" HOMEPAGE = "https://github.com/sanderland/katrain" PLAYER_HUMAN, PLAYER_AI = "player:human", "player:ai" diff --git a/katrain/core/engine.py b/katrain/core/engine.py index fbe72b4..2b3df32 100644 --- a/katrain/core/engine.py +++ b/katrain/core/engine.py @@ -55,7 +55,10 @@ class KataGoEngine: def start(self): try: self.katrain.log(f"Starting KataGo with {self.command}", OUTPUT_DEBUG) - self.katago_process = subprocess.Popen(self.command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + + self.katago_process = subprocess.Popen(self.command, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.PIPE, + shell=True) except (FileNotFoundError, PermissionError, OSError) as e: if not self.config["katago"].strip(): self.katrain.log( diff --git a/katrain/img/icon.ico b/katrain/img/icon.ico new file mode 100644 index 0000000000000000000000000000000000000000..b1d9a3709ca477d981dd418885e7132364622df4 GIT binary patch literal 134714 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

M=wejF)XV|Az0MEk|q` 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 b4M7T>gg!9~)d=ua0g&3G$LMlJi?II#j#)#+ literal 0 HcmV?d00001 diff --git a/katrain/img/icon.png b/katrain/img/icon.png deleted file mode 100644 index 204ec05dec5673a6c16180f86b3d69562557f984..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10817 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 diff --git a/setup.py b/setup.py index 0e138df..76d1550 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ from setuptools import find_packages, setup package_data = {"": ["*.json", "*.kv"], "katrain": [], "tests": []} packages = find_packages(exclude=["tests"]) -version = re.search('^__version__\s*=\s*"(.*)"', open("katrain/__main__.py").read(), re.M).group(1) +version = re.search('^VERSION\s*=\s*"(.*)"', open("katrain/core/constants.py").read(), re.M).group(1) def include_data_files(directory): diff --git a/spec/KaTrain.spec b/spec/KaTrain.spec index 45c4ca1..6fa2e14 100644 --- a/spec/KaTrain.spec +++ b/spec/KaTrain.spec @@ -1,50 +1,85 @@ # -*- mode: python ; coding: utf-8 -*- from kivy_deps import sdl2, glew +from kivymd import hooks_path as kivymd_hooks_path block_cipher = None # pyinstaller spec/katrain.spec --noconfirm # --upx-dir my -a = Analysis(['..\\katrain\\__main__.py'], - pathex=['C:\\Users\\sande\\Desktop\\katrain\\spec'], - binaries=[], - datas=[('..\\katrain\\gui.kv','katrain'),('..\\katrain\\config.json','katrain'), - ('..\\katrain\\KataGo','katrain\KataGo'),('..\\katrain\img','katrain\img'), - ('..\\katrain\\models','katrain\models')], - hiddenimports=["win32file","win32timezone"], # FileChooser in kivy loads this conditionally - hookspath=[], - runtime_hooks=[], - excludes=['scipy','pandas','numpy','matplotlib','docutils','mkl'], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, - noarchive=False) +a = Analysis( + ["..\\katrain\\__main__.py"], + pathex=["C:\\Users\\sande\\Desktop\\katrain\\spec"], + binaries=[], + datas=[ + ("..\\katrain\\gui.kv", "katrain"), + ("..\\katrain\\popups.kv", "katrain"), + ("..\\katrain\\config.json", "katrain"), + ("..\\katrain\\KataGo", "katrain\\KataGo"), + ("..\\katrain\img", "katrain\\img"), + ("..\\katrain\\models", "katrain\\models"), + ("..\\katrain\\i18n", "katrain\\i18n"), + ("..\\katrain\\fonts", "katrain\\fonts"), + ], + hiddenimports=["win32file", "win32timezone"], # FileChooser in kivy loads this conditionally + hookspath=[kivymd_hooks_path], + excludes=["scipy", "pandas", "numpy", "matplotlib", "docutils", "mkl"], + win_no_prefer_redirects=False, + win_private_assemblies=False, + cipher=None, + noarchive=False, +) -print("SCRIPTS",a.scripts) +print("SCRIPTS", len(a.scripts), "BIN", len(a.binaries), "ZIP", len(a.zipfiles), "DATA", len(a.datas)) -pyz = PYZ(a.pure, a.zipped_data, - cipher=block_cipher) -exe = EXE(pyz, - a.scripts, - [], - exclude_binaries=True, - name='KaTrain', - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - console=True) # , icon='..\\icon.png' +EXCLUDE_SUFFIX = ["katago"] +EXCLUDE = ["KataGoData", "anim_", "screenshot_", "__pycache__", "locales/haha"] +a.datas = [ + (ff, ft, tp) + for ff, ft, tp in a.datas + if not any(ff.endswith(suffix) for suffix in EXCLUDE_SUFFIX) and not any(kw in ff for kw in EXCLUDE) +] -EXCLUDE_SUFFIX = ['katago'] -EXCLUDE = ['KataGoData','anim_','screenshot_','__pycache__'] -a.datas = [(ff,ft,tp) for ff,ft,tp in a.datas if not any(ff.endswith(suffix) for suffix in EXCLUDE_SUFFIX) and not any(kw in ff for kw in EXCLUDE)] -coll = COLLECT(exe, - a.binaries, - a.zipfiles, - a.datas, - *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)], - strip=False, - upx=True, - upx_exclude=[], - name='KaTrain') +print("DATA FILTERED", len(a.datas)) + +pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) +exe = EXE( + pyz, + a.scripts, + [], + exclude_binaries=True, + name="KaTrain", + debug=False, + bootloader_ignore_signals=False, + strip=False, + upx=True, + console=False, + icon="C:\\icon.ico", +) + +coll = COLLECT( + exe, + a.binaries, + a.zipfiles, + a.datas, + *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)], + strip=False, + upx=True, + upx_exclude=[], + name="KaTrain", +) + +exe = EXE( + pyz, + a.scripts, + a.binaries, + a.zipfiles, + a.datas, + *[Tree(p) for p in (sdl2.dep_bins + glew.dep_bins)], + debug=False, + strip=False, + upx=True, + name="KaTrain", + console=False, + icon="C:\\icon.ico", +)