X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwlaunchpad%2Fplugins%2Frwlaunchpadtasklet%2Frift%2Fpackage%2Fpackage.py;h=3ce3500e032facf13e8e80dc19f12b74be1da193;hb=07b439824b5eac4dc760ce56b52fbdcf5539db4c;hp=45d8ba8a387faf4023673f884269a51ab2603bf2;hpb=1c17c693cf82a1d47c2792b14e6be781070535df;p=osm%2FSO.git diff --git a/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/package/package.py b/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/package/package.py index 45d8ba8a..3ce3500e 100644 --- a/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/package/package.py +++ b/rwlaunchpad/plugins/rwlaunchpadtasklet/rift/package/package.py @@ -1,5 +1,5 @@ -# +# # Copyright 2016 RIFT.IO Inc # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -42,6 +42,10 @@ class PackageValidationError(Exception): pass +class PackageAppendError(Exception): + pass + + class PackageFileChecksumError(PackageValidationError): def __init__(self, filename): self.filename = filename @@ -333,6 +337,36 @@ class DescriptorPackage(object): # Set the file mode to original os.chmod(dest_file_path, self._package_file_mode_map[filename]) + def insert_file(self, new_file, dest_file, rel_path, mode=0o777): + self.add_file(rel_path, mode) + + try: + # Copy the contents of the file to the correct path + dest_dir_path = os.path.dirname(dest_file) + if not os.path.isdir(dest_dir_path): + os.makedirs(dest_dir_path) + + with open(dest_file, 'wb') as dst_hdl: + with open(new_file, 'rb') as src_hdl: + shutil.copyfileobj(src_hdl, dst_hdl, 10 * 1024 * 1024) + + # Set the file mode to original + os.chmod(dest_file, self._package_file_mode_map[rel_path]) + except Exception as e: + # Clear the file when an exception happens + if os.path.isfile(dest_file): + os.remove(dest_file) + + raise PackageAppendError(str(e)) + + def delete_file(self, dest_file, rel_path): + self.remove_file(rel_path) + + try: + os.remove(dest_file) + except Exception as e: + raise PackageAppendError(str(e)) + def extract_file(self, src_file, dest_file): """ Extract a specific package file to dest_file @@ -428,6 +462,15 @@ class DescriptorPackage(object): self._package_file_mode_map[rel_path] = mode + def remove_file(self, rel_path): + if not rel_path: + raise PackageError("Empty file name added") + + if rel_path not in self._package_file_mode_map: + raise PackageError("File %s does not in package" % rel_path) + + del self._package_file_mode_map[rel_path] + def add_dir(self, rel_path): """ Add a directory to the package