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
#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
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:
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
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
(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):
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
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'):
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'])
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:
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)
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__)
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 = {}
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
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)
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
self.client.del_object(name)
r = self.client.container_delete()
self.container = ''
-
def tearDown(self):
"""Destroy test cases"""