reconcile CLI/config priority

- avoid CLI defaults clobbering values from config.
  Mostly by using `default=None`, and adding `if args.name is not None` checks
  before assigning attributes
pull/1211/head
Min RK 2022-11-02 14:51:58 +01:00
rodzic b6098c02f3
commit b841dea4ac
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 809C6E46EAA899F4
2 zmienionych plików z 35 dodań i 21 usunięć

Wyświetl plik

@ -93,7 +93,7 @@ def get_argparser():
argparser.add_argument(
"--json-logs",
default=False,
default=None,
action="store_true",
help="Emit JSON logs instead of human readable logs",
)
@ -108,7 +108,7 @@ def get_argparser():
argparser.add_argument(
"--image-name",
help=("Name of image to be built. If unspecified will be " "autogenerated"),
help="Name of image to be built. If unspecified will be autogenerated",
type=validate_image_name,
)
@ -126,9 +126,7 @@ def get_argparser():
"--no-build",
dest="build",
action="store_false",
help=(
"Do not actually build the image. Useful in conjunction " "with --debug."
),
help="Do not actually build the image. Useful in conjunction with --debug.",
)
argparser.add_argument(
@ -164,6 +162,7 @@ def get_argparser():
"--publish-all",
"-P",
dest="all_ports",
default=None,
action="store_true",
help="Publish all exposed ports to random host ports.",
)
@ -171,6 +170,7 @@ def get_argparser():
argparser.add_argument(
"--no-clean",
dest="clean",
default=None,
action="store_false",
help="Don't clean up remote checkouts after we are done",
)
@ -250,6 +250,7 @@ def get_argparser():
return argparser
# Note: only used by sphinx-autoprogram
argparser = get_argparser()
@ -274,12 +275,18 @@ def make_r2d(argv=None):
args, traitlet_args = argparser.parse_known_args(argv)
r2d = Repo2Docker()
r2d.parse_command_line(traitlet_args)
if args.debug:
r2d.log_level = logging.DEBUG
# load CLI after config file, for correct priority
r2d.load_config_file(args.config)
r2d.parse_command_line(traitlet_args)
if args.debug:
# re-apply debug in case log_level was also set via config
r2d.log_level = logging.DEBUG
if args.appendix:
r2d.appendix = args.appendix
@ -317,7 +324,8 @@ def make_r2d(argv=None):
# we will pick a name after fetching the repository
r2d.output_image_spec = ""
r2d.json_logs = args.json_logs
if args.json_logs is not None:
r2d.json_logs = args.json_logs
r2d.dry_run = not args.build
@ -341,29 +349,33 @@ def make_r2d(argv=None):
src, dest = v.split(":")
r2d.volumes[src] = dest
r2d.run_cmd = args.cmd
if args.cmd:
r2d.run_cmd = args.cmd
if args.all_ports and not r2d.run:
print(
"To publish user defined port mappings, the container must " "also be run"
)
print("To publish user-defined port mappings, the container must also be run")
sys.exit(1)
if args.ports and not r2d.run:
print(
"To publish user defined port mappings, the container must " "also be run"
)
print("To publish user-defined port mappings, the container must also be run")
sys.exit(1)
if args.ports and len(args.ports) > 1 and not r2d.run_cmd:
print(
"To publish user defined port mapping, user must specify "
"the command to run in the container"
"To publish user-defined port mapping, "
"you must specify the command to run in the container"
)
sys.exit(1)
r2d.ports = validate_and_generate_port_mapping(args.ports)
r2d.all_ports = args.all_ports
if args.ports:
# override or update, if also defined in config file?
if r2d.ports:
r2d.log.warning(
f"Ignoring port configuration from config (ports={r2d.ports}), overridden by CLI"
)
r2d.ports = validate_and_generate_port_mapping(args.ports)
if args.all_ports is not None:
r2d.all_ports = args.all_ports
if args.user_id:
r2d.user_id = args.user_id
@ -401,13 +413,15 @@ def make_r2d(argv=None):
if args.engine:
r2d.engine = args.engine
r2d.environment = args.environment
if args.environment:
# extend any environment config from a config file
r2d.environment.extend(args.environment)
# if the source exists locally we don't want to delete it at the end
# FIXME: Find a better way to figure out if repo is 'local'. Push this into ContentProvider?
if os.path.exists(args.repo):
r2d.cleanup_checkout = False
else:
elif args.clean is not None:
r2d.cleanup_checkout = args.clean
if args.target_repo_dir:

Wyświetl plik

@ -332,7 +332,7 @@ class Repo2Docker(Application):
)
run = Bool(
False,
True,
help="""
Run docker image after building
""",