Skip to content

Commit e2d3961

Browse files
committed
Add support for python3
1 parent be9d1da commit e2d3961

File tree

2 files changed

+37
-30
lines changed

2 files changed

+37
-30
lines changed

gdapi.py

Lines changed: 36 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
#!/usr/bin/env python
22
# PYTHON_ARGCOMPLETE_OK
33

4+
from __future__ import print_function
5+
import six
46
import re
57
import requests
68
import collections
@@ -45,7 +47,7 @@ def _prefix(cmd):
4547
def echo(fn):
4648
def wrapped(*args, **kw):
4749
ret = fn(*args, **kw)
48-
print fn.__name__, repr(ret)
50+
print(fn.__name__, repr(ret))
4951
return ret
5052
return wrapped
5153

@@ -56,7 +58,7 @@ def wrapped(*args, **kw):
5658
start = time.time()
5759
ret = fn(*args, **kw)
5860
delta = time.time() - start
59-
print delta, args[1], fn.__name__
61+
print(delta, args[1], fn.__name__)
6062
return ret
6163
else:
6264
return fn(*args, **kw)
@@ -78,7 +80,7 @@ def _as_table(self):
7880
if not hasattr(self, 'type'):
7981
return str(self.__dict__)
8082
data = [('Type', 'Id', 'Name', 'Value')]
81-
for k, v in self.iteritems():
83+
for k, v in six.iteritems(self):
8284
if self._is_public(k, v):
8385
if v is None:
8486
v = 'null'
@@ -99,7 +101,7 @@ def _is_list(self):
99101

100102
def __repr__(self):
101103
data = {}
102-
for k, v in self.__dict__.iteritems():
104+
for k, v in six.iteritems(self.__dict__):
103105
if self._is_public(k, v):
104106
data[k] = v
105107
return repr(data)
@@ -204,7 +206,7 @@ def object_hook(self, obj):
204206
if isinstance(obj, dict):
205207
result = RestObject()
206208

207-
for k, v in obj.iteritems():
209+
for k, v in six.iteritems(obj):
208210
setattr(result, k, self.object_hook(v))
209211

210212
for link in ['next', 'prev']:
@@ -216,9 +218,9 @@ def object_hook(self, obj):
216218
pass
217219

218220
if hasattr(result, 'type') and isinstance(getattr(result, 'type'),
219-
basestring):
221+
six.string_types):
220222
if hasattr(result, 'links'):
221-
for link_name, link in result.links.iteritems():
223+
for link_name, link in six.iteritems(result.links):
222224
cb = lambda _link=link, **kw: self._get(_link,
223225
data=kw)
224226
if hasattr(result, link_name):
@@ -227,7 +229,7 @@ def object_hook(self, obj):
227229
setattr(result, link_name, cb)
228230

229231
if hasattr(result, 'actions'):
230-
for link_name, link in result.actions.iteritems():
232+
for link_name, link in six.iteritems(result.actions):
231233
cb = lambda _link_name=link_name, _result=result, \
232234
*args, **kw: self.action(_result, _link_name,
233235
*args, **kw)
@@ -338,7 +340,7 @@ def by_id(self, type, id, **kw):
338340
url = '/'.join([url, id])
339341
try:
340342
return self._get(url, self._to_dict(**kw))
341-
except ApiError, e:
343+
except ApiError as e:
342344
if e.error.status == 404:
343345
return None
344346
else:
@@ -367,7 +369,7 @@ def _validate_list(self, type, **kw):
367369
if hasattr(collection_filters, k):
368370
return
369371

370-
for filter_name, filter_value in collection_filters.iteritems():
372+
for filter_name, filter_value in six.iteritems(collection_filters):
371373
for m in filter_value.modifiers:
372374
if k == '_'.join([filter_name, m]):
373375
return
@@ -411,7 +413,7 @@ def _is_list(self, obj):
411413
def _to_value(self, value):
412414
if isinstance(value, dict):
413415
ret = {}
414-
for k, v in value.iteritems():
416+
for k, v in six.iteritems(value):
415417
ret[k] = self._to_value(v)
416418
return ret
417419

@@ -445,10 +447,10 @@ def _to_dict(self, *args, **kw):
445447
for i in args:
446448
value = self._to_value(i)
447449
if isinstance(value, dict):
448-
for k, v in value.iteritems():
450+
for k, v in six.iteritems(value):
449451
ret[k] = v
450452

451-
for k, v in kw.iteritems():
453+
for k, v in six.iteritems(kw):
452454
ret[k] = self._to_value(v)
453455

454456
return ret
@@ -470,15 +472,15 @@ def _bind_methods(self, schema):
470472
('create', 'collectionMethods', POST_METHOD, self.create)
471473
]
472474

