Skip to content

tatyderb/course_deploy

Repository files navigation

course_deploy

Скрипты для деплоя онлайн-курсов, написанных в формате markdown на stepik.org.

Кроме текстовых шагов поддерживаются разные типы вопросов и задачи. Задачи можно как писать сразу в файле урока, так и ссылаться на задачу, предназначенную для деплоя в системе ejudge.

Запуск

Usage: deploy.py [-h] [-f | -t] [-d] [--html] [-s STEP] [--lang LANGUAGE] md_file

Обязательный аргумент: Зачем он
md_file имя файла с текстом урока и вопросами в формате markdown
Опциональный аргумент: Зачем он
-h, --help узнать как использовать программу
-f, --full загрузить шаги всех типов
-t, --text загрузить только текстовые шаги
-d, --debug загрузить весь урок одним шагом
--html загрузить урок в html файл, а не на сайт
-s STEP, --step STEP обновить только шаг под номером STEP (нумерация начинается с 1), также поддерживается отрицательная индексация
-c CONFIG, --config CONFIG загрузить, используя данные из конфигурационного файла
/ -l LANGUAGE, --lang LANGUAGE установить для загружаемых задач на программирование язык ::LANGUAGE

Полжите свои аутентификационные данные в файл auth_data.py

Как написано в этом файле. Пожалуйста, не комитьте файл с ВАШИМИ аутентификационными данными в открытый репозиторий.

Структура файла в формате markdown

1 урок пишется в 1 файл в формате markdown (todo: уточнить поддерживаемый диалект и расширения).

Заголовком 1 уровня пишется название урока.

Далее идет служебная информация для скриптов. Куда именно выкладывать данный файл.

lesson = 239930
lang = c_valgrind

Далее идет информация об уроке (в stepik не используется).

Далее каждый заголовок 2 уровня начинает шаг. После ## через пробел можно указать тип шага:

## TYPE пробел заголовок

TYPE может быть следующим:

  • TEXT или отсутствует - это обычный шаг с методическими материалами.

  • PROBLEM - указание на вставку задачи, на следующей строке - название директории с задачей в формате problem = sum_1.

  • QUIZ - вопрос в формате AIKEN.

    • По умолчанию предлагаемые ответы перемешиваются. Чтобы зафиксировать порядок ответов напишите на одной строке SHUFFLE: False (или True, без учета регистра) до строки с ANSWER
    • Если нужно задать много правильных ответов, то перечисляем их в любом порядке через запятую ANSWER: A, D, C
    • Если текст вопроса внезапно переходит в варианты ответа, то принудительно обозначьте начало и конец вопроса, написав на отдельных строках TEXTBEGIN и TEXTEND.
  • NUMBER - вопрос, ответом на который является число (точное или в некотором диапазоне). Примеры использования здесь.

    • Ответ записывается в виде: ANSWER: 12 +- 0.5, где 12 - среднее, а 0.5 - погрешность
    • Если ответом является точное число: ANSWER: 12
    • Правильных может быть несколько, но ученик может ввести только одно число
  • STRING - вопрос, ответом на который является слово или строка. Примеры использования здесь.

    • Ответ записывается в виде: ANSWER: Слово
    • Правильный ответ только один. От ученика требуется полностью совпадающий с паттерном ответ (учитывается регистр, ответом может быть слово, словосочетание или предложене, но кол-во пробелов не учитывается)
  • VIDEO - далее идет урл на видео в формате video=https://d3c33hcgiwev3.cloudfront.net/KYDrAeHNEeiAgQrXx6bp4g.processed/full/360p/index.mp4?Expires=1563753600&Signature=V1YOioA-2y8C52Sf-tHLBnBxfAfu3lP2gUV4eajalMH-lA-uJC1xWPfbfBFOy90BHfoSqxk7raYONL0FlrF18NDaTxLkrKZ~~GB4QD5YxNCEPqug2HQQf4itZkf0M4GkwgPWZX9~QXkJjgX9x0LyhflLCgfCxCrZhY8AnpwgPes_&Key-Pair-Id=APKAJLTNE6QMUY6HBC5A

    • не реализовано
  • TASK - задача по программированию (1 задача в 1 директории, нужно для портирования задач из ejudge или poligon). Примеры использования здесь.

    • Путь к директории с задачей, название файла с условием и т.д. указываются в виде: param = value. По умолчанию указывается относительно директории examples, но может и относительно директории, указанной в конфигурационном файле под именем task_root.
    • Файл с условием в формате xml
    • Тесты представляют собой директорию, где для каждого теста входной поток записан в 001.dat, а ожидаемый выходной в 001.ans и далее для тестов 002, 003 и до конца. Имена dat и ans файлов должны совпадать, нумерация от 001 идет по порядку (без разрывов)
    • Если не будет условия, оно будет заменено на стандартное, если не будет ни условия, ни тестов, то будет загружена стандартная задача
    • У задачи может быть header и footer. Названия файлов указываются с ними напрямую и включаются в задачу только при указании языка в конфигурационном файле: task_lang: c
    • По умолчанию ученик видит только первый тест. Можно явно указать количество видимых тестов: visible_tst_num = 4
  • TASKINLINE - задача на программирование пример

    • идет ключевое слово раздела, потом информация раздела до следующего раздела или до следующего шага или до конца файла.
    • CODE - этот код будет набран в окне ввода. Полезно, если вы хотите облегчить студенту жизнь.
    • HEADER - код пристыковывается ДО кода студента.
    • FOOTER - код пристыковывается ПОСЛЕ кода студента.
    • TEST - тесты (один или более раз) в формате
    • CONFIG - параметры конфигурации, задаются в виде параметр : значение в одну строку, параметры:
      • score - баллы за задачу, по умолчанию за задачу 10, за прочий шаг 2 балла.
      • visible_tests - количество открытых тестов в разделе "Тестовые данные". По умолчанию открыты все тесты (если этого параметра нет в конфигурации).
      • checker - код для проверки ответов, по умолчанию сравнивает ожидаемый ответ и полученный ответ как текст, с учетом количества строк, но убирая пробельные символы в конце текста, возможны другие чекеры:
        • std_float_seq - последовательность чисел с плавающей точкой, сравнивает с точностью до EPS = 0.0001, другую EPS можно задать в дополнительных параметрах
      • additional_params - дополнительные параметры для чекера, солвера, тестов и тп. Задаем в одну строку с \n если нужно несколько строк кода параметров задать.
входные данные теста
----
ожидаемые выходные данные теста
====

Установка языка программирования для задачи на программирование

Если не устанавливать язык, то можно будет сдавать на любом языке, который поддерживает платформа. Это полезно, если у вас курс по алгоритмистике.

Но если вы изучаете конкретный язык, то нужно ограничить язык, который используется для проверки. По возрастанию приоритета язык можно задать:

  • python3 - по умолчанию,
  • задан в конфигурационном файле в поле task_lang,
  • задан в аргументах командной строки с ключом --lang
  • записан в md файле урока, сразу после lesson_id в виде lang = c_valgrind

Запись в файле урока самая приоритетная, ибо автор при разработке курса думал, на каких языках его можно проводить.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages