diff options
-rw-r--r-- | pysquaredeal.py | 5 | ||||
-rw-r--r-- | squaredeal/__init__.py | 16 | ||||
-rw-r--r-- | squaredeal/sqd.py | 20 |
3 files changed, 23 insertions, 18 deletions
diff --git a/pysquaredeal.py b/pysquaredeal.py index b126b74..6411d10 100644 --- a/pysquaredeal.py +++ b/pysquaredeal.py @@ -8,7 +8,7 @@ argparser = argparse.ArgumentParser(prog='pysquaredeal.py') argparser.add_argument('sqd_file', metavar='SQD_FILE', help='path to SQD file') argparser.add_argument('--sqk-file', metavar='SQK_FILE', help='path to SQK file, if not provided, deduced from SQD file', required=False) argparser.add_argument('--encoding', required=False, default='utf-8', metavar='ENCODING', help='SQD/SQK input file encoding, defaults to UTF-8, output is always UTF-8') -argparser.add_argument('--bigdealx-path', required=False, metavar='BIGDEALX_PATH', help='path to bigdealx executable, defaults to BIGDEALX_PATH environment variable') +argparser.add_argument('--bigdealx-path', required=False, default=os.environ.get('BIGDEALX_PATH'), metavar='BIGDEALX_PATH', help='path to bigdealx executable, defaults to BIGDEALX_PATH environment variable') subparsers = argparser.add_subparsers(title='command-specific arguments', metavar='COMMAND', dest='command') @@ -40,5 +40,8 @@ argparser_generate.add_argument('--reserve', action='store_true', help='generate arguments = argparser.parse_args() + +SquareDeal.BIGDEALX_PATH = arguments.bigdealx_path + sq = SquareDeal() getattr(sq, arguments.command)(**vars(arguments)) diff --git a/squaredeal/__init__.py b/squaredeal/__init__.py index aba6cad..999785e 100644 --- a/squaredeal/__init__.py +++ b/squaredeal/__init__.py @@ -1,4 +1,4 @@ -import os +import re, subprocess from squaredeal.sqd import SQD, SQDPhase, generate_session_key, validate_board_range_str @@ -20,6 +20,9 @@ def squaredeal_board_range(arg_str): class SquareDeal(object): +# TODO: docstrings for command parameters + + BIGDEALX_PATH = None def __init__(self): self.sqd = SQD() @@ -78,12 +81,15 @@ class SquareDeal(object): self.sqd.tofile(arguments.get('sqd_file'), sqkpath=arguments.get('sqk_file')) def generate(self, **arguments): - if arguments.get('bigdealx_path') is None: - arguments['bigdealx_path'] = os.environ.get('BIGDEALX_PATH', None) - SQD.BIGDEALX_PATH = arguments.get('bigdealx_path') + if not SquareDeal.BIGDEALX_PATH: + raise SquareDealError('Path to BigDeal is not set, initialize SquareDeal.BIGDEALX_PATH value') self.sqd.fromfile(arguments.get('sqd_file'), sqkpath=arguments.get('sqk_file')) if not self.sqd.published: raise SquareDealError('Cannot generate PBN files: event info is not marked as published') if not self.sqd.delayed_value: raise SquareDealError('Cannot generate PBN files: delayed information value not set') - self.sqd.generate(arguments.get('phase'), arguments.get('session'), reserve=arguments.get('reserve')) + try: + self.sqd.generate(arguments.get('phase'), arguments.get('session'), + reserve=arguments.get('reserve'), bigdealx_path=SquareDeal.BIGDEALX_PATH) + except subprocess.CalledProcessError as ex: + raise SquareDealError('BigDeal invocation failed: %s' % (ex.stderr)) diff --git a/squaredeal/sqd.py b/squaredeal/sqd.py index f7686ad..0fe51fe 100644 --- a/squaredeal/sqd.py +++ b/squaredeal/sqd.py @@ -72,9 +72,9 @@ class SQDPhase(object): output_ranges += ranges return output_ranges[0:self.sessions] - def generate(self, session, delayed_info, reserve=False, output_path=None): - if not SQD.BIGDEALX_PATH: - raise ValueError('Path to BigDeal is not set, initialize SQD.BIGDEALX_PATH value') + def generate(self, session, delayed_info, reserve=False, output_path=None, bigdealx_path=None): + if not bigdealx_path: + raise FileNotFoundError('bigdealx_path not set') delayed_info = base64.b64encode(delayed_info.encode('utf-8')).decode() sessions_to_generate = parse_range_str(session, self.sessions) board_ranges = self._parse_board_ranges(self.boards) @@ -84,24 +84,19 @@ class SQDPhase(object): session_left = session_key[0:session_key_len] session_right = session_key[session_key_len:] reserve_info = 'reserve' if reserve else 'original' - args = [SQD.BIGDEALX_PATH, + args = [bigdealx_path, '-W', session_left, '-e', session_right, '-e', delayed_info, '-e', reserve_info, '-p', self._output_file_name(session+1, reserve), '-n', board_ranges[session]] - try: - subprocess.run(args, cwd=output_path, capture_output=True, check=True) - except subprocess.CalledProcessError as ex: - raise Exception(ex.stderr) + subprocess.run(args, cwd=output_path, capture_output=True, check=True) class SQD(object): - BIGDEALX_PATH=None - def __init__(self): self.name = '' self.delayed_info = '' @@ -220,10 +215,11 @@ class SQD(object): with open(sqdpath, 'w') as sqdfile: sqdfile.writelines(sqd_contents) - def generate(self, phase, session, reserve=False): + def generate(self, phase, session, reserve=False, bigdealx_path=None): phases_to_generate = parse_range_str(phase, len(self.phases)) for phase in phases_to_generate: self.phases[phase].generate( session, self.delayed_value, reserve=reserve, - output_path=os.path.realpath(os.path.dirname(self.sqd_path)) if self.sqd_path else None) + output_path=os.path.realpath(os.path.dirname(self.sqd_path)) if self.sqd_path else None, + bigdealx_path=bigdealx_path) |