Перейти к основному содержимому

commons

Общее описание проекта

Проект представляет собой набор утилит, разработанных для внутренних нужд IT-компании. Главная цель - обеспечение различных аспектов управления и мониторинга, без акцента на пользовательский интерфейс. Включает интеграции с внешними системами и модули для разнообразных функций, включая работу с электронной почтой, управление задачами, безопасность и обработку данных.

Описание модулей проекта

  1. Модуль Капча: Обработка и проверка Google reCAPTCHA.
  2. Модуль Утилит Курсов Валют: Получение и обработка данных о курсах валют.
  3. Модуль Дашборда: Управление элементами дашборда и доступом к ним.
  4. Модуль Утилит Даты: Работа с датами, включая вычисление рабочих дней.
  5. Модуль Декораторов: Декораторы для проверки данных запросов.
  6. Модуль Elasticsearch: Утилиты для работы с Elasticsearch.
  7. Модуль Электронной Почты: Отправка электронных писем и обработка вложений.
  8. Модуль GitLab: Интеграция с GitLab для обработки запросов на слияние.
  9. Модуль HTTP: Обработка HTTP-запросов и исключений.
  10. Модуль Внутренней Ошибки Сервера: Тестирование и обработка внутренних ошибок сервера.

Логика работы системы

Система использует модульную структуру, где каждый модуль отвечает за определенный аспект работы. Модули могут работать независимо или взаимодействовать друг с другом для выполнения более сложных задач. Например, модуль электронной почты может использовать данные из модуля даты для планирования отправки писем.

Интеграции с внешними системами

  1. Google reCAPTCHA: Используется для проверки подлинности пользователей.
  2. Elasticsearch: Обеспечивает поиск и анализ больших объемов данных.
  3. GitLab: Интеграция для управления запросами на слияние и работы с проектами.
  4. Внешние API для курсов валют: Получение актуальных данных о курсах валют.

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

Действия в системе

Изучив код проекта, я выявил следующие ключевые действия, которые возможны в системе:

  1. Проверка reCAPTCHA - функция validate_captcha осуществляет проверку ответа reCAPTCHA.

  2. Получение курсов валют - метод get_exchange_rate позволяет получать актуальные курсы валют.

  3. Работа с дашбордом - класс BaseDashboardModule и его метод is_permitted используются для управления элементами дашборда и доступом к ним.

  4. Работа с датами - в модуле date_utils реализованы функции, такие как get_difference_in_work_days, для работы с датами и определения рабочих дней.

  5. Декораторы для проверки данных запросов - декораторы check_request_data и check_query_params используются для проверки наличия необходимых данных в запросах.

  6. Взаимодействие с Elasticsearch - функции get_data, send_data, delete_doc и exists_doc в модуле elastic_utils предназначены для работы с Elasticsearch.

  7. Отправка электронных писем - функция email_post обеспечивает отправку электронных писем.

  8. Интеграция с GitLab - функции get_opened_merge_requests, get_merge_request_notes, get_merge_request_project_name_from_url в модуле gitlab используются для работы с GitLab.

  9. HTTP-обработка исключений - декоратор http_error и класс HttpException в модуле http предназначены для обработки исключений HTTP.

  10. Тестирование внутренней ошибки сервера - функция internal_server_error в модуле internal_server_error используется для тестирования и обработки внутренних ошибок сервера.

Сценарий использования

Представим ситуацию в компании, где используется данный проект. Компания, занимающаяся международной торговлей, ежедневно сталкивается с необходимостью оперативно получать актуальные курсы валют. С помощью модуля Получения курсов валют, сотрудники компании могут автоматически получать эти данные, что экономит время и снижает риск ошибок при ручном вводе.

Далее, для обеспечения безопасности веб-сервисов компании, используется Модуль Капча. Каждый раз, когда клиент заходит на сайт и выполняет какие-либо действия, система проверяет его на подлинность с помощью Google reCAPTCHA, тем самым предотвращая автоматизированные атаки.

Также, представим, что компания использует GitLab для управления своими проектами. Модуль GitLab позволяет автоматически отслеживать и анализировать запросы на слияние, получая информацию об авторах, ветках и состоянии запросов. Это упрощает процесс ревью кода и содействует эффективному взаимодействию в команде разработчиков.

