diff --git a/rowers/tasks.py b/rowers/tasks.py index 9312ffed..e51383e2 100644 --- a/rowers/tasks.py +++ b/rowers/tasks.py @@ -82,16 +82,26 @@ import rowers.rowing_workout_metrics_pb2 as metrics_pb2 import rowers.rowing_workout_metrics_pb2_grpc as metrics_pb2_grpc from django.conf import settings -SITE_URL = settings.SITE_URL -SITE_URL_DEV = settings.SITE_URL -PROGRESS_CACHE_SECRET = settings.PROGRESS_CACHE_SECRET -SETTINGS_NAME = settings.SETTINGS_NAME -UPLOAD_SERVICE_URL = settings.UPLOAD_SERVICE_URL -UPLOAD_SERVICE_SECRET = settings.UPLOAD_SERVICE_SECRET -NK_API_LOCATION = settings.NK_API_LOCATION -TP_CLIENT_ID = settings.TP_CLIENT_ID -TP_CLIENT_SECRET = settings.TP_CLIENT_SECRET +# extra read of config + +SITE_URL = CFG['site_url'] +SITE_URL_DEV = CFG['site_url'] +PROGRESS_CACHE_SECRET = CFG['progress_cache_secret'] +SETTINGS_NAME = CFG['settings_name'] + +try: + UPLOAD_SERVICE_URL = CFG['upload_service_url'] +except KeyError: # pragma: no cover + UPLOAD_SERVICE_URL = "http://localhost:8000/rowers/workout/api/upload/" +try: + UPLOAD_SERVICE_SECRET = CFG['upload_service_secret'] +except KeyError: # pragma: no cover + UPLOAD_SERVICE_SECRET = "FoYezZWLSyfAVimumpHEeYsJjsNCerxV" + +NK_API_LOCATION = CFG["nk_api_location"] +TP_CLIENT_ID = CFG["tp_client_id"] +TP_CLIENT_SECRET = CFG["tp_client_secret"] from requests_oauthlib import OAuth1, OAuth1Session @@ -1204,7 +1214,10 @@ def handle_calctrimp(id, if hrtss > 1000: # pragma: no cover hrtss = 0 - workout = Workout.objects.get(id=id) + try: + workout = Workout.objects.get(id=id) + except Workout.DoesNotExist: + return 0 workout.rscore = int(tss) workout.normp = int(normp) workout.trimp = int(trimp) diff --git a/rowers/views/apiviews.py b/rowers/views/apiviews.py index 7b04389b..06745200 100644 --- a/rowers/views/apiviews.py +++ b/rowers/views/apiviews.py @@ -125,9 +125,7 @@ def strokedatajson_v2(request, id): if request.method == 'GET': columns = ['spm', 'time', 'hr', 'pace', 'power', 'distance'] datadf = dataprep.getsmallrowdata_db(columns, ids=[id]) - with open('apilog.log', 'a') as logfile: - logfile.write(str(timezone.now())+": ") - logfile.write(request.user.username+"(strokedatajson_v2 GET) \n") + dologging('apilog.log',request.user.username+"(strokedatajson_v2 GET)") data = datadf.to_json(orient='records') data2 = json.loads(data) @@ -136,22 +134,16 @@ def strokedatajson_v2(request, id): return JSONResponse(data2) if request.method == 'POST': - with open('apilog.log', 'a') as logfile: - logfile.write(str(timezone.now())+": ") - logfile.write(request.user.username+" (strokedatajson_v2 POST) \n") + dologging('apilog.log',request.user.username+" (strokedatajson_v2 POST)") + try: + for d in request.data['data']: + dologging('apilog.log',json.dumps(d)) + except KeyError: try: - for d in request.data['data']: - logfile.write(json.dumps(d)) - logfile.write("\n") - except KeyError: # pragma: no cover - try: - for d in request.data['strokedata']: - logfile.write(json.dumps(d)) - logfile.write("\n") - except KeyError: - logfile.write("No data in request.data\n") - except (AttributeError, TypeError): # pragma: no cover - logfile.write("No data in request\n") + for d in request.data['strokedata']: + dologging('apilog.log',json.dumps(d)) + except KeyError: + dologging('apilog.log','No data in request.data') checkdata, r = dataprep.getrowdata_db(id=row.id) if not checkdata.empty: # pragma: no cover return HttpResponse("Duplicate Error", status=409) @@ -272,10 +264,7 @@ def strokedatajson_v2(request, id): starttime = totimestamp(row.startdatetime)+time[0] unixtime = starttime+time - with open('apilog.log', 'a') as logfile: - logfile.write(str(arrow.get(starttime).datetime)+": ") - logfile.write(request.user.username + - "(strokedatajson_v2 POST - data parsed) \r\n") + dologging('apilog.log',"(strokedatajson_v2 POST - data parsed)") data = pd.DataFrame({'TimeStamp (sec)': unixtime, ' Horizontal (meters)': distance, @@ -355,10 +344,7 @@ def strokedatajson_v2(request, id): _ = uploads.do_sync(row, {}, quick=True) - with open('apilog.log', 'a') as logfile: - logfile.write(str(timezone.now())+": ") - logfile.write(request.user.username + - " (strokedatajson_v2 POST completed successfully) \n") + dologging('apilog.log'," (strokedatajson_v2 POST completed successfully)") return(JsonResponse( {"workout public id": encoder.encode_hex(row.id), @@ -393,15 +379,11 @@ def strokedatajson(request, id=0): # currently only returns a subset. columns = ['spm', 'time', 'hr', 'pace', 'power', 'distance'] datadf = dataprep.getsmallrowdata_db(columns, ids=[id]) - with open('apilog.log', 'a') as logfile: - logfile.write(str(timezone.now())+": ") - logfile.write(request.user.username+"(strokedatajson GET) \n") + dologging("apilog.log",request.user.username+"(strokedatajson GET) ") return JSONResponse(datadf) if request.method == 'POST': - with open('apilog.log', 'a') as logfile: - logfile.write(str(timezone.now())+": ") - logfile.write(request.user.username+"(strokedatajson POST) \n") + dologging("apilog.log",request.user.username+"(strokedatajson POST)") checkdata, r = dataprep.getrowdata_db(id=row.id) if not checkdata.empty: # pragma: no cover return HttpResponse("Duplicate Error", status=409) @@ -461,9 +443,7 @@ def strokedatajson(request, id=0): starttime = totimestamp(row.startdatetime)+time[0] unixtime = starttime+time - with open('apilog.log', 'a') as logfile: - logfile.write(str(starttime)+": ") - logfile.write(request.user.username+"(POST) \r\n") + dologging("apilog.log",request.user.username+"(POST)") data = pd.DataFrame({'TimeStamp (sec)': unixtime, ' Horizontal (meters)': distance, diff --git a/rowers/views/importviews.py b/rowers/views/importviews.py index 3a1c509a..0989ff7c 100644 --- a/rowers/views/importviews.py +++ b/rowers/views/importviews.py @@ -56,7 +56,7 @@ def workout_tp_upload_view(request, id=0): check_tp_workout_id, w, headers['Location']) - + messages.info(request, 'Uploaded to TrainingPeaks') else: # pragma: no cover # no tcxfile @@ -1316,11 +1316,7 @@ def strava_webhook_view(request): # logging t = time.localtime() timestamp = time.strftime('%b-%d-%Y_%H%M', t) - with open('strava_webhooks.log', 'a') as f: - f.write('\n') - f.write(timestamp) - f.write(' ') - f.write(str(request.body)) + dologging("strava_webhooks.log",request.body) # POST - does nothing so far data = json.loads(request.body) @@ -1331,11 +1327,7 @@ def strava_webhook_view(request): _ = data['event_time'] except KeyError: # pragma: no cover timestamp = time.strftime('%b-%d-%Y_%H%M', t) - with open('strava_webhooks.log', 'a') as f: - f.write('\n') - f.write(timestamp) - f.write(' ') - f.write('KeyError line 1038') + dologging("strava_webhooks.log","KeyError line 1330") return HttpResponse(status=200) if object_type == 'activity': @@ -1396,11 +1388,7 @@ def strava_webhook_view(request): updates = data['updates'] stravaid = data['object_id'] except KeyError: # pragma: no cover - with open('strava_webhooks.log', 'a') as f: - f.write('\n') - f.write(timestamp) - f.write(' ') - f.write('KeyError line 10576') + dologging("strava_webhooks.log","KeyError line 1391") return HttpResponse(status=200) try: ws = Workout.objects.filter(uploadedtostrava=stravaid) @@ -1408,21 +1396,14 @@ def strava_webhook_view(request): return HttpResponse(status=200) except Workout.DoesNotExist: # pragma: no cover timestamp = time.strftime('%b-%d-%Y_%H%M', t) - with open('strava_webhooks.log', 'a') as f: - f.write('\n') - f.write(timestamp) - f.write(' ') - f.write('Workout not found') + dologging("strava_webhooks.log","workout not found") + return HttpResponse(status=200) try: r = Rower.objects.get(strava_owner_id=strava_owner) except Rower.DoesNotExist: # pragma: no cover timestamp = time.strftime('%b-%d-%Y_%H%M', t) - with open('strava_webhooks.log', 'a') as f: - f.write('\n') - f.write(timestamp) - f.write(' ') - f.write('Rower not found') + dologging("strava_webhooks.log","Rower not found") return HttpResponse(status=200) except MultipleObjectsReturned: # pragma: no cover rs = Rower.objects.filter(strava_owner_id=strava_owner) @@ -1438,11 +1419,7 @@ def strava_webhook_view(request): w.workouttype = mytypes.stravamappinginv[value] w.save() except KeyError: # pragma: no cover - with open('strava_webhooks.log', 'a') as f: - f.write('\n') - f.write(timestamp) - f.write(' ') - f.write('Workout type not found: '+str(value)) + dologging("strava_webhooks.log","Workout type not found") return HttpResponse(status=200) return HttpResponse(status=200) @@ -1457,12 +1434,7 @@ def garmin_summaries_view(request): # pragma: no cover t = time.localtime() timestamp = time.strftime('%b-%d-%Y_%H%M', t) - with open('garminlog.log', 'a') as f: - f.write('\n') - f.write(timestamp) - f.write(' ') - f.write(str(request.body)) - f.write('\n') + dologging("garminlog.log",request.body) # POST request data = json.loads(request.body) activities = data['activities'] diff --git a/rowers/views/paymentviews.py b/rowers/views/paymentviews.py index ec4bc8ec..5275de32 100644 --- a/rowers/views/paymentviews.py +++ b/rowers/views/paymentviews.py @@ -11,11 +11,7 @@ from rowers import credits @csrf_exempt def braintree_webhook_view(request): - with open('braintreewebhooks.log', 'a') as f: - t = time.localtime() - timestamp = time.strftime('%b-%d-%Y_%H%M', t) - f.write('\n') - f.write(timestamp+' /rowers/braintree/\n') + dologging('braintreewebhooks.log',' /rowers/braintree/') if request.method == 'POST': result = braintreestuff.webhook(request) if result == 4: # pragma: no cover