Исправлено использование --force

Добавлена поддержка выполнения -sf (если force указан в списке с
однобуквенными параметрами) пересчёт view добавлен с целью исключить
ложное срабатывание например в этой ситуации -soff
master-3.5 3.5.0_alpha13
parent a02f8ac60c
commit 485243bc32

@ -22,6 +22,8 @@ from os import path
from fcntl import ioctl
from array import array
import threading
import argparse
import re
from calculate.lib.utils.colortext import get_terminal_print
from calculate.lib.utils.colortext.palette import TextState
@ -198,28 +200,39 @@ def local_method(metaclass, args, unknown_args):
method_name = args.method
method_view_name = method_name + '_view'
if args.method and args.help:
view_obj = ViewParams()
view_obj.step = None
view_obj.expert = True
view_obj.brief = None
view_obj.onlyhelp = True
view_obj.help_set = True
view_obj.dispatch_usenew = args.no_questions
try:
view = getattr(metaObject, method_view_name)(0, view_obj)
except AttributeError:
colorPrint.printERROR(_('Method not found: ') + method_view_name)
return 1
try:
method_parser = get_method_argparser(view, args, cl_core=True)
except Exception:
# import traceback
# for i in apply(traceback.format_exception, sys.exc_info()):
# sys.stderr.write(i)
# sys.stderr.flush()
metaObject.clear_cache(0, method_name)
return 1
method_parser.print_help()
force_param = args.no_questions or has_force_arg(unknown_args)
while True:
view_obj = ViewParams()
view_obj.step = None
view_obj.expert = True
view_obj.brief = None
view_obj.onlyhelp = True
view_obj.help_set = True
view_obj.dispatch_usenew = \
force_param
try:
view = getattr(metaObject, method_view_name)(0, view_obj)
except AttributeError:
colorPrint.printERROR(_('Method not found: ') + method_view_name)
return 1
try:
method_parser = get_method_argparser(view, args, cl_core=True)
except Exception:
# import traceback
# for i in apply(traceback.format_exception, sys.exc_info()):
# sys.stderr.write(i)
# sys.stderr.flush()
metaObject.clear_cache(0, method_name)
return 1
_unknown_args = method_parser.fixBoolVariables(unknown_args)
_args, _unknown_args = method_parser.parse_known_args(_unknown_args)
if (view_obj.dispatch_usenew == _args.no_questions
or args.no_questions):
method_parser.print_help()
break
else:
force_param = _args.no_questions
metaObject.clear_cache(0, method_name)
else:
try:
call_method(metaObject, args, unknown_args, colorPrint)
@ -250,26 +263,41 @@ def call_method(metaObject, args, unknown_args, colorPrint):
metaObject.gui_progress = args.gui_progress
metaObject.gui_warning = args.gui_warning
metaObject.no_questions = False
dispatch_usenew = args.no_questions
view_obj = ViewInfo()
view_obj.step = None
view_obj.expert = True
view_obj.brief = None
view_obj.onlyhelp = True
view_obj.help_set = False
view_obj.dispatch_usenew = dispatch_usenew
view = None
method_parser = None
dispatch_usenew = args.no_questions or has_force_arg(unknown_args)
while True:
view_obj = ViewInfo()
view_obj.step = None
view_obj.expert = True
view_obj.brief = None
view_obj.onlyhelp = True
view_obj.help_set = False
view_obj.dispatch_usenew = dispatch_usenew
try:
view = getattr(metaObject, method_view_name)(0, view_obj)
except AttributeError:
colorPrint.printERROR(_('Method not found: ') + method_name)
return None
method_parser = get_method_argparser(view, args, cl_core=True)
_unknown_args = method_parser.fixBoolVariables(unknown_args)
_args, _unknown_args = method_parser.parse_known_args(_unknown_args)
if (view_obj.dispatch_usenew == _args.no_questions or
args.no_questions):
break
else:
dispatch_usenew = _args.no_questions
metaObject.clear_cache(0, method_name)
no_questions = dispatch_usenew
try:
view = getattr(metaObject, method_view_name)(0, view_obj)
except AttributeError:
colorPrint.printERROR(_('Method not found: ') + method_name)
return None
method_parser = get_method_argparser(view, args, cl_core=True)
param_object = create_param_object(view)
try:
unknown_args = method_parser.fixBoolVariables(unknown_args)
args, unknown_args = method_parser.parse_known_args(unknown_args)
no_questions = args.no_questions
metaObject.no_questions = no_questions
except SystemExit:
return 1
@ -612,3 +640,27 @@ class Methods(LocalCall.Common, object):
def __init__(self):
LocalCall.Common.__init__(self, False, False, False, False)
def has_force_arg(args):
"""
Содержат ли аргумент force. Предварительное определение, так как на 100%
невозможно определить является ли -sf двумя опциями -s,-f или это одна
опция -s со значением "f"
:param args:
:return:
"""
force_parser = argparse.ArgumentParser(add_help=False)
force_parser.add_argument(
'-f', '--force', default=False, dest='force', action="store_true")
_args, _drop = force_parser.parse_known_args(args)
if _args.force:
return True
re_force = re.compile("^--force|-[a-zA-Z0-9]*f[a-zA-Z0-9]*$")
for arg in args:
if re_force.search(arg):
return True
else:
return False

@ -512,27 +512,21 @@ def collect_object(client, param_object, view, args, wait_thread=None,
#if field.uncompatible:
# continue
if (field.element in ['check', 'check_tristate'] and
field.type in ('bool', 'boolauto')):
set_flag = False
if not set_flag:
value = _getattr(args, field.name)
if value:
if _getattr(args, field.name).lower() in ['on', 'yes']:
value = True
elif _getattr(args,
field.name).lower() in ['off', 'no']:
value = False
else:
value = None
field.type in ('bool', 'boolauto')) or (
field.element == 'radio' and field.type == 'bool'):
value = _getattr(args, field.name)
if value:
if _getattr(args, field.name).lower() in ['on', 'yes']:
value = True
elif _getattr(args,
field.name).lower() in ['off', 'no']:
value = False
else:
value = None
param_object = set_obj_item(client, param_object,
field.name, value)
if field.element == 'radio' and field.type == 'bool':
param_object = set_obj_item(client, param_object, field.name,
_getattr(args, field.name))
else:
value = None
param_object = set_obj_item(client, param_object,
field.name, value)
elif (field.element == 'input' and
field.name in ['cl_page_offset', 'cl_page_count']):
val = _getattr(args, field.name)

Loading…
Cancel
Save