Merge branch 'release/v22.7.0'
This commit is contained in:
@@ -310,6 +310,7 @@ class IntervalsIntegration(SyncIntegration):
|
|||||||
# we stop here now
|
# we stop here now
|
||||||
return 1
|
return 1
|
||||||
|
|
||||||
|
# get fit file (not used)
|
||||||
url = self.oauth_data['base_url'] + 'activity/' + str(id) + '/fit-file'
|
url = self.oauth_data['base_url'] + 'activity/' + str(id) + '/fit-file'
|
||||||
response = requests.get(url, headers=headers)
|
response = requests.get(url, headers=headers)
|
||||||
if response.status_code != 200:
|
if response.status_code != 200:
|
||||||
@@ -666,8 +667,6 @@ class IntervalsIntegration(SyncIntegration):
|
|||||||
return 0
|
return 0
|
||||||
|
|
||||||
def delete_activities(self, event, *args, **kwargs):
|
def delete_activities(self, event, *args, **kwargs):
|
||||||
if not self.rower.intervals_auto_delete:
|
|
||||||
return 0
|
|
||||||
try:
|
try:
|
||||||
record = event["activity"]
|
record = event["activity"]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
@@ -678,8 +677,11 @@ class IntervalsIntegration(SyncIntegration):
|
|||||||
try:
|
try:
|
||||||
ws = Workout.objects.filter(uploadedtointervals=id)
|
ws = Workout.objects.filter(uploadedtointervals=id)
|
||||||
for w in ws:
|
for w in ws:
|
||||||
if w.user == self.rower:
|
if w.user == self.rower and self.rower.intervals_delete_workout:
|
||||||
w.delete()
|
w.delete()
|
||||||
|
elif w.user == self.rower:
|
||||||
|
w.uploadedtointervals = None
|
||||||
|
w.save()
|
||||||
except Workout.DoesNotExist:
|
except Workout.DoesNotExist:
|
||||||
pass
|
pass
|
||||||
except KeyError:
|
except KeyError:
|
||||||
|
|||||||
+13
-1
@@ -440,6 +440,18 @@ WORKOUT permissions
|
|||||||
|
|
||||||
# check if user is owner or coach of owner of workout
|
# check if user is owner or coach of owner of workout
|
||||||
|
|
||||||
|
@rules.predicate
|
||||||
|
def is_workout_owner(user, workout):
|
||||||
|
if user.is_anonymous:
|
||||||
|
return False
|
||||||
|
|
||||||
|
try:
|
||||||
|
r = user.rower
|
||||||
|
except AttributeError: # pragma: no cover
|
||||||
|
return False
|
||||||
|
|
||||||
|
return workout.user.user == user
|
||||||
|
|
||||||
|
|
||||||
@rules.predicate
|
@rules.predicate
|
||||||
def is_workout_user(user, workout):
|
def is_workout_user(user, workout):
|
||||||
@@ -507,7 +519,7 @@ can_change_workout = is_workout_user
|
|||||||
rules.add_perm('workout.change_workout', can_change_workout)
|
rules.add_perm('workout.change_workout', can_change_workout)
|
||||||
# replaces checkworkoutuserview
|
# replaces checkworkoutuserview
|
||||||
rules.add_perm('workout.view_workout', can_view_workout)
|
rules.add_perm('workout.view_workout', can_view_workout)
|
||||||
|
rules.add_perm('workout.is_owner', is_workout_owner)
|
||||||
|
|
||||||
# checkviewworkouts
|
# checkviewworkouts
|
||||||
|
|
||||||
|
|||||||
@@ -206,10 +206,22 @@
|
|||||||
{% endfor %}
|
{% endfor %}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<li>
|
</li>
|
||||||
|
{% endif %}
|
||||||
|
{% if apps %}
|
||||||
|
{% for app in apps %}
|
||||||
|
<li class="rounder grid_4">
|
||||||
|
<h2>{{ app.name }}</h2>
|
||||||
|
<p><em>Client ID: </em>{{ app.client_id }}</p>
|
||||||
|
<p><em>Redirect URIs: </em>{{ app.redirect_uris }}</p>
|
||||||
|
<p><em>Client Type: </em>{{ app.client_type }}</p>
|
||||||
|
<p><em>Authorization grant type: </em>{{ app.authorization_grant_type }}</p>
|
||||||
|
<p><em>Allowed origins: </em>{{ app.allowed_origins }}</p>
|
||||||
|
</li>
|
||||||
|
{% endfor %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if user.is_staff %}
|
{% if user.is_staff %}
|
||||||
<li class="rounder">
|
<li class="rounder grid_4">
|
||||||
<h2>Admin</h2>
|
<h2>Admin</h2>
|
||||||
<p><a href="/rowers/me/idokladauthorize/">iDoklad authorize</a></p>
|
<p><a href="/rowers/me/idokladauthorize/">iDoklad authorize</a></p>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -349,6 +349,25 @@ class C2Objects(DjangoTestCase):
|
|||||||
timezone='Europe/Amsterdam'
|
timezone='Europe/Amsterdam'
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.u2 = User.objects.create_user('john2',
|
||||||
|
'ba@ds.ds',
|
||||||
|
'koeinsloot2')
|
||||||
|
self.u2.first_name = 'John'
|
||||||
|
self.u2.last_name = 'Sander2'
|
||||||
|
self.u2.save()
|
||||||
|
self.r2 = Rower.objects.create(user=self.u2,gdproptin=True, ftpset=True,surveydone=True,
|
||||||
|
gdproptindate=timezone.now()
|
||||||
|
)
|
||||||
|
|
||||||
|
self.w2 = Workout.objects.create(
|
||||||
|
name='testworkout',workouttype='water',
|
||||||
|
user=self.r2,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
|
starttime=workoutstarttime,
|
||||||
|
startdatetime=row.rowdatetime,
|
||||||
|
duration=duration,distance=totaldist,
|
||||||
|
csvfilename=filename
|
||||||
|
)
|
||||||
|
|
||||||
def test_timezone_c2(self):
|
def test_timezone_c2(self):
|
||||||
c2integration = C2Integration(self.u)
|
c2integration = C2Integration(self.u)
|
||||||
data = c2integration.createworkoutdata(self.w)
|
data = c2integration.createworkoutdata(self.w)
|
||||||
@@ -411,6 +430,19 @@ class C2Objects(DjangoTestCase):
|
|||||||
|
|
||||||
@patch('rowers.integrations.c2.requests.post', side_effect=mocked_requests)
|
@patch('rowers.integrations.c2.requests.post', side_effect=mocked_requests)
|
||||||
@patch('rowers.integrations.c2.requests.get', side_effect=mocked_requests)
|
@patch('rowers.integrations.c2.requests.get', side_effect=mocked_requests)
|
||||||
|
def test_c2_upload2(self, mock_get, mock_post):
|
||||||
|
url = '/rowers/workout/'+encoded2+'/c2uploadw/'
|
||||||
|
|
||||||
|
response = self.c.get(url)
|
||||||
|
|
||||||
|
self.assertRedirects(response,
|
||||||
|
expected_url = '/rowers/list-workouts/',
|
||||||
|
status_code=302,target_status_code=200)
|
||||||
|
|
||||||
|
self.assertEqual(response.url, '/rowers/list-workouts/')
|
||||||
|
self.assertEqual(response.status_code, 302)
|
||||||
|
@patch('rowers.integrations.c2.requests.post', side_effect=mocked_requests)
|
||||||
|
@patch('rowers.integrations.c2.requests.get', side_effect=mocked_requests)
|
||||||
def test_c2_list(self, mock_get, mock_post):
|
def test_c2_list(self, mock_get, mock_post):
|
||||||
response = self.c.get('/rowers/workout/c2import',follow=True)
|
response = self.c.get('/rowers/workout/c2import',follow=True)
|
||||||
|
|
||||||
@@ -756,6 +788,24 @@ class NKObjects(DjangoTestCase):
|
|||||||
duration=duration,distance=totaldist,
|
duration=duration,distance=totaldist,
|
||||||
csvfilename=filename
|
csvfilename=filename
|
||||||
)
|
)
|
||||||
|
self.u2 = User.objects.create_user('john2',
|
||||||
|
'ba@ds.ds',
|
||||||
|
'koeinsloot2')
|
||||||
|
self.u2.first_name = 'John'
|
||||||
|
self.u2.last_name = 'Sander2'
|
||||||
|
self.u2.save()
|
||||||
|
self.r2 = Rower.objects.create(user=self.u2,gdproptin=True, ftpset=True,surveydone=True,
|
||||||
|
gdproptindate=timezone.now()
|
||||||
|
)
|
||||||
|
|
||||||
|
self.w2 = Workout.objects.create(
|
||||||
|
name='testworkout',workouttype='water',
|
||||||
|
user=self.r2,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
|
starttime=workoutstarttime,
|
||||||
|
startdatetime=row.rowdatetime,
|
||||||
|
duration=duration,distance=totaldist,
|
||||||
|
csvfilename=filename
|
||||||
|
)
|
||||||
|
|
||||||
@patch('rowers.dataprep.create_engine')
|
@patch('rowers.dataprep.create_engine')
|
||||||
@patch('rowers.dataprep.read_data',side_effect=mocked_read_data)
|
@patch('rowers.dataprep.read_data',side_effect=mocked_read_data)
|
||||||
@@ -1025,6 +1075,24 @@ class PolarObjects(DjangoTestCase):
|
|||||||
duration=duration,distance=totaldist,
|
duration=duration,distance=totaldist,
|
||||||
csvfilename=filename
|
csvfilename=filename
|
||||||
)
|
)
|
||||||
|
self.u2 = User.objects.create_user('john2',
|
||||||
|
'ba@ds.ds',
|
||||||
|
'koeinsloot2')
|
||||||
|
self.u2.first_name = 'John'
|
||||||
|
self.u2.last_name = 'Sander2'
|
||||||
|
self.u2.save()
|
||||||
|
self.r2 = Rower.objects.create(user=self.u2,gdproptin=True, ftpset=True,surveydone=True,
|
||||||
|
gdproptindate=timezone.now()
|
||||||
|
)
|
||||||
|
|
||||||
|
self.w2 = Workout.objects.create(
|
||||||
|
name='testworkout',workouttype='water',
|
||||||
|
user=self.r2,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
|
starttime=workoutstarttime,
|
||||||
|
startdatetime=row.rowdatetime,
|
||||||
|
duration=duration,distance=totaldist,
|
||||||
|
csvfilename=filename
|
||||||
|
)
|
||||||
|
|
||||||
@patch('rowers.integrations.polar.requests.post', side_effect=mocked_requests)
|
@patch('rowers.integrations.polar.requests.post', side_effect=mocked_requests)
|
||||||
@patch('rowers.integrations.polar.requests.get', side_effect=mocked_requests)
|
@patch('rowers.integrations.polar.requests.get', side_effect=mocked_requests)
|
||||||
@@ -1118,6 +1186,24 @@ class RP3Objects(DjangoTestCase):
|
|||||||
duration=duration,distance=totaldist,
|
duration=duration,distance=totaldist,
|
||||||
csvfilename=filename
|
csvfilename=filename
|
||||||
)
|
)
|
||||||
|
self.u2 = User.objects.create_user('john2',
|
||||||
|
'ba@ds.ds',
|
||||||
|
'koeinsloot2')
|
||||||
|
self.u2.first_name = 'John'
|
||||||
|
self.u2.last_name = 'Sander2'
|
||||||
|
self.u2.save()
|
||||||
|
self.r2 = Rower.objects.create(user=self.u2,gdproptin=True, ftpset=True,surveydone=True,
|
||||||
|
gdproptindate=timezone.now()
|
||||||
|
)
|
||||||
|
|
||||||
|
self.w2 = Workout.objects.create(
|
||||||
|
name='testworkout',workouttype='water',
|
||||||
|
user=self.r2,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
|
starttime=workoutstarttime,
|
||||||
|
startdatetime=row.rowdatetime,
|
||||||
|
duration=duration,distance=totaldist,
|
||||||
|
csvfilename=filename
|
||||||
|
)
|
||||||
|
|
||||||
@patch('rowers.integrations.rp3.requests.get', side_effect=mocked_requests)
|
@patch('rowers.integrations.rp3.requests.get', side_effect=mocked_requests)
|
||||||
@patch('rowers.integrations.rp3.requests.post', side_effect=mocked_requests)
|
@patch('rowers.integrations.rp3.requests.post', side_effect=mocked_requests)
|
||||||
@@ -1213,6 +1299,24 @@ class StravaObjects(DjangoTestCase):
|
|||||||
duration=duration,distance=totaldist,
|
duration=duration,distance=totaldist,
|
||||||
csvfilename=filename,uploadedtostrava=123,
|
csvfilename=filename,uploadedtostrava=123,
|
||||||
)
|
)
|
||||||
|
self.u2 = User.objects.create_user('john2',
|
||||||
|
'ba@ds.ds',
|
||||||
|
'koeinsloot2')
|
||||||
|
self.u2.first_name = 'John'
|
||||||
|
self.u2.last_name = 'Sander2'
|
||||||
|
self.u2.save()
|
||||||
|
self.r2 = Rower.objects.create(user=self.u2,gdproptin=True, ftpset=True,surveydone=True,
|
||||||
|
gdproptindate=timezone.now()
|
||||||
|
)
|
||||||
|
|
||||||
|
self.w2 = Workout.objects.create(
|
||||||
|
name='testworkout',workouttype='water',
|
||||||
|
user=self.r2,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
|
starttime=workoutstarttime,
|
||||||
|
startdatetime=row.rowdatetime,
|
||||||
|
duration=duration,distance=totaldist,
|
||||||
|
csvfilename=filename
|
||||||
|
)
|
||||||
|
|
||||||
@patch('rowers.integrations.strava.requests.post', side_effect=mocked_requests)
|
@patch('rowers.integrations.strava.requests.post', side_effect=mocked_requests)
|
||||||
@patch('rowers.integrations.strava.requests.get', side_effect=mocked_requests)
|
@patch('rowers.integrations.strava.requests.get', side_effect=mocked_requests)
|
||||||
@@ -1281,6 +1385,20 @@ class StravaObjects(DjangoTestCase):
|
|||||||
|
|
||||||
self.assertEqual(res,1)
|
self.assertEqual(res,1)
|
||||||
|
|
||||||
|
@patch('rowers.integrations.strava.requests.post', side_effect=mocked_requests)
|
||||||
|
@patch('rowers.integrations.strava.requests.get', side_effect=mocked_requests)
|
||||||
|
def test_strava_upload2(self, mock_get, mock_post):
|
||||||
|
url = '/rowers/workout/'+encoded2+'/stravauploadw/'
|
||||||
|
|
||||||
|
response = self.c.get(url)
|
||||||
|
|
||||||
|
self.assertRedirects(response,
|
||||||
|
expected_url = '/rowers/list-workouts/',
|
||||||
|
status_code=302,target_status_code=200)
|
||||||
|
|
||||||
|
self.assertEqual(response.url, '/rowers/list-workouts/')
|
||||||
|
self.assertEqual(response.status_code, 302)
|
||||||
|
|
||||||
@patch('rowers.integrations.strava.requests.post', side_effect=mocked_requests)
|
@patch('rowers.integrations.strava.requests.post', side_effect=mocked_requests)
|
||||||
@patch('rowers.integrations.strava.requests.get', side_effect=mocked_requests)
|
@patch('rowers.integrations.strava.requests.get', side_effect=mocked_requests)
|
||||||
def test_strava_upload(self, mock_get, mock_post):
|
def test_strava_upload(self, mock_get, mock_post):
|
||||||
@@ -1383,6 +1501,24 @@ class STObjects(DjangoTestCase):
|
|||||||
duration=duration,distance=totaldist,
|
duration=duration,distance=totaldist,
|
||||||
csvfilename=filename
|
csvfilename=filename
|
||||||
)
|
)
|
||||||
|
self.u2 = User.objects.create_user('john2',
|
||||||
|
'ba@ds.ds',
|
||||||
|
'koeinsloot2')
|
||||||
|
self.u2.first_name = 'John'
|
||||||
|
self.u2.last_name = 'Sander2'
|
||||||
|
self.u2.save()
|
||||||
|
self.r2 = Rower.objects.create(user=self.u2,gdproptin=True, ftpset=True,surveydone=True,
|
||||||
|
gdproptindate=timezone.now()
|
||||||
|
)
|
||||||
|
|
||||||
|
self.w2 = Workout.objects.create(
|
||||||
|
name='testworkout',workouttype='water',
|
||||||
|
user=self.r2,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
|
starttime=workoutstarttime,
|
||||||
|
startdatetime=row.rowdatetime,
|
||||||
|
duration=duration,distance=totaldist,
|
||||||
|
csvfilename=filename
|
||||||
|
)
|
||||||
|
|
||||||
@patch('rowers.integrations.sporttracks.requests.post', side_effect=mocked_requests)
|
@patch('rowers.integrations.sporttracks.requests.post', side_effect=mocked_requests)
|
||||||
def test_sporttracks_callback(self, mock_post):
|
def test_sporttracks_callback(self, mock_post):
|
||||||
@@ -1411,6 +1547,20 @@ class STObjects(DjangoTestCase):
|
|||||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit/')
|
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit/')
|
||||||
self.assertEqual(response.status_code, 302)
|
self.assertEqual(response.status_code, 302)
|
||||||
|
|
||||||
|
@patch('rowers.integrations.sporttracks.requests.post', side_effect=mocked_requests)
|
||||||
|
@patch('rowers.integrations.sporttracks.requests.get', side_effect=mocked_requests)
|
||||||
|
def test_tp_upload2(self, mock_get, mock_post):
|
||||||
|
url = '/rowers/workout/'+encoded2+'/sporttracksuploadw/'
|
||||||
|
|
||||||
|
response = self.c.get(url)
|
||||||
|
|
||||||
|
self.assertRedirects(response,
|
||||||
|
expected_url = '/rowers/list-workouts/',
|
||||||
|
status_code=302,target_status_code=200)
|
||||||
|
|
||||||
|
self.assertEqual(response.url, '/rowers/list-workouts/')
|
||||||
|
self.assertEqual(response.status_code, 302)
|
||||||
|
|
||||||
@patch('rowers.integrations.sporttracks.requests.get', side_effect=mocked_requests)
|
@patch('rowers.integrations.sporttracks.requests.get', side_effect=mocked_requests)
|
||||||
def test_sporttracks_list(self, mock_get):
|
def test_sporttracks_list(self, mock_get):
|
||||||
response = self.c.get('/rowers/workout/sporttracksimport',follow=True)
|
response = self.c.get('/rowers/workout/sporttracksimport',follow=True)
|
||||||
@@ -1462,6 +1612,7 @@ class TPObjects(DjangoTestCase):
|
|||||||
self.u.first_name = 'John'
|
self.u.first_name = 'John'
|
||||||
self.u.last_name = 'Sander'
|
self.u.last_name = 'Sander'
|
||||||
self.u.save()
|
self.u.save()
|
||||||
|
|
||||||
self.r = Rower.objects.create(user=self.u,gdproptin=True, ftpset=True,surveydone=True,
|
self.r = Rower.objects.create(user=self.u,gdproptin=True, ftpset=True,surveydone=True,
|
||||||
gdproptindate=timezone.now()
|
gdproptindate=timezone.now()
|
||||||
)
|
)
|
||||||
@@ -1507,6 +1658,26 @@ class TPObjects(DjangoTestCase):
|
|||||||
csvfilename=filename
|
csvfilename=filename
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
self.u2 = User.objects.create_user('john2',
|
||||||
|
'ba@ds.ds',
|
||||||
|
'koeinsloot2')
|
||||||
|
self.u2.first_name = 'John'
|
||||||
|
self.u2.last_name = 'Sander2'
|
||||||
|
self.u2.save()
|
||||||
|
self.r2 = Rower.objects.create(user=self.u2,gdproptin=True, ftpset=True,surveydone=True,
|
||||||
|
gdproptindate=timezone.now()
|
||||||
|
)
|
||||||
|
|
||||||
|
self.w2 = Workout.objects.create(
|
||||||
|
name='testworkout',workouttype='water',
|
||||||
|
user=self.r2,date=self.nu.strftime('%Y-%m-%d'),
|
||||||
|
starttime=workoutstarttime,
|
||||||
|
startdatetime=row.rowdatetime,
|
||||||
|
duration=duration,distance=totaldist,
|
||||||
|
csvfilename=filename
|
||||||
|
)
|
||||||
|
|
||||||
@patch('rowers.integrations.trainingpeaks.requests.post', side_effect=mocked_requests)
|
@patch('rowers.integrations.trainingpeaks.requests.post', side_effect=mocked_requests)
|
||||||
def test_tp_callback(self, mock_post):
|
def test_tp_callback(self, mock_post):
|
||||||
response = self.c.get('/tp_callback?code=dsdoij232s',follow=True)
|
response = self.c.get('/tp_callback?code=dsdoij232s',follow=True)
|
||||||
@@ -1535,3 +1706,17 @@ class TPObjects(DjangoTestCase):
|
|||||||
|
|
||||||
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit/')
|
self.assertEqual(response.url, '/rowers/workout/'+encoded1+'/edit/')
|
||||||
self.assertEqual(response.status_code, 302)
|
self.assertEqual(response.status_code, 302)
|
||||||
|
|
||||||
|
@patch('rowers.integrations.trainingpeaks.requests.post', side_effect=mocked_requests)
|
||||||
|
@patch('rowers.integrations.trainingpeaks.requests.get', side_effect=mocked_requests)
|
||||||
|
def test_tp_upload2(self, mock_get, mock_post):
|
||||||
|
url = '/rowers/workout/'+encoded2+'/tpuploadw/'
|
||||||
|
|
||||||
|
response = self.c.get(url)
|
||||||
|
|
||||||
|
self.assertRedirects(response,
|
||||||
|
expected_url = '/rowers/list-workouts/',
|
||||||
|
status_code=302,target_status_code=200)
|
||||||
|
|
||||||
|
self.assertEqual(response.url, '/rowers/list-workouts/')
|
||||||
|
self.assertEqual(response.status_code, 302)
|
||||||
|
|||||||
BIN
Binary file not shown.
@@ -40,9 +40,13 @@ def default(o): # pragma: no cover
|
|||||||
|
|
||||||
@login_required()
|
@login_required()
|
||||||
def workout_export_view(request, id=0, source='c2'):
|
def workout_export_view(request, id=0, source='c2'):
|
||||||
r = getrower(request.user)
|
r = getrequestrower(request)
|
||||||
w = get_workout_by_opaqueid(request, id)
|
w = get_workout_by_opaqueid(request, id)
|
||||||
integration = importsources[source](request.user)
|
if w.user != request.user.rower:
|
||||||
|
messages.error(request, 'You can only export your own workouts')
|
||||||
|
url = reverse('workouts_view')
|
||||||
|
return HttpResponseRedirect(url)
|
||||||
|
integration = importsources[source](r.user)
|
||||||
try:
|
try:
|
||||||
id = integration.workout_export(w)
|
id = integration.workout_export(w)
|
||||||
except NoTokenError: # pragma: no cover
|
except NoTokenError: # pragma: no cover
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ from rowers.rower_rules import (
|
|||||||
can_start_trial, can_start_plantrial, can_start_coachtrial,
|
can_start_trial, can_start_plantrial, can_start_coachtrial,
|
||||||
can_plan, is_workout_team,
|
can_plan, is_workout_team,
|
||||||
is_promember,user_is_basic, is_coachtrial, is_coach,
|
is_promember,user_is_basic, is_coachtrial, is_coach,
|
||||||
workout_is_strava
|
workout_is_strava, is_workout_owner
|
||||||
)
|
)
|
||||||
|
|
||||||
from django.shortcuts import render
|
from django.shortcuts import render
|
||||||
|
|||||||
@@ -550,6 +550,7 @@ def rower_exportsettings_view(request, userid=0):
|
|||||||
except APIKey.DoesNotExist:
|
except APIKey.DoesNotExist:
|
||||||
apikey = APIKey.objects.create(user=request.user)
|
apikey = APIKey.objects.create(user=request.user)
|
||||||
|
|
||||||
|
apps = Application.objects.filter(user=request.user)
|
||||||
|
|
||||||
return render(request, 'rower_exportsettings.html',
|
return render(request, 'rower_exportsettings.html',
|
||||||
{'form': form,
|
{'form': form,
|
||||||
@@ -558,6 +559,7 @@ def rower_exportsettings_view(request, userid=0):
|
|||||||
'breadcrumbs': breadcrumbs,
|
'breadcrumbs': breadcrumbs,
|
||||||
'grants': grants,
|
'grants': grants,
|
||||||
'apikey': apikey.key,
|
'apikey': apikey.key,
|
||||||
|
'apps': apps,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -2068,7 +2068,7 @@ def workouts_bulk_actions(request):
|
|||||||
if exportchoice.is_valid():
|
if exportchoice.is_valid():
|
||||||
destination = exportchoice.cleaned_data['destination']
|
destination = exportchoice.cleaned_data['destination']
|
||||||
for w in workouts:
|
for w in workouts:
|
||||||
integration = importsources[destination](request.user)
|
integration = importsources[destination](r.user)
|
||||||
try:
|
try:
|
||||||
id = integration.workout_export(w)
|
id = integration.workout_export(w)
|
||||||
messages.info(request,
|
messages.info(request,
|
||||||
|
|||||||
Reference in New Issue
Block a user