В рамках данной лабораторной работы требуется продемонстрировать свои таланты к написанию регулярных выражений.
В вариантах сдачи данной лабораторной предусмотрена некоторая гибкость:
- Решить собвственную задачу, связанную с написанием регулярных выражений и сделать pr c ее кодом в данный репозиторий (примерный вариант такой задачи продемонстрирован лектором в телеграм-чате предмета - с unicode emoji).
- Решить подготовленную для вас в данном репозитории задачу по регулярным выражениям, условие которой описано ниже.
- Сделать fork данного репозитория.
- Получить csv-файл в соответствии со своим вариантом.
- Произвести валидацию файла с использованием регулярных выражений.
- На основе номеров невалидных строк подсчитать контрольную сумму.
- Корректность вашей контрольной суммы подтверждена github action,
- В коде имеются 10 вменяемых регулярных выражений для валидации данных,
- Ваш код оформлен в соотвествии с РЕР8, грамотно декомпозирован и не нуждается в рефакторинге.
Для каждого студента сгенерирован персональный csv-файл с данными. Свой вариант задания можно узнать в таблице с успеваемостью.
Файл содержит 10000 строк данных, сгенерированных при помощи mimesis. Данные имеют 10 столбцов различного формата. Среди данных имеются невалидные - по 100 записей на поле. Суммарно 1000 невалидных записей. Искажения в данные для каждого столбца имеют случайный характер. Такой объем данных должен, в идеале, отбить у вас любое желание провалидировать записи вручную.
Свой csv-файл можно скачать из этой папки на драйве.
По итогам обработки файла с данными вам необходимо вычислить контрольную сумму при помощи функции в модуле checksum.py, после чего заполнить result.json полученной контрольной суммой и номером своего варианта. Подбробное описание использования этого модуля дано в его докстрингах.
Корректность контрольной суммы проверяется при помощи github action. Правильные знечения достаются из секретов репозитория, среди них ищется значение для вашего варианта и сравнивается с вашим ответом.
Акшон запускается при открытии пул-риквеста, а также при добавлении каждого последующего коммита в пул-риквест. Если ваша контрольная сумма не совпала с верной, акшон покажет вам корректное значение. Так что вы сможете локально отладить свой код для валидации, добиться корректного значения и только потом коммитить в pr.
Под катом вы найдете описания всех возможных форматов данных в этой лабораторной работе с примерами и комментариями.
Типы используемых данных
№ | Название поля | Пример значения | Комментарий |
---|---|---|---|
1 | [email protected], [email protected] | Типичный имейл. Состоит из латинских букв, цифр, символов "." и "@".Обратите внимание, что адрес может иметь поддомен. | |
2 | telephone | +7-(969)-765-17-05 | Номер телефона должен иметь строго заданный формат как в примере. Скобки, тире и +7 должны обязательно присутствовать. |
3 | http_status_message | 200 OK, 226 IM Used | Статус должен начинаться с трехзначного кода, отделенного пробелом от текстового описания. |
4 | height | 1.76, 2.00 | Высота имеет точку в качестве разделителя целой и дробной части и имеет точность в два знака после него. В задании подразумевается, что это рост человека. В задании подразумевается, что 10/20/30 и т.д. -метровых людей не существует. |
5 | snils | 90534478510 | СНИЛС состоит из 11 цифровых символов. В данном задании символы СНИЛСа они указаны подряд без пробелов/тире и т.д. |
6 | inn | 733499833600 | ИНН состоит из 12 цифровых символов. В данном задании символы ИНН они указаны подряд без пробелов/тире и т.д. |
7 | passport | 27 17 117724 | В данном задании пробелами разделены первые 2 и последние 2 цифры серии, а также серия и номер паспорта. |
8 | identifier | 62-71/26 | Это поле - некоторый абстрактный идентификатор. Он содержит только цифры, разделенные определенными спецсимволами в определенных местах. |
9 | ip_v4 | 19.121.223.58 | IP-адрес указывается без маски подсети. Не забывайте, что он 32-битный. |
10 | occupation | 'Web-программист', 'Слесарь-механик', 'Ассистент менеджера по продажам' | Название профессии может иметь в своем составе как кириллические символы, так и латинские. А вот спецсимволы кроме дефиса там встречаться не должны. |
11 | longitude | 92.264847, -63.65076 | Это долгота в системе координат WGS84 (srid 4326). Обратите внимание на ограничения на значение, которые она имеет. Должна быть числовым значением без единиц измерения и прочей текстовой информации. |
12 | latitude | -8.287791, 32.223374 | Это широта в системе координат WGS84 (srid 4326). Обратите внимание на ограничения на значение, которые она имеет. Должна быть числовым значением без единиц измерения и прочей текстовой информации. |
13 | hex_color | #d8346b | Это представление веб-цвета в виде трех пар 16-ричных цифр. Наличие хештега перед ними обязательно. |
14 | blood_type | AB+, O- | Это группа крови в системе АВО с указанием резус-фактора. Обратите внимание, что отрицательный резус-фактор в исходных данных обозначен символом \u2212 |
15 | isbn | 018-1-50114-053-6 | 13-значный международный стандартный книжный номер |
16 | issn | 1931-0891 | 8-значный международный стандартный сериальный номер |
17 | locale_code | es-uy,xh | Региональная настройка языка в формате MS-LCID. |
18 | uuid | 3a7fb1ca-bdc6-4314-ad9a-6370f7a9657b | Всемирно уникальный идентификатор в каноническом представлении |
19 | time | 18:24:12.734883 | Время определенного формата с указанием часов, минут и секунд с точностью до 6 знаков. Не забывайте, что в сутках 24 часа, а в минуте - 60 секунд. |
20 | date | 2000-02-14 | Дата определенного формата. Напомню, что у нас только 12 месяцев, в которых максимум 31 день. |
Касательно реализации лабораторной работы:
- Проведите предварительный анализ данных, что достались вам на валидацию, перед тем как бросаться писать код.
- Не пишите 10 отдельных методов/функций для валидации каждого отдельного столбца данных. Генерализуйте обработку ячеек csv файла.
- Не бомбите открытый pr коммитами. Отладьте код локально. На каждую неудачную отработку CI github шлет оповещение по почту. Вы загадите почту как себе, так и мне.
Если вы столкнулись с непреодолимыми трудностями в ходе выполнения лабораторной работы, вы можете задать вопрос в:
- телеграм-чате предмета,
- телеграм-чате вашего курса,
- канале в дискорде.