diff downloads/management/commands/dlorphan.py @ 667:264b08bce8b8

Improvements to dlorphan management command.
author Brian Neal <bgneal@gmail.com>
date Sat, 25 May 2013 14:21:46 -0500
parents 86d04190ff4e
children
line wrap: on
line diff
--- a/downloads/management/commands/dlorphan.py	Sat May 25 00:22:40 2013 -0500
+++ b/downloads/management/commands/dlorphan.py	Sat May 25 14:21:46 2013 -0500
@@ -27,7 +27,6 @@
         orphans = set()
         missing_pending = []
         missing_dls = []
-        empty_dirs = []
 
         dls_dir = os.path.join(settings.MEDIA_ROOT, 'downloads')
         # find the set of all files in the downloads area
@@ -35,10 +34,6 @@
             for name in files:
                 orphans.add(unicode(os.path.join(root, name), 'utf-8'))
 
-            # check for empty directories
-            if not len(dirs) and not len(files):
-                empty_dirs.append(root)
-
         # examine the pending downloads:
         for dl in PendingDownload.objects.iterator():
             try:
@@ -53,31 +48,36 @@
             except KeyError:
                 missing_dls.append(dl)
 
-        if orphans:
-            print "Orphan files:"
+        if orphans and delete:
+            for path in orphans:
+                self.stdout.write("Deleting: {}\n".format(path))
+                os.remove(path)
+        elif orphans:
+            self.stdout.write("Orphan files:\n")
             for orphan in orphans:
-                print orphan
-
-        if empty_dirs:
-            print "Empty directories:"
-            for d in empty_dirs:
-                print d
+                self.stdout.write("{}\n".format(orphan))
 
         if missing_pending:
-            print "PendingDownloads with missing files:"
+            self.stdout.write("PendingDownloads with missing files:\n")
             for dl in missing_pending:
-                print dl
+                self.stdout.write("{}\n".format(dl))
 
         if missing_dls:
-            print "Downloads with missing files:"
+            self.stdout.write("Downloads with missing files:\n")
             for dl in missing_dls:
-                print dl
+                self.stdout.write("{}\n".format(dl))
 
-        if delete:
-            for path in orphans:
-                print "Deleting: {}".format(path)
-                os.remove(path)
+        empty_dirs = []
+        # check for empty directories after deletions
+        for root, dirs, files in os.walk(dls_dir, followlinks=True):
+            if not len(dirs) and not len(files):
+                empty_dirs.append(root)
 
+        if empty_dirs and delete:
             for path in empty_dirs:
-                print "Deleting: {}".format(path)
+                self.stdout.write("Deleting empty dir: {}\n".format(path))
                 os.removedirs(path)
+        elif empty_dirs:
+            self.stdout.write("Empty directories:\n")
+            for d in empty_dirs:
+                self.stdout.write("{}\n".format(d))