From abce25c2e5833ef5345c653a2ab53a4514606702 Mon Sep 17 00:00:00 2001 From: Kyle Altendorf Date: Fri, 9 Apr 2021 22:16:13 -0400 Subject: [PATCH 1/3] find chia via PATH or scripts directory --- src/plotman/manager.py | 52 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/src/plotman/manager.py b/src/plotman/manager.py index 2a17e619..5bf55b61 100644 --- a/src/plotman/manager.py +++ b/src/plotman/manager.py @@ -5,7 +5,10 @@ import re import readline # For nice CLI import subprocess +import shutil import sys +import sysconfig +import textwrap import threading import time from datetime import datetime @@ -23,6 +26,51 @@ MAX_AGE = 1000_000_000 # Arbitrary large number of seconds +SCRIPTS_PATH = sysconfig.get_path('scripts') + +class ChiaExecutable: + def __init__(self, command, path_entry=None): + self.command = command + self.path_entry = path_entry + + def modified_path(self, path=None): + if path is None: + path = os.environ['PATH'] + if self.path_entry is None: + return path + if len(path) > 0: + return os.pathsep.join([self.path_entry, path]) + return self.path_entry + + def modified_environment(self, environment=None): + if environment is None: + environment = os.environ + return { + **environment, + 'PATH': self.modified_path(path=environment['PATH']), + } + +class ChiaNotFoundError(Exception): + pass + +def select_chia_executable(): + from_path = shutil.which('chia') + if from_path is not None: + return ChiaExecutable(command=from_path, path_entry=None) + in_scripts = os.path.join(SCRIPTS_PATH, 'chia') + if sys.platform == 'win32': + in_scripts += '.exe' + if os.path.isfile(in_scripts): + return ChiaExecutable(command=in_scripts, path_entry=SCRIPTS_PATH) + message = textwrap.dedent(f'''\ + 'chia' executable not found in PATH or scripts directory + PATH: {os.environ['PATH']} + scripts: {SCRIPTS_PATH} + ''') + raise ChiaNotFoundError(message) + +CHIA_EXECUTABLE = select_chia_executable() + def dstdirs_to_furthest_phase(all_jobs): '''Return a map from dst dir to a phase tuple for the most progressed job that is emitting to that dst dir.''' @@ -112,7 +160,8 @@ def maybe_start_new_plot(dir_cfg, sched_cfg, plotting_cfg): logfile = os.path.join(dir_cfg['log'], datetime.now().strftime('%Y-%m-%d-%H:%M:%S.log')) - plot_args = ['chia', 'plots', 'create', + plot_args = [CHIA_EXECUTABLE.command, 'plots', 'create', + '--override-k', '-k', str(plotting_cfg['k']), '-r', str(plotting_cfg['n_threads']), '-u', str(plotting_cfg['n_buckets']), @@ -135,6 +184,7 @@ def maybe_start_new_plot(dir_cfg, sched_cfg, plotting_cfg): # start_new_sessions to make the job independent of this controlling tty. p = subprocess.Popen(plot_args, + env=CHIA_EXECUTABLE.modified_environment(), stdout=open(logfile, 'w'), stderr=subprocess.STDOUT, start_new_session=True) From 81d59833bd2c72e50b32f3564cf7cc61f0db0e46 Mon Sep 17 00:00:00 2001 From: Kyle Altendorf Date: Fri, 9 Apr 2021 22:32:08 -0400 Subject: [PATCH 2/3] add chia extra and install in testing --- setup.cfg | 3 +++ 1 file changed, 3 insertions(+) diff --git a/setup.cfg b/setup.cfg index caebb8b0..8db19bac 100644 --- a/setup.cfg +++ b/setup.cfg @@ -46,10 +46,13 @@ console_scripts = plotman = plotman.plotman:main [options.extras_require] +chia = + chia-blockchain dev = %(test)s isort test = + %(chia)s check-manifest pytest pyfakefs From bb883650f626bf2e4e14d8405e89f4ac0b5a3b17 Mon Sep 17 00:00:00 2001 From: Kyle Altendorf Date: Sat, 10 Apr 2021 10:51:14 -0700 Subject: [PATCH 3/3] Update src/plotman/manager.py --- src/plotman/manager.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/plotman/manager.py b/src/plotman/manager.py index 5bf55b61..082c1296 100644 --- a/src/plotman/manager.py +++ b/src/plotman/manager.py @@ -161,7 +161,6 @@ def maybe_start_new_plot(dir_cfg, sched_cfg, plotting_cfg): datetime.now().strftime('%Y-%m-%d-%H:%M:%S.log')) plot_args = [CHIA_EXECUTABLE.command, 'plots', 'create', - '--override-k', '-k', str(plotting_cfg['k']), '-r', str(plotting_cfg['n_threads']), '-u', str(plotting_cfg['n_buckets']), @@ -200,4 +199,3 @@ def select_jobs_by_partial_id(jobs, partial_id): if j.plot_id.startswith(partial_id): selected.append(j) return selected -