Example #1
0
    def post(self):
        """
            Creates a new exercise with given args. Returns 201 on success.

            user_id     : int   the id of the user exercising
            type        : str   the activity type. i.e. ice hockey
            start       : int   the start time of the exercise (seconds since epoch)
            end         : int   the end time of the exercise (seconds since epoch)

        """

        self.reqparse.add_argument('user_id', type=int, required=True)
        self.reqparse.add_argument('type', type=str, required=True)
        self.reqparse.add_argument('start', type=datetime_converter)
        self.reqparse.add_argument('end', type=datetime_converter)
        # self.reqparse.add_argument('average_rr', type=int, dest='avg_rr_value') # This should be calculated

        args = self.reqparse.parse_args()

        # convert the end and start times to DateTime objects on creation
        # if "start" in args:
        # args["start"] = datetime.datetime.fromtimestamp(args["start"])
        # if "end" in args:
        #    args["end"] = datetime.datetime.fromtimestamp(args["end"])

        # TODO: calculate the duration here (?) depending on the startts and endts
        # TODO: calculate the average HR here (?)

        m = models.Exercise(**args)

        db.session.add(m)
        db.session.commit()

        return m.id, 201
Example #2
0
def test_workout_update():
    workout = m.Workout(date_proposed=date.today())

    exercise1 = m.Exercise(name='ABC')
    exercise2 = m.Exercise(name='DEF')
    exercise3 = m.Exercise(name='GHI')

    exercises = [exercise1, exercise2, exercise3]
    for index, ex in enumerate(exercises):
        s1 = m.SetEntry(reps=10, set_num=0, weight=0)
        s2 = m.SetEntry(reps=10, set_num=1, weight=0)
        s3 = m.SetEntry(reps=10, set_num=2, weight=0)
        entry = m.ExerciseEntry(ex_num=index, exercise=ex, sets=[s1, s2, s3])
        workout.entries.append(entry)

    user = m.User(username='******', password='******')
    user.workouts = [workout]

    db.session.add(user)
    db.session.commit()

    saved_workout = m.Workout.query.first()
    assert saved_workout is not None

    data, errors = saved_workout.dump()

    data['comment'] = 'Great stuff!'

    # These don't get updated.
    data['date_proposed'] = None
    data['date_completed'] = None

    data['entries'][0]['sets'][1]['weight'] = 100

    saved_workout.update(**data)
    updated, errors = saved_workout.dump()

    assert updated['date_completed'] is None
    assert updated['date_proposed'] is not None
    assert updated['comment'] == data['comment']
    assert updated['entries'][0]['sets'][1]['weight'] == 100
Example #3
0
def test_json():
    workout = m.Workout(date_proposed=date.today())

    exercise1 = m.Exercise(name='ABC')
    exercise2 = m.Exercise(name='DEF')
    exercise3 = m.Exercise(name='GHI')

    exercises = [exercise1, exercise2, exercise3]
    for index, ex in enumerate(exercises):
        s1 = m.SetEntry(reps=10, set_num=0, weight=0)
        s2 = m.SetEntry(reps=10, set_num=1, weight=0)
        s3 = m.SetEntry(reps=10, set_num=2, weight=0)
        entry = m.ExerciseEntry(ex_num=index, exercise=ex, sets=[s1, s2, s3])
        workout.entries.append(entry)

    user = m.User(username='******', password='******')
    user.workouts = [workout]

    db.session.add(user)
    db.session.commit()

    data, errors = workout.dump()
    assert data['date_proposed'] == date.today().isoformat()
    assert data['date_completed'] is None
    assert data['comment'] is None
    assert data['id'] == 1

    sorted(workout.entries, key=lambda x: x.ex_num)

    combined_exercises = zip(data['entries'], workout.entries)
    for index, [json_entry, db_entry] in enumerate(combined_exercises):
        assert index == db_entry.ex_num
        assert json_entry['exercise']['name'] == db_entry.exercise.name

        assert len(json_entry['sets']) == 3
        combined_sets = zip(json_entry['sets'], db_entry.sets)
        for index, [json_set, db_set] in enumerate(combined_sets):
            assert index == db_set.set_num
            assert json_set['reps'] == db_set.reps
            assert json_set['weight'] == db_set.weight
Example #4
0
def test_db_relationships():
    workout = m.Workout(date_proposed=date.today())

    exercise1 = m.Exercise(name='ABC')
    exercise2 = m.Exercise(name='DEF')
    exercise3 = m.Exercise(name='GHI')

    exercises = [exercise1, exercise2, exercise3]
    for index, ex in enumerate(exercises):
        s1 = m.SetEntry(reps=10, set_num=0, weight=0)
        s2 = m.SetEntry(reps=10, set_num=1, weight=0)
        s3 = m.SetEntry(reps=10, set_num=2, weight=0)
        entry = m.ExerciseEntry(ex_num=index, exercise=ex, sets=[s1, s2, s3])
        workout.entries.append(entry)

    user = m.User(username='******', password='******')
    user.workouts = [workout]

    db.session.add(user)
    db.session.commit()

    workout = m.Workout.query.first()
    assert workout is not None
    assert workout.date_proposed == date.today()
    assert workout.date_completed is None
    assert workout.comment is None

    for entry_index, entry in enumerate(workout.entries):
        assert entry.exercise in exercises
        assert entry.ex_num == entry_index
        assert entry.exercise_id in [e.id for e in exercises]
        assert len(entry.sets) == 3
        for index, s in enumerate(entry.sets):
            assert s.set_num == index
            assert s.reps == 10
            assert s.weight == 0
