Minor improvements
authorStavros Sachtouris <saxtouri@admin.grnet.gr>
Thu, 11 Oct 2012 09:47:33 +0000 (12:47 +0300)
committerStavros Sachtouris <saxtouri@admin.grnet.gr>
Thu, 11 Oct 2012 09:47:33 +0000 (12:47 +0300)
kamaki/cli/__init__.py
kamaki/cli/argument.py
kamaki/cli/commands/pithos_cli.py
kamaki/clients/tests.py

index d03db81..d098ca7 100644 (file)
@@ -75,6 +75,7 @@ candidate_command_terms = []
 allow_no_commands = False
 allow_all_commands = False
 allow_subclass_signatures = False
+load2shell = False
 
 def _allow_class_in_cmd_tree(cls):
     global allow_all_commands
@@ -127,6 +128,17 @@ def command():
 
         #store each term, one by one, first
         _commands.add_command(cls.__name__, cls.description, cls)
+        if load2shell:
+            global shell
+            name = cls.__name__.split()[-1]
+            def do_method(self, line):
+                cls.main(line.split())
+            do_method.__name__ = 'do_%s'%name
+            setattr(shell, do_method.__name__, do_method)
+            def help_method(self):
+                print(cls.description)
+            help_method.__name__ = 'help_'%name
+            setattr(shell, help_method.__name__, help_method)
         return cls
     return decorator
 
@@ -187,6 +199,7 @@ def shallow_load():
         load_group_package(grp)
     allow_no_commands = False
 
+
 def load_group_package(group, reload_package=False):
     spec_pkg = _arguments['config'].value.get(group, 'cli')
     if spec_pkg is None:
@@ -329,20 +342,28 @@ class Shell(cmd.Cmd):
         return True
 
 shell = None
-
 def _start_shell():
+    global shell
     shell = Shell()
     shell.set_prompt(basename(argv[0]))
     from kamaki import __version__ as version
     shell.greet(version)
     shell.do_EOF = shell.do_exit
-    shell.cmdloop()
 
-def shell():
+def run_shell():
+    global shell
     _start_shell()
+    _config = _arguments['config']
+    _config.value = None
+    for grp in _config.get_groups():
+        global load2shell
+        load2shell = True
+        load_group_package(grp)
+        shell.do_store()
+    shell.cmdloop()
 
 def main():
     if len(argv) <= 1:
-        shell()
+        run_shell()
     else:
         one_command()
\ No newline at end of file
index 71865aa..5fc13ab 100644 (file)
@@ -211,6 +211,5 @@ _arguments = dict(config = _config_arg, help = Argument(0, 'Show help message',
 def parse_known_args(parser):
     parsed, unparsed = parser.parse_known_args()
     for name, arg in _arguments.items():
-        lala = getattr(parsed, name, arg.default)
-        arg.value = lala
+        arg.value = getattr(parsed, name, arg.default)
     return parsed, unparsed
index b165f15..a530692 100644 (file)
@@ -72,12 +72,20 @@ class MetaArgument(ValueArgument):
             (key,val) = metastr.split(':')
             metadict[key]=val
         return metadict
+    @value.setter
+    def value(self, newvalue):
+        if newvalue is None:
+            self._value = self.default
+        self._value = newvalue
+
 
-class ProgressBarArgument(FlagArgument, IncrementalBar):
+
+class ProgressBarArgument(FlagArgument):
 
     def __init__(self, help='', parsed_name='', default=True):
         self.suffix = '%(percent)d%%'
         super(ProgressBarArgument, self).__init__(help, parsed_name, default)
+        self.bar = IncrementalBar()
 
     @property 
     def value(self):
@@ -86,11 +94,14 @@ class ProgressBarArgument(FlagArgument, IncrementalBar):
     def value(self, newvalue):
         """By default, it is on (True)"""
         self._value = not newvalue
+    def get_generator(self, message, message_len=25):
+        bar = ProgressBar()
+        return bar.get_generator(message, message_len)
 
-    def get_generator(self, message):
-        _message_len = 25
+class ProgressBar(IncrementalBar):
+    def get_generator(self, message, message_len):
         def progress_gen(n):
-            msg = message.ljust(_message_len)
+            self.msg = message.ljust(message_len)
             for i in self.iter(range(n)):
                 yield
             yield
@@ -282,8 +293,8 @@ class store_list(_store_container_command):
         try:
             limit = self.get_argument('show_size')
             limit = int(limit)
-        except AttributeError:
-            pass
+        except (AttributeError, TypeError):
+            limit = len(object_list) + 1
         #index = 0
         for index,obj in enumerate(object_list):
             if not obj.has_key('content_type'):
@@ -316,8 +327,8 @@ class store_list(_store_container_command):
         try:
             limit = self.get_argument('show_size')
             limit = int(limit)
-        except AttributeError:
-            pass
+        except (AttributeError, TypeError):
+            limit = len(container_list)+1
         for index,container in enumerate(container_list):
             if container.has_key('bytes'):
                 size = format_size(container['bytes']) 
@@ -390,7 +401,7 @@ class store_create(_store_container_command):
             if self.path is None:
                 self.client.container_put(quota=self.get_argument('quota'),
                     versioning=self.get_argument('versioning'),
-                    metadata=self.get_argument('metadata'))
+                    metadata=self.get_argument('meta'))
             else:
                 self.client.create_directory(self.path)
         except ClientError as err:
@@ -461,8 +472,7 @@ class store_append(_store_container_command):
 
     def __init__(self, arguments={}):
         super(self.__class__, self).__init__(arguments)
-        self.arguments['progress_bar'] = ProgressBarArgument('do not show progress bar',
-            '--no-progress-bar')
+        self.arguments['progress_bar'] = ProgressBarArgument('do not show progress bar', '--no-progress-bar')
 
     def main(self, local_path, container___path):
         super(self.__class__, self).main(container___path, path_is_optional=False)
@@ -551,8 +561,7 @@ class store_upload(_store_container_command):
             help='define sharing object policy ( "read=user1,grp1,user2,... write=user1,grp2,...')
         self.arguments['public']=FlagArgument('make object publicly accessible', '--public')
         self.arguments['poolsize']=IntArgument('set pool size', '--with-pool-size')
