Skip to content

Commit 9eb7886

Browse files
committed
Provide completion scripts for fire.Fire(fn).
Copybara generated commit for Python Fire. PiperOrigin-RevId: 151823094 Change-Id: I03073378734c83f27be69c9ea6fb237bb4f1e08e Reviewed-on: https://team-review.git.corp.google.com/66328 Reviewed-by: David Bieber <dbieber@google.com>
1 parent 3db47f8 commit 9eb7886

3 files changed

Lines changed: 22 additions & 6 deletions

File tree

fire/completion.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -210,6 +210,12 @@ def _Commands(component, depth=3):
210210
Tuples, each tuple representing one possible command for this CLI.
211211
Only traverses the member DAG up to a depth of depth.
212212
"""
213+
if inspect.isroutine(component) or inspect.isclass(component):
214+
for completion in Completions(component):
215+
yield (completion,)
216+
if inspect.isroutine(component):
217+
return # Don't descend into routines.
218+
213219
if depth < 1:
214220
return
215221

@@ -219,10 +225,5 @@ def _Commands(component, depth=3):
219225

220226
yield (member_name,)
221227

222-
if inspect.isroutine(member) or inspect.isclass(member):
223-
for completion in Completions(member):
224-
yield (member_name, completion)
225-
continue # Don't descend into routines.
226-
227228
for command in _Commands(member, depth - 1):
228229
yield (member_name,) + command

fire/completion_test.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,21 @@ def testDeepDictScript(self):
9898
self.assertIn('level3', script)
9999
self.assertNotIn('level4', script) # The default depth is 3.
100100

101+
def testFnScript(self):
102+
script = completion.Script('identity', tc.identity)
103+
self.assertIn('--arg1', script)
104+
self.assertIn('--arg2', script)
105+
self.assertIn('--arg3', script)
106+
self.assertIn('--arg4', script)
107+
108+
def testClassScript(self):
109+
script = completion.Script('', tc.MixedDefaults)
110+
self.assertIn('ten', script)
111+
self.assertIn('sum', script)
112+
self.assertIn('identity', script)
113+
self.assertIn('--alpha', script)
114+
self.assertIn('--beta', script)
115+
101116
def testNonStringDictCompletions(self):
102117
completions = completion.Completions({
103118
10: 'green',

fire/test_components.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
import six
2222

2323
if six.PY3:
24-
from fire import test_components_py3 as py3 # pylint: disable=unused-import,no-name-in-module
24+
from fire import test_components_py3 as py3 # pylint: disable=unused-import,no-name-in-module,g-import-not-at-top
2525

2626

2727
def identity(arg1, arg2, arg3=10, arg4=20, *arg5, **arg6):

0 commit comments

Comments
 (0)