Просмотр исходного кода

Fixes #7425: Housekeeping command should honor zero verbosity

jeremystretch 4 лет назад
Родитель
Сommit
376c776520
2 измененных файлов с 40 добавлено и 23 удалено
  1. 1 0
      docs/release-notes/version-3.0.md
  2. 39 23
      netbox/extras/management/commands/housekeeping.py

+ 1 - 0
docs/release-notes/version-3.0.md

@@ -18,6 +18,7 @@
 * [#7411](https://github.com/netbox-community/netbox/issues/7411) - Fix exception in UI when adding member devices to virtual chassis
 * [#7412](https://github.com/netbox-community/netbox/issues/7412) - Fix exception in UI when adding child device to device bay
 * [#7417](https://github.com/netbox-community/netbox/issues/7417) - Prevent exception when filtering objects list by invalid tag
+* [#7425](https://github.com/netbox-community/netbox/issues/7425) - Housekeeping command should honor zero verbosity
 
 ---
 

+ 39 - 23
netbox/extras/management/commands/housekeeping.py

@@ -18,48 +18,60 @@ class Command(BaseCommand):
     def handle(self, *args, **options):
 
         # Clear expired authentication sessions (essentially replicating the `clearsessions` command)
-        self.stdout.write("[*] Clearing expired authentication sessions")
-        if options['verbosity'] >= 2:
-            self.stdout.write(f"\tConfigured session engine: {settings.SESSION_ENGINE}")
+        if options['verbosity']:
+            self.stdout.write("[*] Clearing expired authentication sessions")
+            if options['verbosity'] >= 2:
+                self.stdout.write(f"\tConfigured session engine: {settings.SESSION_ENGINE}")
         engine = import_module(settings.SESSION_ENGINE)
         try:
             engine.SessionStore.clear_expired()
-            self.stdout.write("\tSessions cleared.", self.style.SUCCESS)
+            if options['verbosity']:
+                self.stdout.write("\tSessions cleared.", self.style.SUCCESS)
         except NotImplementedError:
-            self.stdout.write(
-                f"\tThe configured session engine ({settings.SESSION_ENGINE}) does not support "
-                f"clearing sessions; skipping."
-            )
+            if options['verbosity']:
+                self.stdout.write(
+                    f"\tThe configured session engine ({settings.SESSION_ENGINE}) does not support "
+                    f"clearing sessions; skipping."
+                )
 
         # Delete expired ObjectRecords
-        self.stdout.write("[*] Checking for expired changelog records")
+        if options['verbosity']:
+            self.stdout.write("[*] Checking for expired changelog records")
         if settings.CHANGELOG_RETENTION:
             cutoff = timezone.now() - timedelta(days=settings.CHANGELOG_RETENTION)
             if options['verbosity'] >= 2:
-                self.stdout.write(f"Retention period: {settings.CHANGELOG_RETENTION} days")
+                self.stdout.write(f"\tRetention period: {settings.CHANGELOG_RETENTION} days")
                 self.stdout.write(f"\tCut-off time: {cutoff}")
             expired_records = ObjectChange.objects.filter(time__lt=cutoff).count()
             if expired_records:
-                self.stdout.write(f"\tDeleting {expired_records} expired records... ", self.style.WARNING, ending="")
-                self.stdout.flush()
+                if options['verbosity']:
+                    self.stdout.write(
+                        f"\tDeleting {expired_records} expired records... ",
+                        self.style.WARNING,
+                        ending=""
+                    )
+                    self.stdout.flush()
                 ObjectChange.objects.filter(time__lt=cutoff)._raw_delete(using=DEFAULT_DB_ALIAS)
-                self.stdout.write("Done.", self.style.WARNING)
-            else:
-                self.stdout.write("\tNo expired records found.")
-        else:
+                if options['verbosity']:
+                    self.stdout.write("Done.", self.style.SUCCESS)
+            elif options['verbosity']:
+                self.stdout.write("\tNo expired records found.", self.style.SUCCESS)
+        elif options['verbosity']:
             self.stdout.write(
                 f"\tSkipping: No retention period specified (CHANGELOG_RETENTION = {settings.CHANGELOG_RETENTION})"
             )
 
         # Check for new releases (if enabled)
-        self.stdout.write("[*] Checking for latest release")
+        if options['verbosity']:
+            self.stdout.write("[*] Checking for latest release")
         if settings.RELEASE_CHECK_URL:
             headers = {
                 'Accept': 'application/vnd.github.v3+json',
             }
 
             try:
-                self.stdout.write(f"\tFetching {settings.RELEASE_CHECK_URL}")
+                if options['verbosity'] >= 2:
+                    self.stdout.write(f"\tFetching {settings.RELEASE_CHECK_URL}")
                 response = requests.get(
                     url=settings.RELEASE_CHECK_URL,
                     headers=headers,
@@ -73,15 +85,19 @@ class Command(BaseCommand):
                         continue
                     releases.append((version.parse(release['tag_name']), release.get('html_url')))
                 latest_release = max(releases)
-                self.stdout.write(f"\tFound {len(response.json())} releases; {len(releases)} usable")
-                self.stdout.write(f"\tLatest release: {latest_release[0]}")
+                if options['verbosity'] >= 2:
+                    self.stdout.write(f"\tFound {len(response.json())} releases; {len(releases)} usable")
+                if options['verbosity']:
+                    self.stdout.write(f"\tLatest release: {latest_release[0]}", self.style.SUCCESS)
 
                 # Cache the most recent release
                 cache.set('latest_release', latest_release, None)
 
             except requests.exceptions.RequestException as exc:
-                self.stdout.write(f"\tRequest error: {exc}")
+                self.stdout.write(f"\tRequest error: {exc}", self.style.ERROR)
         else:
-            self.stdout.write(f"\tSkipping: RELEASE_CHECK_URL not set")
+            if options['verbosity']:
+                self.stdout.write(f"\tSkipping: RELEASE_CHECK_URL not set")
 
-        self.stdout.write("Finished.", self.style.SUCCESS)
+        if options['verbosity']:
+            self.stdout.write("Finished.", self.style.SUCCESS)