From d1b1a457255af585d65ccef5baf4a8e9e83e675c Mon Sep 17 00:00:00 2001 From: Jonathon Reinhart Date: Sun, 13 Feb 2022 03:00:57 -0500 Subject: [PATCH] Enable tab completion in nbshell --- netbox/extras/management/commands/nbshell.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/netbox/extras/management/commands/nbshell.py b/netbox/extras/management/commands/nbshell.py index 4c11d8821..07f943d15 100644 --- a/netbox/extras/management/commands/nbshell.py +++ b/netbox/extras/management/commands/nbshell.py @@ -70,10 +70,23 @@ class Command(BaseCommand): return namespace def handle(self, **options): + namespace = self.get_namespace() + # If Python code has been passed, execute it and exit. if options['command']: - exec(options['command'], self.get_namespace()) + exec(options['command'], namespace) return - shell = code.interact(banner=BANNER_TEXT, local=self.get_namespace()) + # Try to enable tab-complete + try: + import readline + import rlcompleter + except ModuleNotFoundError: + pass + else: + readline.set_completer(rlcompleter.Completer(namespace).complete) + readline.parse_and_bind('tab: complete') + + # Run interactive shell + shell = code.interact(banner=BANNER_TEXT, local=namespace) return shell