self.shrink_for_spine = 1 - spine_part_of_page
-class ArgFail(Exception):
- 'Collects relevant command character, followed by explanation.'
+class MsgFail(Exception):
+ 'Collects relevant explanation.'
def __init__(
self,
- arg_char: str,
msg: str,
*args,
**kwargs
) -> None:
super().__init__(*args, **kwargs)
- self.arg_char = arg_char
self.msg = msg
+class ArgFail(MsgFail):
+ 'Collects relevant command character, with explanation.'
+
+ def __init__(
+ self,
+ arg_char: str,
+ *args,
+ **kwargs
+ ) -> None:
+ super().__init__(*args, **kwargs)
+ self.arg_char = arg_char
+
+
def parse_args(
) -> ArgsNamespace:
'Collect command line arguments.'
'Check command args against general syntax expectations.'
def validate_page_range(
- pr_string: str,
- arg_char: str
+ pr_string: str
) -> None:
prefix = 'page range string'
if '-' not in pr_string:
- raise ArgFail(arg_char, f'{prefix} lacks "-": {pr_string}')
+ raise MsgFail(f'{prefix} lacks "-": {pr_string}')
tokens = pr_string.split('-')
if len(tokens) > 2:
- raise ArgFail(arg_char, f'{prefix} has too many "-": {pr_string}')
+ raise MsgFail(f'{prefix} has too many "-": {pr_string}')
for i, token in enumerate(tokens):
if token == '':
continue
try:
int(token)
except ValueError as e:
- raise ArgFail(arg_char,
- f'{prefix} carries value neither integer, '
+ raise MsgFail(f'{prefix} carries value neither integer, '
f'nor "start", nor "end": {pr_string}') from e
if int(token) < 1:
- raise ArgFail(arg_char,
- f'{prefix} carries page number <1: {pr_string}')
+ raise MsgFail(f'{prefix} carries page number <1: {pr_string}')
start = -1
end = -1
try:
except ValueError:
pass
if start > end > 0:
- raise ArgFail(
- arg_char,
+ raise MsgFail(
f'{prefix} has higher start than end value: {pr_string}')
- if args.page_range:
- for p_string in args.page_range:
- validate_page_range(p_string, 'p')
- if len(args.page_range) > len(args.input_file):
- raise ArgFail(
- 'p',
+ try:
+ if args.page_range:
+ arg_char = 'p'
+ for p_string in args.page_range:
+ validate_page_range(p_string)
+ if len(args.page_range) > len(args.input_file):
+ raise MsgFail(
'more --page_range arguments than --input_file arguments')
- if args.crops:
- for c_string in args.crops:
- initial_split = c_string.split(':')
- if len(initial_split) > 2:
- raise ArgFail('c',
- f'cropping string has multiple ":": {c_string}')
- page_range, crops_str = split_crops_string(c_string)
- crops = crops_str.split(',')
- if page_range:
- validate_page_range(page_range, 'c')
- if len(crops) != 4:
- raise ArgFail(
- 'c',
- f'cropping does not contain exactly three ",": {c_string}')
- for crop in crops:
+ if args.crops:
+ arg_char = 'c'
+ for c_string in args.crops:
+ initial_split = c_string.split(':')
+ if len(initial_split) > 2:
+ raise MsgFail(
+ f'cropping string has multiple ":": {c_string}')
+ page_range, crops_str = split_crops_string(c_string)
+ crops = crops_str.split(',')
+ if page_range:
+ validate_page_range(page_range)
+ if len(crops) != 4:
+ raise MsgFail('cropping does not contain exactly three '
+ f'",": {c_string}')
+ for crop in crops:
+ try:
+ float(crop)
+ except ValueError as e:
+ raise MsgFail(f'non-number crop in: {c_string}') from e
+ if args.rotate_page:
+ arg_char = 'r'
+ for r in args.rotate_page:
try:
- float(crop)
+ int(r)
except ValueError as e:
- raise ArgFail('c',
- f'non-number crop in: {c_string}') from e
- if args.rotate_page:
- for r in args.rotate_page:
- try:
- int(r)
- except ValueError as e:
- raise ArgFail('r', f'non-integer value: {r}') from e
- if r < 1:
- raise ArgFail('r', 'value must not be <1: {r}')
+ raise MsgFail(f'non-integer value: {r}') from e
+ if r < 1:
+ raise MsgFail('value must not be <1: {r}')
+ except MsgFail as e:
+ raise ArgFail(arg_char, e.msg)
try:
float(args.print_margin)
except ValueError as e: