Skip to content

Commit dc83415

Browse files
committed
Changes needed to make data pulling work correctly.
1 parent f150038 commit dc83415

File tree

3 files changed

+28
-22
lines changed

3 files changed

+28
-22
lines changed

fitapp/tasks.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
import logging
22
import random
3+
import sys
4+
import datetime
5+
import time
36

47
from celery import shared_task
58
from celery.exceptions import Ignore, Reject
69
from dateutil import parser
710
from django.core.cache import cache
811
from django.db import transaction
12+
from django.utils.timezone import utc
913
from fitbit.exceptions import HTTPBadRequest, HTTPTooManyRequests
1014

1115
from . import utils
@@ -57,13 +61,13 @@ def get_time_series_data(self, fitbit_user, cat, resource, date=None):
5761
resource, cat))
5862
raise Reject(e, requeue=False)
5963

60-
# Create a lock so we don't try to run the same task multiple times
61-
sdat = date.strftime('%Y-%m-%d') if date else 'ALL'
62-
lock_id = '{0}-lock-{1}-{2}-{3}'.format(__name__, fitbit_user, _type, sdat)
63-
if not cache.add(lock_id, 'true', LOCK_EXPIRE):
64-
logger.debug('Already retrieving %s data for date %s, user %s' % (
65-
_type, fitbit_user, sdat))
66-
raise Ignore()
64+
# # Create a lock so we don't try to run the same task multiple times
65+
# sdat = date.strftime('%Y-%m-%d') if date else 'ALL'
66+
# lock_id = '{0}-lock-{1}-{2}-{3}'.format(__name__, fitbit_user, _type, sdat)
67+
# if not cache.add(lock_id, 'true', LOCK_EXPIRE):
68+
# logger.debug('Already retrieving %s data for date %s, user %s' % (
69+
# _type, fitbit_user, sdat))
70+
# raise Ignore()
6771

6872
try:
6973
with transaction.atomic():
@@ -108,7 +112,8 @@ def get_time_series_data(self, fitbit_user, cat, resource, date=None):
108112
raise Reject(e, requeue=False)
109113

110114

111-
def get_intraday_data(fitbit_user, cat, resource, date, tz_offset, start_time=None, end_time=None):
115+
@shared_task(bind=True)
116+
def get_intraday_data(self, fitbit_user, cat, resource, date, tz_offset, start_time=None, end_time=None):
112117
"""
113118
Get the user's intraday data for a specified date, convert to UTC prior to
114119
saving.
@@ -128,14 +133,15 @@ def get_intraday_data(fitbit_user, cat, resource, date, tz_offset, start_time=No
128133
raise Reject(sys.exc_info()[1], requeue=False)
129134

130135
# Create a lock so we don't try to run the same task multiple times
131-
sdat = date.strftime('%Y-%m-%d')
136+
# sdat = date.strftime('%Y-%m-%d')
132137

133138
fbusers = UserFitbit.objects.filter(fitbit_user=fitbit_user)
134139
dates = {'base_date': date, 'period': '1d'}
135140
try:
136141
with transaction.atomic():
137142
for fbuser in fbusers:
138-
data = utils.get_fitbit_data(fbuser, _type, return_all=True, start_time=start_time, end_time=end_time,
143+
data = utils.get_fitbit_data(fbuser, _type, start_time=start_time,
144+
end_time=end_time,
139145
**dates)
140146
resource_path = _type.path().replace('/', '-')
141147
key = resource_path + "-intraday"
@@ -146,8 +152,8 @@ def get_intraday_data(fitbit_user, cat, resource, date, tz_offset, start_time=No
146152
intraday = data[key]['dataset']
147153
logger.info("Date for intraday task: {}".format(date))
148154
for minute in intraday:
149-
datetime = parser.parse(minute['time'], default=date)
150-
utc_datetime = datetime + timedelta(hours=tz_offset)
155+
date_time = parser.parse(date[:10] + ' ' + minute['time'])
156+
utc_datetime = date_time + datetime.timedelta(hours=tz_offset)
151157
utc_datetime = utc_datetime.replace(tzinfo=utc)
152158
value = minute['value']
153159
# Don't create unnecessary records

fitapp/utils.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,15 +65,14 @@ def get_fitbit_data(fbuser, resource_type, base_date=None, period=None,
6565
resource_path = resource_type.path()
6666

6767
if get_setting('FITAPP_GET_INTRADAY') and resource_type.intraday_support:
68-
# what is the base date?
68+
base_date = base_date[:10]
6969
data = fb.intraday_time_series(resource_path, base_date=base_date,
7070
start_time=start_time, end_time=end_time)
7171
else:
7272
data = fb.time_series(resource_path, user_id=fbuser.fitbit_user,
7373
period=period, base_date=base_date,
7474
end_date=end_date)
75-
76-
return data[resource_path.replace('/', '-')]
75+
return data
7776

7877

7978
def get_setting(name, use_defaults=True):

fitapp/views.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -272,16 +272,17 @@ def update(request):
272272
)
273273
for i, _type in enumerate(tsdts):
274274
if utils.get_setting('FITAPP_GET_INTRADAY') and _type.intraday_support:
275-
get_intraday_data.apply.async(
276-
(update['ownerId'], _type.category, _type.resource,),
277-
{'date': parser.parse(update['date'])},
275+
date = parser.parse(update['date'])
276+
get_intraday_data.apply_async(
277+
(update['ownerId'], _type.category, _type.resource, date, 0),
278278
countdown=(btw_delay * i))
279279
# Offset each call by a few seconds so they don't bog down
280280
# the server
281-
get_time_series_data.apply_async(
282-
(update['ownerId'], _type.category, _type.resource,),
283-
{'date': parser.parse(update['date'])},
284-
countdown=(btw_delay * i))
281+
else:
282+
get_time_series_data.apply_async(
283+
(update['ownerId'], _type.category, _type.resource,),
284+
{'date': parser.parse(update['date'])},
285+
countdown=(btw_delay * i))
285286
except (KeyError, ValueError, OverflowError):
286287
raise Http404
287288
except ImproperlyConfigured as e:

0 commit comments

Comments
 (0)