Наконец, с помощью Модуля Электронной Почты, компания автоматизирует рассылку уведомлений клиентам. Например, об изменении курсов валют или о статусе их запросов на слияние в GitLab.

Модель данных

Основываясь на предоставленном коде проекта, была выявлена следующая модель данных:

  1. CAPTCHA:

    • CAPTCHA_SCRIPT_URL: URL для подключения скрипта Google reCAPTCHA.
    • CAPTCHA_VALID_URL: URL для проверки reCAPTCHA ответа от пользователя.
    • INVALID_RECAPTCHA: Статус для невалидной reCAPTCHA.
  2. Утилиты Курсов Валют (CBR Utils):

    • EXCHANGE_API: Основной URL API для обмена валют.
    • EXCHANGE_API_KEY: Ключ API.
    • COMMON_CURRENCIES: Список общепринятых валют.
    • ALL_CURRENCIES: Список всех доступных валют.
    • EXCHANGE_RATES: Хранение курсов валют.
  3. Дашборд (Dashboard):

    • _permission: Права доступа к дашборду.
    • _initialized: Статус инициализации дашборда.
  4. Утилиты Даты (Date Utils):

    • CALENDAR_DATE_FORMAT: Формат даты для календаря.
    • WORK_DAY_CODE: Код рабочего дня.
    • DAY_OFF_COVID_CODE: Код выходного дня в период COVID-19.
  5. Elasticsearch:

    • Elasticsearch: Конфигурация подключения к Elasticsearch.
  6. Электронная Почта (Email):

    • EMAIL_SENDER: Адрес отправителя электронной почты.
  7. GitLab:

    • PRIVATE_TOKEN: Приватный токен для доступа к GitLab.
  8. HTTP:

    • HttpException: Класс для исключений, связанных с HTTP.

Каждая из этих сущностей обладает своими специфическими полями и предназначена для выполнения конкретных функций в рамках проекта. Эта модель данных позволяет организовать эффективную работу различных утилит и модулей системы.

Диаграмма состояний

Для создания диаграммы состояний в формате Mermaid, основываясь на коде проекта, рассмотрим ключевые состояния и действия:

Анализ кода проекта

Проанализировав код проекта, хочу выделить несколько моментов, требующих внимания и улучшения:

  1. Функция validate_captcha в модуле captcha.py:

    • Проблема: Прямое использование requests.post внутри функции. Это может привести к проблемам с производительностью при высокой нагрузке на систему, так как каждый вызов функции будет создавать новый HTTP-запрос.
    • Улучшение: Использовать асинхронные запросы или сессионный объект requests для управления подключениями.
  2. Модуль cbr_utils.py:

    • Проблема: В функции get_exchange_rate наблюдается излишнее усложнение логики и возможный риск некорректной работы при определенных условиях. Пример кода: if base_currency == exchange_currency: return 1.0.
    • Улучшение: Пересмотреть и упростить логику функции, обеспечив чёткое разграничение условий и учитывая все возможные сценарии.
  3. Ошибки обработки в модуле http.py:

    • Проблема: Использование общих исключений в декораторе http_error, что может скрывать подробности о реальных ошибках.
    • Улучшение: Применить более детализированные исключения и логгирование для точного определения проблем.
  4. Функции отправки электронной почты в email.py:

    • Проблема: Обработка исключений SMTP не полностью соответствует потенциальным ошибкам, которые могут возникать при отправке писем.
    • Улучшение: Расширить обработку исключений, учитывая различные типы ошибок SMTP.
  5. Модуль date_utils.py:

    • Проблема: Некоторые функции, такие как get_difference_in_work_days, могут быть улучшены с точки зрения эффективности и читаемости кода.
    • Улучшение: Оптимизировать алгоритмы и упростить логику для повышения производительности и удобства поддержки.

Оценка времени на разработку такого проекта сильно зависит от уровня детализации и сложности задач, но для опытной команды это может занять от 2 до 4 недель. Оцениваю данный код на 7 из 10: код функционален и покрывает основные задачи, но имеет потенциал для оптимизации и повышения качества.