Private
Public Access
1
0

polar passing tests

This commit is contained in:
Sander Roosendaal
2023-02-18 17:16:54 +01:00
parent 3373081b42
commit 3420da47d7
9 changed files with 565 additions and 110 deletions

View File

@@ -76,21 +76,8 @@ def rower_garmin_authorize(request): # pragma: no cover
# Polar Authorization
@login_required()
def rower_polar_authorize(request): # pragma: no cover
state = str(uuid4())
params = {"client_id": POLAR_CLIENT_ID,
"response_type": "code",
# "redirect_uri": POLAR_REDIRECT_URI,
"state": state,
# "scope":"accesslink.read_all"
}
url = "https://flow.polar.com/oauth2/authorization?" + \
urllib.parse.urlencode(params)
dologging('polar.log', 'Authorizing')
dologging('polar.log', url)
dologging('polar.log', params)
integration = importsources['polar'](request.user)
url = integration.make_authorization_url()
return HttpResponseRedirect(url)
@login_required()
@@ -166,8 +153,9 @@ def rower_process_twittercallback(request): # pragma: no cover
@login_required()
def rower_process_polarcallback(request):
integration = importsources['polar'](request.user)
error = request.GET.get('error', 'no error')
dologging('polar.log', 'Callback: {error}'.format(error=error))
if error != 'no error': # pragma: no cover
messages.error(request, error)
@@ -188,7 +176,7 @@ def rower_process_polarcallback(request):
return HttpResponseRedirect(url)
access_token, expires_in, user_id = polarstuff.get_token(code)
access_token, expires_in, user_id = integration.get_token(code)
expirydatetime = timezone.now()+datetime.timedelta(seconds=expires_in)
r = getrower(request.user)
r.polartoken = access_token
@@ -198,12 +186,28 @@ def rower_process_polarcallback(request):
r.save()
if user_id:
polar_user_data = polarstuff.register_user(request.user, access_token)
polar_user_data = integration.register_user(access_token)
else: # pragma: no cover
messages.error(request, 'Polar Flow Authorization Failed')
url = reverse('rower_exportsettings_view')
return HttpResponseRedirect(url)
try:
error = polar_user_data['error']
if error['error_type'] == 'user_already_registered':
s = error['message']
tester = re.compile(r'.*userid:(?P<id>\d+)')
testresult = tester.match(s)
if testresult:
user_id2 = testresult.group('id')
if user_id2 == str(user_id):
messages.info(request,
"Tokens stored. Good to go. Please check your import/export settings")
url = reverse('rower_exportsettings_view')
return HttpResponseRedirect(url)
except KeyError:
pass
try:
user_id2 = polar_user_data['polar-user-id']
except KeyError: # pragma: no cover
@@ -942,64 +946,6 @@ def garmin_details_view(request):
return HttpResponse(status=200)
# the page where you select which Polar workout to Import
@login_required()
@permission_required('rower.is_coach', fn=get_user_by_userid, raise_exception=True)
@permission_required('rower.is_not_freecoach', fn=get_user_by_userid, raise_exception=True)
def workout_polarimport_view(request, userid=0): # pragma: no cover
exercises = polarstuff.get_polar_workouts(request.user)
workouts = []
try:
a = exercises.status_code
if a == 401:
messages.error(
request, 'Not authorized. You need to connect to Polar first')
url = reverse('workouts_view')
return HttpResponseRedirect(url)
except: # pragma: no cover
exercises = []
pass
for exercise in exercises:
try:
d = exercise['distance']
except KeyError:
d = 0
i = exercise['id']
transactionid = exercise['transaction-id']
starttime = exercise['start-time']
rowtype = exercise['sport']
durationstring = exercise['duration']
duration = isodate.parse_duration(durationstring)
keys = ['id', 'distance', 'duration',
'starttime', 'type', 'transactionid']
values = [i, d, duration, starttime, rowtype, transactionid]
res = dict(zip(keys, values))
workouts.append(res)
breadcrumbs = [
{
'url': '/rowers/list-workouts/',
'name': 'Workouts'
},
{
'url': reverse('workout_polarimport_view'),
'name': 'Polar'
},
]
r = getrower(request.user)
return render(request, 'polar_list_import.html',
{
'workouts': workouts,
'active': 'nav-workouts',
'rower': r,
'breadcrumbs': breadcrumbs,
'teams': get_my_teams(request.user),
})
importauthorizeviews = {
'c2': 'rower_integration_authorize',

View File

@@ -200,7 +200,6 @@ import rowers.rojabo_stuff as rojabo_stuff
import rowers.garmin_stuff as garmin_stuff
from rowers.rojabo_stuff import rojabo_open
import rowers.polarstuff as polarstuff
from rowers.integrations import *