cleanimms
author fabien
Wed, 11 Feb 2004 10:39:27 -0500
branchimmsview
changeset 34 5bef7600193c
parent 33 ad808d18c693
permissions -rwxr-xr-x
[svn] Correction and optimization of the clean_all() interface.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
     1
#!/usr/bin/python
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
     2
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
     3
import os
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
     4
import readline
33
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
     5
from imms import IMMSCleaner, IMMSDb
31
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
     6
from utils import unique, copy_file, set_file_completer
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
     7
33
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
     8
class CLICleaner(IMMSCleaner):
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
     9
    def check_if_uid_exist(self, uid):
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    10
        other_paths = self.db.get_library_entry(uid = uid)
31
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    11
        other_paths = unique(map(lambda x: x[0], other_paths))
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    12
        for opath in other_paths:
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    13
            if os.path.isfile(opath):
33
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    14
	        # if one, release it.
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    15
                return 1
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    16
        return 0
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    17
    def check_and_edit_path(self, path, uid, sid):
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    18
        """Must return the new file name, None to remove
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    19
        it.  If the new file name is already in the Db,
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    20
        it will be skip."""
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    21
        # if path exist, skip it.
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    22
        if os.path.isfile(path):
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    23
            return path
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    24
        # if exist another uid with a valid path, remove it.
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    25
        if self.check_if_uid_exist(uid):
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    26
            return None
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    27
	# Elsewhere, first build a list of valid candidate from sid...
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    28
        other_paths = self.db.get_library_entry(sid = sid)
31
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    29
        other_paths = unique(map(lambda x: x[0], other_paths))
33
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    30
        return self.edit_filename(path, other_paths)
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    31
    def edit_filename(self, path, other_paths):
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    32
	# Add them to the history for editing
31
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    33
        for opath in other_paths:
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    34
            if os.path.isfile(opath):
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    35
                readline.add_history(opath)
33
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    36
        # And also add the current file as a base for editing.
31
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    37
        readline.add_history(path)
33
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    38
	# Sniff!  This doesn't seems to work
31
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    39
        readline.insert_text('Edit')
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    40
        while 1:
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    41
            cmd = raw_input("I can't find '%s'.\n"
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    42
                            "Edit, Skip or Remove? " % path)
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    43
            if len(cmd) > 0:
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    44
                cmd = cmd.lstrip()[0].lower()
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    45
                if cmd == 'e':
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    46
                    newpath = raw_input()
33
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    47
		    # Already exist, so delete.
31
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    48
                    if newpath in other_paths:
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    49
                        return None
33
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    50
		    # new file so keep it.
31
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    51
                    if os.path.isfile(newpath):
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    52
                        return newpath
33
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    53
		    # Elsewhere move it.
31
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    54
                    print "Invalid filename!"
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    55
                elif cmd == 's':
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    56
                    return path;
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    57
                elif cmd == 'r':
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    58
                    return None
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    59
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    60
if __name__ == '__main__':
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    61
    set_file_completer()
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    62
    readline.parse_and_bind('tab: complete')
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    63
    db_file = os.environ['HOME'] + '/.imms/imms.db'
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    64
    db_backup = db_file + '.bak'
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    65
    copy_file(db_file, db_backup).close()
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    66
    try:
33
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    67
        CLICleaner(IMMSDb(db_file)).clean_all()
31
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    68
    except Exception, inst:
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    69
        print inst
33
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    70
        while 1:
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    71
            ans = raw_input('Do you want to get back the backup file? ')
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    72
            if len(ans) > 0:
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    73
                ans = ans.lstrip()[0].lower()
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    74
                if ans == 'y':
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    75
                    copy_file(db_backup, db_file)
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    76
                elif ans == 'n':
ad808d18c693 [svn] Many cleanup, both architecture (division of interface), encoding
fabien
parents: 31
diff changeset
    77
                    break
31
13f56bb29b96 [svn] New bestofimms, cleanimms, imms.py and utils.py.
fabien
parents:
diff changeset
    78
    print "backup file preserved: %s." % db_backup