-
Notifications
You must be signed in to change notification settings - Fork 0
/
deploy.py
101 lines (85 loc) · 3.8 KB
/
deploy.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import click
import yaml
@click.group()
def cli():
pass
@cli.command()
@click.argument(
"filename",
type=click.Path(exists=True, file_okay=True, dir_okay=False, readable=True),
)
@click.option(
"--update", "-d", type=click.FLOAT, help="Обновляет какой-то урок или целую секцию"
)
@click.option(
"--step",
"-s",
type=click.INT,
help="Номер шага для обновления",
)
@click.option("--all", is_flag=True, help="Обновляет все уроки в каждом модуле")
def toc(filename, update, all, step):
"""Считывает toc-файл и обновляет курс (может обновлять урок или всю секцию)"""
if all and update or all and step:
raise click.UsageError(
"Вы должны использовать либо опцию --all, либо опцию -d, либо опции -d и -s вместе"
)
if step and not (update and update - int(update)):
raise click.UsageError(
"Вы должны использовать -d (номер модуля или урока) или -d (номер урока) -s (номер шага)"
)
data: dict = None
with open(filename, encoding="utf-8") as file:
data = yaml.load(file, yaml.SafeLoader)
title = data["title"]
course_id = data["course_id"]
base_dir = data["base_dir"]
if all:
... # Будет парс всех md-файлов и обновлены все уроки из каждого модуля
elif update:
if update - int(update):
if update not in data["toc"]:
raise KeyError(f"Урок {update} не существует!")
lesson_data = data["toc"][update]
... # Будет вызван парс всех файлов из модуля с номером section и обновлены все уроки модуля
else:
lessons = list(filter(lambda elem: int(elem) == update, data["toc"]))
if lessons:
for lesson in lessons:
lesson_data = data["toc"][lesson]
... # Будет вызван парс файла и обновлен урок
else:
raise KeyError(f"Модуль {int(update)} не существует!")
else:
raise click.UsageError("Вы должны одну из опций: --all или -d")
@cli.command()
@click.argument(
"filename",
type=click.Path(exists=True, file_okay=True, dir_okay=False, readable=True),
)
@click.option(
"--step",
"-s",
type=click.INT,
help="Номер шага для обновления",
)
@click.option(
"--id", type=click.INT, help="Обновляет все шаги в уроке с lesson_id равным id"
)
@click.option("--all", is_flag=True, help="Обновляет все шаги в уроке")
def lesson(filename, step, id, all):
"""Считывает файл и обновляет какой-то шаг или целый урок"""
if step and id or step and all or id and all:
raise click.UsageError(
"Вы должны использовать либо опцию -s, либо опцию --id, либо опцию --all"
)
if all:
... # Будет вызван парс файла и обновлены все шаги в уроке
elif step:
... # Будет вызван парс файла и обновлен шаг с номером step
elif id:
... # Будет вызван парс файла и обновлен урок с lesson_id равным id
else:
raise click.UsageError("Вы должны одну из опций: -s, --all или --id")
if __name__ == "__main__":
cli()