Skip to content

Elektrokot/homework

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Это мой учебный проект банковского приложения.

В данном проекте реализовано несколько функций:

  • get_mask_card_number
    Функция преобразования введенного числа в номер карты с маскировкой 6 цифр в формате XXXX XX** **** XXXX.

  • get_mask_account
    Функция принимает на вход номер счёта и выдает его обратно с маской в виде **ХХХХ.

  • mask_account_card
    Функция обрабатывает информацию как о картах, так и о счетах и возвращает строку с замаскированным номером.

  • get_date
    Функция принимает на вход строку с датой в формате '2024-03-11T02:26:18.671407' и возвращает строку с датой в формате 'ДД.ММ.ГГГГ'.

  • filter_by_state
    Функция фильтрует список транзакций по состоянию.

  • sort_by_date
    Функция сортирует список транзакций по дате.

  • filter_by_currency
    Функция возвращает итератор, который поочередно выдает транзакции, где валюта операции соответствует заданной (например, USD).

  • transaction_descriptions
    Генератор, который принимает список словарей с транзакциями и возвращает описание каждой операции по очереди.

  • card_number_generator
    Генератор, который выдает номера банковских карт в формате XXXX XXXX XXXX XXXX. Может генерировать номера в диапазоне от 0000 0000 0000 0001 до 9999 9999 9999 9999.

  • load_transactions (новое)
    Функция загружает список транзакций из JSON-файла. Если файл пустой, содержит не список или не найден — возвращает пустой список.

  • get_currency_rate (новое)
    Получает курс указанной валюты (USD/EUR) к рублю через внешнее API.

  • get_exchange_rates (новое)
    Возвращает словарь с курсами {'USD': rate, 'EUR': rate} в одном запросе.

  • convert_to_rub (новое)
    Конвертирует сумму транзакции в рубли на основе переданных курсов. Поддерживает числа и строки в качестве входных данных.

  • Декоратор log_function_call
    Логирует вызов функции, её аргументы и результат. Если указан filename, лог записывается в файл. Иначе — выводится в консоль.
    В случае ошибки логируется сообщение об исключении и входные параметры функции.


Дополнительные возможности:

  • Поддержка конвертации валют через API (USD/EUR → RUB)
  • Загрузка транзакций из JSON-файла с обработкой ошибок
  • Поддержка типизации (mypy-совместимость)

Структура проекта

project_root/
├── data/
│   └── operations.json   # Файл с данными о транзакциях
├── src/
│   ├── __init__.py       # Точка входа
│   ├── utils.py          # Функции для работы с JSON
│   ├── external_api.py   # Функции для конвертации валют
│   ├── masks.py          # Функции маскировки данных
│   ├── processing.py     # Функции фильтрации и сортировки
│   ├── widget.py         # Функции форматирования дат
│   ├── generators.py     # Генераторы
│   └── decorators.py     # Декораторы
├── tests/
│   ├── test_masks.py     # Тесты для маскировки
│   ├── test_processing.py# Тесты для фильтрации/сортировки
│   ├── test_widget.py    # Тесты для форматирования дат
│   ├── test_generators.py# Тесты для генераторов
│   ├── test_decorators.py# Тесты для декораторов
│   ├── test_utils.py     # Тесты для utils.py
│   ├── test_external_api.py # Тесты для конвертации валют
│   └── conftest.py          # Фикстуры для тестов
└── .env                  # Файл с API-ключом

Для использования его функционала необходимо:

  1. Установить зависимости:
    poetry add requests
    poetry add python-dotenv
  2. Получить API-ключ с Exchange Rates Data API
  3. Добавить ключ в .env:
    API_KEY=ваш_ключ_здесь

Для тестирования разнообразного поведения входных данных добавлены тесты.

  • В модуле test_masks происходит тестирование функций get_mask_card_number и get_mask_account, в которые передаются различные верные и неверные данные для проверки работоспособности функций и обработки ошибок.
  • В модуле test_processing происходит тестирование функций filter_by_state и sort_by_date.
  • В модуле test_widget происходит тестирование функций mask_account_card и get_date.
  • В модуле test_generators происходят тесты функций filter_by_currency, transaction_descriptions, card_number_generator.
  • В модуле conftest хранятся данные для тестирования.
  • В модуле test_decorators находятся тесты для тестирования декоратора.
  • В модуле test_utils.py тестирование функции load_transactions с использованием unittest и Mock.
  • В модуле test_external_api.py тестирование функций get_currency_rate, get_exchange_rates, convert_to_rub с использованием unittest, patch и Mock.

Как запускать тесты

pytest --cov # при активированном виртуальном окружении.
poetry run pytest --cov # через poetry.

Требования к окружению

  • Python 3.9+
  • requests — для работы с API
  • python-dotenv — для загрузки переменных окружения
  • mypy (опционально) — для проверки типов

Известные ограничения

  • API поддерживает только прямые запросы (одна валюта за раз)
  • Для конвертации используется один фиксированный курс для всех транзакций (в рамках одного запуска)
  • Тесты для get_exchange_rates требуют мока сети

Планы по доработке

  • Добавить поддержку кэширования курсов в зависимости от даты транзакции
  • Улучшить обработку ошибок в API
  • Добавить поддержку других валют

Автор

Константин Чирков
GitHub


Лицензия

MIT License


Этот README предоставляет полное описание проекта, включая новые модули, тесты, структуру и инструкции по использованию. Он написан в информативном и профессиональном стиле, удобен для чтения и понимания.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages