External Testing Results (ETR) - приложение по отслеживанию посылок учеников на Codeforces API. В перспективе не только с Codeforces.
Документация для работы с API Codeforces
.
Исходники доступны по ссылке
.
Инструкция новичку
Что нужно знать
Перед разработкой рекомендую почитать страницу про новые проекты на Python для dl
.
Что такое git и как с ним работать. Про это можно почитать здесь
.
Python - основы программирования, такие, как ООП, уверено писать циклы и ифы. Материалов по этой теме много, достаточно в поиск написать "изучить python" если это вам необходимо. Можете почить это
для изучения.
Flask - фреймворк, без которой мы бы здесь не собрались. Про flask очень много инфы и книг. Можно почитать тут(англ)
и здесь
.
SQLAlchemy - это библиотека для работы с базами данных. Про эту библиотеку можете почитать на сайте(англ)
, или здесь
.
Так же, надо немного почитать про SQL базы данных - что это такое, как они работают и как с ними работать. Проект работает с MySQL, поэтому лучше искать материал близкий к MySQL. Но, в целом, они все очень похожи. Для погружения в вопрос могу посоветовать этот
материал.
Pydantic - отвечает за валидацию данных, тоесть проверку их корректности (email правильный и т.п.). Можно почитать здесь(англ)
.
Также почитать про методологию git flow. Почитать поподробнее здесь
и здесь
.
Будет неплохо обладать навыками работы с pytest. Как писать и запускать тесты почитать тут(англ)
.
Также подойдут иные обучающие материалы по заданным технологиям.
Первоначальная настройка
Первоначально необходимо получить исходники. Исходники etr можно найти, например, здесь
.
Для скачивания исходников необходимо установить git.
Далее открываем консоль (на windows можно нажать Win+R и написать cmd либо powershell). В консоли пишем
Также, исходники можно получить, например, через IDE.
Далее скачиваем и устанавливаем (если еще этого не сделали) любую IDE для Python. Рекомендую присмотреться к VS Code
или PyCharm
. В IDE открываем исходники.
Ниже указаны инструкции по запуску проекта.
Поздравляю! Вы можете запустить проект и следить за другими!
Стек технологий
Приложение написано на Flask. Для валидирования данных используется Pydantic. В качестве базы данных используется MySQL. Для работы с БД используется библиотека SQLAlchemy. Для работы с API Codeforces используется библиотека requests.
Как запустить?
Перед запуском необходимо проинициализировать файл .env. Пример находится в README.md
.
Для запуска достаточно прописать:
Более актуальная информация для запуска проекта может находится в README.md
.
Также, можно запустить в Docker образе. Все необходимы команды написаны в README.md.
Обзор параметров .env
В README.md лежит пример файла .env. В этом разделе опишу поля, которые могут встретится в .env файле.
параметр |
тип, значение |
пример |
URL_PREFIX |
строка, обозначает префикс для всех url. Является необходимым на сервере, при локальной разработке может быть опущен. |
URL_PREFIX=/etr |
URL_DATABASE |
строка, обозначает адрес до базы данных. Если не указана примет значение "sqlite:///storage/users.db" |
URL_DATABASE=mysql+mysqlconnector://root:<password>@localhost:3306 |
Структура проекта
Общая информация
В проекте есть несколько модулей:
- models - представляет собой схему в базе данных. Каждый модуль отображает таблицу (в некоторых случаях таблицы) из базы данных;
- schemas - отвечает за валидирование данных на входе и на выходе;
- templates - содержит в себе шаблоны frontend части;
- views - отвечает за обработку пользовательских запросов.
How It's Made
На момент последней версии (v0.1.1) проект обрабатывает следующие запросы:
- GET /etr/user - возвращает html с таблицей всех пользователей в базе данных
- GET /etr/user/new - возвращает html форму для добавления нового пользователя
- POST /etr/user/new - принимает на вход handle с Codeforces и добавляет его в базу данных
- GET /etr/contest - возвращает html с таблицей всех отслеживаемых контестов
- GET /etr/contest/new - возвращает html форму для добавления нового контеста
- POST /etr/contest/new - ожидает id контеста и добавляет его в базу данных
- GET /etr/status - возвращает таблицу, содержащую все отправки отслеживаемых учеников (BBIWY) на отслеживаемые контесты
Как вносить свой вклад в развитие?
Вы узнали немного о проекте, о его первоначальной настройке, о его возможностях и о том как его запускать. Настало время кодить.
При разработке используется модель git flow. Про эту методологию можно почитать поподробнее здесь
и здесь
. Вкратце можно выделить следующие этапы:
- переключаемся на ветку dev
- от ветки dev создаем свою ветку, называя ее hotfix/..., features/..., ...
- переключаемся на только что созданную ветку
- вносим в нее свои изменения, при этом в идеале пишем информативные коммиты
- после того, как внесли свои изменения документируем их и пишем на них тесты
- после этого, мержим с dev веткой
TODO проекта
Здесь собраны всевозможные хотелки, которые реализуем, реализуются или будут реализовываться.
- возможно пригодится, давать возможность ученикам отправлять свои решения на etr для контестов;
- добавить возможность вставлять ссылку вместо id контеста;
- обработать ситуацию добавления одного и того же контеста 2 раза;
- локализация;
- добавить показ информации о контесте за определенный период (от ... до ...)
- рейтинги cf юзеров отобразить
- Фамилию Имя, Город и Учебное заведение брать, как и Класс, из списка dl/codeforces
- {*}Предлагаю для тренировок сделать отдельный пункт меню «Тренировки» (там пункт «во время контеста» вообще убрать нужно)*
Сейчас станет две тренировки
104772 и 104730
- Там, где у них нет даже посылок - не надо их отображать (их не было ни в официальном контесте, ни в дорешивании пока)
это касается всех таблиц (речь о юзерах, которые в данном типе контеста не участвовали, но в целом решали контест)
- надо сделать по умолчанию не "все", а контест
- баллы и рейтинг за задачу не всегда обновляется (поставить в ночное?)
- /etr/api/user/
Unknown macro: {user_id}
/problems не работает без verdict
- handle сделать недависимо от регистра
- предлагать ученику задачи взависимости от того, что он решал