diff --git a/firebase/__init__.py b/firebase/__init__.py index 81e94a6..249ef35 100644 --- a/firebase/__init__.py +++ b/firebase/__init__.py @@ -2,11 +2,23 @@ import urlparse #for urlparse and urljoin import os #for os.path.dirname import json #for dumps - - +import datetime #for parse datetime object to string +import decimal #for parse decimal to string + +class JSONEncoder(json.JSONEncoder): + def default(self, obj): + if isinstance(obj, datetime.datetime): + return obj.isoformat() + elif isinstance(obj, datetime.timedelta): + return total_seconds(obj) + elif isinstance(obj, decimal.Decimal): + return float(obj) + else: + return json.JSONEncoder.default(self, obj) class Firebase(): ROOT_URL = '' #no trailing slash + auth_token = None def __init__(self, root_url, auth_token=None): self.ROOT_URL = root_url.rstrip('/') @@ -16,8 +28,8 @@ def __init__(self, root_url, auth_token=None): def child(self, path): root_url = '%s/' % self.ROOT_URL - url = urlparse.urljoin(root_url, path.lstrip('/')) - return Firebase(url) + url = urlparse.urljoin(root_url, str(path).lstrip('/')) + return Firebase(url, auth_token=self.auth_token) def parent(self): url = os.path.dirname(self.ROOT_URL) @@ -25,7 +37,7 @@ def parent(self): up = urlparse.urlparse(url) if up.path == '': return None #maybe throw exception here? - return Firebase(url) + return Firebase(url, auth_token=self.auth_token) def name(self): return os.path.basename(self.ROOT_URL) @@ -75,7 +87,7 @@ def __request(self, method, **kwargs): #Firebase API does not accept form-encoded PUT/POST data. It needs to #be JSON encoded. if 'data' in kwargs: - kwargs['data'] = json.dumps(kwargs['data']) + kwargs['data'] = json.dumps(kwargs['data'], cls=JSONEncoder) params = {} if self.auth_token: diff --git a/requirements.txt b/requirements.txt index 679d575..bc3a7ce 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1 +1 @@ -requests >=1.2.0,<1.2.99 +requests >=1.2.0 diff --git a/setup.py b/setup.py index b4195e0..3f113ab 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ author = 'Michael Huynh', author_email = 'mike@mikexstudios.com', url = 'http://github.com/mikexstudios/python-firebase', - install_requires = ['requests >=1.2.0,<1.2.99'], + install_requires = ['requests >=1.2.0'], classifiers = [ 'Programming Language :: Python', 'License :: OSI Approved :: BSD License',