diff --git a/rowers/c2stuff.py b/rowers/c2stuff.py index 0e27bad9..d455f67a 100644 --- a/rowers/c2stuff.py +++ b/rowers/c2stuff.py @@ -447,7 +447,6 @@ def get_username(access_token): me_json = response.json() - return me_json['data']['username'] # Get user id, having access token @@ -463,9 +462,12 @@ def get_userid(access_token): me_json = response.json() - - - return me_json['data']['id'] + try: + res = me_json['data']['id'] + except KeyError: + res = 0 + + return res # For debugging purposes def process_callback(request): @@ -515,16 +517,19 @@ def workout_c2_upload(user,w): def rower_c2_token_refresh(user): r = Rower.objects.get(user=user) res = do_refresh_token(r.c2refreshtoken) - access_token = res[0] - expires_in = res[1] - refresh_token = res[2] - expirydatetime = timezone.now()+timedelta(seconds=expires_in) + if res[0]: + access_token = res[0] + expires_in = res[1] + refresh_token = res[2] + expirydatetime = timezone.now()+timedelta(seconds=expires_in) - r = Rower.objects.get(user=user) - r.c2token = access_token - r.tokenexpirydate = expirydatetime - r.c2refreshtoken = refresh_token + r = Rower.objects.get(user=user) + r.c2token = access_token + r.tokenexpirydate = expirydatetime + r.c2refreshtoken = refresh_token - r.save() - return r.c2token + r.save() + return r.c2token + else: + return None diff --git a/rowers/celery.py b/rowers/celery.py index 7eb1d00e..8e41c855 100644 --- a/rowers/celery.py +++ b/rowers/celery.py @@ -8,7 +8,7 @@ from celery import Celery # on Windows, so I use Celery on my notebook. # set the default Django settings module for the 'celery' program. -os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'rowsandall_app.settings') +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'rowsandall_app.settings_dev') from django.conf import settings # noqa @@ -25,6 +25,8 @@ app.config_from_object('django.conf:settings') app.autodiscover_tasks(lambda: settings.INSTALLED_APPS) +database_url = 'sqlite:///db.sqlite3' + @app.task(bind=True) def debug_task(self): print('Request: {0!r}'.format(self.request)) diff --git a/rowers/forms.py b/rowers/forms.py index 8111b1bb..0644ff5b 100644 --- a/rowers/forms.py +++ b/rowers/forms.py @@ -32,10 +32,14 @@ class CNsummaryForm(forms.Form): class SummaryStringForm(forms.Form): intervalstring = forms.CharField(max_length=255,label='Workout Description') +# little window to type a Team invitation code +class TeamInviteCodeForm(forms.Form): + code = forms.CharField(max_length=10,label='Team Code', + ) + # Used for testing the POST API for StrokeData class StrokeDataForm(forms.Form): - strokedata = forms.CharField(label='payload', - widget=forms.Textarea) + strokedata = forms.CharField(label='payload',widget=forms.Textarea) # The form used for uploading files class DocumentsForm(forms.Form): diff --git a/rowers/templates/teams.html b/rowers/templates/teams.html index 5d23245c..cf798b52 100644 --- a/rowers/templates/teams.html +++ b/rowers/templates/teams.html @@ -100,7 +100,25 @@ {% endfor %} + +

Manual code redeem

+
+
+ {% if form.errors %} +

+ Please correct the error{{ form.errors|pluralize }} below. +

+ {% endif %} + {% csrf_token %} + + {{ form.as_table }}
+
+ +
+ +
+

{% else %}

 

diff --git a/rowers/views.py b/rowers/views.py index 112cd2ce..8beb0f07 100644 --- a/rowers/views.py +++ b/rowers/views.py @@ -647,7 +647,7 @@ def c2_open(user): if res[0] != None: thetoken = res[0] else: - thetoken = r.c2token + raise C2NoTokenError("User has no token") else: thetoken = r.c2token @@ -5081,8 +5081,22 @@ def team_leave_view(request,id=0): response = HttpResponseRedirect(url) return response +from rowers.forms import TeamInviteCodeForm + @login_required() def rower_teams_view(request,message='',successmessage=''): + if request.method == 'POST': + form = TeamInviteCodeForm(request.POST) + if form.is_valid(): + code = form.cleaned_data['code'] + res,text = teams.process_invite_code(request.user,code) + if res: + successmessage = text + else: + message = text + else: + form = TeamInviteCodeForm() + r = Rower.objects.get(user=request.user) ts = Team.objects.filter(rower=r) myteams = Team.objects.filter(manager=request.user) @@ -5093,6 +5107,8 @@ def rower_teams_view(request,message='',successmessage=''): requests = TeamRequest.objects.filter(user=request.user) myrequests = TeamRequest.objects.filter(team__in=myteams) myinvites = TeamInvite.objects.filter(team__in=myteams) + + print form return render(request, 'teams.html', { @@ -5102,6 +5118,7 @@ def rower_teams_view(request,message='',successmessage=''): 'otherteams':otherteams, 'requests':requests, 'myrequests':myrequests, + 'form':form, 'message':message, 'successmessage':successmessage, 'myinvites':myinvites, diff --git a/rowsandall_app/settings_dev.py b/rowsandall_app/settings_dev.py index 602d958e..8ebb5caf 100644 --- a/rowsandall_app/settings_dev.py +++ b/rowsandall_app/settings_dev.py @@ -14,7 +14,9 @@ from settings import * DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', - 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),}, + 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), + 'HOST': 'localhost' + }, # 'TEST': { # 'CHARSET': 'utf8', # 'COLLATION': 'utf8_general_ci',