Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Тестовое задание для отбора на Летнюю ИТ-школу КРОК по разработке
Условие задания
Будучи тимлидом команды разработки, вы получили от менеджера проекта задачу повысить скорость разработки. Звучит, как начало плохого анекдота, но, тем не менее, решение вам все же нужно найти. В ходе размышлений и изучений различного внешнего опыта других команд разработки вы решили попробовать инструменты геймификации. То есть применить техники и подходы игрового характера с целью повышения вовлеченности команды в решение задач.
Вами была придумана рейтинговая таблица самых активных контрибьютеров за спринт. Что это значит в теории: по окончании итерации (4 рабочие недели) выгружается список коммитов, сделанных в релизную ветку продукта, и на его основе вычисляются трое самых активных разработчиков, сделавших наибольшее количество коммитов. В зависимости от занятого места, разработчик получает определенное количество внутренней валюты вашей компании, которую он впоследствии может обменять на какие-то товары из внутреннего магазина.
На практике вы видите решение следующим образом: на следующий день после окончания спринта в 00:00 запускается автоматическая процедура, которая забирает файл с данными о коммитах в релизную ветку, сделанных в период спринта, после чего выполняется поиск 3-х самых активных контрибьютеров. Имена найденных разработчиков записываются в файл, который впоследствии отправляется вам на почту.
В рамках практической реализации данной задачи вам необходимо разработать процедуру формирование отчета “Топ-3 контрибьютера”. Данная процедура принимает на вход текстовый файл (commits.txt), содержащий данные о коммитах (построчно). Каждая строка содержит сведения о коммите в релизную ветку в формате: “<Имя пользователя> <Сокращенный хэш коммита> <Дата и время коммита>”.
Например: AIvanov 25ec001 2024-04-24T13:56:39.492
К данным предъявляются следующие требования:
В результате работы процедура формирует новый файл (result.txt), содержащий информацию об именах 3-х самых активных пользователей по одному в каждой строке в порядке убывания места в рейтинге. Пример содержимого файла:
AIvanov
AKalinina
CodeKiller777
Ручной ввод пути к файлу (через консоль, через правку переменной в коде и т.д.) недопустим. Необходимость любых ручных действий с файлами в процессе работы программы будут обнулять решение.
Автор решения
Сибова Вероника Сергеевна
Описание реализации
В рамках поставленной задачи мной было реализовано три класса:
FileManager
Класс для работы с файлами
Функции:
Caution
Файл commits.txt должен находиться в рабочей директории! В противном случае будет выведена ошибка.
Important
После работы программы файл result.txt будет находиться в рабочей директории (там же, где и commits.txt).
CommitParser
Класс для работы с коммитами
Функции:
На вход функция принимает необработанную строку. Если строка валидна, то функция возвращает разобранную на компоненты строку. В противном случае возвращает None.
Для валидации имени был использован модуль re.
Для валидации хэша был использован модуль re.
Параметры валидности:
Important
Обработаны будут тольно те записи, которые "младше" четырех недель!
На вход функция принимает строку, которую пытается преобразовать в объект типа datetime.datetime.
В случае успеха возвращает полученный объект, в случае неудачи возвращает None.
Analyser
Класс для получения результатов анализа и формирования отчета
Функции:
Данная функция берет данные из commits.txt, обрабатывает их и формирует топ-3 лучших работника, которые потом записываются в result.txt.
Инструкция по сборке и запуску решения
Запуск процедуры осуществляется после клонирования репозитория. Установка дополнительных библиотек не требуется.