473-
for type_name, type in schema.types.iteritems():
475+
for type_name, typ in six.iteritems(schema.types):
474476
for name_variant in self._type_name_variants(type_name):
475477
for method_name, type_collection, test_method, m in bindings:
476478
# double lambda for lexical binding hack, I'm sure there's
477479
# a better way to do this
478480
cb = lambda type_name=type_name, method=m: \
479481
lambda *args, **kw: method(type_name, *args, **kw)
480482
if hasattr(type, type_collection) and \
481-
test_method in type[type_collection]:
483+
test_method in typ[type_collection]:
482484
setattr(self, '_'.join([method_name, name_variant]),
483485
cb())
484486

@@ -537,14 +539,17 @@ def _print_cli(client, obj):
537539
return
538540

539541
if JSON:
540-
print client._marshall(obj, indent=2, sort_keys=True)
542+
print(client._marshall(obj, indent=2, sort_keys=True))
541543
elif callable(getattr(obj, '_as_table')):
542-
print obj._as_table()
544+
print(obj._as_table())
543545
else:
544-
print obj
546+
print(obj)
545547

546548
# {{{ http://code.activestate.com/recipes/267662/ (r7)
547-
import cStringIO
549+
try:
550+
from cStringIO import StringIO
551+
except ImportError:
552+
from io import StringIO
548553
import operator
549554

550555

@@ -580,15 +585,16 @@ def rowWrapper(row):
580585
len(delim)*(len(maxWidths)-1))
581586
# select the appropriate justify method
582587
justify = {'center': str.center, 'right': str.rjust, 'left': str.ljust}[justify.lower()] # NOQA
583-
output = cStringIO.StringIO()
588+
output = StringIO()
584589
if separateRows:
585-
print >> output, rowSeparator
590+
print(rowSeparator, file=output)
586591
for physicalRows in logicalRows:
587592
for row in physicalRows:
588-
print >> output, prefix \
589-
+ delim.join([justify(str(item), width) for (item, width) in zip(row, maxWidths)]) + postfix # NOQA
593+
print(prefix
594+
+ delim.join([justify(str(item), width) for (item, width) in zip(row, maxWidths)]) + postfix, # NOQA
595+
file=output)
590596
if separateRows or hasHeader:
591-
print >> output, rowSeparator
597+
print(rowSeparator, file=output)
592598
hasHeader = False
593599
return output.getvalue()
594600
# End {{{ http://code.activestate.com/recipes/267662/ (r7)
@@ -610,7 +616,7 @@ def from_env(prefix=PREFIX + '_', factory=Client, **kw):
610616

611617
def _from_env(prefix=PREFIX + '_', factory=Client, **kw):
612618
result = dict(kw)
613-
for k, v in kw.iteritems():
619+
for k, v in six.iteritems(kw):
614620
if v is not None:
615621
result[k] = v
616622
else:
@@ -651,7 +657,7 @@ def _general_args(help=True):
651657
def _list_args(subparsers, client, type, schema):
652658
help_msg = LIST[0:len(LIST)-1].capitalize() + ' ' + type
653659
subparser = subparsers.add_parser(LIST + type, help=help_msg)
654-
for name, filter in schema.collectionFilters.iteritems():
660+
for name, filter in six.iteritems(schema.collectionFilters):
655661
subparser.add_argument('--' + name)
656662
for m in filter.modifiers:
657663
if m != 'eq':
@@ -686,7 +692,7 @@ def _generic_args(subparsers, field_key, type, schema,
686692
subparser = subparsers.add_parser(prefix, help=help_msg)
687693

688694
if schema is not None:
689-
for name, field in schema.iteritems():
695+
for name, field in six.iteritems(schema):
690696
if field.get(field_key) is True:
691697
if field.get('type').startswith('array'):
692698
subparser.add_argument('--' + name, nargs='*')
@@ -701,7 +707,7 @@ def _generic_args(subparsers, field_key, type, schema,
701707
def _full_args(client):
702708
parser = _general_args()
703709
subparsers = parser.add_subparsers(help='Sub-Command Help')
704-
for type, schema in client.schema.types.iteritems():
710+
for type, schema in six.iteritems(client.schema.types):
705711
if schema.listable:
706712
subparser = _list_args(subparsers, client, type, schema)
707713
subparser.set_defaults(_action=LIST, _type=type)
@@ -721,7 +727,7 @@ def _full_args(client):
721727
subparser.set_defaults(_action=DELETE, _type=type)
722728

723729
try:
724-
for name, args in schema.resourceActions.iteritems():
730+
for name, args in six.iteritems(schema.resourceActions):
725731
action_schema = None
726732
try:
727733
action_schema = client.schema.types[args.input]
@@ -783,7 +789,7 @@ def _run_cli(client, namespace):
783789
obj = client.action(obj, command_type[len(ACTION):], **args)
784790
if obj:
785791
_print_cli(client, obj)
786-
except ApiError, e:
792+
except ApiError as e:
787793
import sys
788794

789795
sys.stderr.write('Error : {}\n'.format(e.error))

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
argcomplete==0.7.0
22
requests==2.2.1
3+
six

0 commit comments

Comments
 (0)