detool.py
changeset 15 0fe851a29bc6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/detool.py	Fri Dec 21 21:19:01 2007 +0000
@@ -0,0 +1,106 @@
+#!/usr/bin/env python2.4
+#
+# DeGAL - A pretty simple web image gallery
+# Copyright (C) 2007 Tero Marttila
+# http://marttila.de/~terom/degal/
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the
+# Free Software Foundation, Inc.,
+# 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+#
+
+from lib import settings
+from lib.log import misc as log
+from lib.utils import path_join
+import os, os.path, logging
+
+def move (options, args) :
+    if len(args) < 2 :
+        raise Exception("Must give one or more source files, and a destination dir")
+    
+    dest = args.pop(-1)
+    srcs = args
+    
+    if not os.path.isdir(dest) :
+        raise Exception("Given destination '%s' is not a directory" % dest)
+    
+    for subdir in (settings.THUMB_DIR, settings.PREVIEW_DIR) :
+        path = os.path.join(dest, subdir)
+        
+        if not os.path.exists(path) :
+            log.info("mkdir %s" % path)
+            os.mkdir(path)
+    
+    for src in srcs :
+        if not os.path.isfile(src) :
+            raise Exception("Given source file '%s' is not a valid file" % src)
+            
+        for (pre, post) in (
+            (None, None),
+            (settings.THUMB_DIR, None),
+            (settings.PREVIEW_DIR, None),
+            (None, '.html'),
+        ) :
+            dir, fname = os.path.split(src)
+            
+            if post :
+                fname += post
+            
+            src_path = path_join(dir, pre, fname)
+            dst_path = path_join(dest, pre, fname)
+            
+            if os.path.isfile(src_path) :
+                if not options.overwite and os.path.exists(dst_path) :
+                    log.warning("%s exists; skipping %s" % (dst_path, src_path))
+                log.info("%s -> %s" % (src_path, dst_path))
+                os.rename(src_path, dst_path)
+    
+def help (options, args) :
+    print "Available commands:"
+    
+    for name, func in COMMANDS.iteritems() :
+        print "\t%s" % name
+    
+COMMANDS = dict(
+    move    = move,
+    mv      = move,
+    help    = help,
+)
+    
+if __name__ == '__main__' :
+    from optparse import OptionParser
+    
+    parser = OptionParser(usage="usage: %prog <command> [options] [args ...]", version=settings.VERSION)
+    
+    parser.add_option("-q", "--quiet", dest="verbose", default=True)
+    parser.add_option("-i", "--careful", dest="overwrite", help="Do not overwrite files", default=True)
+    
+    options, args = parser.parse_args()
+    
+    if options.verbose :
+        log.setLevel(logging.INFO)
+    else :
+        log.setLevel(logging.ERROR)
+    
+    if not args :
+        parser.error("Must supply a command. See `detool.py help` for a list of commands")
+    
+    command = args.pop(0).lower()
+    
+    if command not in COMMANDS :
+        parser.error("Unknown command '%s'. Try `detool.py help`" % command)
+    
+    func = COMMANDS[command]
+    
+    func(options, args)
\ No newline at end of file