Working version with repetition and tiem mode
This commit is contained in:
parent
5611f134e3
commit
feb00df8c5
@ -11,13 +11,13 @@ def cli():
|
|||||||
|
|
||||||
@cli.command()
|
@cli.command()
|
||||||
@click.argument('input_path', type=click.Path(exists=True))
|
@click.argument('input_path', type=click.Path(exists=True))
|
||||||
@click.argument('output_path', type=click.Path(exists=False))
|
@click.argument('output_destination', type=click.Path(exists=True))
|
||||||
def create_plan(input_path, output_path):
|
def create_plan(input_path, output_destination):
|
||||||
"""
|
"""
|
||||||
Creates a openworkout plan from the input yaml file.
|
Creates a openworkout plan from the input yaml file.
|
||||||
"""
|
"""
|
||||||
config = load_file_and_media_links(file_path=input_path)
|
config = load_file_and_media_links(file_path=input_path)
|
||||||
process_config_into_workout_file(config=config, output_file=output_path)
|
process_config_into_workout_file(config=config, output_destination=output_destination)
|
||||||
|
|
||||||
|
|
||||||
FILE = 'data/input/samples/exercises.yaml'
|
FILE = 'data/input/samples/exercises.yaml'
|
||||||
|
@ -69,8 +69,12 @@ def get_item_id():
|
|||||||
start += 1
|
start += 1
|
||||||
|
|
||||||
|
|
||||||
def create_item(name, workout_time, n_repetitions, description=None, preparation_time=5, video_path=None):
|
def create_item(
|
||||||
|
name, workout_time=30, n_repetitions=None, description=None,
|
||||||
|
preparation_time=5, video_path=None, break_time=5
|
||||||
|
):
|
||||||
is_video_mode = True if video_path else False
|
is_video_mode = True if video_path else False
|
||||||
|
is_time_mode = False if n_repetitions else True
|
||||||
|
|
||||||
new_item = dict(WOPRKOUT_ITEM)
|
new_item = dict(WOPRKOUT_ITEM)
|
||||||
new_item_content = {
|
new_item_content = {
|
||||||
@ -79,13 +83,14 @@ def create_item(name, workout_time, n_repetitions, description=None, preparation
|
|||||||
'elapsedTime': 0,
|
'elapsedTime': 0,
|
||||||
'imagePath': '',
|
'imagePath': '',
|
||||||
'isImagePathExternal': False,
|
'isImagePathExternal': False,
|
||||||
'isTimeMode': True,
|
'isTimeMode': is_time_mode,
|
||||||
'isVideoMode': is_video_mode,
|
'isVideoMode': is_video_mode,
|
||||||
'prepTime': preparation_time,
|
'prepTime': preparation_time,
|
||||||
'repetitionCount': n_repetitions,
|
'repetitionCount': n_repetitions,
|
||||||
'videoPath': video_path,
|
'videoPath': video_path,
|
||||||
"orderNr": next(get_item_id()),
|
"orderNr": next(get_item_id()),
|
||||||
"workoutItemId": 0,
|
"workoutItemId": 0,
|
||||||
|
"breakTime": break_time,
|
||||||
"workoutSessionId": 1,
|
"workoutSessionId": 1,
|
||||||
'workoutTime': workout_time
|
'workoutTime': workout_time
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,6 @@ def load_file_and_media_links(file_path):
|
|||||||
video_url = ex['video']
|
video_url = ex['video']
|
||||||
start = ex['start']
|
start = ex['start']
|
||||||
end = ex['end']
|
end = ex['end']
|
||||||
|
|
||||||
video_path = get_video(video_url)
|
video_path = get_video(video_url)
|
||||||
gif = create_gif_from_video_and_timestamps(video_path, start, end)
|
gif = create_gif_from_video_and_timestamps(video_path, start, end)
|
||||||
ex['gif_path'] = gif
|
ex['gif_path'] = gif
|
||||||
|
@ -84,26 +84,27 @@ def map_config_to_workout_file(config):
|
|||||||
items = [
|
items = [
|
||||||
create_item(
|
create_item(
|
||||||
name=item['name'],
|
name=item['name'],
|
||||||
workout_time=30,
|
workout_time=item.get('duration'),
|
||||||
n_repetitions=1,
|
n_repetitions=item.get('repetitions'),
|
||||||
description=None,
|
description=item.get('description'),
|
||||||
preparation_time=5,
|
preparation_time=item.get('preparation'),
|
||||||
video_path=item['gif_path']
|
break_time=item.get('break'),
|
||||||
|
video_path=item.get('gif_path')
|
||||||
)
|
)
|
||||||
for item in config['exercises']
|
for item in config['exercises']
|
||||||
]
|
]
|
||||||
sessions = [create_workout_session(items)] * 30
|
sessions = [create_workout_session(items)] * config['n_sessions']
|
||||||
db = create_workout_database(config['name'], sessions)
|
db = create_workout_database(config['name'], sessions)
|
||||||
return db
|
return db
|
||||||
|
|
||||||
|
|
||||||
def process_config_into_workout_file(config, output_file = None):
|
def process_config_into_workout_file(config, output_destination = None):
|
||||||
db = map_config_to_workout_file(config)
|
db = map_config_to_workout_file(config)
|
||||||
videos = get_all_media_from_db_by_type(db, media_type='video')
|
videos = get_all_media_from_db_by_type(db, media_type='video')
|
||||||
images = get_all_media_from_db_by_type(db, media_type='image')
|
images = get_all_media_from_db_by_type(db, media_type='image')
|
||||||
db = refactor_media_paths_in_db(db)
|
db = refactor_media_paths_in_db(db)
|
||||||
|
|
||||||
output_file_name = output_file or f"{db['name']}.zip"
|
output_file_name = f"{output_destination or '.'}/{db['name']}.zip"
|
||||||
save_workout_file(
|
save_workout_file(
|
||||||
output_files=output_file_name,
|
output_files=output_file_name,
|
||||||
db_file=db,
|
db_file=db,
|
||||||
|
17
readme.md
17
readme.md
@ -3,15 +3,16 @@ Creates a workout plan form an yaml file that can be imported to <img src="https
|
|||||||
|
|
||||||
Inputs can be of format
|
Inputs can be of format
|
||||||
```yaml
|
```yaml
|
||||||
|
name: name of workout plan
|
||||||
|
n_sessions: 1
|
||||||
exercises:
|
exercises:
|
||||||
- name: nomoney
|
- name: Shoulder Stretch (Up-Left)
|
||||||
video: "https://www.youtube.com/watch?v=etAwQ4jzyNY"
|
start: 209
|
||||||
start: 74
|
end: 212
|
||||||
end: 80
|
video: https://www.youtube.com/watch?v=TSIbzfcnv_8
|
||||||
- name: plank shoulder tap
|
break: 0
|
||||||
video: "https://www.youtube.com/watch?v=etAwQ4jzyNY"
|
duration: 10
|
||||||
start: 113
|
preparation: 3
|
||||||
end: 116
|
|
||||||
```
|
```
|
||||||
|
|
||||||
The script will download the video and create short clips.
|
The script will download the video and create short clips.
|
Loading…
x
Reference in New Issue
Block a user