Ejemplo n.º 1
0
 def test_last_weight_entry(self):
     '''
     Tests that the last weight entry is correctly returned
     '''
     self.user_login('test')
     user = User.objects.get(pk=2)
     entry = WeightEntry()
     entry.creation_date = datetime.datetime.today()
     entry.user = user
     entry.weight = 100
     entry.save()
     self.assertEqual(user.userprofile.weight, 100)
     entry.weight = 150
     entry.save()
     self.assertEqual(user.userprofile.weight, 150)
Ejemplo n.º 2
0
 def test_last_weight_entry(self):
     '''
     Tests that the last weight entry is correctly returned
     '''
     self.user_login('test')
     user = User.objects.get(pk=2)
     entry = WeightEntry()
     entry.date = datetime.datetime.today()
     entry.user = user
     entry.weight = 100
     entry.save()
     self.assertEqual(user.userprofile.weight, 100)
     entry.weight = 150
     entry.save()
     self.assertEqual(user.userprofile.weight, 150)
Ejemplo n.º 3
0
def fitbitComplete(request):
    code = request.GET.get('code')
    # print(code)
    fitConnect = Fitbit()
    token = fitConnect.GetAccessToken(code)

    headers = {
            'Authorization': 'Bearer %s' % token['access_token']
        }

    final_url = 'https://' + fitConnect.API_SERVER + '/1/user/-/body/weight/date/today/30d.json'
    try:
        resp = requests.get(final_url, headers=headers)
        data = resp.json()
        print(data)
        for content_data in data['body-weight']:
            weight = WeightEntry()
            weight.user = request.user
            weight.weight=content_data['value']
            weight.date = dateutil.parser.parse(content_data['dateTime'])
            try:
                weight.save()
            except Exception as e:
                pass
    except Exception as e:
        pass
    return HttpResponseRedirect(reverse('core:dashboard'))
Ejemplo n.º 4
0
def add_excersise(request, response_activity, weight):
    entry = WeightEntry()
    entry.weight = weight
    entry.user = request.user
    entry.date = datetime.date.today()
    entry.save()
    messages.success(
        request, _('Successfully synced weight data.'))

    if not ExerciseCategory.objects.filter(name='Fitbit'):
        fitbit_category = ExerciseCategory()
        fitbit_category.name = 'Fitbit'
        fitbit_category.save()

    for detail in response_activity.json()['activities']:
        name = detail['name']
        description = detail['description']

        exercise = Exercise()
        exercise.name_original = name
        exercise.name = name
        exercise.category = ExerciseCategory.objects.get(
            name='Fitbit')
        exercise.description = description
        exercise.language = Language.objects.get(
            short_name='en')
        exercise.save()
Ejemplo n.º 5
0
    def user_bodyweight(self, weight):
        '''
        Create a new weight entry as needed
        '''
        if (not WeightEntry.objects.filter(user=self.user).exists() or
            (datetime.date.today() -
             WeightEntry.objects.filter(user=self.user).latest().creation_date
             > datetime.timedelta(days=3))):
            entry = WeightEntry()
            entry.weight = weight
            entry.user = self.user
            entry.creation_date = datetime.date.today()
            entry.save()

        # Update the last entry
        else:
            entry = WeightEntry.objects.filter(user=self.user).latest()
            entry.weight = weight
            entry.save()
        return entry
Ejemplo n.º 6
0
    def user_bodyweight(self, weight):
        '''
        Create a new weight entry as needed
        '''
        if (not WeightEntry.objects.filter(user=self.user).exists()
            or (datetime.date.today()
                - WeightEntry.objects.filter(user=self.user).latest().date
                > datetime.timedelta(days=3))):
            entry = WeightEntry()
            entry.weight = weight
            entry.user = self.user
            entry.date = datetime.date.today()
            entry.save()

        # Update the last entry
        else:
            entry = WeightEntry.objects.filter(user=self.user).latest()
            entry.weight = weight
            entry.save()
        return entry
