Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,12 @@
```
git clone https://github.com/Leopold29/PythonProject
```

2. Установите зависимости:
```
pip install -r requirements.txt
```

## Использование:

1. Откройте приложение в вашем веб-браузере.
Expand All @@ -41,26 +43,29 @@ pip install -r requirements.txt
### Примеры использования:
```
from src import generators

transactions = [...] # ваш список транзакций
```

### Фильтрация транзакций по валюте USD
```
usd_transactions = generators.filter_by_currency(transactions, "USD")
for t in usd_transactions:
print(t)
```

### Получение описаний транзакций
```
descriptions = generators.transaction_descriptions(transactions)
for desc in descriptions:
print(desc)
```

### Генерация номеров карт в диапазоне
```
for card in generators.card_number_generator(1, 3):
print(card)
```

## Тестирование:

Для запуска тестов используйте следующую команду:
Expand All @@ -80,13 +85,13 @@ coverage html
## Пример использования:
```
from src.decorators import log

@log(filename="app.log", log_time=True, log_level="ALL")
def process_data(data):
pass
```

## Как это работает:

filename: путь к файлу логов (если не указан — лог в консоль)
log_time: добавлять ли временную метку
log_level: уровень логирования (ALL, ERROR, SUCCESS)
### filename: путь к файлу логов (если не указан — лог в консоль)
### log_time: добавлять ли временную метку
### log_level: уровень логирования (ALL, ERROR, SUCCESS)
1,001 changes: 1,001 additions & 0 deletions data/transactions.csv

Large diffs are not rendered by default.

Binary file added data/transactions_excel.xlsx
Binary file not shown.
17 changes: 17 additions & 0 deletions logs/src.mask.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
2025-11-26 11:34:07,082 - src.mask - DEBUG - Masking account number: 73654108430135874305
2025-11-26 11:34:07,082 - src.mask - DEBUG - Masking card number: 7000792289606361
2025-11-26 11:34:07,082 - src.mask - INFO - Masked card: 7000 79** **** 6361
2025-11-26 11:34:07,095 - src.mask - DEBUG - Masking card number: 7000792289606361
2025-11-26 11:34:07,095 - src.mask - INFO - Masked card: 7000 79** **** 6361
2025-11-26 11:34:07,096 - src.mask - DEBUG - Masking card number: 1234567812345678
2025-11-26 11:34:07,096 - src.mask - INFO - Masked card: 1234 56** **** 5678
2025-11-26 11:34:07,096 - src.mask - DEBUG - Masking card number: 7000792289606361
2025-11-26 11:34:07,097 - src.mask - INFO - Masked card: 7000 79** **** 6361
2025-11-26 11:34:07,097 - src.mask - DEBUG - Masking card number: 123456789012345
2025-11-26 11:34:07,097 - src.mask - ERROR - ����� ������ ����� ������ 16 ��������
2025-11-26 11:34:07,098 - src.mask - DEBUG - Masking card number:
2025-11-26 11:34:07,098 - src.mask - ERROR - ����� ������ ����� ������ 16 ��������
2025-11-26 11:34:07,099 - src.mask - DEBUG - Masking card number: 12345678901234
2025-11-26 11:34:07,099 - src.mask - ERROR - ����� ������ ����� ������ 16 ��������
2025-11-26 11:34:07,099 - src.mask - DEBUG - Masking account number: 73654108430135874305
2025-11-26 11:34:07,100 - src.mask - DEBUG - Masking account number: 1234567890123456
5 changes: 5 additions & 0 deletions logs/src.utils.log
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
2025-11-26 11:34:07,110 - src.utils - INFO - ������ ����� fake_path.json
2025-11-26 11:34:07,112 - src.utils - ERROR - ������ ��� ������ ����� fake_path.json: Expecting value: line 1 column 1 (char 0)
2025-11-26 11:34:07,113 - src.utils - INFO - ������ ����� fake_path.json
2025-11-26 11:34:07,113 - src.utils - WARNING - ������ �� �������� �������
2025-11-26 11:34:07,114 - src.utils - ERROR - ������ ��� ������ ����� fake_path.json:
3 changes: 2 additions & 1 deletion src/mask.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
from src.log_config import setup_logger
from typing import Union

from src.log_config import setup_logger

logger = setup_logger(__name__)


Expand Down
31 changes: 31 additions & 0 deletions src/process_transactions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from typing import Dict, List

import pandas as pd


def read_transactions_csv(file_path: str) -> List[Dict]:
"""
Читает транзакции из CSV-файла и возвращает их в виде списка словарей.

Args:
file_path (str): Путь к CSV-файлу.

Returns:
List[Dict]: Список транзакций, каждая в виде словаря.
"""
df = pd.read_csv(file_path)
return df.to_dict(orient='records')


def read_transactions_excel(file_path: str) -> List[Dict]:
"""
Читает транзакции из Excel-файла и возвращает их в виде списка словарей.

Args:
file_path (str): Путь к Excel-файлу.

Returns:
List[Dict]: Список транзакций, каждая в виде словаря.
"""
df = pd.read_excel(file_path)
return df.to_dict(orient='records')
19 changes: 19 additions & 0 deletions tests/test_process_transactions.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
from unittest.mock import MagicMock, patch

from src import process_transactions


def test_read_transactions_csv():
mock_df = MagicMock()
mock_df.to_dict.return_value = [{'id': 1, 'amount': 100}]
with patch('pandas.read_csv', return_value=mock_df):
result = process_transactions.read_transactions_csv('dummy_path.csv')
assert result == [{'id': 1, 'amount': 100}]


def test_read_transactions_excel():
mock_df = MagicMock()
mock_df.to_dict.return_value = [{'id': 2, 'amount': 200}]
with patch('pandas.read_excel', return_value=mock_df):
result = process_transactions.read_transactions_excel('dummy_path.xlsx')
assert result == [{'id': 2, 'amount': 200}]