Introducing convert_datetime function

Starting from an JSON object, find and replace the _create and _updated
keys with actual datetime objects.
This commit is contained in:
2015-10-20 13:03:34 +02:00
parent 9a6af611da
commit c1ff4ba9bb
3 changed files with 25 additions and 5 deletions

View File

@@ -30,7 +30,9 @@ class Node(List, Find, Create, Post, Update, Delete, Replace):
url = utils.join_url(cls.path, str(resource_id))
if params:
url = utils.join_url_params(url, params)
return cls(api.get(url))
item = utils.convert_datetime(api.get(url))
return cls(item)
@classmethod
def find_one(cls, params, api=None):
@@ -46,7 +48,8 @@ class Node(List, Find, Create, Post, Update, Delete, Replace):
response = api.get(url)
# Keep the response a dictionary, and cast it later into an object.
if response['_items']:
return cls(response['_items'][0])
item = utils.convert_datetime(response['_items'][0])
return cls(item)
else:
raise ResourceNotFound(response)

View File

@@ -1,4 +1,5 @@
import uuid
from datetime import datetime
from . import utils
from .api import Api
@@ -112,7 +113,8 @@ class Find(Resource):
api = api or Api.Default()
url = utils.join_url(cls.path, str(resource_id))
return cls(api.get(url))
item = utils.convert_datetime(api.get(url))
return cls(item)
@classmethod
def find_first(cls, params, api=None):
@@ -135,7 +137,7 @@ class Find(Resource):
response = api.get(url)
res = cls(response)
if res._items:
return res._items[0]
return utils.convert_datetime(res._items[0])
else:
return None
@@ -153,7 +155,7 @@ class Find(Resource):
response = api.get(url)
# Keep the response a dictionary, and cast it later into an object.
if response['_items']:
return cls(response['_items'][0])
return cls(utils.convert_datetime(response['_items'][0]))
else:
raise ResourceNotFound(response)
@@ -183,6 +185,8 @@ class List(Resource):
try:
response = api.get(url)
for item in response['_items']:
item = utils.convert_datetime(item)
return cls.list_class(response)
except AttributeError:
# To handle the case when response is JSON Array

View File

@@ -1,4 +1,5 @@
import re
from datetime import datetime
try:
from urllib.parse import urlencode
@@ -44,3 +45,15 @@ def merge_dict(data, *override):
for current_dict in (data,) + override:
result.update(current_dict)
return result
def convert_datetime(item):
"""Starting from an JSON object, find and replace the _create and _updated
keys with actual datetime objects.
"""
keys = ['_updated', '_created']
for k in keys:
item[k] = datetime.strptime(item[k], "%a, %d %b %Y %H:%M:%S %Z")
return item