Example #5
0
def generate_exercises(users, amount=1000):
    categories = [
        models.Category(name=name) for name in
        'relaxatie concentratie associatie confrontatie overig'.split()
    ]
    ranges = [NumericRange(0, 5), NumericRange(5, 15), NumericRange(15, None)]

    exercises = [models.Exercise(title='title%s' % i,
                                 description='desc%s' % i,
                                 author=random.choice(users),
                                 category=random.choice(categories),
                                 duration=random.choice(ranges),
                                 difficulty=random.choice([0, 1, 2]),
                                 ) for i in xrange(amount)]

    db_.session.add_all(exercises)
    return exercises
Example #6
0
    def get(self):

        from app.models import User, Measurement, Exercise
        import random
        import datetime
        import time

        user_names = ["Pertti", "Tapio", "Jones", "Jack", "Jackson"]
        types = ["jogging", "running", "walking", "sleeping", "longboarding", "ice hockey", "rugby"]
        current_time = int(time.time())

        # create some users
        for idx, name in enumerate(user_names):
            u = models.User(nickname=name, id=idx-1)
            db.session.add(u)

        # create some measurements
        for i in range(0, len(user_names)):
            for j in range(0, 10):
                r = random.randint(30, 140)
                t = datetime.datetime.utcfromtimestamp(current_time - random.randint(0, 43200)) # last 12 hours
                m = models.Measurement(user_id=i, rr_value=r, timestamp=t)
                db.session.add(m)

        # add a few exercises
        for i in range(0, len(user_names)):
            for j in range(0, 3):
                start_time = current_time - random.randint(0, 43200)
                end_time = min((start_time + random.randint(0, 43200)), current_time)
                start = datetime.datetime.utcfromtimestamp(start_time)
                end = datetime.datetime.utcfromtimestamp(end_time)
                e = models.Exercise(user_id=i, start=start, end=end, type=random.choice(types))
                db.session.add(e)

        db.session.commit()

        return "success.", 201
