4 from inout.io import write
7 from observable import *
8 from log.logging import logger
9 from config.config import *
10 from inout.io import *
12 #logger.log(u'new version')
17 def invert_dictionary(dictionary):
18 return dict([[v,k] for k,v in dictionary.items()])
20 def no_transition_policy(self,owner):
28 def __init__(self,name,value=0,symbol=u'',transition_policy=no_transition_policy):
32 Status.symbols[symbol] = self
33 Status.names[name] = self
34 self.transition_policy = transition_policy
36 def __eq__(self,other):
37 # print "Called eq with %s (%s) and %s (%s)"%(repr(self),type(self),repr(other),type(other))
40 if (not self and other) or (not other and self):
42 return self.name == other.name #and self.value == other.value and type(self) == type(other)
44 def __cmp__(self,other):
47 return other.value - self.value
53 return "%s %s %s (%s)"%(type(self),self.value, self.name,id(self))
58 def get_status(symbol):
59 return Status.symbols[symbol]
60 get_status = staticmethod(get_status)
62 def get_status_for_name(name):
63 return Status.names[name]
64 get_status_for_name = staticmethod(get_status_for_name)
66 def update(self,owner):
67 return self.transition_policy(self,owner)
71 class ItemWithStatus(object):
72 def __init__(self,status):
75 def status_symbol(self):
76 if self.status.symbol and len(self.status.symbol) > 0:
77 return self.status.symbol + u' '
81 class WriteableItem(ObservableItem):
83 super(WriteableItem, self).__init__()
85 write(self.path(),self.file_string())
86 def move_to(self,directory,old_dir=None):
87 new_file_name = os.path.join(directory,self.file_name())
89 old_dir = self.directory()
90 old_file_name = os.path.join(old_dir,self.file_name())
92 os.renames(io.os_encode(old_file_name),io.os_encode(new_file_name))
93 ##logger.log(u'Moved %s to %s'%(repr(old_file_name),repr(new_file_name)))
94 #print u'Moved %s to %s'%(repr(old_file_name),repr(new_file_name))
95 logger.log(u'Moved %s to %s'%(repr(old_file_name),repr(new_file_name)))
98 logger.log(u'Cannot move %s to %s: %s'%(repr(old_file_name),repr(new_file_name),e.strerror))
103 return io.os_decode(os.path.dirname(self.encoded_path()))
105 return io.os_decode(os.path.basename(self.encoded_path()))
106 def remove(self,path=None):
108 encoded_path = self.encoded_path()
110 encoded_path = io.os_encode(path)
111 if os.path.isfile(encoded_path):
112 os.remove(encoded_path)
114 return os.path.isfile(self.encoded_path())
116 def encoded_path(self):
117 return io.os_encode(self.path())
120 return os.path.splitext(self.encoded_path())[1]
121 def rename(self,new_name,old=None):
123 old = io.os_decode(os.path.splitext(os.path.basename(self.encoded_path()))[0])
124 directory = io.os_encode(self.directory())
125 extension = io.os_encode(self.extension())
126 old_filename_encoded = io.os_encode(old)
127 new_file_name = os.path.join(directory,io.os_encode(new_name)+extension)
128 old_file_name = os.path.join(directory,old_filename_encoded+extension)
129 #logger.log(u'Renaming %s to %s'%(old_file_name,new_file_name))
130 os.renames(old_file_name,new_file_name)
132 def notify(self,action,attribute,new=None,old=None):