Skip to content

Commit efbaa67

Browse files
committed
Support Python 2 and 3
1 parent 4f5c299 commit efbaa67

File tree

3 files changed

+25
-20
lines changed

3 files changed

+25
-20
lines changed

marathon/client.py

+17-12
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
import itertools
22
import time
3-
import urlparse
3+
import sys
44

55
try:
66
import json
77
except ImportError:
88
import simplejson as json
9-
try:
10-
from urllib2 import HTTPError
11-
except ImportError:
9+
10+
# Support Python 2 & 3
11+
12+
if sys.version_info[0] == 3:
13+
import urllib.parse as urlparse
1214
from urllib.error import HTTPError
15+
else:
16+
import urlparse
17+
from urllib2 import HTTPError
1318

1419
import requests
1520
import requests.exceptions
@@ -63,7 +68,7 @@ def _do_request(self, method, path, params=None, data=None):
6368
response = requests.request(method, url, params=params, data=data, headers=headers,
6469
auth=self.auth, timeout=self.timeout)
6570
marathon.log.info('Got response from %s', server)
66-
except requests.exceptions.RequestException, e:
71+
except requests.exceptions.RequestException as e:
6772
marathon.log.error('Error while calling %s: %s', url, e.message)
6873

6974
if response is None:
@@ -133,8 +138,8 @@ def list_apps(self, cmd=None, embed_tasks=False, embed_failures=False, **kwargs)
133138

134139
response = self._do_request('GET', '/v2/apps', params=params)
135140
apps = self._parse_response(response, MarathonApp, is_list=True, resource_name='apps')
136-
for k, v in kwargs.iteritems():
137-
apps = filter(lambda o: getattr(o, k) == v, apps)
141+
for k, v in kwargs.items():
142+
apps = [o for o in apps if getattr(o, k) == v]
138143
return apps
139144

140145
def get_app(self, app_id, embed_tasks=False):
@@ -254,8 +259,8 @@ def list_groups(self, **kwargs):
254259
"""
255260
response = self._do_request('GET', '/v2/groups')
256261
groups = self._parse_response(response, MarathonGroup, is_list=True, resource_name='groups')
257-
for k, v in kwargs.iteritems():
258-
groups = filter(lambda o: getattr(o, k) == v, groups)
262+
for k, v in kwargs.items():
263+
groups = [o for o in groups if getattr(o, k) == v]
259264
return groups
260265

261266
def get_group(self, group_id):
@@ -351,8 +356,8 @@ def list_tasks(self, app_id=None, **kwargs):
351356

352357
tasks = self._parse_response(response, MarathonTask, is_list=True, resource_name='tasks')
353358
[setattr(t, 'app_id', app_id) for t in tasks if app_id and t.app_id is None]
354-
for k, v in kwargs.iteritems():
355-
tasks = filter(lambda o: getattr(o, k) == v, tasks)
359+
for k, v in kwargs.items():
360+
tasks = [o for o in tasks if getattr(o, k) == v]
356361

357362
return tasks
358363

@@ -372,7 +377,7 @@ def batch(iterable, size):
372377
sourceiter = iter(iterable)
373378
while True:
374379
batchiter = itertools.islice(sourceiter, size)
375-
yield itertools.chain([batchiter.next()], batchiter)
380+
yield itertools.chain([next(batchiter)], batchiter)
376381

377382
if batch_size == 0:
378383
# Terminate all at once

marathon/models/base.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,17 @@ def json_repr(self, minimal=False):
1717
:rtype: dict
1818
"""
1919
if minimal:
20-
return {to_camel_case(k):v for k,v in vars(self).iteritems() if (v or v == False)}
20+
return {to_camel_case(k):v for k,v in vars(self).items() if (v or v == False)}
2121
else:
22-
return {to_camel_case(k):v for k,v in vars(self).iteritems()}
22+
return {to_camel_case(k):v for k,v in vars(self).items()}
2323

2424
@classmethod
2525
def from_json(cls, attributes):
2626
"""Construct an object from a parsed response.
2727
2828
:param dict attributes: object attributes from parsed response
2929
"""
30-
return cls(**{to_snake_case(k): v for k,v in attributes.iteritems()})
30+
return cls(**{to_snake_case(k): v for k,v in attributes.items()})
3131

3232
def to_json(self, minimal=True):
3333
"""Encode an object as a JSON string.
@@ -47,7 +47,7 @@ class MarathonResource(MarathonObject):
4747
"""Base Marathon resource."""
4848

4949
def __repr__(self):
50-
if 'id' in vars(self).keys():
50+
if 'id' in list(vars(self).keys()):
5151
return "{clazz}::{id}".format(clazz=self.__class__.__name__, id=self.id)
5252
else:
5353
return "{clazz}::{obj}".format(clazz=self.__class__.__name__, obj=self.to_json())

marathon/util.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ def default(self, obj):
1919
if isinstance(obj, datetime.datetime):
2020
return obj.isoformat()
2121

22-
if isinstance(obj, collections.Iterable) and not isinstance(obj, types.StringTypes):
22+
if isinstance(obj, collections.Iterable) and not isinstance(obj, str):
2323
try:
24-
return {k: self.default(v) for k,v in obj.iteritems()}
24+
return {k: self.default(v) for k,v in obj.items()}
2525
except AttributeError:
2626
return [self.default(e) for e in obj]
2727

@@ -38,9 +38,9 @@ def default(self, obj):
3838
if isinstance(obj, datetime.datetime):
3939
return obj.isoformat()
4040

41-
if isinstance(obj, collections.Iterable) and not isinstance(obj, types.StringTypes):
41+
if isinstance(obj, collections.Iterable) and not isinstance(obj, str):
4242
try:
43-
return {k: self.default(v) for k,v in obj.iteritems() if (v or v == False)}
43+
return {k: self.default(v) for k,v in obj.items() if (v or v == False)}
4444
except AttributeError:
4545
return [self.default(e) for e in obj if (e or e == False)]
4646

0 commit comments

Comments
 (0)