From 72bf1a2df177ea750ecb72bb33d7f63120499243 Mon Sep 17 00:00:00 2001 From: Robert Bradshaw Date: Thu, 14 Jul 2022 10:38:25 -0700 Subject: [PATCH] Don't try to parse non-flags as retained pipeline options. --- sdks/python/apache_beam/options/pipeline_options.py | 5 ++++- sdks/python/apache_beam/options/pipeline_options_test.py | 5 ----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/sdks/python/apache_beam/options/pipeline_options.py b/sdks/python/apache_beam/options/pipeline_options.py index d58fd6b74e45..ee74a94b2dd0 100644 --- a/sdks/python/apache_beam/options/pipeline_options.py +++ b/sdks/python/apache_beam/options/pipeline_options.py @@ -320,6 +320,9 @@ def get_all_options( while i < len(unknown_args): # Treat all unary flags as booleans, and all binary argument values as # strings. + if not unknown_args[i].startswith('-'): + i += 1 + continue if i + 1 >= len(unknown_args) or unknown_args[i + 1].startswith('-'): split = unknown_args[i].split('=', 1) if len(split) == 1: @@ -330,7 +333,7 @@ def get_all_options( else: parser.add_argument(unknown_args[i], type=str) i += 2 - parsed_args = parser.parse_args(self._flags) + parsed_args, _ = parser.parse_known_args(self._flags) else: if unknown_args: _LOGGER.warning("Discarding unparseable args: %s", unknown_args) diff --git a/sdks/python/apache_beam/options/pipeline_options_test.py b/sdks/python/apache_beam/options/pipeline_options_test.py index 6abfffe69100..38d362d6870f 100644 --- a/sdks/python/apache_beam/options/pipeline_options_test.py +++ b/sdks/python/apache_beam/options/pipeline_options_test.py @@ -363,11 +363,6 @@ def test_retain_unknown_options_unary_single_dash_store_true(self): result = options.get_all_options(retain_unknown_options=True) self.assertEqual(result['i'], True) - def test_retain_unknown_options_unary_missing_prefix(self): - options = PipelineOptions(['bad_option']) - with self.assertRaises(SystemExit): - options.get_all_options(retain_unknown_options=True) - def test_override_options(self): base_flags = ['--num_workers', '5'] options = PipelineOptions(base_flags)