Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:lafenghu
open-ovf
OvfSet-init.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File OvfSet-init.patch of Package open-ovf
Index: open-ovf-0.1/py/ovf/OvfSet.py =================================================================== --- open-ovf-0.1.orig/py/ovf/OvfSet.py +++ open-ovf-0.1/py/ovf/OvfSet.py @@ -29,7 +29,7 @@ class OvfSet(object): archive or as a directory layout """ - def __init__(self, path=None, mode="r"): + def __init__(self, path=None, mode="r", format=FORMAT_DIR): """ Initialize object from path in read/write mode @@ -48,8 +48,8 @@ class OvfSet(object): #: the package name of this object (the name of .ovf without extension) self.name = None - self.ovfFile = None #: The OvfFile object - self.archiveFormat = FORMAT_DIR #: The archive type of this (default save type) + self.ovfFile = None #: The OvfFile object + self.archiveFormat = format #: The archive type of this (default save type) self.archivePath = None #: The write path of the archive self.archiveSavePath = None #: The Save Path for the archive (differs from archivePath for tar) self.__tmpdir__ = None #: the temporary dir if tar (cleaned up in __del__) @@ -60,7 +60,7 @@ class OvfSet(object): self.certificate = None if path != None: - self.initializeFromPath(path, mode) + self.initializeFromPath(path) def __del__(self): """ @@ -89,70 +89,21 @@ class OvfSet(object): mode = property(_getMode, _setMode) - def initializeFromPath(self, path, mode="r"): + def initializeFromPath(self, path): """ initialize object from the file or path given in path @raise IOError: The cases are as follow - - I{B{Case 1:}} The path provided in the parameters is not - valid. - - I{B{Case 2:}} The mode parameter has a value of r and the path - already exist. - - I{B{Case 3:}} Unsafe Tar file - - I{B{Case 4:}} The tar file cannot be found. + - I{B{Case 1:}} Invalid archive format + - I{B{Case 2:}} Unsafe Tar file + - I{B{Case 3:}} The tar file cannot be found. @type path: String @param path: a path to a file to open - @type mode: string - @param mode: mode for open, either 'r' or 'w' """ - - exists = True - if os.path.isdir(path): - self.archiveFormat = FORMAT_DIR - elif os.path.isfile(path): - if tarfile.is_tarfile(path): - self.archiveFormat = FORMAT_TAR - else: - # this file is not a tar file, assume that this is a .ovf - self.archiveFormat = FORMAT_DIR - elif os.path.exists(path): - raise IOError("unsupported file type for " + path) - else: - exists = False - if mode == "r": - raise IOError("cannot open for read " + path) - if path.endswith("/") or path.endswith("\\"): - self.archiveFormat = FORMAT_DIR - elif path.endswith(".ovf") or path.endswith(".OVF"): - self.archiveFormat = FORMAT_DIR - else: - self.archiveFormat = FORMAT_TAR - - if exists == True and self.archiveFormat == FORMAT_TAR: - # Here, for now, we make a temporary copy - tmpdir = os.path.dirname(os.path.abspath(path)) - if os.environ.has_key("TMPDIR"): tmpdir = None - tmpd = tempfile.mkdtemp(dir=tmpdir) - self.__tmpdir__ = tmpd - tf = tarfile.open(path, "r") - ti = tf.next() - while ti is not None: - #TODO: need to do safe extraction here this - # on windows need to protect c:// - # also, check that .ovf is first file - # suggestion[ejcasler]: change ".." to "../" - # make absolute refs begin with tempdir path - if ti.name.find("..") != -1 or ti.name.startswith("/"): - raise IOError("Unsafe Tar file" + path) - tf.extract(ti, tmpd) - ti = tf.next() - self.archivePath = tmpd - self.archiveSavePath = path - elif exists == True and self.archiveFormat == FORMAT_DIR: - # for existing, if it is a file path=dirname(path) + if self.archiveFormat == FORMAT_DIR: if os.path.isfile(path): self.archivePath = os.path.dirname(path) # dirname returns "" rather than "." for "filename" @@ -162,46 +113,53 @@ class OvfSet(object): else: self.archivePath = path self.archiveSavePath = self.archivePath - elif exists == False and self.archiveFormat == FORMAT_TAR: - # for non-existant file, this is the file (.ova) - self.archivePath = path - self.archiveSavePath = self.archivePath - self.setName(os.path.basename(path)[0:(len(os.path.basename(path))-4)]) - elif exists == False and self.archiveFormat == FORMAT_DIR: - # for non-existant dir, this is a dir (not .ovf) - self.archivePath = path - self.archiveSavePath = self.archivePath + elif self.archiveFormat == FORMAT_TAR: + if os.path.isfile(path): + # Here, for now, we make a temporary copy + tmpdir = os.path.dirname(os.path.abspath(path)) + if os.environ.has_key("TMPDIR"): tmpdir = None + tmpd = tempfile.mkdtemp(dir=tmpdir) + self.__tmpdir__ = tmpd + tf = tarfile.open(path, "r") + for ti in tf.getmembers(): + #TODO: need to do safe extraction here this + # on windows need to protect c:// + # also, check that .ovf is first file + # suggestion[ejcasler]: change ".." to "../" + # make absolute refs begin with tempdir path + if ti.name.find("..") != -1 or ti.name.startswith("/"): + raise IOError("Unsafe Tar file" + path) + tf.extract(ti, tmpd) + tf.close() + self.archivePath = tmpd + self.archiveSavePath = path + else: + # for non-existant file, this is the file (.ova) + (p, f) = os.path.split(os.path.abspath(path)) + self.archivePath = p + self.archiveSavePath = self.archivePath + self.setName((f.rsplit(".ova", 1))[0]) + else: - raise IOError("shouldn't be here") + raise IOError("Invalid archive format") - if ( not os.path.isfile(path) and self.archiveFormat == FORMAT_DIR and - exists == True ) or self.__tmpdir__ != None: - name = False + if self.name == None: for curFile in os.listdir(self.archivePath): if curFile.endswith(".ovf"): - if name != False: - return False - # set name to filename without .ovf - name = curFile[0:(len(curFile)-4)] - if name == False and mode == "r": - raise IOError("no ovf file in " + path + "(" + self.archivePath + ")") - elif name: - self.setName(name) - - # now self.archivePath, self.archiveSavePath and self.archiveFormat should - # be set. self.name should be set if possible. - # now, self.archivePath/self.name + ".ovf" should have the ovf file - - if self.name != None: - basepath = os.path.join(self.archivePath, self.name) - self.ovfFile = OvfFile.OvfFile(basepath + ".ovf") - if os.path.isfile(basepath + ".mf"): - # we have a manifest - self.manifest = basepath + ".mf" - - if os.path.isfile(basepath + ".cert"): - # we have a certificate - self.certificate = basepath + ".cert" + self.name = curFile[0:(len(curFile)-4)] + + # ovf file name = self.archivePath + / + self.name + .ovf + basepath = os.path.join(self.archivePath, self.name) + self.ovfFile = OvfFile.OvfFile(basepath + ".ovf") + + # Similarly, aux file name = self.archive + / + self.name + .ext + if os.path.isfile(basepath + ".mf"): + # we have a manifest + self.manifest = basepath + ".mf" + + if os.path.isfile(basepath + ".cert"): + # we have a certificate + self.certificate = basepath + ".cert" def toString(self): """Overrides toString for OvfSet""" @@ -285,7 +243,7 @@ class OvfSet(object): os.unlink(ovfName) ovfname = None except: - if ovfname != None: + if ovfName != None: os.unlink(ovfName) raise
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor