Skip to content

Commit

Permalink
Support Python 2 and 3
Browse files Browse the repository at this point in the history
  • Loading branch information
kevinschoon committed Jun 1, 2015
1 parent 4f5c299 commit efbaa67
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 20 deletions.
29 changes: 17 additions & 12 deletions marathon/client.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
import itertools
import time
import urlparse
import sys

try:
import json
except ImportError:
import simplejson as json
try:
from urllib2 import HTTPError
except ImportError:

# Support Python 2 & 3

if sys.version_info[0] == 3:
import urllib.parse as urlparse
from urllib.error import HTTPError
else:
import urlparse
from urllib2 import HTTPError

import requests
import requests.exceptions
Expand Down Expand Up @@ -63,7 +68,7 @@ def _do_request(self, method, path, params=None, data=None):
response = requests.request(method, url, params=params, data=data, headers=headers,
auth=self.auth, timeout=self.timeout)
marathon.log.info('Got response from %s', server)
except requests.exceptions.RequestException, e:
except requests.exceptions.RequestException as e:
marathon.log.error('Error while calling %s: %s', url, e.message)

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

response = self._do_request('GET', '/v2/apps', params=params)
apps = self._parse_response(response, MarathonApp, is_list=True, resource_name='apps')
for k, v in kwargs.iteritems():
apps = filter(lambda o: getattr(o, k) == v, apps)
for k, v in kwargs.items():
apps = [o for o in apps if getattr(o, k) == v]
return apps

def get_app(self, app_id, embed_tasks=False):
Expand Down Expand Up @@ -254,8 +259,8 @@ def list_groups(self, **kwargs):
"""
response = self._do_request('GET', '/v2/groups')
groups = self._parse_response(response, MarathonGroup, is_list=True, resource_name='groups')
for k, v in kwargs.iteritems():
groups = filter(lambda o: getattr(o, k) == v, groups)
for k, v in kwargs.items():
groups = [o for o in groups if getattr(o, k) == v]
return groups

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

tasks = self._parse_response(response, MarathonTask, is_list=True, resource_name='tasks')
[setattr(t, 'app_id', app_id) for t in tasks if app_id and t.app_id is None]
for k, v in kwargs.iteritems():
tasks = filter(lambda o: getattr(o, k) == v, tasks)
for k, v in kwargs.items():
tasks = [o for o in tasks if getattr(o, k) == v]

return tasks

Expand All @@ -372,7 +377,7 @@ def batch(iterable, size):
sourceiter = iter(iterable)
while True:
batchiter = itertools.islice(sourceiter, size)
yield itertools.chain([batchiter.next()], batchiter)
yield itertools.chain([next(batchiter)], batchiter)

if batch_size == 0:
# Terminate all at once
Expand Down
8 changes: 4 additions & 4 deletions marathon/models/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,17 +17,17 @@ def json_repr(self, minimal=False):
:rtype: dict
"""
if minimal:
return {to_camel_case(k):v for k,v in vars(self).iteritems() if (v or v == False)}
return {to_camel_case(k):v for k,v in vars(self).items() if (v or v == False)}
else:
return {to_camel_case(k):v for k,v in vars(self).iteritems()}
return {to_camel_case(k):v for k,v in vars(self).items()}

@classmethod
def from_json(cls, attributes):
"""Construct an object from a parsed response.
:param dict attributes: object attributes from parsed response
"""
return cls(**{to_snake_case(k): v for k,v in attributes.iteritems()})
return cls(**{to_snake_case(k): v for k,v in attributes.items()})

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

def __repr__(self):
if 'id' in vars(self).keys():
if 'id' in list(vars(self).keys()):
return "{clazz}::{id}".format(clazz=self.__class__.__name__, id=self.id)
else:
return "{clazz}::{obj}".format(clazz=self.__class__.__name__, obj=self.to_json())
Expand Down
8 changes: 4 additions & 4 deletions marathon/util.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ def default(self, obj):
if isinstance(obj, datetime.datetime):
return obj.isoformat()

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

Expand All @@ -38,9 +38,9 @@ def default(self, obj):
if isinstance(obj, datetime.datetime):
return obj.isoformat()

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

Expand Down

0 comments on commit efbaa67

Please sign in to comment.