From ac4f7f0bdce485a343e384e3280eebc1f47e7dab Mon Sep 17 00:00:00 2001 From: Ivan Bondarev Date: Mon, 8 Dec 2025 19:49:48 +0300 Subject: [PATCH] fix: improve code quality and update documentation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove unused import os in main.py - Fix trailing whitespace in cbr_parser.py - Break long lines in cbr_parser.py and currency_converter.py - Fix import order in gui.py - Update Pylint score badge in README.md (10.00 → 9.41) Pylint score improved from 9.13/10 to 9.41/10 All tests passing (79 passed, 6 skipped) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- README.md | 4 ++-- src/currate/cbr_parser.py | 12 ++++++++---- src/currate/currency_converter.py | 15 +++++++++++---- src/currate/gui.py | 5 +++-- src/currate/main.py | 1 - 5 files changed, 24 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 8c85d7c..bec598b 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE) [![Tests](https://img.shields.io/badge/Tests-85-success.svg)](tests/) [![Coverage](https://img.shields.io/badge/Coverage-78%25-success.svg)](tests/) -[![Code Quality](https://img.shields.io/badge/Pylint-10.00%2F10-brightgreen.svg)](src/currate/) +[![Code Quality](https://img.shields.io/badge/Pylint-9.41%2F10-brightgreen.svg)](src/currate/) GUI приложение на Python для конвертации USD и EUR в рубли по официальным курсам Центрального Банка РФ @@ -229,7 +229,7 @@ poetry run pytest ### Качество кода -- ✅ **Pylint**: 10.00/10 для всех модулей +- ✅ **Pylint**: 9.41/10 - ✅ **Mypy**: без ошибок типов - ✅ **Black**: автоматическое форматирование - ✅ **Pytest**: 85 тестов с покрытием 78% diff --git a/src/currate/cbr_parser.py b/src/currate/cbr_parser.py index 71f6680..09de6e5 100644 --- a/src/currate/cbr_parser.py +++ b/src/currate/cbr_parser.py @@ -166,11 +166,11 @@ def get_currency_rate(currency: str, date: str, timeout: int = 10) -> Optional[f # Извлекаем номинал (столбец 3, индекс 2) nominal_str = cols[2].text.strip() nominal = int(nominal_str) - + # Извлекаем курс (столбец 5, индекс 4) rate_str = cols[4].text.strip().replace(',', '.') rate = float(rate_str) - + # Возвращаем курс за 1 единицу валюты return rate / nominal except (ValueError, IndexError) as e: @@ -180,10 +180,14 @@ def get_currency_rate(currency: str, date: str, timeout: int = 10) -> Optional[f raise CBRParseError(f"Валюта {currency} не найдена в таблице курсов") except requests.exceptions.Timeout as exc: - raise CBRConnectionError(f"Превышено время ожидания ({timeout}с) при запросе к сайту ЦБ РФ") from exc + raise CBRConnectionError( + f"Превышено время ожидания ({timeout}с) при запросе к сайту ЦБ РФ" + ) from exc except requests.exceptions.ConnectionError as exc: - raise CBRConnectionError("Ошибка соединения с сайтом ЦБ РФ. Проверьте подключение к интернету") from exc + raise CBRConnectionError( + "Ошибка соединения с сайтом ЦБ РФ. Проверьте подключение к интернету" + ) from exc except requests.exceptions.HTTPError as e: raise CBRConnectionError(f"HTTP ошибка при запросе к ЦБ РФ: {e}") from e diff --git a/src/currate/currency_converter.py b/src/currate/currency_converter.py index 86b53ad..c23080b 100644 --- a/src/currate/currency_converter.py +++ b/src/currate/currency_converter.py @@ -46,8 +46,10 @@ def convert( date: Дата курса в формате DD.MM.YYYY. Returns: - Tuple[float | None, float | None, str | None]: (результат в рублях, курс валюты, сообщение об ошибке). - Если успешно - (результат, курс, None), если ошибка - (None, None, сообщение). + Tuple[float | None, float | None, str | None]: + (результат в рублях, курс валюты, сообщение об ошибке). + Если успешно - (результат, курс, None), + если ошибка - (None, None, сообщение). """ # Валидация валюты if from_currency not in self.SUPPORTED_CURRENCIES: @@ -170,7 +172,12 @@ def format_result( currency_symbol = "$" if currency == "USD" else "€" # Форматируем: разделитель тысяч - пробел, десятичный разделитель - запятая - result_str = f"{result_in_rub:,.2f} руб. ({currency_symbol}{amount:,.2f} по курсу {rate:,.4f})" - result_str = result_str.replace(',', ' ').replace('.', ',').replace('руб,', 'руб.') + result_str = ( + f"{result_in_rub:,.2f} руб. " + f"({currency_symbol}{amount:,.2f} по курсу {rate:,.4f})" + ) + result_str = result_str.replace(',', ' ').replace('.', ',').replace( + 'руб,', 'руб.' + ) return result_str diff --git a/src/currate/gui.py b/src/currate/gui.py index f1f1f62..d23c40a 100644 --- a/src/currate/gui.py +++ b/src/currate/gui.py @@ -5,10 +5,11 @@ """ import tkinter as tk -from tkinter import ttk, messagebox -from tkcalendar import Calendar from datetime import datetime +from tkinter import ttk, messagebox + import pyperclip +from tkcalendar import Calendar from .currency_converter import CurrencyConverter diff --git a/src/currate/main.py b/src/currate/main.py index d0f6dcf..b6dd6aa 100644 --- a/src/currate/main.py +++ b/src/currate/main.py @@ -5,7 +5,6 @@ """ import sys -import os from pathlib import Path # Добавляем корневую директорию проекта в путь для поддержки прямого запуска