Example #7
0
def fill(obj):
    # useramount = 5
    # exerciseamount = 25
    # users = generate_users(amount=useramount)
    # exercises = generate_exercises(users, amount=exerciseamount)
    # generate_ratings(users, exercises[:exerciseamount / 2])
    # users[0].favorite_exercises = exercises[:8]
    categories = [
        models.Category(name=name) for name in
        'relaxatie concentratie associatie confrontatie overig'.split()
    ]
    db_.session.add_all(categories)
    ranges = [NumericRange(0, 5), NumericRange(5, 15), NumericRange(15, None)]

    amc = models.User(username='******', password='******')
    db_.session.add(amc)

    ex1 = models.Exercise(title='2-minuten aandacht oefening',
                          author=amc,
                          category=categories[0],
                          duration=ranges[0],
                          difficulty=0,
                          default=True,
                          description=('Ga op een plek zitten waar u rustig de oefening kunt doen. Zit rechtop, schouders en buik ontspannen, hoofd rechtop. Zet een timer op 2 minuten en sluit uw ogen.'
                                       '\n'
                                       '\n'
                                       'Merk op of en waar u spanning en ontspanning voelt en wat de hoogte van de spanning is. U kunt een cijfer tussen 0 en 100 geven als indicatie. Ga met uw aandacht naar de ademhaling.'
                                       'Merk op waar u de beweging voelt, wat het tempo is van de ademhaling en hoeveel ruimte u hebt om te ademen. Als u een gedachte hebt, merk hem op en ga rustig en zonder oordeel terug naar de oefening.'
                                       '\n'
                                       '\n'
                                       'Blijf dit herhalen totdat u merkt dat u met uw aandacht bij u ademhaling kunt blijven. Merk na 2 minuten wederom op hoe hoog de spanning in uw lichaam is. Doe rustig uw ogen open en merk op hoe u zich voelt. Geef uzelf wederom een cijfer voor de hoogte van de spanning.')
                          )
    db_.session.add(ex1)

    ex2 = models.Exercise(title='Oefening Jacobsen',
                          author=amc,
                          category=categories[0],
                          duration=ranges[0],
                          difficulty=0,
                          default=True,
                          description=('Tijdens deze ontspanningsoefening span je je spieren stevig aan, waarna je ze weer ontspant. Door het aan- en ontspannen krijg je een zwaar ontspannen gevoel in je spieren. Door regelmatig deze oefening met aandacht te herhalen leer je spanning, zowel lichamelijk als geestelijk vroegtijdig herkennen zodat je deze actief kan loslaten.'
                                       '\n'
                                       '\n'
                                       'Als u het prettig vindt om thuis te oefenen met een stem erbij kunt u op internet verschillende Jacobson-oefeningen vinden op [ioconsult](http://www.ioconsult.nl/audio/)')
                          )
    db_.session.add(ex2)

    ex3 = models.Exercise(title='Moodboard',
                          author=amc,
                          category=categories[2],
                          duration=ranges[0],
                          difficulty=0,
                          default=True,
                          description=('Met deze techniek brengt u de associaties in beeld die u met het geluid heeft. Maak uw hoofd leeg.  Concentreer u op uw misofoniegeluid. Probeer een paar minuten alleen daaraan te denken.  Registreer welk emotie, beeld, kleur, vorm, associatie dat bij u oproept. Deze [video](https://www.youtube.com/watch?v=uJWqhQQLJ1Y) laat zien hoe je een moodboard kan maken.'
                                       '\n'
                                       '\n'
                                       'Maak ook een positief moodboard over uw misofoniegeluiden. Welke positieve associaties zou u met het geluid willen hebben?'
                                       '\n'
                                       '\n'
                                       'Maak nog een tweede positief moodboard, vol associaties die u een positief gevoel geven: blijdschap, trots, vreugde, geluk, feestelijk, geroerd, ontspannen, etc. In dit moodboard komen de associaties die u bij deze positieve emoties heeft.')
                          )
    db_.session.add(ex3)

    ex4 = models.Exercise(title='Lage ademhaling',
                          author=amc,
                          category=categories[0],
                          duration=ranges[1],
                          difficulty=0,
                          default=True,
                          description=('Ga op uw rug liggen met de benen gestrekt en de armen langs uw lichaam. Handpalmen wijzen omhoog. Doe uw ogen dicht en richt uw aandacht op uw adem. Leg een hand op de plek van de romp die beweegt bij de in- en uitademing. Leg zachtjes beide handen of een voorwerp op uw buik en volg uw adem. Voel hoe uw buik met elke inademing omhoog komt en bij elke uitademing zakt.  Adem door uw neus.'
                                       '\n'
                                       '\n'
                                       'Als u het lastig vindt om met uw buik te ademen, oefen dan druk uit met uw hand op de buik tijdens de uitademing en laat uw buik uw hand weer omhoog duwen terwijl u diep inademt. Beweegt uw borst mee met de buik of blijft uw borst onbeweeglijk? Laat een paar minuten uw borst de beweging van de buik volgen. Vindt u de buikademhaling nog steeds moeilijk ga dan op uw buik liggen met u hoofd op uw gevouwen handen en duw uzelf omhoog vanuit uw buik.')
                          )
    db_.session.add(ex4)

    ex5 = models.Exercise(title='Diepe ademhaling',
                          author=amc,
                          category=categories[0],
                          duration=ranges[-1],
                          difficulty=0,
                          default=True,
                          description=('Ga op uw rug liggen met de benen gebogen en uw voeten plat op de grond. Scan uw lichaam om erachter te komen waar spanning zit. Leg een hand op uw borst en op uw buik. Adem langzaam en diep in door uw neus tot in uw buik en duw uw hand zo ver mogelijk omhoog. Zorg ervoor dat u borst licht meebeweegt, maar alleen samen met de buik.'
                                       '\n'
                                       '\n'
                                       'Als dit goed gaat ademt u in door uw neus en uit door uw mond, waarbij u een ontspannen zacht blaasgeluid produceert zoals het suizen van de wind. Uw mond, tong en kaak zijn ontspannen. Adem langzaam en diep in zodat uw buik goed omhoog komt. Concentreer u op het geluid en het gevoel van ademhalen terwijl u zich steeds meer ontspant.  Doe deze oefening dagelijks 5-10 minuten achter elkaar. Als u wilt kan u de duur geleidelijk opvoeren tot 20 minuten.'
                                       '\n'
                                       '\n'
                                       'Maak aan het einde van de sessie tijd om nogmaals de bodyscan te doen om op zoek te gaan naar spanningen. Vergelijk deze spanning met die van voor de oefening.  Wanneer u vertrouwd bent met deze oefening kunt u deze op elk moment van de dag doen, in elke liggende of staande houding.'
                                       '![Imgur](http://i.imgur.com/liZp6P0.png)')
                          )
    db_.session.add(ex5)
    basedir = os.path.abspath(os.path.dirname(__file__))
    with open(os.path.join(basedir, 'amisos.json')) as amisos_json:
        data = json.load(amisos_json)
        amisos = models.Questionnaire.create(db_.session, data)
        db_.session.add(amisos)

    basedir = os.path.abspath(os.path.dirname(__file__))
    with open(os.path.join(basedir, 'stress.json')) as stress_json:
        data = json.load(stress_json)
        stress = models.Questionnaire.create(db_.session, data)
        db_.session.add(stress)

    db_.session.commit()
Example #8
0
def exercise(user, session):
    exercise = models.Exercise(title='ex', description='ex desc', author=user)
    session.add(exercise)
    session.commit()
    yield exercise