Don't handle kamaki exceptions in kamaki_wrapper
authorNikos Skalkotos <skalkoto@grnet.gr>
Fri, 15 Jun 2012 08:32:20 +0000 (11:32 +0300)
committerNikos Skalkotos <skalkoto@grnet.gr>
Fri, 15 Jun 2012 08:32:20 +0000 (11:32 +0300)
Let the application decide what to do with them. If image-creator
receives an error from kamaki it will terminate. But this may not be
the proper thing to do for an interactive application like
image-creator-dialog

image_creator/kamaki_wrapper.py
image_creator/main.py

index 2ad66f4..66bb940 100644 (file)
@@ -63,33 +63,27 @@ class Kamaki(object):
 
     def upload(self, file_obj, size=None, remote_path=None, hp=None, up=None):
         """Upload a file to pithos"""
 
     def upload(self, file_obj, size=None, remote_path=None, hp=None, up=None):
         """Upload a file to pithos"""
-        if remote_path is None:
-            remote_path = basename(filename)
+
+        path = basename(file_obj.name) if remote_path is None else remote_path
 
         try:
             self.pithos_client.create_container(self.container)
         except ClientError as e:
             if e.status != 202:  # Ignore container already exists errors
 
         try:
             self.pithos_client.create_container(self.container)
         except ClientError as e:
             if e.status != 202:  # Ignore container already exists errors
-                raise FatalError("Pithos client: %d %s" % \
-                                                    (e.status, e.message))
-        try:
-            hash_cb = self.out.progress_generator(hp) \
-                                                    if hp is not None else None
-            upload_cb = self.out.progress_generator(up) \
-                                                    if up is not None else None
-            self.pithos_client.create_object(remote_path, file_obj, size,
-                                                            hash_cb, upload_cb)
-            return "pithos://%s/%s/%s" % \
-                            (self.account, self.container, remote_path)
-        except ClientError as e:
-            raise FatalError("Pithos client: %d %s" % (e.status, e.message))
+                raise e
+
+        hash_cb = self.out.progress_generator(hp) if hp is not None else None
+        upload_cb = self.out.progress_generator(up) if up is not None else None
+
+        self.pithos_client.create_object(path, file_obj, size, hash_cb,
+                                         upload_cb)
+
+        return "pithos://%s/%s/%s" % (self.account, self.container, path)
 
     def register(self, name, location, metadata):
         """Register an image to ~okeanos"""
 
     def register(self, name, location, metadata):
         """Register an image to ~okeanos"""
+
         params = {'is_public': 'true', 'disk_format': 'diskdump'}
         params = {'is_public': 'true', 'disk_format': 'diskdump'}
-        try:
-            self.image_client.register(name, location, params, metadata)
-        except ClientError as e:
-            raise FatalError("Image client: %d %s" % (e.status, e.message))
+        self.image_client.register(name, location, params, metadata)
 
 # vim: set sta sts=4 shiftwidth=4 sw=4 et ai :
 
 # vim: set sta sts=4 shiftwidth=4 sw=4 et ai :
index 8857eb8..fa2e23d 100644 (file)
@@ -40,7 +40,7 @@ from image_creator.util import get_command, FatalError, MD5
 from image_creator.output.cli import SilentOutput, SimpleOutput, \
                                      OutputWthProgress
 from image_creator.os_type import os_cls
 from image_creator.output.cli import SilentOutput, SimpleOutput, \
                                      OutputWthProgress
 from image_creator.os_type import os_cls
-from image_creator.kamaki_wrapper import Kamaki
+from image_creator.kamaki_wrapper import Kamaki, ClientError
 import sys
 import os
 import optparse
 import sys
 import os
 import optparse
@@ -241,33 +241,37 @@ def image_creator():
         disk.destroy_device(dev)
 
         out.output()
         disk.destroy_device(dev)
 
         out.output()
-
-        uploaded_obj = ""
-        if options.upload:
-            out.output("Uploading image to pithos:")
-            kamaki = Kamaki(options.account, options.token, out)
-            with open(snapshot) as f:
-                uploaded_obj = kamaki.upload(f, size, options.upload,
-                                "(1/4)  Calculating block hashes",
-                                "(2/4)  Uploading missing blocks")
-
-            out.output("(3/4)  Uploading metadata file...", False)
-            kamaki.upload(StringIO.StringIO(metastring), size=len(metastring),
-                                remote_path="%s.%s" % (options.upload, 'meta'))
-            out.success('done')
-            out.output("(4/4)  Uploading md5sum file...", False)
-            md5sumstr = '%s %s\n' % (
-                checksum, os.path.basename(options.upload))
-            kamaki.upload(StringIO.StringIO(md5sumstr), size=len(md5sumstr),
-                            remote_path="%s.%s" % (options.upload, 'md5sum'))
-            out.success('done')
-            out.output()
-
-        if options.register:
-            out.output('Registring image to ~okeanos...', False)
-            kamaki.register(options.register, uploaded_obj, metadata)
-            out.success('done')
-            out.output()
+        try:
+            uploaded_obj = ""
+            if options.upload:
+                out.output("Uploading image to pithos:")
+                kamaki = Kamaki(options.account, options.token, out)
+                with open(snapshot) as f:
+                    uploaded_obj = kamaki.upload(f, size, options.upload,
+                                            "(1/4)  Calculating block hashes",
+                                            "(2/4)  Uploading missing blocks")
+
+                out.output("(3/4)  Uploading metadata file...", False)
+                kamaki.upload(StringIO.StringIO(metastring),
+                              size=len(metastring),
+                              remote_path="%s.%s" % (options.upload, 'meta'))
+                out.success('done')
+                out.output("(4/4)  Uploading md5sum file...", False)
+                md5sumstr = '%s %s\n' % (
+                                    checksum, os.path.basename(options.upload))
+                kamaki.upload(StringIO.StringIO(md5sumstr),
+                              size=len(md5sumstr),
+                              remote_path="%s.%s" % (options.upload, 'md5sum'))
+                out.success('done')
+                out.output()
+
+            if options.register:
+                out.output('Registring image to ~okeanos...', False)
+                kamaki.register(options.register, uploaded_obj, metadata)
+                out.success('done')
+                out.output()
+        except ClientError as e:
+            raise FatalError("Pithos client: %d %s" % (e.status, e.message))
 
     finally:
         out.output('cleaning up...')
 
     finally:
         out.output('cleaning up...')
@@ -287,7 +291,6 @@ def main():
         SimpleOutput(colored).error(e)
         sys.exit(1)
 
         SimpleOutput(colored).error(e)
         sys.exit(1)
 
-
 if __name__ == '__main__':
     main()
 
 if __name__ == '__main__':
     main()