-        self.arguments['progress_bar'] = ProgressBarArgument('do not show progress bar',
-            '--no-progress-bar')
+        self.arguments['progress_bar'] = ProgressBarArgument('do not show progress bar', '--no-progress-bar')
 
     def main(self, local_path, container____path__):
         super(self.__class__, self).main(container____path__)
index 23a9e1b..d7a6ffa 100644 (file)
@@ -56,30 +56,30 @@ class testCyclades(unittest.TestCase):
         self.img = '1395fdfb-51b4-419f-bb02-f7d632860611'
 
         """okeanos.io"""
-        url = 'https://cyclades.okeanos.io/api/v1.1'
-        token='0TpoyAXqJSPxLdDuZHiLOA=='
-        account='saxtouri@admin.grnet.gr'
-        self.img = '43cc8497-61c3-4c46-ae8d-3e33861f8527'
-        self.img_details= {
-            u'status': u'ACTIVE',
-            u'updated': u'2012-08-21T12:57:39+00:00',
-            u'name': u'Debian Base',
-            u'created': u'2012-08-21T12:56:53+00:00',
-            u'progress': 100,
-            u'id': u'43cc8497-61c3-4c46-ae8d-3e33861f8527',
-            u'metadata': {
-                u'values': {
-                    u'kernel': u'2.6.32',
-                    u'osfamily': u'linux', 
-                    u'users': u'root', 
-                    u'gui': u'No GUI', 
-                    u'sortorder': u'1', 
-                    u'os': u'debian', 
-                    u'root_partition': 
-                    u'1', u'description': 
-                    u'Debian Squeeze Base System'}
-                }
-            }
+        #url = 'https://cyclades.okeanos.io/api/v1.1'
+        #token='0TpoyAXqJSPxLdDuZHiLOA=='
+        #account='saxtouri@admin.grnet.gr'
+        #self.img = '43cc8497-61c3-4c46-ae8d-3e33861f8527'
+        #self.img_details= {
+        #    u'status': u'ACTIVE',
+        #    u'updated': u'2012-08-21T12:57:39+00:00',
+        #    u'name': u'Debian Base',
+        #    u'created': u'2012-08-21T12:56:53+00:00',
+        #    u'progress': 100,
+        #    u'id': u'43cc8497-61c3-4c46-ae8d-3e33861f8527',
+        #    u'metadata': {
+        #        u'values': {
+        #            u'kernel': u'2.6.32',
+        #            u'osfamily': u'linux', 
+        #            u'users': u'root', 
+        #            u'gui': u'No GUI', 
+        #            u'sortorder': u'1', 
+        #            u'os': u'debian', 
+        #            u'root_partition': 
+        #            u'1', u'description': 
+        #            u'Debian Squeeze Base System'}
+        #        }
+        #    }
         flavorid = 1
 
         self.servers = {}
@@ -263,15 +263,34 @@ class testPithos(unittest.TestCase):
         token = 'C/yBXmz3XjTFBnujc2biAg=='
         token = 'ac0yH8cQMEZu3M3Mp1MWGA=='
         account = 'admin@adminland.com'
+        """
 
         url='https://pithos.okeanos.grnet.gr/v1'
-        token='MI6PT0yrXJ9Ji/x8l9Wmig=='
-        account='saxtouri@gmail.com'
+
+        token='Kn+G9dfmlPLR2WFnhfBOow=='
+        account='saxtouri@grnet.gr'
         """
 
         url='https://pithos.okeanos.io/v1'
         token='0TpoyAXqJSPxLdDuZHiLOA=='
         account='saxtouri@admin.grnet.gr'
+        """
+        
+        """
+        def add_handler(name, level, prefix=''):
+            h = logging.StreamHandler()
+            fmt = logging.Formatter(prefix + '%(message)s')
+            h.setFormatter(fmt)
+            logger = logging.getLogger(name)
+            logger.addHandler(h)
+            logger.setLevel(level)
+        import logging
+        sendlog = logging.getLogger('clients.send')
+        recvlog = logging.getLogger('clients.recv')
+        add_handler('requests', logging.INFO, prefix='* ')
+        add_handler('clients.send', logging.INFO, prefix='> ')
+        add_handler('clients.recv', logging.INFO, prefix='< ')
+        """
         
         self.fname = None
         container=None
@@ -280,6 +299,8 @@ class testPithos(unittest.TestCase):
         self.c1 = 'c1_'+unicode(self.now)
         self.c2 = 'c2_'+unicode(self.now)
         self.c3 = 'c3_'+unicode(self.now)
+
+
         self.client.create_container(self.c1)
         self.client.create_container(self.c2)
         self.client.create_container(self.c3)
@@ -299,7 +320,6 @@ class testPithos(unittest.TestCase):
         r = self.client.object_put(obj, content_type='application/octet-stream',
             data= 'file '+obj+' that lives in '+container,
             metadata={'incontainer':container})
-        
 
     def forceDeleteContainer(self, container):
         self.client.container = container
@@ -312,7 +332,6 @@ class testPithos(unittest.TestCase):
             self.client.del_object(name)
         r = self.client.container_delete()
         self.container = ''
-        
 
     def tearDown(self):
         """Destroy test cases"""