From 8b20b2e99290aa42386c94c150ba7277e43eb3dc Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 1 Aug 2025 10:04:47 -0400 Subject: [PATCH] Introduce lsapps() and extend lsmodels() --- netbox/core/management/commands/nbshell.py | 30 ++++++++++++++++++---- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/netbox/core/management/commands/nbshell.py b/netbox/core/management/commands/nbshell.py index 833803b67..ef7ae191e 100644 --- a/netbox/core/management/commands/nbshell.py +++ b/netbox/core/management/commands/nbshell.py @@ -55,11 +55,30 @@ class Command(BaseCommand): help='Python code to execute (instead of starting an interactive shell)', ) - def _lsmodels(self): - for app, models in self.django_models.items(): - app_name = apps.get_app_config(app).verbose_name + def _lsapps(self): + for app_label in self.django_models.keys(): + app_name = apps.get_app_config(app_label).verbose_name + print(f'{app_label} - {app_name}') + + def _lsmodels(self, app_label=None): + """ + Return a list of all models within each app. + + Args: + app_label: The name of a specific app + """ + if app_label: + if app_label not in self.django_models: + print(f"No models listed for {app_label}") + return + app_labels = [app_label] + else: + app_labels = self.django_models.keys() # All apps + + for app_label in app_labels: + app_name = apps.get_app_config(app_label).verbose_name print(f'{app_name}:') - for m in models: + for m in self.django_models[app_label]: print(f' {m}') def get_namespace(self): @@ -83,6 +102,7 @@ class Command(BaseCommand): return { **namespace, + 'lsapps': self._lsapps, 'lsmodels': self._lsmodels, } @@ -111,7 +131,7 @@ class Command(BaseCommand): ) lines.append( - 'lsmodels() will show available models. Use help() for more info.' + 'lsapps() & lsmodels() will show available models. Use help() for more info.' ) return '\n'.join([