Revision a6d2ad78

b/kamaki/cli/argument/__init__.py
68 68
                    self, name)
69 69
            assert name.startswith('-'), msg
70 70

  
71
        self.default = default if (default or self.arity) else False
71
        self.default = default or None
72 72

  
73 73
    @property
74 74
    def value(self):
......
176 176
    :value: true if set, false otherwise
177 177
    """
178 178

  
179
    def __init__(self, help='', parsed_name=None, default=False):
179
    def __init__(self, help='', parsed_name=None, default=None):
180 180
        super(FlagArgument, self).__init__(0, help, parsed_name, default)
181 181

  
182 182

  
......
322 322
class RepeatableArgument(Argument):
323 323
    """A value argument that can be repeated"""
324 324

  
325
    def __init__(self, help='', parsed_name=None, default=[]):
325
    def __init__(self, help='', parsed_name=None, default=None):
326 326
        super(RepeatableArgument, self).__init__(
327 327
            -1, help, parsed_name, default)
328 328

  
329
    @property
330
    def value(self):
331
        return getattr(self, '_value', [])
332

  
333
    @value.setter
334
    def value(self, newvalue):
335
        self._value = newvalue
336

  
329 337

  
330 338
class KeyValueArgument(Argument):
331 339
    """A Key=Value Argument that can be repeated
......
333 341
    :syntax: --<arg> key1=value1 --<arg> key2=value2 ...
334 342
    """
335 343

  
336
    def __init__(self, help='', parsed_name=None, default=[]):
344
    def __init__(self, help='', parsed_name=None, default=None):
337 345
        super(KeyValueArgument, self).__init__(-1, help, parsed_name, default)
338 346

  
339 347
    @property
......
341 349
        """
342 350
        :returns: (dict) {key1: val1, key2: val2, ...}
343 351
        """
344
        return super(KeyValueArgument, self).value
352
        return getattr(self, '_value', {})
345 353

  
346 354
    @value.setter
347 355
    def value(self, keyvalue_pairs):
348 356
        """
349 357
        :param keyvalue_pairs: (str) ['key1=val1', 'key2=val2', ...]
350 358
        """
351
        self._value = getattr(self, '_value', self.value) or {}
352
        try:
353
            for pair in keyvalue_pairs:
354
                key, sep, val = pair.partition('=')
355
                assert sep, ' %s misses a "=" (usage: key1=val1 )\n' % (pair)
356
                self._value[key] = val
357
        except Exception as e:
358
            raiseCLIError(e, 'KeyValueArgument Syntax Error')
359
        if keyvalue_pairs:
360
            self._value = self.value
361
            try:
362
                for pair in keyvalue_pairs:
363
                    key, sep, val = pair.partition('=')
364
                    assert sep, ' %s misses a "=" (usage: key1=val1 )\n' % (
365
                        pair)
366
                    self._value[key] = val
367
            except Exception as e:
368
                raiseCLIError(e, 'KeyValueArgument Syntax Error')
359 369

  
360 370

  
361 371
class ProgressBarArgument(FlagArgument):
......
484 494
    @staticmethod
485 495
    def required2str(required, arguments, tab=''):
486 496
        if isinstance(required, list):
487
            return ' %sat least one:\n%s' % (tab, ''.join(
497
            return ' %sat least one of the following:\n%s' % (tab, ''.join(
488 498
                [ArgumentParseManager.required2str(
489 499
                    r, arguments, tab + '  ') for r in required]))
490 500
        elif isinstance(required, tuple):
491
            return ' %sall:\n%s' % (tab, ''.join(
501
            return ' %sall of the following:\n%s' % (tab, ''.join(
492 502
                [ArgumentParseManager.required2str(
493 503
                    r, arguments, tab + '  ') for r in required]))
494 504
        else:
b/kamaki/cli/commands/pithos.py
818 818
            'Use * for all users',
819 819
            '--write-permission'),
820 820
        public=FlagArgument('make object publicly accessible', '--public'),
821
        max_threads=IntArgument('set max threads (default 5)', '--threads'),
822 821
        progress_bar=ProgressBarArgument(
823 822
            'do not show progress bar',
824 823
            ('-N', '--no-progress-bar'),
b/kamaki/clients/network/__init__.py
357 357
            floatingip['fixed_ip_address'] = fixed_ip_address
358 358
        r = self.floatingips_put(
359 359
            floatingip_id, json_data=dict(floatingip=floatingip), success=200)
360
        return r['floatingip']
360
        return r.json['floatingip']
361 361

  
362 362
    def delete_floatingip(self, floatingip_id):
363 363
        r = self.floatingips_delete(floatingip_id, success=204)

Also available in: Unified diff