Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 13 additions & 9 deletions healthgraph/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,15 +78,19 @@ def parse_distance_km(val):

def parse_resource_dict(prop_defs, data):
prop_dict = dict([(k, None) for k in prop_defs])
for k,v in data.items():
if prop_defs.has_key(k):
action = prop_defs[k]
if action is None or v is None:
prop_dict[k] = v
elif callable(action):
prop_dict[k] = action(v)
else:
pass
if data is not None:
for k,v in data.items():
if prop_defs.has_key(k):
action = prop_defs[k]
if action is None or v is None:
prop_dict[k] = v
elif callable(action):
prop_dict[k] = action(v)
else:
pass
else:
prop_dict['items'] = []
prop_dict['size'] = 0
return prop_dict

def parse_date_param(val):
Expand Down
48 changes: 33 additions & 15 deletions healthgraph/resources.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,12 @@ def __init__(self, session=None):
else:
self._session = sessionmgr.get_session()

def _get_resource_data(self, resource, content_type, params=None):
resp = self._session.get(resource, content_type, params)
return resp.json() # TODO - Error Checking
def _get_resource_data(self, resource, content_type, params=None, modified_since=None):
resp = self._session.get(resource, content_type, params, modified_since)
if resp.status_code == sessionmgr.requests.codes.ok:
return resp.json() # TODO - Error Checking
return None


def _get_linked_resource(self, link, cls_override=None, **kwargs):
if link is not None:
Expand Down Expand Up @@ -120,10 +123,10 @@ class BaseResource(APIobject):

_content_type = None

def __init__(self, resource = None, session=None, params=None):
def __init__(self, resource = None, session=None, params=None, modified_since=None):
super(BaseResource,self).__init__(session=session)
self._resource = resource
self.load(params)
self.load(params, modified_since)

@property
def resource(self):
Expand All @@ -133,10 +136,10 @@ def resource(self):
def content_type(self):
return self._content_type

def load(self, params=None):
def load(self, params=None, modified_since=None):
if self._resource is not None:
data = self._get_resource_data(self._resource, self._content_type,
params)
params, modified_since)
self._prop_dict = self._parse_data(data)

def _parse_data(self, data):
Expand Down Expand Up @@ -202,8 +205,8 @@ def __init__(self, data=None):

class Resource(BaseResource, ContainerMixin):

def __init__(self, resource = None, params=None, session=None):
super(Resource, self).__init__(resource, params=params, session=session)
def __init__(self, resource = None, params=None, session=None, modified_since=None):
super(Resource, self).__init__(resource, params=params, session=session, modified_since=modified_since)


class ResourceFeedIter(BaseResource):
Expand All @@ -219,7 +222,8 @@ def __init__(self, resource,
date_min=None, date_max=None,
mod_date_min=None, mod_date_max=None,
descending=True,
session=None):
session=None,
modified_since=None):
func_params = locals()
params = {'pageSize': settings.DEFAULT_PAGE_SIZE,}
for func_key, api_key in (('date_min', 'noEarlierThan'),
Expand All @@ -230,7 +234,7 @@ def __init__(self, resource,
if val is not None:
params[api_key] = val
super(ResourceFeedIter, self).__init__(resource, params=params,
session=session)
session=session, modified_since=modified_since)
self._descending = descending
if descending:
self._iter = iter(self._prop_dict['items'])
Expand Down Expand Up @@ -339,13 +343,15 @@ def get_records(self):
def get_fitness_activity_iter(self,
date_min=None, date_max=None,
mod_date_min=None, mod_date_max=None,
descending=True):
descending=True,
modified_since=None):
return self._get_linked_resource(self._prop_dict['fitness_activities'],
date_min=date_min,
date_max=date_max,
mod_date_min=mod_date_min,
mod_date_max=mod_date_max,
descending=descending)
descending=descending,
modified_since=modified_since)

def get_strength_activity_iter(self,
date_min=None, date_max=None,
Expand Down Expand Up @@ -506,7 +512,10 @@ class FitnessActivity(Resource):
'is_live': parse_bool,
'path': ArrayPath,
'images': ArrayImages,
'share': None,
'share_map': None,
'source': None,
'entry_mode': None,
'activity': None,
'comments': PropResourceLink('CommentThread'),
'previous': PropResourceLink('FitnessActivity'),
Expand Down Expand Up @@ -559,7 +568,10 @@ class FitnessActivitySummary(Resource):
'climb': None,
'notes': None,
'is_live': parse_bool,
'share': None,
'share_map': None,
'source': None,
'entry_mode': None,
'activity': None,
}
_prop_main = ('type', 'start_time',)
Expand All @@ -577,6 +589,10 @@ class FitnessActivityFeedItem(FeedItem):
'type': None,
'duration': None,
'total_distance': parse_distance,
'total_calories': None,
'has_path': parse_bool,
'entry_mode': None,
'source': None,
'uri': PropResourceLink('FitnessActivity'),
}
_prop_main = ('type', 'start_time',)
Expand All @@ -600,14 +616,16 @@ def __init__(self, resource,
date_min=None, date_max=None,
mod_date_min=None, mod_date_max=None,
descending=True,
session=None):
session=None,
modified_since=None):
super(FitnessActivityIter, self).__init__(resource,
date_min=date_min,
date_max=date_max,
mod_date_min=mod_date_min,
mod_date_max=mod_date_max,
descending=descending,
session=session)
session=session,
modified_since = modified_since)


class StrengthActivityFeedItem(FeedItem):
Expand Down
11 changes: 8 additions & 3 deletions healthgraph/sessionmgr.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@
import requests
import exceptions
import settings
from time import mktime
from datetime import datetime
from wsgiref.handlers import format_date_time
import pdb


__author__ = "Ali Onur Uyar"
Expand All @@ -27,8 +31,9 @@ def __init__(self, access_token):
self._access_token = access_token

def request(self, request_type, resource, content_type=None,
params=None, data=None):
params=None, data=None, modified_since=None):
headers = {'Authorization': "Bearer %s" % self._access_token,}
headers['If-Modified-Since'] = modified_since
content_header = None
if content_type is not None:
if request_type == 'GET':
Expand All @@ -45,8 +50,8 @@ def request(self, request_type, resource, content_type=None,
params=params, data=data)
return req

def get(self, resource, content_type=None, params=None):
return self.request('GET', resource, content_type, params=params)
def get(self, resource, content_type=None, params=None, modified_since=None):
return self.request('GET', resource, content_type, params=params, modified_since=modified_since)

def post(self, resource, content_type=None, data=None):
return self.request('POST', resource, content_type, data=data)
Expand Down
Empty file modified setup.py
100644 → 100755
Empty file.