-
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-ключом
- Установить зависимости:
poetry add requests
poetry add python-dotenv
- Получить API-ключ с Exchange Rates Data API
- Добавить ключ в
.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— для работы с APIpython-dotenv— для загрузки переменных окруженияmypy(опционально) — для проверки типов
- API поддерживает только прямые запросы (одна валюта за раз)
- Для конвертации используется один фиксированный курс для всех транзакций (в рамках одного запуска)
- Тесты для
get_exchange_ratesтребуют мока сети
- Добавить поддержку кэширования курсов в зависимости от даты транзакции
- Улучшить обработку ошибок в API
- Добавить поддержку других валют
Константин Чирков
GitHub
MIT License
Этот README предоставляет полное описание проекта, включая новые модули, тесты, структуру и инструкции по использованию. Он написан в информативном и профессиональном стиле, удобен для чтения и понимания.