diff --git a/rowers/imports.py b/rowers/imports.py index df29bffe..7a1a1c49 100644 --- a/rowers/imports.py +++ b/rowers/imports.py @@ -78,21 +78,27 @@ def imports_open(user,oauth_data): token = getattr(r,oauth_data['tokenname']) try: refreshtoken = getattr(r,oauth_data['refreshtokenname']) - except (AttributeError,KeyError): + except (TypeError,AttributeError,KeyError): refreshtoken = None try: tokenexpirydate = getattr(r,oauth_data['expirydatename']) - except (AttributeError,KeyError): + except (TypeError,AttributeError,KeyError): tokenexpirydate = None if (token == '') or (token is None): s = "Token doesn't exist. Need to authorize" raise NoTokenError("User has no token") else: + tokenname = oauth_data['tokenname'] + refreshtokenname = oauth_data['refreshtokenname'] + expirydatename = oauth_data['expirydatename'] if tokenexpirydate and timezone.now()>tokenexpirydate: token = imports_token_refresh( - user,oauth_data, + user, + tokenname, + refreshtokenname, + expirydatename, ) return token @@ -236,8 +242,10 @@ def imports_token_refresh(user,tokenname,refreshtokenname,expirydatename): expirydatetime = timezone.now()+timedelta(seconds=expires_in) setattr(r,tokenname,access_token) - setattr(r,expirydatename,expirydatetime) - setattr(r,refreshtokenname,refresh_token) + if expirydatename is not None: + setattr(r,expirydatename,expirydatetime) + if refreshtokenname is not None: + setattr(r,refreshtokenname,refresh_token) r.save() return r.sporttrackstoken diff --git a/rowers/runkeeperstuff.py b/rowers/runkeeperstuff.py index 0ef8967e..ba7b8548 100644 --- a/rowers/runkeeperstuff.py +++ b/rowers/runkeeperstuff.py @@ -15,6 +15,8 @@ oauth_data = { 'autorization_uri': "https://www.runkeeper.com/opps/authorize", 'content_type': 'application/x-www-form-urlencoded', 'tokenname': 'runkeepertoken', + 'refreshtokenname': None, + 'expirydatename': None, 'bearer_auth': True, 'base_url': "https://runkeeper.com/apps/token", } diff --git a/rowers/sporttracksstuff.py b/rowers/sporttracksstuff.py index 3c4050a5..1f52367f 100644 --- a/rowers/sporttracksstuff.py +++ b/rowers/sporttracksstuff.py @@ -5,7 +5,8 @@ import re from rowsandall_app.settings import ( C2_CLIENT_ID, C2_REDIRECT_URI, C2_CLIENT_SECRET, STRAVA_CLIENT_ID, STRAVA_REDIRECT_URI, STRAVA_CLIENT_SECRET, - SPORTTRACKS_CLIENT_SECRET, SPORTTRACKS_CLIENT_ID, SPORTTRACKS_REDIRECT_URI + SPORTTRACKS_CLIENT_SECRET, SPORTTRACKS_CLIENT_ID, + SPORTTRACKS_REDIRECT_URI ) oauth_data = { @@ -232,8 +233,7 @@ def workout_sporttracks_upload(user,w): # ready to upload. Hurray r = w.user - res = sporttracks_open(user) - thetoken = res[0] + thetoken = sporttracks_open(user) if (checkworkoutuser(user,w)): data = createsporttracksworkoutdata(w) diff --git a/rowers/tests.py b/rowers/tests.py index a7a0a0e4..43838b70 100644 --- a/rowers/tests.py +++ b/rowers/tests.py @@ -959,6 +959,59 @@ class NewUserRegistrationTest(TestCase): status_code=302,target_status_code=200) from django_mailbox.models import Mailbox,MessageAttachment,Message + +class AutoExportTests(TestCase): + def setUp(self): + redis_connection.publish('tasks','KILL') + u = User.objects.create_user('john', + 'sander@ds.ds', + 'koeinsloot') + r = Rower.objects.create(user=u,gdproptin=True, + gdproptindate=timezone.now() + ) + + r.c2_auto_export = True + r.sporttracks_auto_export = True + r.mapmyfitness_auto_export = True + r.trainingpeaks_auto_export = True + + r.save() + + nu = datetime.datetime.now() + workoutsbox = Mailbox.objects.create(name='workouts') + workoutsbox.save() + failbox = Mailbox.objects.create(name='Failed') + failbox.save() + + filename = 'testdata.csv' + + m = Message(mailbox=workoutsbox, + from_header = u.email, + subject = filename, + body=""" +--- +workouttype: water +boattype: 2x +... + """) + m.save() + a2 = 'media/mailbox_attachments/'+filename + copyfile('rowers/testdata/'+filename,a2) + a = MessageAttachment(message=m,document=a2[6:]) + a.save() + + def tearDown(self): + for filename in os.listdir('media/mailbox_attachments'): + path = os.path.join('media/mailbox_attachments/',filename) + if not os.path.isdir(path): + os.remove(path) + + @patch('rowers.tpstuff.requests.post', side_effect=mocked_requests) + @patch('rowers.tpstuff.requests.get', side_effect=mocked_requests) + def test_emailprocessing(self, mock_post, mock_get): + out = StringIO() + call_command('processemail', stdout=out, testing=True) + self.assertIn('Successfully processed email attachments',out.getvalue()) class EmailTests(TestCase): def setUp(self):