Будучи тимлидом команды разработки, вы получили от менеджера проекта задачу повысить скорость разработки. Звучит, как начало плохого анекдота, но, тем не менее, решение вам все же нужно найти. В ходе размышлений и изучений различного внешнего опыта других команд разработки вы решили попробовать инструменты геймификации. То есть применить техники и подходы игрового характера с целью повышения вовлеченности команды в решение задач.
Вами была придумана рейтинговая таблица самых активных контрибьютеров за спринт. Что это значит в теории: по окончании итерации (4 рабочие недели) выгружается список коммитов, сделанных в релизную ветку продукта, и на его основе вычисляются трое самых активных разработчиков, сделавших наибольшее количество коммитов. В зависимости от занятого места, разработчик получает определенное количество внутренней валюты вашей компании, которую он впоследствии может обменять на какие-то товары из внутреннего магазина.
На практике вы видите решение следующим образом: на следующий день после окончания спринта в 00:00 запускается автоматическая процедура, которая забирает файл с данными о коммитах в релизную ветку, сделанных в период спринта, после чего выполняется поиск 3-х самых активных контрибьютеров. Имена найденных разработчиков записываются в файл, который впоследствии отправляется вам на почту.
В рамках практической реализации данной задачи вам необходимо разработать процедуру формирование отчета “Топ-3 контрибьютера”. Данная процедура принимает на вход текстовый файл (commits.txt), содержащий данные о коммитах (построчно). Каждая строка содержит сведения о коммите в релизную ветку в формате: “<Имя пользователя> <Сокращенный хэш коммита> <Дата и время коммита>”. Например: AIvanov 25ec001 2024-04-24T13:56:39.492
К данным предъявляются следующие требования:
- имя пользователя может содержать латинские символы в любом регистре, цифры (но не начинаться с них), а также символ "_";
- сокращенный хэш коммита представляет из себя строку в нижнем регистре, состояющую из 7 символов: букв латинского алфавита, а также цифр;
- дата и время коммита в формате YYYY-MM-ddTHH:mm:ss.
В результате работы процедура формирует новый файл (result.txt), содержащий информацию об именах 3-х самых активных пользователей по одному в каждой строке в порядке убывания места в рейтинге. Пример содержимого файла: AIvanov AKalinina CodeKiller777
Ручной ввод пути к файлу (через консоль, через правку переменной в коде и т.д.) недопустим. Необходимость любых ручных действий с файлами в процессе работы программы будут обнулять решение.
Ларин Анатолий Николаевич
Решение содержится в main.py
- При запуске файла main.py, вызывается автоматическая процедура create_result_file, в которую передается файл commits.txt(Важно, чтобы файл commits.txt находился в той же директории, что и исполняемый файл main.py)
- В процедуре create_resilt_file вызывается функция get_data для формирования словаря из подходящих для этого данных.
- Далее вызывается функция для формирования списка пользователей которые вошли в топ-3 по количеству коммитов.
- Процедура create_result_file заканчивает свое выполнение созданием файла result.txt, в который записываются результаты полученные выше.
В данном решении обработаны некоторые исключения, при обработке которых программа выведет предположительное сообщение в консоль.
- Перенести файлы с удаленного репозитория на локальный.
- Убедиться в том, что в папке с файлом main.py находится commits.txt с входными данными.
- Открыть командную строку или любую среду разработки для работы с «Python»: «PyCharm», «Visual Studio», «IDLE» и тд.
- Запустить файл основого решения main.py
- В результате получаем файл result.txt с выходными данными в исходной папке где лежит main.py и файл с входными данными.