py::qo::backup::savepoint Class Reference

Inheritance diagram for py::qo::backup::savepoint:

Inheritance graph
[legend]

List of all members.

Public Member Functions

def __init__
def __del__
def prepare_read
def bckfile
def bcksumfile
def mimetype
def push
def flush
def pull
def items
def all_names
def is_needed

Public Attributes

 name
 checksum
 tarfile
 tmpfile

Private Member Functions

def __append_checksum


Member Function Documentation

def py::qo::backup::savepoint::__init__ (   self,
  bckname,
  mode = "r" 
)

Reimplemented in py::qo::share::overlay_archive.

00058                                                 :
00059                 self.name = bckname
00060                 if mode == "r" :
00061                         self.checksum = xml.dom.minidom.parse(self.bcksumfile())
00062                         self.tarfile = None
00063                 else :
00064                         tmpfd, self.tmpfile = tempfile.mkstemp()
00065                         self.checksum = qo.xmlutil.create_document("checksum")
00066                         self.tarfile = tarfile.open(self.tmpfile, mode=mode+":bz2")
00067                         os.close(tmpfd)
00068 
        def __del__( self ) :

def py::qo::backup::savepoint::__del__ (   self  ) 

00069                             :
00070                 if hasattr(self, "tmpfile") and os.path.exists(self.tmpfile) :
00071                         os.unlink(self.tmpfile)
00072         
        def prepare_read( self ) :

def py::qo::backup::savepoint::prepare_read (   self  ) 

00073                                  :
00074                 self.tarfile = self.tarfile or tarfile.open(self.bckfile(), mode="r:bz2")
00075 
        def bckfile( self ) :

def py::qo::backup::savepoint::bckfile (   self  ) 

Reimplemented in py::qo::share::overlay_archive.

00076                             :
00077                 return os.path.join(qocfg.get_backup_dir(), self.name + ".qobck")
        def bcksumfile( self ) :

def py::qo::backup::savepoint::bcksumfile (   self  ) 

Reimplemented in py::qo::share::overlay_archive.

00078                                :
00079                 return os.path.join(qocfg.get_backup_dir(), self.name + ".qobcksum")
        def mimetype( self ) :

def py::qo::backup::savepoint::mimetype (   self  ) 

00080                              :
00081                 return "application/x-tbz"
00082         
        def __append_checksum( self, name, checksum ) :

def py::qo::backup::savepoint::__append_checksum (   self,
  name,
  checksum 
) [private]

00083                                                       :
00084                 element = self.checksum.createElement("file")
00085                 element.setAttribute("name", name)
00086                 element.setAttribute("md5", checksum)
00087                 self.checksum.documentElement.appendChild(element)
00088 
        def push( self, name, xmldoc ) :

def py::qo::backup::savepoint::push (   self,
  name,
  xmldoc 
)

00089                                        :
00090                 data = xmldoc.toxml(encoding='utf-8')
00091                 obj = cStringIO.StringIO(data)
00092                 info = tarfile.TarInfo(name)
00093                 info.size = len(data)
00094                 self.tarfile.addfile(info, obj)
00095                 self.__append_checksum(name, md5.new(data).hexdigest())
00096 
        def flush( self ) :

def py::qo::backup::savepoint::flush (   self  ) 

00097                           :
00098                 self.tarfile.close()
00099                 if self.is_needed() :
00100                         print "savepoint created"
00101                         shutil.move(self.tmpfile, self.bckfile())
00102                         open(self.bcksumfile(),'w').write(self.checksum.toprettyxml(encoding='utf-8'))
00103                         return True
00104                 else :
00105                         print "savepoint ignored"
00106                         os.unlink(self.tmpfile)
00107                         return False
00108         
        def pull( self, name ) :

def py::qo::backup::savepoint::pull (   self,
  name 
)

00109                                :
00110                 self.prepare_read()
00111                 fd = self.tarfile.extractfile(name)
00112                 return xml.dom.minidom.parse(fd)
00113 
        def items( self ) :

def py::qo::backup::savepoint::items (   self  ) 

00114                           :
00115                 def extract( element ) :
00116                         return element.getAttribute("name"), element.getAttribute("md5")
00117                 return map(extract, self.checksum.getElementsByTagName("file"))
00118 
        def all_names( self ) :

def py::qo::backup::savepoint::all_names (   self  ) 

Reimplemented in py::qo::share::overlay_archive.

00119                               :
00120                 return list_names()
00121 
        def is_needed( self ) :

def py::qo::backup::savepoint::is_needed (   self  ) 

00122                               :
00123                 all = filter(lambda x: x <= self.name, sorted(self.all_names()))
00124                 if len(all) == 0 :
00125                         # first backup
00126                         return True
00127 
00128                 try :
00129                         last_sp = self.__class__(all[-1],"r")
00130                 except :
00131                         traceback.print_exc()
00132                         return True
00133         
00134                 my_d = dict(self.items())
00135                 last_d = dict(last_sp.items())
00136 
00137                 if sorted(my_d.keys()) != sorted(last_d.keys()) :
00138                         # file name/count has changed
00139                         return True
00140 
00141                 for name, chk in my_d.iteritems() :
00142                         if chk != last_d[name] :
00143                                 # file has changed
00144                                 return True
00145 
00146                 return False
00147 
00148 
def build_xml_from_model( model, only_fields = None, exclude_fields = [] ) :


Member Data Documentation

py::qo::backup::savepoint::name

py::qo::backup::savepoint::checksum

py::qo::backup::savepoint::tarfile

py::qo::backup::savepoint::tmpfile


The documentation for this class was generated from the following file:
Generated on Tue Oct 9 20:40:31 2007 for Qomics by  doxygen 1.5.3