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
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
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
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
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
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
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()
def exercise(user, session): exercise = models.Exercise(title='ex', description='ex desc', author=user) session.add(exercise) session.commit() yield exercise