Ejemplo n.º 7
0
def calculate(request):
    '''
    Calculates the BMI
    '''

    data = []

    form = BmiForm(request.POST, instance=request.user.userprofile)
    if form.is_valid():
        form.save()

        # Create a new weight entry as needed
        if (not WeightEntry.objects.filter(user=request.user).exists()
           or (datetime.date.today()
               - WeightEntry.objects.filter(user=request.user).latest().creation_date
               > datetime.timedelta(1))):
            entry = WeightEntry()
            entry.weight = form.cleaned_data['weight']
            entry.user = request.user
            entry.creation_date = datetime.date.today()
            entry.save()

        # Update the last entry
        else:
            entry = WeightEntry.objects.filter(user=request.user).latest()
            entry.weight = form.cleaned_data['weight']
            entry.save()

        bmi = request.user.userprofile.calculate_bmi()
        result = {'bmi': '{0:.2f}'.format(bmi),
                  'weight': form.cleaned_data['weight'],
                  'height': request.user.userprofile.height}
        data = json.dumps(result, cls=helpers.DecimalJsonEncoder)

    # Return the results to the client
    return HttpResponse(data, 'application/json')
Ejemplo n.º 8
0
def fitbit(request):
    '''
    method driving fitbit integration
    '''

    template_data = {}
    fitbit_id = os.getenv('CLIENT_ID')
    fitbit_secret_key = os.getenv('SECRET_KEY')
    callback_url = os.getenv('CALLBACK_URL')
    fitbit_scope = 'weight'
    url_params = '&response_type=code&scope={}&redirect_uri={}'.format(
        fitbit_scope, callback_url)
    fitbit_url = 'https://www.fitbit.com/oauth2/authorize?client_id={}'.format(
        fitbit_id)
    get_fitbit = fitbit_url + url_params

    if 'code' in request.GET:
        # get the code returned from the
        code = request.GET.get('code', '')
        client_secret = '{}:{}'.format(fitbit_id, fitbit_secret_key)
        # Convert client secret key to bytes then to base64 for fitbit token
        client_secret = client_secret.encode('utf-8')
        b64_code = base64.b64encode(client_secret).decode('utf-8')
        # custom headers for fitbit
        headers = {
            'Authorization': 'Basic {}'.format(b64_code),
            'Content-Type': 'application/x-www-form-urlencoded'
        }
        # parameters for fitbit api request
        params = {
            'client_id': fitbit_id,
            'client_secret': fitbit_secret_key,
            'code': code,
            'grant_type': 'authorization_code',
            'redirect_uri': callback_url
        }
        # retrieve fitbit access_token
        post_fitbit = requests.post('https://api.fitbit.com/oauth2/token',
                                    params,
                                    headers=headers).json()

        if 'access_token' in post_fitbit:
            headers['Authorization'] = 'Bearer {}'.format(
                post_fitbit["access_token"])
            user_id = post_fitbit['user_id']
            period = '1w'
            base_date = datetime.datetime.today().strftime('%Y-%m-%d')
            # get request to retrieve weight data for the user
            get_weight_params = '/body/log/weight/date/{}/{}.json'.format(
                base_date, period)
            get_weight_url = 'https://api.fitbit.com/1/user/{}'.format(user_id)
            get_weight = get_weight_url + get_weight_params
            get_weight_data = requests.get(get_weight, headers=headers).json()
            print('-----wqertyuioertyu', get_weight_data)

            # save fitbit data into the database
            if 'weight' in get_weight_data:
                try:
                    for weight in get_weight_data['weight']:
                        weight_entry = WeightEntry()
                        weight_entry.user = request.user
                        weight_entry.weight = weight['weight']
                        weight_entry.date = weight['date']
                        weight_entry.save()
                        messages.success(request,
                                         _('Successfully added weight data.'))
                except IntegrityError as e:
                    messages.success(request, _('Weight data already added.'))

    template_data.update({'fit_link': get_fitbit})
    return render(request, 'user/fitbit.html', template_data)