Skip to content

Commit 53a3498

Browse files
committed
Support single-hyphen flags.
PiperOrigin-RevId: 215983601 Change-Id: I7d7d1323b786bc93f3f311a609e7b8f836011ac4 Reviewed-on: https://team-review.git.corp.google.com/c/330493 Reviewed-by: David Bieber <dbieber@google.com>
1 parent 5347858 commit 53a3498

2 files changed

Lines changed: 43 additions & 3 deletions

File tree

fire/core.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -798,7 +798,7 @@ def _ParseKeywordArgs(args, fn_spec):
798798

799799
keyword = ''
800800
if _IsSingleCharFlag(argument):
801-
keychar = argument[1]
801+
keychar = argument.lstrip('-')
802802
potential_args = [arg for arg in fn_args if arg[0] == keychar]
803803
if len(potential_args) == 1:
804804
keyword = potential_args[0]
@@ -807,7 +807,7 @@ def _ParseKeywordArgs(args, fn_spec):
807807
"refer to any of the following arguments: {}".format(
808808
argument, potential_args))
809809
else:
810-
keyword = argument[2:]
810+
keyword = argument.lstrip('-')
811811

812812
contains_equals = '=' in keyword
813813
is_bool_syntax = (not contains_equals and
@@ -865,7 +865,7 @@ def _IsSingleCharFlag(argument):
865865

866866
def _IsMultiCharFlag(argument):
867867
"""Determines if the argument is a multi char flag (e.g. '--alpha')."""
868-
return argument.startswith('--')
868+
return argument.startswith('--') or re.match('^-[a-zA-Z]', argument)
869869

870870

871871
def _ParseValue(value, index, arg, metadata):

fire/fire_test.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,12 +92,30 @@ def testFireNamedArgs(self):
9292
fire.Fire(tc.OldStyleWithDefaults, command=['triple', '--count', '5']),
9393
15)
9494

95+
def testFireNamedArgsSingleHyphen(self):
96+
self.assertEqual(fire.Fire(tc.WithDefaults,
97+
command=['double', '-count', '5']), 10)
98+
self.assertEqual(fire.Fire(tc.WithDefaults,
99+
command=['triple', '-count', '5']), 15)
100+
self.assertEqual(
101+
fire.Fire(tc.OldStyleWithDefaults, command=['double', '-count', '5']),
102+
10)
103+
self.assertEqual(
104+
fire.Fire(tc.OldStyleWithDefaults, command=['triple', '-count', '5']),
105+
15)
106+
95107
def testFireNamedArgsWithEquals(self):
96108
self.assertEqual(fire.Fire(tc.WithDefaults,
97109
command=['double', '--count=5']), 10)
98110
self.assertEqual(fire.Fire(tc.WithDefaults,
99111
command=['triple', '--count=5']), 15)
100112

113+
def testFireNamedArgsWithEqualsSingleHyphen(self):
114+
self.assertEqual(fire.Fire(tc.WithDefaults,
115+
command=['double', '-count=5']), 10)
116+
self.assertEqual(fire.Fire(tc.WithDefaults,
117+
command=['triple', '-count=5']), 15)
118+
101119
def testFireAllNamedArgs(self):
102120
self.assertEqual(fire.Fire(tc.MixedDefaults, command=['sum', '1', '2']), 5)
103121
self.assertEqual(fire.Fire(tc.MixedDefaults,
@@ -354,6 +372,23 @@ def testBoolParsingContinued(self):
354372
fire.Fire(tc.MixedDefaults, command=['identity', '10', '--beta']),
355373
(10, True))
356374

375+
def testBoolParsingSingleHyphen(self):
376+
self.assertEqual(
377+
fire.Fire(tc.MixedDefaults,
378+
command=['identity', '-alpha=False', '10']), (False, 10))
379+
self.assertEqual(
380+
fire.Fire(tc.MixedDefaults,
381+
command=['identity', '-alpha', '-beta', '10']), (True, 10))
382+
self.assertEqual(
383+
fire.Fire(tc.MixedDefaults,
384+
command=['identity', '-alpha', '-beta=10']), (True, 10))
385+
self.assertEqual(
386+
fire.Fire(tc.MixedDefaults,
387+
command=['identity', '-noalpha', '-beta']), (False, True))
388+
self.assertEqual(
389+
fire.Fire(tc.MixedDefaults,
390+
command=['identity', '-alpha', '-10', '-beta']), (-10, True))
391+
357392
def testBoolParsingLessExpectedCases(self):
358393
# Note: Does not return (True, 10).
359394
self.assertEqual(
@@ -560,6 +595,11 @@ def testSeparatorForChaining(self):
560595
'--separator', '$$']),
561596
True)
562597

598+
def testNegativeNumbers(self):
599+
self.assertEqual(
600+
fire.Fire(tc.MixedDefaults,
601+
command=['sum', '--alpha', '-3', '--beta', '-4']), -11)
602+
563603
def testFloatForExpectedInt(self):
564604
self.assertEqual(
565605
fire.Fire(tc.MixedDefaults,

0 commit comments

Comments
 (0)